diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java index 7301494..e7e5134 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ICoreTreeService.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.platform.bean.SysPosition; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * @Description : 通用树查询服务 @@ -136,6 +137,15 @@ public interface ICoreTreeService { @ApiOperation(value = "封装菜单树",notes = "封装当前菜单树") void findSysMenuChildrenTreePack(SysMenu parent, int step); + @ApiOperation(value = "封装菜单树",notes = "根据角色ID封装当前菜单树") + void findSysMenuChildrenTreeByRoleIdPack(SysMenu parent,Long roleId, int step); + + @ApiOperation(value = "封装菜单树",notes = "根据用户ID封装当前菜单树") + void findSysMenuChildrenTreeByUserIdPack(SysMenu parent,Long userId, int step); + + @ApiOperation(value = "封装菜单树",notes = "根据用户ID 内存中封装当前菜单树") + void findMemSysMenuChildrenTreeByUserIdPack(SysMenu parent, List cacheMenuList, int step); + /** * 检查父节点是否是子节点ID或者为当前节点ID * @param menu diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java index ee18289..0a5d232 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMenuService.java @@ -78,6 +78,9 @@ public interface ISysMenuService { @ApiOperation(value = "查询菜单信息",notes = "查询所有菜单信息") List findSysMenuAll(); + @ApiOperation(value = "查询菜单信息",notes = "根据父节点 ID 查询所有菜单信息") + List findSysMenuByParentId(Long parentId); + /** * 根据id 数据 * 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 75f059b..ba939a3 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 @@ -1,39 +1,30 @@ package cn.estsh.i3plus.core.apiservice.controller.base; -import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; -import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; -import cn.estsh.i3plus.core.apiservice.controller.DemoAuthController; import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.SysLocaleLanguageService; -import cn.estsh.i3plus.platform.common.tool.ServletRequestTool; -import cn.estsh.i3plus.platform.common.tool.TimeTool; -import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; -import cn.estsh.i3plus.pojo.platform.bean.SysLogUserLogin; import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; 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.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.shiro.authc.*; +import org.apache.jasper.tagplugins.jstl.core.If; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** @@ -48,95 +39,11 @@ import java.util.List; @RequestMapping(PlatformConstWords.BASE_URL + "/auth") public class AuthController extends CoreBaseController { - public static final Logger LOGGER = LoggerFactory.getLogger(DemoAuthController.class); - - @Autowired - private ISystemLoginService systemLoginService; - - @Autowired - private ISysUserService userService; - - @Autowired - private ICoreTreeService coreTreeService; + public static final Logger LOGGER = LoggerFactory.getLogger(AuthController.class); @Autowired private SysLocaleLanguageService localeLanguageService; - @GetMapping(value="/login") - @ApiOperation(value="登陆",notes="登陆") - public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, String languageCode){ - LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}",loginName,loginPwd,languageCode); - ResultBean result = null; - try { - ValidatorBean.checkNotNull(loginName,"用户名不能为空"); - ValidatorBean.checkNotNull(loginPwd,"密码不能为空"); - ValidatorBean.checkNotNull(languageCode,"语言不能为空"); - - SessionUser user = userService.queryUserLogin(loginName,loginPwd,languageCode); - - String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId(); - redisCore.deleteKey(redisKey); - - LOGGER.info("会员登陆:{}",user); - AuthUtil.setSessionObject("languageCode",languageCode); - result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser()); - result.setUrl("/"); - - // 记录登录记录 - recordSysUserLog(user.getUser().getUserInfoId(), loginName,CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue(), request); - } catch (IncorrectCredentialsException e) { - // 密码错误 - Integer num = systemLoginService.doLoginPasswordError(loginName); - num = CommonConstWords.USER_LOGIN_ERROR_MAX_NUM - num; - result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD); - if(num == 0){ - result.setErrorMsg("密码输入错误。用户已被锁定请联系管理员!"); - }else { - result.setErrorMsg("密码输入错误。再输入错误"+ num +"次,用户将被锁定。"); - } - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.WRONG_PASSWORD.getValue(), request); - } catch (CredentialsException e) { - // 用户名或密码错误 - result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME); - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.WRONG_USERNAME_OR_PASSWORD.getValue(), request); - } catch (LockedAccountException e) { - // 账号已锁定 - result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_LOCKING); - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.USER_LOGIN_LOCKING.getValue(), request); - } catch (UnknownAccountException e) { - // 用户信息不存在 - result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_INFO_NULL); - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.USER_INFO_NULL.getValue(), request); - } catch (AuthenticationException e) { - // 系统异常 - result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); - result.setErrorMsg(e.getMessage()); - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR.getValue(), request); - } catch (ImppBusiException e) { - result = ResultBean.fail(e); - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR.getValue(), request); - } catch (Exception e) { - result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()) - .setErrorMsg(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription()); - - // 记录登录记录 - recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR.getValue(), request); - } - return result; - } - /** * * @return @@ -187,22 +94,71 @@ public class AuthController extends CoreBaseController { } } - @GetMapping(value="/find-menu-tree") - @ApiOperation(value="获取登录用户功能权限信息",notes="获取当前登录用户的权限信息") - public ResultBean getUserMenuTree(){ - try { - List listTree = coreTreeService.findSysMenuTreeByParentId(-1); + @GetMapping(value="/menu/find-home-list") + @ApiOperation(value="获取登录用户功能权限信息",notes="获取首页权限信息") + public ResultBean findHomeList(){ + List list = new ArrayList<>(); + SysUser user = getSessionUser().getUser(); + + if(user != null){ + List menus = user.getMenuList(); + if(menus != null){ + for (SysMenu menu : menus) { + if(menu.getMenuType().equals(CommonEnumUtil.METHOD_LEVEL.PLUGIN.getValue()) + && menu.getParentId().longValue() != -1){ + list.add(menu); + } + } + } + } - return ResultBean.success("查询部门树成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultList(listTree); - }catch(ImppBusiException busExcep){ - LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); - return ResultBean.fail(busExcep); - }catch(Exception e){ - LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}",e.getMessage(),e); - return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + 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("菜单信息不存在"); } + + } + + @GetMapping(value="/menu/find-module-list/{parentId}") + @ApiOperation(value="获取登录用户功能权限信息",notes="获取首页权限信息") + public ResultBean findModuleList(@PathVariable("parentId") String parentId){ + List list = new ArrayList<>(); + SysUser user = getSessionUser().getUser(); + + if(user != null){ + List menus = user.getMenuList(); + if(menus != null){ + // 封装模块信息 + for (SysMenu menu : menus) { + if(menu.getMenuType().equals(CommonEnumUtil.METHOD_LEVEL.MODULE.getValue()) + && parentId.equals(menu.getParentId().toString())){ + + // 封装 功能信息 + for (SysMenu sysMenu : menus) { + if(sysMenu.getMenuType().equals(CommonEnumUtil.METHOD_LEVEL.METHOD.getValue()) + && menu.getId().longValue() == sysMenu.getParentId().longValue()){ + menu.getChildList().add(sysMenu); + } + } + + menu.getChildList().sort(Comparator.comparing(SysMenu::getMenuSort).reversed().thenComparing(SysMenu::getMenuCode)); + list.add(menu); + } + } + } + } + + 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("菜单信息不存在"); + } + } @PutMapping(value = "/update-language") @@ -226,18 +182,26 @@ public class AuthController extends CoreBaseController { } - private void recordSysUserLog(Long userId, String username,Integer userLoginStatus,HttpServletRequest request){ - SysLogUserLogin log = new SysLogUserLogin(); - log.setUserId(userId); - log.setLogLoginName(username); - log.setLogLoginStatus(userLoginStatus); - log.setLogLoginBrowser(ServletRequestTool.getRequestBrowser(request)); - log.setLogLoginHost(ServletRequestTool.getRequestHost(request)); - log.setLogLoginPlatform(CommonEnumUtil.LOG_LOGIN_PLATFORM.descOf(ServletRequestTool.getRequestOs(request))); - log.setLogLoginDateTime(TimeTool.getNowTime(true)); - - userService.insertSysLogUserLogin(log); - } +// /** +// * 根据递归获取所有父节点 ID 获取所有 菜单 +// * @param list +// * @param parentId +// * @return +// */ +// private List findSysMenuChildList(List list,Long parentId){ +// List result = new ArrayList<>(); +// if(list != null && list.size() > 0){ +// for (SysMenu menu : list) { +// if(menu.getParentId().equals(parentId)){ +// result.add(menu); +// } +// +// List childList = findSysMenuChildList(menu.getChildList(), parentId); +// result.addAll( childList); +// } +// } +// return result; +// } } 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 new file mode 100644 index 0000000..c02fb3d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -0,0 +1,162 @@ +package cn.estsh.i3plus.core.apiservice.controller.base; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleLanguageService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysMenuService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.core.apiservice.controller.DemoAuthController; +import cn.estsh.i3plus.core.apiservice.serviceimpl.busi.SysLocaleLanguageService; +import cn.estsh.i3plus.platform.common.tool.ServletRequestTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.pojo.platform.bean.SysLogUserLogin; +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; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authc.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2018-12-19 15:31 + * @Modify: + **/ +@RestController +@Api(description = "非权限服务") +@RequestMapping("/impp/white") +public class WhiteController extends CoreBaseController { + + public static final Logger LOGGER = LoggerFactory.getLogger(WhiteController.class); + + @Autowired + private ISysLocaleLanguageService sysLocaleLanguageService; + + @Autowired + private ISystemLoginService systemLoginService; + + @Autowired + private ISysUserService userService; + + @GetMapping(value = "/sys-locale-language/list") + @ApiOperation(value = "查询全部系统语言",notes = "查询全部系统语言") + public ResultBean listSysLocaleLanguage(){ + try { + List sysLocaleLanguageList = sysLocaleLanguageService.listSysLocaleLanguage(); + return ResultBean.success("查询成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(sysLocaleLanguageList); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value="/auth/login") + @ApiOperation(value="登陆",notes="登陆") + public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, String languageCode){ + LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}",loginName,loginPwd,languageCode); + ResultBean result = null; + try { + ValidatorBean.checkNotNull(loginName,"用户名不能为空"); + ValidatorBean.checkNotNull(loginPwd,"密码不能为空"); + ValidatorBean.checkNotNull(languageCode,"语言不能为空"); + + SessionUser user = userService.queryUserLogin(loginName,loginPwd,languageCode); + + String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId(); + redisCore.deleteKey(redisKey); + + LOGGER.info("会员登陆:{}",user); + AuthUtil.setSessionObject("languageCode",languageCode); + result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser()); + result.setUrl("/"); + + // 记录登录记录 + recordSysUserLog(user.getUser().getUserInfoId(), loginName,CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue(), request); + } catch (IncorrectCredentialsException e) { + // 密码错误 + Integer num = systemLoginService.doLoginPasswordError(loginName); + num = CommonConstWords.USER_LOGIN_ERROR_MAX_NUM - num; + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD); + if(num == 0){ + result.setErrorMsg("密码输入错误。用户已被锁定请联系管理员!"); + }else { + result.setErrorMsg("密码输入错误。再输入错误"+ num +"次,用户将被锁定。"); + } + + // 记录登录记录 + recordSysUserLog(null, loginName, CommonEnumUtil.USER_LOGIN_STATUS.WRONG_PASSWORD.getValue(), request); + } catch (CredentialsException e) { + // 用户名或密码错误 + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME); + + // 记录登录记录 + recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.WRONG_USERNAME_OR_PASSWORD.getValue(), request); + } catch (LockedAccountException e) { + // 账号已锁定 + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_LOCKING); + + // 记录登录记录 + recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.USER_LOGIN_LOCKING.getValue(), request); + } catch (UnknownAccountException e) { + // 用户信息不存在 + result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_INFO_NULL); + + // 记录登录记录 + recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.USER_INFO_NULL.getValue(), request); + } catch (AuthenticationException e) { + // 系统异常 + result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + result.setErrorMsg(e.getMessage()); + + // 记录登录记录 + recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR.getValue(), request); + } catch (ImppBusiException e) { + result = ResultBean.fail(e); + + // 记录登录记录 + recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR.getValue(), request); + } catch (Exception e) { + result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()) + .setErrorMsg(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription()); + + // 记录登录记录 + recordSysUserLog(null, loginName,CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR.getValue(), request); + } + return result; + } + + private void recordSysUserLog(Long userId, String username,Integer userLoginStatus,HttpServletRequest request){ + SysLogUserLogin log = new SysLogUserLogin(); + + log.setUserId(userId); + log.setLogLoginName(username); + log.setLogLoginStatus(userLoginStatus); + log.setLogLoginBrowser(ServletRequestTool.getRequestBrowser(request)); + log.setLogLoginHost(ServletRequestTool.getRequestHost(request)); + log.setLogLoginPlatform(CommonEnumUtil.LOG_LOGIN_PLATFORM.descOf(ServletRequestTool.getRequestOs(request))); + log.setLogLoginDateTime(TimeTool.getNowTime(true)); + + userService.insertSysLogUserLogin(log); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java index cf5a56f..216ccea 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysDepartmentController.java @@ -146,11 +146,14 @@ public class SysDepartmentController extends CoreBaseController { SysDepartment department = departmentService.getSysDepartmentById(Long.parseLong(id)); - ValidatorBean.beginValid(department); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultObject(department); + if(department != null){ + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(department); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } + + } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java index 54bdf84..afe2dc8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMenuController.java @@ -150,11 +150,13 @@ public class SysMenuController extends CoreBaseController { // 数据校验 ValidatorBean.checkNotNull(id, "功能id 不能为空"); - SysMenu sysMenu = sysMenuService.getSysMenuById(Long.parseLong(id)); + SysMenu menu = sysMenuService.getSysMenuById(Long.parseLong(id)); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultObject(sysMenu); + if(menu != null){ + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(menu); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java index af3df02..947668c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysRoleController.java @@ -117,7 +117,7 @@ public class SysRoleController extends CoreBaseController{ } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep); - } catch (Exception e) { + } catch (Exception e) { LOGGER.error(ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription() + ":{}", e.getMessage(), e); return ResultBean.fail().setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } @@ -168,9 +168,11 @@ public class SysRoleController extends CoreBaseController{ SysRole role = sysRoleService.getSysRoleById(Long.parseLong(id)); - return ResultBean.success("操作成功") - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) - .setResultObject(role); + if(role != null){ + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(role); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } } catch (ImppBusiException busExcep) { LOGGER.error(busExcep.getErrorMsg() + ":{}", busExcep.getErrorDetail(), busExcep); return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java index 5184ded..07446b2 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserInfoController.java @@ -187,13 +187,15 @@ public class SysUserInfoController extends CoreBaseController{ try{ ValidatorBean.checkIsNumber(id, "id 不能为空"); - SysUserInfo SysUserInfo = sysUserInfoService.getSysUserInfoById(Long.parseLong(id)); - ValidatorBean.beginValid(SysUserInfo) - .notNull("id",SysUserInfo.getId()); + SysUserInfo userInfo = sysUserInfoService.getSysUserInfoById(Long.parseLong(id)); + ValidatorBean.beginValid(userInfo) + .notNull("id",userInfo.getId()); - return ResultBean.success("查询成功") - .setResultObject(SysUserInfo) - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + if(userInfo != null){ + return ResultBean.success("查询成功").setResultObject(userInfo).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }else { + return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); + } }catch(ImppBusiException busExcep){ LOGGER.error(busExcep.getErrorMsg() + ":{}",busExcep.getErrorDetail(),busExcep); return ResultBean.fail(busExcep); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ISysMenuDao.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ISysMenuDao.java new file mode 100644 index 0000000..a5351c9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/ISysMenuDao.java @@ -0,0 +1,56 @@ +package cn.estsh.i3plus.core.apiservice.dao; + +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2018-12-18 13:38 + * @Modify: + **/ +public interface ISysMenuDao { + + /** + * 根据用户角色 ID 查询所有菜单 + * HQL: + * select sm.* + * from sys_menu as sm + * left join sys_ref_role_menu as srrm on sm.id = srrm.menu_id and role_id = 200001 + * where sm.parent_id = 100003 + * @param parentId + * @param roleId + * @return + */ +// @Modifying +// @Query(" select sm from SysMenu as sm " + +// "left join SysRefRoleMenu as srrm on sm.id = srrm.menuId and srrm.roleId =:roleId " + +// "where sm.parentId =:parentId") + List findByParentIdAndRoleId(Long parentId, Long roleId); + + /** + * 根据用户ID 查询所有菜单 + * HQL: + * select sm.* + * from sys_menu as sm + * left join sys_ref_role_menu as srrm on sm.id = srrm.menu_id + * left join sys_ref_user_role as srur on srur.role_id = srrm.role_id and srur.user_id = 400001 + * where sm.parent_id = 100003 + * @param parentId + * @param userId + * @return + */ +// @Query(" select sm from SysMenu as sm " + +// "left join SysRefRoleMenu as srrm on sm.id = srrm.menuId " + +// "left join SysRefUserRole as srur on sm.roleId = srrm.roleId and srur.userId =:userId " + +// "where sm.parentId =:parentId") + List findByParentIdAndUserId(Long parentId, Long userId); + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java index 731169a..8632e4e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/dao/IUserPermissionDao.java @@ -35,6 +35,13 @@ public interface IUserPermissionDao { List findSysMenuByUser(SysUser user); /** + * 查询用户所有功能权限 Tree + * @param user + * @return + */ + List findSysMenuByUserTree(SysUser user); + + /** * 查询用户所有岗位 * @param userInfo * @return diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/SysMenuDaoImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/SysMenuDaoImpl.java new file mode 100644 index 0000000..d74dc5d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/SysMenuDaoImpl.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.core.apiservice.daoimpl; + +import cn.estsh.i3plus.core.apiservice.dao.ISysMenuDao; +import cn.estsh.i3plus.pojo.platform.bean.SysMenu; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.persistence.EntityManager; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : Adair Peng + * @CreateDate : 2018-12-18 15:39 + * @Modify: + **/ +@Service +public class SysMenuDaoImpl implements ISysMenuDao { + + public static final Logger LOGGER = LoggerFactory.getLogger(SysMenuDaoImpl.class); + + @Autowired + private EntityManager entityManager; + + @Override + public List findByParentIdAndRoleId(Long parentId, Long roleId) { + LOGGER.info(" 根据角色ID 查询权限 parentId:{} roleId:{}",parentId,roleId); + String hql = " select sm from SysMenu as sm " + + "left join SysRefRoleMenu as srrm on sm.id = srrm.menuId and srrm.roleId =:roleId " + + "where sm.parentId =:parentId"; + + return entityManager.createQuery(hql) + .setParameter("parentId", parentId) + .setParameter("roleId", roleId) + .getResultList(); + } + + @Override + public List findByParentIdAndUserId(Long parentId, Long userId) { + LOGGER.info(" 根据账号ID 查询权限 parentId:{} userId:{}",parentId,userId); + + String hql = " select sm from SysMenu as sm " + + "left join SysRefRoleMenu as srrm on srrm.menuId = sm.id " + + "left join SysRefUserRole as srur on srur.roleId = srrm.roleId and srur.userId =:userId " + + "where sm.parentId =:parentId"; + + return entityManager.createQuery(hql) + .setParameter("parentId", parentId) + .setParameter("userId", userId) + .getResultList(); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java index 111631c..34a3bb3 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/daoimpl/UserPermissionDaoImpl.java @@ -66,6 +66,11 @@ public class UserPermissionDaoImpl implements IUserPermissionDao { } @Override + public List findSysMenuByUserTree(SysUser user) { + return null; + } + + @Override public List findPositionByUser(SysUserInfo userInfo) { LOGGER.info(" 查询用户所有岗位 user id:{}", userInfo.getId()); String hql = "select p from SysRefUserPosition as rup " + diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java index cd4c272..0081cad 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/CoreTreeService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; +import cn.estsh.i3plus.core.apiservice.dao.ISysMenuDao; import cn.estsh.i3plus.pojo.base.bean.BaseBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ModelEnumUtil; @@ -25,6 +26,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @Description : Core 树功能实现 @@ -50,6 +52,9 @@ public class CoreTreeService implements ICoreTreeService { @Autowired private SysMenuRepository menuRDao; + @Autowired + private ISysMenuDao sysMenuDao; + @Override @ApiOperation(value = "获取岗位树",notes = "根据父节点获取岗位树集合") public List findSysPositionTreeByParentId(long parentId) { @@ -257,82 +262,62 @@ public class CoreTreeService implements ICoreTreeService { } @Override - @ApiOperation(value = "父节点检查",notes = "检查菜单的父节点是否是当前节点的子节点") - public void doValidatorSysMenuParentId(SysMenu menu) { - findSysMenuChildrenTreePack(menu,0); - validatorSysMenuParentId(menu.getChildList(),menu.getParentId()); - } - - private void validatorSysPositionParentId(List list, Long parentId){ - if(list != null && list.size() > 0){ - for (SysPosition position : list) { - // 判断子集的ID 是否是 父节点ID - if(position.getId().equals(parentId) || position.getId().equals(position.getParentId())){ - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("上级岗位不能为子岗位") - .setErrorSolution("请重新操作") - .build(); - } + public void findSysMenuChildrenTreeByRoleIdPack(SysMenu parent, Long roleId, int step) { + ++step; + List childList = sysMenuDao.findByParentIdAndRoleId(parent.getId(),roleId); - validatorSysPositionParentId(position.getChildList(),parentId); + if (childList.size() > 0) { //说明有子集 + for (SysMenu child : childList) { + findSysMenuChildrenTreeByRoleIdPack(child, roleId,step); } } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); } - private void validatorSysDepartmentParentId(List list, Long parentId){ - if(list != null && list.size() > 0){ - for (SysDepartment department : list) { - // 判断子集的ID 是否是 父节点ID - if(department.getId().equals(parentId) || department.getId().equals(department.getParentId())){ - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("上级部门不能为子部门") - .setErrorSolution("请重新操作") - .build(); - } + @Override + public void findSysMenuChildrenTreeByUserIdPack(SysMenu parent, Long userId, int step) { + ++step; + List childList = sysMenuDao.findByParentIdAndUserId(parent.getId(),userId); - validatorSysDepartmentParentId(department.getChildList(),parentId); + if (childList.size() > 0) { //说明有子集 + for (SysMenu child : childList) { + findSysMenuChildrenTreeByUserIdPack(child, userId,step); } } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); } - private void validatorSysOrganizeParentId(List list, Long parentId){ - if(list != null && list.size() > 0){ - for (SysOrganize organize : list) { - // 判断子集的ID 是否是 父节点ID - if(organize.getId().equals(parentId) || organize.getId().equals(organize.getParentId())){ - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("上级部门不能为子部门") - .setErrorSolution("请重新操作") - .build(); + @Override + public void findMemSysMenuChildrenTreeByUserIdPack(SysMenu parent,List cacheMenuList, int step) { + ++step; + List childList = new ArrayList<>(); + if(cacheMenuList != null && cacheMenuList.size() > 0){ + for (SysMenu menu : cacheMenuList) { + if(menu.getParentId().equals(parent.getId())){ + childList.add(menu); } - - validatorSysOrganizeParentId(organize.getChildList(),parentId); } } - } - - private void validatorSysMenuParentId(List list, Long parentId){ - if(list != null && list.size() > 0){ - for (SysMenu menu : list) { - // 判断子集的ID 是否是 父节点ID - if(menu.getId().equals(parentId) || menu.getId().equals(menu.getParentId())){ - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("上级部门不能为子部门") - .setErrorSolution("请重新操作") - .build(); - } - validatorSysMenuParentId(menu.getChildList(),parentId); + if (childList.size() > 0) { //说明有子集 + for (SysMenu child : childList) { + findMemSysMenuChildrenTreeByUserIdPack(child,cacheMenuList,step); } } + + LOGGER.info("【{}】包含子集:{},步长:{}", parent.getName(), childList.size(), step); + parent.setChildList(childList); + } + + @Override + @ApiOperation(value = "父节点检查",notes = "检查菜单的父节点是否是当前节点的子节点") + public void doValidatorSysMenuParentId(SysMenu menu) { + findSysMenuChildrenTreePack(menu,0); + validatorSysMenuParentId(menu.getChildList(),menu.getParentId()); } @Override @@ -448,4 +433,77 @@ public class CoreTreeService implements ICoreTreeService { parent.setChildList(childList); } } + + private void validatorSysPositionParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysPosition position : list) { + // 判断子集的ID 是否是 父节点ID + if(position.getId().equals(parentId) || position.getId().equals(position.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级岗位不能为子岗位") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysPositionParentId(position.getChildList(),parentId); + } + } + } + + private void validatorSysDepartmentParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysDepartment department : list) { + // 判断子集的ID 是否是 父节点ID + if(department.getId().equals(parentId) || department.getId().equals(department.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级部门不能为子部门") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysDepartmentParentId(department.getChildList(),parentId); + } + } + } + + private void validatorSysOrganizeParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysOrganize organize : list) { + // 判断子集的ID 是否是 父节点ID + if(organize.getId().equals(parentId) || organize.getId().equals(organize.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级部门不能为子部门") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysOrganizeParentId(organize.getChildList(),parentId); + } + } + } + + private void validatorSysMenuParentId(List list, Long parentId){ + if(list != null && list.size() > 0){ + for (SysMenu menu : list) { + // 判断子集的ID 是否是 父节点ID + if(menu.getId().equals(parentId) || menu.getId().equals(menu.getParentId())){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("上级部门不能为子部门") + .setErrorSolution("请重新操作") + .build(); + } + + validatorSysMenuParentId(menu.getChildList(),parentId); + } + } + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java index 5f28624..be34b81 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMenuService.java @@ -176,6 +176,12 @@ public class SysMenuService implements ISysMenuService { } @Override + @ApiOperation(value = "查询菜单信息",notes = "根据父节点 ID 查询所有菜单信息") + public List findSysMenuByParentId(Long parentId) { + return sysMenuRDao.findByProperty(new String[]{"parentId"},new Object[]{parentId}); + } + + @Override @ApiOperation(value = "查询菜单信息",notes = "根据ID查询菜单信息") public SysMenu getSysMenuById(Long id) { LOGGER.info("系统功能 SYS_MENU find id:{}", id); 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 3783b59..5a4257a 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 @@ -1,10 +1,12 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.core.api.iservice.busi.ICoreTreeService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.platform.common.tool.SerializeTool; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -30,8 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * @Description : 平台用户业务 @@ -84,6 +85,12 @@ public class SysUserService implements ISysUserService { @Autowired private SysLogUserLoginRepository logUserLoginRDao; + @Autowired + private SysMenuRepository sysMenuRDao; + + @Autowired + private ICoreTreeService coreTreeService; + @Override @ApiOperation(value = "用户登录", notes = "用户登录功能实现") public SessionUser queryUserLogin(String loginName, String password, String languageCode) throws AuthenticationException { @@ -454,6 +461,7 @@ public class SysUserService implements ISysUserService { packSysUserRole(sessionUser,user); //封装用户角色信息 packSysUserMenu(sessionUser,user); //封装用户功能信息 +// packSysUserMenuTree(sessionUser, user); //封装用户功能Tree信息 packSysUserDepartment(sessionUser,userInfo); //封装用户部门信息 packSysUserPosition(sessionUser,userInfo); //封装用户岗位信息 @@ -514,6 +522,33 @@ public class SysUserService implements ISysUserService { sessionUser.setUser(user); } +// /** +// * 封装用户 菜单信息 +// * @param sessionUser +// * @param user +// * @return +// */ +// public List packSysUserMenuTree(SessionUser sessionUser, SysUser user){ +// List list = null; +// try { +// LOGGER.debug("平台用户 SYS_USER user id :{}", user.getUserInfoId()); +// list = getSysMenuRootIds(user.getMenuList()); +// List copyList = (List) SerializeTool.deserialization(SerializeTool.serialization(user.getMenuList())); +// +// if(list != null && list.size() > 0){ +// for (SysMenu menu : list) { +// coreTreeService.findMemSysMenuChildrenTreeByUserIdPack(menu,copyList,0); +//// coreTreeService.findSysMenuChildrenTreeByUserIdPack(menu,user.getId(),0); +// } +// } +// }catch (Exception e){ +// LOGGER.error(" SysUser Peck Menu Tree information Error userId : {} Exception Message : {} " ,user.getUserInfoId(),e.getMessage()); +// e.printStackTrace(); +// } +// +// return list; +// } + /** * 封装用户 部门信息封装 * @param sessionUser @@ -574,4 +609,41 @@ public class SysUserService implements ISysUserService { } } + /** + * 获取集合中的Root Id + * @param menus + * @return + */ + private List getSysMenuRootIds(List menus){ + Map map = new HashMap<>(); + List result = new ArrayList<>(); + SysMenu parentMenu = null; + + // 获取所有顶级节点 ParentId 不存在的对象 + for (SysMenu menu : menus) { + parentMenu = map.get(menu.getParentId()); + if(parentMenu == null){ + for (SysMenu sysMenu : menus) { + if(sysMenu.getId().longValue() == menu.getParentId().longValue()){ + parentMenu = sysMenu; + } + } + } + map.put(menu.getParentId(),parentMenu); + } + + // 封装返回对象 + for (Long parentId : map.keySet()) { + if(map.get(parentId) == null){ + for (SysMenu sysMenu : menus) { + if(sysMenu.getParentId().longValue() == parentId.longValue()){ + result.add(sysMenu); + } + } + } + } + + return result; + } + } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index a20c70a..ce37a0f 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -26,7 +26,7 @@ filter.shiro.admin.loginuri = /salogin filter.shiro.saadmin.loginuri = /salogin #用户授权过滤路径 -filter.shiro.user.filteruri = /operate/* +filter.shiro.user.filteruri = /impp/operate/** #用户授权过滤路径 filter.shiro.admin.filteruri = /adoperate/* #用户授权过滤路径 diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties b/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties index c44a5d0..07fc220 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-prod.properties @@ -21,7 +21,7 @@ filter.shiro.admin.loginuri = /salogin filter.shiro.saadmin.loginuri = /salogin #用户授权过滤路径 -filter.shiro.user.filteruri = /operate/* +filter.shiro.user.filteruri = /impp/** #用户授权过滤路径 filter.shiro.admin.filteruri = /adoperate/* #用户授权过滤路径 diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties index dc8c7ee..3da4b58 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-test.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-test.properties @@ -26,7 +26,7 @@ filter.shiro.admin.loginuri = /salogin filter.shiro.saadmin.loginuri = /salogin #用户授权过滤路径 -filter.shiro.user.filteruri = /operate/* +filter.shiro.user.filteruri = /impp/** #用户授权过滤路径 filter.shiro.admin.filteruri = /adoperate/* #用户授权过滤路径