From 7f6559e1af09f5e1dab90abc9feedfa7590a2c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Mon, 3 Aug 2020 19:01:47 +0800 Subject: [PATCH 1/4] =?UTF-8?q?DEV=E7=89=88=E6=9C=AC=E8=BF=98=E5=8E=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-core-api/pom.xml | 2 +- modules/i3plus-core-apiservice/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-core-api/pom.xml b/modules/i3plus-core-api/pom.xml index 42c86a0..d202ba1 100644 --- a/modules/i3plus-core-api/pom.xml +++ b/modules/i3plus-core-api/pom.xml @@ -5,7 +5,7 @@ i3plus-core i3plus.core - 1.0-TEST-SNAPSHOT + 1.0-DEV-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index f1d252e..ebb3a1f 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -5,7 +5,7 @@ i3plus-core i3plus.core - 1.0-TEST-SNAPSHOT + 1.0-DEV-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 0425111..ffb4ca3 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ i3plus.core i3plus-core pom - 1.0-TEST-SNAPSHOT + 1.0-DEV-SNAPSHOT modules/i3plus-core-api modules/i3plus-core-apiservice From 6dccdf0a01afa7e95abb4981f7883975da1c2e0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Wed, 5 Aug 2020 10:46:40 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=9E=83=E5=9C=BE=E6=95=B0=E6=8D=AE=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=8F=8A=E6=9D=83=E9=99=90=E6=A8=A1=E5=9D=97=E5=88=86?= =?UTF-8?q?=E9=85=8D=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/controller/base/AuthController.java | 27 -------------- .../controller/base/BackstageController.java | 41 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java index 9474af7..e782225 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java @@ -263,33 +263,6 @@ public class AuthController extends CoreBaseController { } } - /** - * 获取登录用户功能权限信息 - * - * @return 处理结果 - */ - @GetMapping(value = "/menu/module-menu-list") - @ApiOperation(value = "获取登录用户功能权限信息", notes = "获取首页权限信息") - public ResultBean findMenuListByModule() { - List list = null; - if (AuthUtil.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN)) { - SysMenu sysMenu = new SysMenu(); - sysMenu.setMenuType(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); - sysMenuService.findAllByBean(sysMenu); - } else { - List menuList = memTreeService.packTreeSysMenuByUserId(getSessionUser().getUser().getId()); - list = memTreeService.packTreeSysMenuByParentIdAndMenuType(menuList, CommonConstWords.SYSTEM_MENU_ROOT_ID, CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); - } - - if (list != null && list.size() > 0) { - // 内存排序 Sort 降序 code 升序 - list.sort(Comparator.comparing(SysMenu::getMenuSort).reversed().thenComparing(SysMenu::getMenuCode)); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(list); - } else { - return ResultBean.fail("操作失败").setCode(ResourceEnumUtil.MESSAGE.FAIL.getCode()).setErrorMsg("菜单信息不存在"); - } - } - // /** // * 根据递归获取所有父节点 ID 获取所有 菜单 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java index cf8ec56..35f7a75 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/BackstageController.java @@ -21,6 +21,7 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.ListUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -200,6 +201,46 @@ public class BackstageController extends CoreBaseController { } } + @GetMapping(value = "/update-clean-menu-soft-type") + @ApiOperation(value = "更新并清理功能软件模块数据", notes = "更新并清理功能软件模块数据") + public ResultBean updateCleanMenuSoftType(){ + try { + SysMenu sysMenu = new SysMenu(); + sysMenu.setMenuType(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); + List list = menuService.findAllByBean(sysMenu).stream() + .filter(menu -> menu.getId() != 100000000L) + .collect(Collectors.toList()); + + List allList = menuService.findAll(); + Map> ds = allList.stream().collect(Collectors.groupingBy(SysMenu::getParentId)); + packSysMenuTree(list, ds, null); + + for (List sysMenuList : ListUtils.partition(allList, 100)) { + new Thread(() -> menuService.saveBatch(sysMenuList)).start(); + } + return ResultBean.success("操作成功").setResultList(list); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + + public void packSysMenuTree(List sysMenuList, Map> ds,Integer softType) { + if (CollectionUtils.isEmpty(sysMenuList)) { + return; + } + for (SysMenu sysMenu : sysMenuList) { + if (softType != null) { + sysMenu.setSoftType(softType); + } + if (ds.containsKey(sysMenu.getId())) { + sysMenu.setChildList(ds.get(sysMenu.getId())); + packSysMenuTree(sysMenu.getChildList(), ds, sysMenu.getSoftType()); + } + } + } + @GetMapping(value = "/update-clean-ref-role-menu") @ApiOperation(value = "更新并清理角色功能数据", notes = "更新并清理角色功能数据") public ResultBean updateRefRoleMenu(){ From 5361c81c3da544017aa5daf76c7847c5dcf48afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Thu, 6 Aug 2020 01:14:09 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/controller/base/AuthController.java | 5 +++- .../controller/base/WhiteController.java | 20 +++++++++++++++ .../controller/busi/SysToolTypeController.java | 1 + .../serviceimpl/busi/SysUserService.java | 29 ++++++++++++++++++++-- 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java index e782225..5c74f44 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/AuthController.java @@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** @@ -248,7 +249,9 @@ public class AuthController extends CoreBaseController { if (AuthUtil.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN)) { SysMenu sysMenu = new SysMenu(); sysMenu.setMenuType(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); - list = sysMenuService.findAllByBean(sysMenu); + list = sysMenuService.findAllByBean(sysMenu).stream() + .filter(menu -> menu.getId() != 100000000L) + .collect(Collectors.toList()); } else { List menuList = memTreeService.packTreeSysMenuByUserId(getSessionUser().getUser().getId()); list = memTreeService.packTreeSysMenuByParentIdAndMenuType(menuList, CommonConstWords.SYSTEM_MENU_ROOT_ID, CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index ee38d59..d526769 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -98,6 +98,10 @@ public class WhiteController extends CoreBaseController { @Autowired private ILicenseClickService licenseClickService; + @Resource(name= CommonConstWords.IMPP_REDIS_SESSION) + private ImppRedis redisSession; + + @GetMapping(value = "/sys-locale-language/list") @ApiOperation(value = "查询可用语言",notes = "查询可用语言") public ResultBean listSysLocaleLanguage(){ @@ -581,4 +585,20 @@ public class WhiteController extends CoreBaseController { return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } } + + @GetMapping(value = "/forced-offline/{loginName}") + @ApiOperation(value = "强制下线", notes = "强制下线") + public ResultBean forcedOffline(@PathVariable("loginName") String loginName){ + try { + SysUser sysUser = userService.getSysUserByLoginName(loginName); + ValidatorBean.checkNotNull(sysUser,"用户不存在,请检查【登录名】"); + redisSession.deleteBatchKey(CommonConstWords.SESSION_USER + ":*_" + sysUser.getId()); + return ResultBean.success("操作成功"); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java index 793f6d5..1c2f012 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysToolTypeController.java @@ -54,6 +54,7 @@ public class SysToolTypeController extends CoreBaseController{ // 条件校验 ValidatorBean.beginValid(toolType).notNull("name",toolType.getName()); + toolType.setOrganizeCode(AuthUtil.getOrganize().getOrganizeCode()); // 添加初始化 ConvertBean.modelInitialize(toolType, AuthUtil.getSessionUser()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 980ae07..4521286 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -151,6 +151,9 @@ public class SysUserService implements ISysUserService { if(user == null){ throw new CredentialsException("用户不存在"); } + // 判断会话模式 + checkSessionMode(user.getId()); + packSessionUser(sessionUser, user, user.getUserType(),loginPlatform, languageCode,deviceId); packConfigSessionUser(sessionUser, user); AuthUtil.setSessionUser(sessionUser); @@ -160,6 +163,24 @@ public class SysUserService implements ISysUserService { return sessionUser; } + private void checkSessionMode(Long userId){ + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, + CommonEnumUtil.SESSION_MODE.OVERWRITE.getValue()); + if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + String redisKey = CommonConstWords.SESSION_USER + ":*_" + userId; + List ds = redisSession.scan(redisKey); + + if (CollectionUtils.isNotEmpty(ds)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_LOGGED.getCode()) + .setErrorDetail("用户已在其他设备登录,无法同时登录!") + .setErrorSolution("请联系管理员") + .build(); + } + } + } + @Override public BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform) { SysUser user = this.getSysUserByLoginName(loginName); @@ -670,7 +691,7 @@ public class SysUserService implements ISysUserService { if(configPageSize != null && StringUtils.isNotBlank(configPageSize.getConfigValue())){ sessionUser.setPageDefaultSize(Integer.parseInt(configPageSize.getConfigValue())); } - }catch (Exception e){ + }catch (Exception ignored){ } if(sessionUser.getPageDefaultSize() == null || sessionUser.getPageDefaultSize() <= 0){ @@ -781,7 +802,11 @@ public class SysUserService implements ISysUserService { }); List roleList = roleService.findByIdList(ids); - roleList.forEach(role -> menuIdList.addAll(role.getMenuIdList())); + roleList.forEach(role -> { + if (role.getMenuIdList() != null) { + menuIdList.addAll(role.getMenuIdList()); + } + }); List menuList = menuService.findByIdList(new ArrayList<>(menuIdList)); if(CollectionUtils.isNotEmpty(menuList)){ for (SysMenu menu : menuList) { From 5a432554d02e1e33d0053c815952e475616b2071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Thu, 6 Aug 2020 01:41:17 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE-=E8=B0=83=E6=95=B4=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/base/WhiteController.java | 6 +++- .../serviceimpl/busi/SysUserService.java | 34 ++++++++++++---------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index d526769..7674183 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -161,7 +161,11 @@ public class WhiteController extends CoreBaseController { ValidatorBean.checkNotNull(loginName,"用户名不能为空"); ValidatorBean.checkNotNull(loginPwd,"密码不能为空"); ValidatorBean.checkNotNull(languageCode,"语言不能为空"); - logout(); + + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + logout(); + } SessionUser user = userService.queryUserLogin(loginName.trim(), loginPwd.trim(), languageCode, getLoginPlatform().getValue(),deviceId); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 4521286..0fde42f 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -152,7 +152,7 @@ public class SysUserService implements ISysUserService { throw new CredentialsException("用户不存在"); } // 判断会话模式 - checkSessionMode(user.getId()); + checkSessionMode(loginPlatform,user.getId()); packSessionUser(sessionUser, user, user.getUserType(),loginPlatform, languageCode,deviceId); packConfigSessionUser(sessionUser, user); @@ -163,21 +163,25 @@ public class SysUserService implements ISysUserService { return sessionUser; } - private void checkSessionMode(Long userId){ - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, - CommonEnumUtil.SESSION_MODE.OVERWRITE.getValue()); - if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { - String redisKey = CommonConstWords.SESSION_USER + ":*_" + userId; - List ds = redisSession.scan(redisKey); + private void checkSessionMode(Integer loginPlatform,Long userId){ + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE,CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + String redisKey; + if (sessionMode == CommonEnumUtil.SESSION_MODE.DEFAULT.getValue()) { + redisKey = CommonConstWords.SESSION_USER + ":" + loginPlatform + "_" + userId; + } else if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + redisKey = CommonConstWords.SESSION_USER + ":*_" + userId; + }else { + return; + } - if (CollectionUtils.isNotEmpty(ds)) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_LOGGED.getCode()) - .setErrorDetail("用户已在其他设备登录,无法同时登录!") - .setErrorSolution("请联系管理员") - .build(); - } + List ds = redisSession.scan(redisKey); + if (CollectionUtils.isNotEmpty(ds)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.LOGIN_EXCEPTION_LOGGED.getCode()) + .setErrorDetail("用户已在其他设备登录,无法同时登录!") + .setErrorSolution("请联系管理员") + .build(); } }