Merge remote-tracking branch 'remotes/origin/dev' into test

yun-zuoyi
wei.peng 6 years ago
commit dec6086c96

@ -70,6 +70,9 @@ public interface ISysMenuService {
@ApiOperation(value = "新增菜单信息")
SysMenu insertSysMenu(SysMenu sysMenu);
@ApiOperation(value = "新增菜单信息")
List<SysMenu> refreshSysMenu(List<SysMenu> list);
/**
*
*

@ -116,7 +116,7 @@ public interface ISysMessageService {
* @return
*/
@ApiOperation(value = "根据id查询用户消息")
SysMessage getSysMessageByRefUserMessageId(Long id);
SysMessage doGetSysMessageByRefUserMessageId(Long id);
/**
*

@ -82,6 +82,9 @@ public interface ISysUserInfoService {
@ApiOperation(value = "删除用户-批量",notes = "根据UserInfoId 批量删除用户信息")
void deleteSysUserInfoByIds(Long[] ids);
@ApiOperation(value = "获取用户数量",notes = "获取有效用户数量")
int getSysUserInfoCount();
/**
* Key
* @param id

@ -22,6 +22,9 @@ public interface ITestTransService {
@ApiOperation(value = "自定义dao混用")
void testTran();
@ApiOperation(value = "测试缓存事务")
void testRedisTrans(String name, String val);
/******************** 读写分离部分测试 **********************/
@ApiOperation(value = "读写分离测试读")

@ -1,14 +1,20 @@
package cn.estsh.i3plus.core.apiservice.configuration;
import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysOrganizeService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService;
import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage;
import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@ -30,14 +36,29 @@ public class AppStartSystemInit implements CommandLineRunner {
@Autowired
private ISystemInitService systemInitService;
@Value("${spring.profiles.active}")
public String SPRING_PROFILES_ACTIVE;
// 限制组织数量
public static int organizeCount = 5;
// 限制账号数量
public static int userInfoCount = 100;
@Resource(name = "redisRes")
private ImppRedis redisRes;
@Autowired
private ISystemResourceService systemResourceService;
@Autowired
private ISysOrganizeService organizeService;
@Autowired
private ISysUserInfoService userInfoService;
@Override
public void run(String... args) throws Exception {
// checkOrganizeCount();
// checkUserInfoCount();
LOGGER.info("【IMPP-Core开始绑定资源信息...】");
packIMPPResources();
@ -46,6 +67,26 @@ public class AppStartSystemInit implements CommandLineRunner {
}
/**
*
*/
public void checkOrganizeCount(){
if(organizeService.getSysOrganizeCount() > organizeCount){
LOGGER.info("【启动检查】组织数量已超出授权许可,请联系商务人员");
System.exit(1);
}
}
/**
*
*/
public void checkUserInfoCount(){
if(userInfoService.getSysUserInfoCount() > userInfoCount){
LOGGER.info("【启动检查】用户数量已超出授权许可,请联系商务人员");
System.exit(1);
}
}
/**
*
*/
public void packIMPPResources() {

@ -6,8 +6,10 @@ import cn.estsh.i3plus.core.apiservice.thread.CoreDemoThread;
import cn.estsh.i3plus.platform.common.util.QueueConstWords;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.model.test.TestConstructModel;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.i3plus.pojo.platform.bean.SysRole;
import cn.estsh.i3plus.pojo.platform.bean.TestTransUser;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
@ -33,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@ -107,10 +110,10 @@ public class DemoRedisMqController extends CoreBaseController{
@GetMapping(value="/get-cache")
@ApiOperation(value="缓存",notes="获取数据")
public ResultBean getCache(){
System.out.println("2===== " + redisCore.getObject("wms"));
public ResultBean getCache(String name){
System.out.println("===== " + redisCore.getObject(name));
return new ResultBean(true);
return new ResultBean(true,redisCore.getObject(name));
}
@GetMapping(value="/exception-demo")
@ -351,4 +354,17 @@ public class DemoRedisMqController extends CoreBaseController{
return new ResultBean(true,"操作成功");
}
@GetMapping(value="/redis-object")
@ApiOperation(value="测试对象",notes="对象是否需要构造方法")
public ResultBean testRedisObject(){
//放入缓存
TestConstructModel model = new TestConstructModel();
model.setId(1);
model.setUser(new TestTransUser());
model.setUserList(new ArrayList<>());
redisCore.putObject("model",model,100);
return new ResultBean(true,"已放入缓存");
}
}

@ -2,24 +2,19 @@ package cn.estsh.i3plus.core.apiservice.controller;
import cn.estsh.i3plus.core.api.iservice.busi.ITestService;
import cn.estsh.i3plus.core.api.iservice.busi.ITestTransService;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.platform.bean.TestTransUser;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.datasource.DataSourceConfig;
import cn.estsh.impp.framework.boot.datasource.DynamicDataSourceHolder;
import cn.estsh.impp.framework.boot.util.ResultBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.persistence.LockModeType;
import java.util.List;
/**
@ -41,6 +36,19 @@ public class DemoTransactionController extends CoreBaseController {
@Autowired
private ITestService testService;
/**
*
* @return
*/
@PostMapping("/trans-test-redis")
@ApiOperation(value = "事务测试缓存")
public ResultBean testRedisTrans(String name,String val) {
transService.testRedisTrans(name,val);
return ResultBean.success("事务测试缓存");
}
/**
* dao
*

@ -93,8 +93,7 @@ public class AuthController extends CoreBaseController {
if (menus != null) {
for (SysMenu menu : menus) {
if (menu != null) {
if (menu.getMenuType().equals(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue())
&& menu.getParentId().longValue() != -1) {
if (menu.getMenuType().equals(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()) && menu.getParentId().longValue() != -1) {
list.add(menu);
}
}

@ -209,7 +209,7 @@ public class BaseMessageController extends CoreBaseController {
try {
ValidatorBean.checkNotNull(idStr, "id");
SysMessage userMessage = sysMessageService.getSysMessageByRefUserMessageId(Long.parseLong(idStr));
SysMessage userMessage = sysMessageService.doGetSysMessageByRefUserMessageId(Long.parseLong(idStr));
ValidatorBean.checkNotNull(userMessage, "消息不存在");
return ResultBean.success("查询成功").setResultObject(userMessage).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {

@ -116,19 +116,14 @@ public class WhiteController extends CoreBaseController {
LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}",loginName,loginPwd,languageCode);
ResultBean result = null;
this.startMultiService();
try {
ValidatorBean.checkNotNull(loginName,"用户名不能为空");
ValidatorBean.checkNotNull(loginPwd,"密码不能为空");
ValidatorBean.checkNotNull(languageCode,"语言不能为空");
// ValidatorBean.checkNotNull(ipAddr,"IP 地址不能为空");
logout();
// 去除前后空格
loginName = loginName.trim();
loginPwd = loginPwd.trim();
SessionUser user = userService.queryUserLogin(loginName,loginPwd,languageCode);
SessionUser user = userService.queryUserLogin(loginName.trim(),loginPwd.trim(),languageCode);
String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId();
redisCore.deleteKey(redisKey);
@ -140,6 +135,7 @@ public class WhiteController extends CoreBaseController {
// 记录登录记录
recordSysUserLog(user.getUser().getUserInfoId(), loginName,CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue(), ipAddr);
AuthUtil.setOrganize(user.getUser().getOrganize());
} catch (IncorrectCredentialsException e) {
// 密码错误
Integer num = systemLoginService.doLoginPasswordError(loginName, ipAddr);

@ -4,6 +4,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysRoleService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.EncryptTool;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -19,7 +20,6 @@ import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
@ -30,7 +30,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description :
@ -128,6 +131,7 @@ public class PersonnelController extends CoreBaseController {
// 关系 刷新
refreshRef(user, info, model);
endMultiService();
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
@ -155,6 +159,7 @@ public class PersonnelController extends CoreBaseController {
personnelService.checkSysUserOnly(user);
SysUserInfo userInfo = personnelService.getSysUserInfoById(info.getId());
SysUser sysUser = personnelService.getSysUserById(user.getId());
SysDepartment infoDepartment = personnelService.getSysDepartmentById(Long.parseLong(model.getInfoDepartmentId()));
if (infoDepartment == null) {
@ -202,17 +207,23 @@ public class PersonnelController extends CoreBaseController {
userInfo.setUserGrade(info.getUserGrade());
userInfo.setUserEmployeeType(info.getUserEmployeeType());
user.setDepartmentId(userDepartment.getId());
user.setDepartmentNameRdd(userDepartment.getName());
user.setOrganizeId(userOrganize.getId());
user.setOrganizeNameRdd(userOrganize.getName());
sysUser.setUserLoginName(user.getUserLoginName());
sysUser.setLanguageCode(user.getLanguageCode());
sysUser.setUserEmail(user.getUserEmail());
sysUser.setUserPhone(user.getUserPhone());
sysUser.setDepartmentId(userDepartment.getId());
sysUser.setDepartmentNameRdd(userDepartment.getName());
sysUser.setOrganizeId(userOrganize.getId());
sysUser.setOrganizeNameRdd(userOrganize.getName());
// 关系 刷新
refreshRef(user, userInfo, model);
refreshRef(sysUser, userInfo, model);
// 更新 密码
refreshSysUserPassword(user);
if(StringUtils.isNotBlank(user.getUserLoginPassword())){
refreshSysUserPassword(sysUser);
}
personnelService.saveSysUser(user);
personnelService.saveSysUser(sysUser);
personnelService.saveSysUserInfo(userInfo);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
@ -573,6 +584,57 @@ public class PersonnelController extends CoreBaseController {
}
/**
*
* @return
*/
@GetMapping(value = "/user/get-organize-list")
@ApiOperation(value = "获取账号信息", notes = "获取用户账号的所有组织信息")
public ResultBean getUserOrganizeList(){
try {
List<SysOrganize> list = AuthUtil.getSessionUser().getUser().getOrganizeList();
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(list);
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PutMapping(value = "/user/session-organize/{id}")
@ApiOperation(value = "修改用户会话组织信息", notes = "修改用户会话组织信息")
public ResultBean updateUserOrganizeList(@PathVariable("id") String idStr){
try {
ValidatorBean.checkIsNumber(idStr, "id为空");
List<SysOrganize> list = AuthUtil.getSessionUser().getUser().getOrganizeList();
Long id = Long.parseLong(idStr);
SysOrganize organize = null;
for (SysOrganize org : list) {
if(org.getId().equals(id)){
organize = org;
}
}
if(organize == null){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("不存在的组织信息")
.setErrorSolution("请重新操作")
.build();
}
// 会话工厂信息保存进Redis
AuthUtil.setOrganize(organize);
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(organize);
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
/**
*
*
* @param model
@ -602,7 +664,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @param model
* @throws Exception
*/
public void checkUserModel(UserDetailModel model) throws Exception {

@ -1,7 +1,9 @@
package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService;
import cn.estsh.i3plus.core.apiservice.util.ExcelUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
@ -12,17 +14,22 @@ import cn.estsh.i3plus.pojo.platform.bean.SysMenu;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description :
@ -271,4 +278,121 @@ public class SysMenuController extends CoreBaseController {
}
}
/**
*
* @param multipart
* @return
*/
@PostMapping("/upload")
@ApiOperation(value = "文件上传", notes = "文件上传")
public ResultBean singleFileUpload(@RequestParam("file") MultipartFile multipart) {
try {
startMultiService();
if(multipart.isEmpty()){
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("请选择需要上传的文件。")
.build();
}
List<SysMenu> list = ExcelUtil.importData("permission.xls",multipart.getInputStream(), SysMenu.class);
Map<String,SysMenu> map = new HashMap<>();
list.forEach(menu -> {
ValidatorBean.checkNotNull(menu.getMenuCode(), "功能代码不能为空");
ValidatorBean.checkNotNull(menu.getParentId(), "父级功能ID不能为空");
menu.setId(Long.parseLong(menu.getMenuCode()));
menu.setMenuSort(Integer.parseInt(menu.getMenuCode()));
if (!map.containsKey(menu.getMenuCode())) {
map.put(menu.getMenuCode(),menu);
} else {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
.setErrorDetail("功能代码【" + menu.getMenuCode() + "】重复")
.build();
}
});
list.forEach(menu -> {
menu.setIsDeleted(CommonEnumUtil.IS_DEAL.NO.getValue());
menu.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue());
if(menu.getParentId().longValue() != -1){
SysMenu mu = map.get(menu.getParentId().toString());
ValidatorBean.checkNotNull(mu, "【"+menu.getParentId()+"】不存在的父节点信息");
menu.setNameZhShortening(StringTool.getAllFirstLetter(mu.getName()));
menu.setParentNameRdd(mu.getName());
}
});
return ResultBean.success("上传成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode())
.setResultList(sysMenuService.refreshSysMenu(list));
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
/**
*
*
* @param response response
* @return
*/
@GetMapping("/download/excel")
@ApiOperation(value = "权限文件下载", notes = "权限文件下载")
public ResultBean singleDownload(HttpServletResponse response) {
try {
startMultiService();
String fileName = "menu_" + System.currentTimeMillis() + ".xls";
List<SysMenu> list = sysMenuService.findSysMenuAll();
File file = new File(fileName);
file.createNewFile();
File excle = ExcelUtil.exportData(file, list, SysMenu.class, new String[]{
"menuCode", "name","parentId","menuType","menuStatus","parentNameRdd","menuUrl","menuClassPath","menuGrade","menuSort"
,"menuCss","menuIcon","menuDescription"
});
InputStream targetStream = new DataInputStream(new FileInputStream(excle));
response.setContentType("application/force-download"); // 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名
response.addHeader("Content-type", "application/octet-stream"); // 设置文件名
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(targetStream);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
targetStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return ResultBean.success("下载").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);
}catch(Exception e){
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -148,7 +148,7 @@ public class SysTaskPlanController extends CoreBaseController {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode())
.setErrorDetail("定时任务已存在")
.setErrorDetail("定时任务已存在" + baseResultBean.getErrorMsg())
.build();
}
@ -160,7 +160,7 @@ public class SysTaskPlanController extends CoreBaseController {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode())
.setErrorDetail("定时任务添加失败")
.setErrorDetail("定时任务添加失败-" + baseResultBean.getErrorMsg())
.build();
}
@ -174,7 +174,7 @@ public class SysTaskPlanController extends CoreBaseController {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION_DATA_ERROR.getCode())
.setErrorDetail("定时任务执行失败")
.setErrorDetail("定时任务执行失败-" + baseResultBean.getErrorMsg())
.build();
}
}

@ -300,6 +300,7 @@ public class SysUserController extends CoreBaseController{
@ApiOperation(value="查询系统用户",notes="组合查询用户,外带分页查询(isValid = 1)")
public ResultBean querySysUserByPager(SysUser user, Pager pager){
try{
user.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
ListPager<SysUser> listPager = sysUserService.querySysUserByPager(user, pager);
return ResultBean.success("操作成功").setListPager(listPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){

@ -18,7 +18,6 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.fastdfs.FastDFSClient;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
@ -169,15 +168,16 @@ public class SysUserInfoController extends CoreBaseController{
/**
*
* @param SysUserInfo
* @param userInfo
* @param pager
* @return
*/
@GetMapping(value="/query")
@ApiOperation(value="查询用户信息",notes="复杂查询用户信息带分页")
public ResultBean querySysUserInfo(SysUserInfo SysUserInfo, Pager pager){
public ResultBean querySysUserInfo(SysUserInfo userInfo, Pager pager){
try{
ListPager<SysUserInfo> listPager = sysUserInfoService.querySysUserInfo(SysUserInfo, pager);
userInfo.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode());
ListPager<SysUserInfo> listPager = sysUserInfoService.querySysUserInfo(userInfo, pager);
return ResultBean.success("操作成功").setListPager(listPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep);

@ -35,6 +35,13 @@ public interface IUserPermissionDao {
List<SysMenu> findSysMenuByUser(SysUser user);
/**
*
* @param roleId ID
* @return
*/
List<SysMenu> findSysMenuByInRoleId(Long ... roleId);
/**
* Tree
* @param user
* @return

@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@ -40,7 +41,7 @@ public class UserPermissionDaoImpl implements IUserPermissionDao {
LOGGER.info(" 查询用户所有角色 user id:{}", user.getId());
String hql = "select sr from SysRefUserRole as rur " +
" left join SysRole as sr on sr.id = rur.roleId " +
" left join SysRole as sr on sr.id = rur.roleId" +
" where rur.userId =:userId";
//hql = "select rur from RefUserRole as rur,SysRole as where rur.userId =:userId and sr.id = rur.roleId";
return entityManager.createQuery(hql).setParameter("userId",user.getId()).getResultList();
@ -66,6 +67,26 @@ public class UserPermissionDaoImpl implements IUserPermissionDao {
}
@Override
public List<SysMenu> findSysMenuByInRoleId(Long... roleId) {
LOGGER.info(" 查询用户所有菜单 roleIds :{}", roleId);
List<SysMenu> result = new ArrayList<>();
if(roleId != null && roleId.length > 0){
String hql = "select sm from SysRefRoleMenu as rrm " +
" left join SysMenu as sm on sm.id = rrm.menuId" +
" where rrm.roleId in :roleId";
List<SysMenu> list = entityManager.createQuery(hql).setParameter("roleId", Arrays.asList(roleId)).getResultList();
if(list != null && list.size() > 0){
for (SysMenu menu : list) {
if(!result.contains(menu)){
result.add(menu);
}
}
}
}
return result;
}
@Override
public List<SysMenu> findSysMenuByUserTree(SysUser user) {
return null;
}

@ -141,6 +141,8 @@ public class SysFileServiceImpl implements ISysFileService {
String[] fileAbsolutePath = dfsClient.upload(fastDFSFile);
// 保存到系统文件表中
LOGGER.info(" dfsClient ====>> " + dfsClient);
LOGGER.info(" fileAbsolutePath ====>> " + fileAbsolutePath);
String filePath = dfsClient.getHostUi() + "/" + fileAbsolutePath[0] + "/" + fileAbsolutePath[1];
SysDictionary dictionary = sysDictionaryRDao.getByProperty(new String[]{"parentCodeRdd", "dictionaryValue"},
new Object[]{BaseConstWords.DICTIONARY_FILE_TYPE, fastDFSFile.getExt()});

@ -82,7 +82,6 @@ public class SysMenuService implements ISysMenuService {
sysMenuRDao.update(menu);
// 更新冗余信息
personnelService.refreshMenuRdd(menu.getId());
personnelService.refreshUpdateMenuRdd(menu.getId());
}
@Override
@ -176,6 +175,13 @@ public class SysMenuService implements ISysMenuService {
}
@Override
public List<SysMenu> refreshSysMenu(List<SysMenu> list) {
LOGGER.info("系统功能 SYS_MENU list :{}", list);
return sysMenuRDao.saveAll(list);
}
@Override
@ApiOperation(value = "查询菜单信息",notes = "查询所有菜单信息")
public List<SysMenu> findSysMenuAll() {
LOGGER.info("系统功能 SYS_MENU find All");

@ -201,7 +201,7 @@ public class SysMessageService implements ISysMessageService {
@Override
@ApiOperation(value = "根据id查询用户消息")
public SysMessage getSysMessageByRefUserMessageId(Long id) {
public SysMessage doGetSysMessageByRefUserMessageId(Long id) {
SysRefUserMessage sysRefUserMessage = sysRefUserMessageRDao.getById(id);
if (sysRefUserMessage == null){
throw ImppExceptionBuilder.newInstance()
@ -222,14 +222,14 @@ public class SysMessageService implements ISysMessageService {
// 更新状态消息状态以及阅读数量
if(sysRefUserMessage.getMessageStatusValue() == ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()) {
sysRefUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.READ.getValue());
sysRefUserMessageRDao.update(sysRefUserMessage);
// 阅读数累加1
sysMessage.setReadCount(sysMessage.getReadCountVal() + 1);
sysMessageRDao.update(sysMessage);
}
sysRefUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.READ.getValue());
sysRefUserMessageRDao.update(sysRefUserMessage);
// 查询附件信息
sysMessage.setSysFileAttachList(sysFileAttachRDao.findByProperty("refId",sysMessage.getId()));

@ -42,6 +42,9 @@ public class SysOrganizeService implements ISysOrganizeService {
@Autowired
private IPersonnelService personnelService;
@Override
@ApiOperation(value = "更新组织", notes = "传入持久化组织对象,进行更新")
public void updateSysOrganize(SysOrganize organize) {

@ -177,17 +177,6 @@ public class SysRoleService implements ISysRoleService {
}
}
// 冗余信息
for (SysRole role : roleList) {
role.setModuleNumber(moduleListRdd.size());
role.setModuleNamesRdd(String.join(",",moduleListRdd));
role.setMenuNumber(featuresListRdd.size());
role.setMenuNamesRdd(String.join(",",featuresListRdd));
// ConvertBean.serviceModelUpdate(role,userName);
}
refRoleMenuRDao.saveAll(refs);
roleRDao.saveAll(roleList);
}else {
@ -282,7 +271,6 @@ public class SysRoleService implements ISysRoleService {
}
}
/**
*
* @param roleName

@ -242,6 +242,15 @@ public class SysUserInfoService implements ISysUserInfoService {
}
@Override
public int getSysUserInfoCount() {
LOGGER.info("用户信息 SysUserInfo Count");
return sysUserInfoRDao.findByPropertyCount(
new String[]{"isDeleted","isValid"},
new Object[]{CommonEnumUtil.IS_DEAL.NO.getValue(),CommonEnumUtil.IS_VAILD.VAILD.getValue()});
}
@Override
@ApiOperation(value = "查询用户信息",notes = "根据 UserInfoId查询用户信息")
public SysUserInfo getSysUserInfoById(Long id) {
return sysUserInfoRDao.getById(id);

@ -23,6 +23,7 @@ import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.exception.ImppExceptionEnum;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections.ListUtils;
import org.apache.commons.lang3.ArrayUtils;
@ -34,6 +35,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@ -99,6 +102,7 @@ public class SysUserService implements ISysUserService {
@Override
@ApiOperation(value = "用户登录", notes = "用户登录功能实现")
@Transactional(propagation = Propagation.REQUIRED)
public SessionUser queryUserLogin(String loginName, String password, String languageCode) throws AuthenticationException {
LOGGER.debug("平台用户 SYS_USER loginName:{} \t password:{} \t languageCode:{}", loginName, password, languageCode);
@ -109,7 +113,6 @@ public class SysUserService implements ISysUserService {
if(user == null){
throw new CredentialsException("用户不存在");
}
packSessionUser(sessionUser, user, user.getUserType(), languageCode);
AuthUtil.setSessionUser(sessionUser);
refreshUserLoginInformation(user.getId());
@ -299,7 +302,13 @@ public class SysUserService implements ISysUserService {
@ApiOperation(value = "账号查询", notes = "查询所有账号信息")
public List<SysUser> list() {
LOGGER.debug("平台用户 SYS_USER find All");
return sysUserRDao.findByProperty("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
return sysUserRDao.findByProperty(
new String[]{"isDeleted","isValid","organizeCode"},
new Object[]{
CommonEnumUtil.IS_DEAL.NO.getValue(),
CommonEnumUtil.IS_VAILD.VAILD.getValue(),
AuthUtil.getOrganize().getOrganizeCode()
});
}
@Override
@ -626,7 +635,15 @@ public class SysUserService implements ISysUserService {
e.printStackTrace();
}
user.setRoleList(roleList);
if(roleList != null && roleList.size() > 0){
List<SysRole> list = new ArrayList<>();
roleList.forEach(role -> {
if(role.getRoleStatus() != null && role.getRoleStatus().equals(CommonEnumUtil.DATA_STATUS.ENABLE.getValue())){
list.add(role);
}
});
user.setRoleList(list);
}
}
/**
@ -637,9 +654,15 @@ public class SysUserService implements ISysUserService {
public void packSysUserMenu(SysUser user){
List<SysMenu> list = null;
try {
LOGGER.debug("平台用户 SYS_USER user id :{}", user.getUserInfoId());
list = userPermissionDao.findSysMenuByUser(user);
LOGGER.info("平台用户 SYS_USER user id :{}", user.getUserInfoId());
if(user.getRoleList() != null && user.getRoleList().size() > 0){
List<Long> ids = new ArrayList<>();
user.getRoleList().forEach(role -> {
ids.add(role.getId());
});
list = userPermissionDao.findSysMenuByInRoleId(ids.toArray(new Long[ids.size()]));
}
}catch (Exception e){
LOGGER.error(" SysUser Peck Menu information Error userId : {} Exception Message : {} " ,user.getUserInfoId(),e.getMessage());
e.printStackTrace();

@ -8,6 +8,7 @@ import cn.estsh.i3plus.pojo.platform.repository.SysDepartmentRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository;
import cn.estsh.i3plus.pojo.platform.repository.TestTransUserRepository;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.stereotype.Service;
@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.persistence.LockModeType;
import java.util.List;
import java.util.Random;
@ -30,6 +32,12 @@ import java.util.Random;
@Service
public class TestTransService implements ITestTransService {
/**
*
*/
@Resource(name="redisCore")
private ImppRedis redisCore;
@Autowired
private SysDepartmentRepository sysDepartmentRDao;
@ -144,9 +152,15 @@ public class TestTransService implements ITestTransService {
}
public void testRedisTrans(String name, String val){
System.out.println("==========" + redisCore.getObject(name));
redisCore.putObject(name,val);
System.out.println("======已缓存======");
}
@Override
public List<TestTransUser> listRead() {
List<TestTransUser> ul = testTransUserRepository.list();
testTransUserRepository.flush();
System.out.println("查询333数量" + ul);

@ -153,12 +153,7 @@ public class ExcelUtil {
}
// excel 文本框最大长度
if(String.valueOf(cellValue).length() > 30000){
hssfRow.createCell(j, CellType.STRING).setCellValue(String.valueOf(cellValue).substring(0, 30000));
}else{
hssfRow.createCell(j, CellType.STRING).setCellValue(String.valueOf(cellValue));
}
hssfRow.createCell(j, CellType.STRING).setCellValue(StringTool.valueExcelOf(cellValue));
}
}
@ -208,6 +203,7 @@ public class ExcelUtil {
// 校验sheet是否超过最大行数
Sheet sheet = wb.getSheet(importClass.getSimpleName());
int maxRow = Integer.parseInt(sysConfigService.getSysConfigByCode(PlatformConstWords.EXCEL_IMPORT_MAX_ROW).getConfigValue());
System.out.println(maxRow);
if (sheet != null && sheet.getLastRowNum() > maxRow) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
@ -246,30 +242,33 @@ public class ExcelUtil {
row = sheet.getRow(i);
obj = importClass.newInstance();
for (int j = 0; j < fields.length; j++) {
// 判断是否存在引用关系
if (fields[j].isAnnotationPresent(AnnoOutputColumn.class)) {
inputColumn = fields[j].getAnnotation(AnnoOutputColumn.class);
row.getCell(j).setCellType(CellType.STRING);
cellValue = row.getCell(j).getStringCellValue();
// 判断是否为枚举字段
if (inputColumn.refClass().isEnum()) {
method = inputColumn.refClass().getDeclaredMethod(
inputColumn.value() + "Of" + StringTool.toUpperCaseFirstOne(inputColumn.refForeignKey()),
inputColumn.refClass().getDeclaredMethod("get"+
StringTool.toUpperCaseFirstOne(inputColumn.value())).getReturnType());
cellValue = method.invoke(null, cellValue);
}else if(inputColumn.refClass().equals(SysDictionary.class) && cellValue != null){
cellValue = sysDictionaryService.getSysDictionaryByParentCodeAndName(inputColumn.refForeignKey(), String.valueOf(cellValue)).getName();
} else if(!inputColumn.refClass().equals(Object.class) && !inputColumn.refClass().equals(SysDictionary.class)){
cellValue = selectByProperty(inputColumn.refClass(), inputColumn.refForeignKey(), inputColumn.value(), cellValue);
Field field = fields[j];
if(field != null){
// 判断是否存在引用关系
if (field.isAnnotationPresent(AnnoOutputColumn.class)) {
inputColumn = fields[j].getAnnotation(AnnoOutputColumn.class);
row.getCell(j).setCellType(CellType.STRING);
cellValue = row.getCell(j).getStringCellValue();
// 判断是否为枚举字段
if (inputColumn.refClass().isEnum()) {
method = inputColumn.refClass().getDeclaredMethod(
inputColumn.value() + "Of" + StringTool.toUpperCaseFirstOne(inputColumn.refForeignKey()),
inputColumn.refClass().getDeclaredMethod("get"+
StringTool.toUpperCaseFirstOne(inputColumn.value())).getReturnType());
cellValue = method.invoke(null, cellValue);
}else if(inputColumn.refClass().equals(SysDictionary.class) && cellValue != null){
cellValue = sysDictionaryService.getSysDictionaryByParentCodeAndName(inputColumn.refForeignKey(), String.valueOf(cellValue)).getName();
} else if(!inputColumn.refClass().equals(Object.class) && !inputColumn.refClass().equals(SysDictionary.class)){
cellValue = selectByProperty(inputColumn.refClass(), inputColumn.refForeignKey(), inputColumn.value(), cellValue);
}
}else{
cellValue = getExcelCell(row.getCell(j), field.getType());
}
}else{
cellValue = getExcelCell(row.getCell(j), fields[j].getType());
}
fields[j].setAccessible(true);
fields[j].set(obj, cellValue);
field.setAccessible(true);
field.set(obj, cellValue);
}
}
dataList.add(obj);
}

@ -1,6 +1,7 @@
package cn.estsh.i3plus.core.apiservice.websocket;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import io.netty.util.internal.ConcurrentSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@ -8,7 +9,12 @@ import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.EOFException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@ -19,25 +25,38 @@ import java.util.concurrent.ConcurrentMap;
* @CreateDate : 2018-11-24 16:57
* @Modify:
**/
@ServerEndpoint(value= PlatformConstWords.WEBSOCKET_URL + "/message-websocket/{userId}")
@ServerEndpoint(value = PlatformConstWords.WEBSOCKET_URL + "/message-websocket/{userId}/{userLoginSid}")
@Component
public class MessageWebSocket {
private static final Logger LOGGER = LoggerFactory.getLogger(MessageWebSocket.class);
private long userId = 1L;
private long userId;
private String userLoginSid;
//websocket会话
private Session session; // 当前对象会话
private static int sendCount = 1;
//concurrent线程安全集合存放客户端websocket对象
private static ConcurrentMap<Long,MessageWebSocket> webSocketSet = new ConcurrentHashMap<Long,MessageWebSocket>();
// 用户会话消息
private static ConcurrentMap<Long, ConcurrentSet<String>> userSessionMap = new ConcurrentHashMap<>();
// concurrent线程安全集合存放客户端websocket对象
private static ConcurrentMap<String,MessageWebSocket> webSocketMap = new ConcurrentHashMap<>();
@OnOpen
public void onOpen(@PathParam("userId")long userId, Session session){
public void onOpen(@PathParam("userId")long userId,@PathParam("userLoginSid")String userLoginSid, Session session){
this.userId = userId;
this.userLoginSid = userLoginSid;
this.session = session;
webSocketSet.put(userId,this); //在线人数添加
ConcurrentSet<String> sidSet = userSessionMap.get(userId);
if(sidSet == null){
sidSet = new ConcurrentSet<>();
}
sidSet.add(userLoginSid);
userSessionMap.put(userId, sidSet);
webSocketMap.put(userLoginSid, this); //在线人数添加
LOGGER.info("{}加入!当前在线人数为{}",userId,getOnlineCount());
}
@ -46,7 +65,7 @@ public class MessageWebSocket {
*/
@OnClose
public void onClose() {
subOnlineUser(this.userId);
subOnlineUser(this.userId, this.userLoginSid);
LOGGER.info("有一连接关闭!当前在线人数为" + getOnlineCount());
}
@ -55,10 +74,10 @@ public class MessageWebSocket {
*
* @param message */
@OnMessage
public void onMessage(@PathParam("userId")Long userId,String message) {
public void onMessage(@PathParam("userLoginSid")String userLoginSid,String message) {
// 心跳
if("heartBit".equals(message)){
this.sendMessage(userId,"heartBit");
this.sendMessage(userLoginSid,"heartBit");
}else{
LOGGER.info("来自客户端的消息:" , message);
}
@ -70,19 +89,43 @@ public class MessageWebSocket {
*/
@OnError
public void onError(Session session, Throwable error) {
LOGGER.info("发生错误");
error.printStackTrace();
if(error.getClass().equals(EOFException.class)){
LOGGER.error("WebSocket连接已断开");
}else {
LOGGER.error("发生错误",error.toString());
error.printStackTrace();
}
}
/**
*
* @param message
* @throws IOException
* id
* @param userId id
* @param message
*/
public static void sendMessage(Long userId, String message){
try {
MessageWebSocket websocket = webSocketSet.get(userId);
if(websocket != null) {
ConcurrentSet<String> websocket = userSessionMap.get(userId);
if (websocket != null && websocket.size() != 0) {
for (String sid : websocket) {
if(webSocketMap.get(sid).session.isOpen()){
webSocketMap.get(sid).session.getBasicRemote().sendText(message);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* id
* @param userLoginSid id
* @param message
*/
public static void sendMessage(String userLoginSid, String message){
try {
MessageWebSocket websocket = webSocketMap.get(userLoginSid);
if (websocket != null && websocket.session.isOpen()) {
if (message.equals("heartBit")) {
websocket.session.getBasicRemote().sendText(message + "=" + sendCount);
sendCount++;
@ -96,10 +139,17 @@ public class MessageWebSocket {
}
public static synchronized int getOnlineCount() {
return webSocketSet.size();
return userSessionMap.size();
}
public synchronized void subOnlineUser(long userId) {
webSocketSet.remove(userId);
public synchronized void subOnlineUser(long userId, String userLoginSid) {
webSocketMap.remove(userId);
ConcurrentSet sidSet = userSessionMap.get(userId);
if(sidSet != null){
sidSet.remove(userLoginSid);
if(sidSet.isEmpty()){
userSessionMap.remove(userId);
}
}
}
}

@ -187,4 +187,4 @@ fastdfs.http_anti_steal_token=no
################ 授权配置 ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=20190513
slm.app.id=10000

@ -185,4 +185,4 @@ fastdfs.http_anti_steal_token=no
################ 授权配置 ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=20190513
slm.app.id=10000

@ -189,4 +189,4 @@ fastdfs.http_anti_steal_token=no
################ 授权配置 ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=20190513
slm.app.id=10000

@ -188,4 +188,4 @@ fastdfs.http_anti_steal_token=no
################ 授权配置 ################
slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2
slm.app.id=20190513
slm.app.id=10000

@ -0,0 +1,23 @@
package test.cn.estsh.i3plus.core.apiservice.util;
import cn.estsh.i3plus.core.apiservice.util.ExcelUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysMenu;
import com.alibaba.fastjson.JSON;
import java.io.FileInputStream;
import java.util.List;
/**
* @Description :
* @Reference :
* @Author : Adair Peng
* @CreateDate : 2019-05-21 12:57
* @Modify:
**/
public class ExcelReadData {
public static void main(String[] args) throws Exception{
List<SysMenu> list = ExcelUtil.importData("permission.xls", new FileInputStream("E:\\permission.xls"), SysMenu.class);
System.out.println(JSON.toJSONString(list));
}
}

@ -108,6 +108,11 @@
</dependency>
<dependency>
<groupId>i3plus.platform</groupId>
<artifactId>i3plus-platform-plugin</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>i3plus.pojo</groupId>
<artifactId>i3plus-pojo-platform</artifactId>
<version>${project.version}</version>
@ -129,7 +134,7 @@
<version>${project.version}</version>
</dependency>
<!-- wei'fu微服调用 -->
<!-- 微服调用 -->
<dependency>
<groupId>i3plus.icloud</groupId>
<artifactId>i3plus-icloud-core</artifactId>
@ -255,6 +260,7 @@
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
</dependencyManagement>

Loading…
Cancel
Save