diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/AppServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/AppServiceApi.java index 9838ce677..fe79c47e5 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/AppServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/AppServiceApi.java @@ -76,11 +76,11 @@ public interface AppServiceApi { SysAppResult getAppInfoByAppCode(String appCode); /** - * 按顺序获取app的编码 + * 按顺序获取app的编码和名称 * * @author fengshuonan * @date 2022/4/6 22:34 */ - List getAppNameSorted(); + List getSortedApps(); } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/menu/SysMenuExceptionEnum.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/menu/SysMenuExceptionEnum.java index 06131169a..14312dedd 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/menu/SysMenuExceptionEnum.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/exception/enums/menu/SysMenuExceptionEnum.java @@ -44,7 +44,12 @@ public enum SysMenuExceptionEnum implements AbstractExceptionEnum { /** * 菜单不存在 */ - MENU_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "33", "菜单不存在,菜单id:{}"); + MENU_NOT_EXIST(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "33", "菜单不存在,菜单id:{}"), + + /** + * 无法获取菜单,所有应用已被禁用 + */ + CANT_FIND_APPS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "34", "无法获取菜单,所有应用已被禁用"); private final String errorCode; diff --git a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java index e03abf163..89b551402 100644 --- a/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java +++ b/kernel-s-system/system-business-app/src/main/java/cn/stylefeng/roses/kernel/system/modular/app/service/impl/SysAppServiceImpl.java @@ -35,7 +35,6 @@ import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict; import cn.stylefeng.roses.kernel.system.api.AppServiceApi; import cn.stylefeng.roses.kernel.system.api.MenuServiceApi; -import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.api.exception.enums.app.AppExceptionEnum; import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppRequest; import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppResult; @@ -265,11 +264,23 @@ public class SysAppServiceImpl extends ServiceImpl impleme } @Override - public List getAppNameSorted() { + public List getSortedApps() { LambdaQueryWrapper wrapper = this.createWrapper(new SysAppRequest()); + + // 只查询应用名称和应用编码 wrapper.select(SysApp::getAppName); + wrapper.select(SysApp::getAppCode); + + // 只查询启用的应用 + wrapper.eq(SysApp::getStatusFlag, StatusEnum.ENABLE.getCode()); + List list = this.list(wrapper); - return list.stream().map(SysApp::getAppName).collect(Collectors.toList()); + + return list.stream().map(i -> { + SysAppResult target = new SysAppResult(); + BeanUtil.copyProperties(i, target); + return target; + }).collect(Collectors.toList()); } /** diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java index 890db2a58..b2eea914e 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java @@ -157,11 +157,11 @@ public interface SysMenuService extends IService { /** * 获取当前用户的某个应用下的菜单 * - * @param appCode 应用编码 + * @param appCodeList 应用编码集合 * @param layuiVisibleFlag layui版本查询查询条件,如果穿true,则会带上layui_visible为Y的查询条件 * @author fengshuonan * @date 2020/12/27 18:11 */ - List getCurrentUserMenus(String appCode, Boolean layuiVisibleFlag); + List getCurrentUserMenus(List appCodeList, Boolean layuiVisibleFlag); } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java index adfff4d8e..c7314d532 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java @@ -27,7 +27,6 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; @@ -44,6 +43,7 @@ import cn.stylefeng.roses.kernel.system.api.MenuServiceApi; import cn.stylefeng.roses.kernel.system.api.RoleServiceApi; import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.api.exception.enums.menu.SysMenuExceptionEnum; +import cn.stylefeng.roses.kernel.system.api.pojo.app.SysAppResult; import cn.stylefeng.roses.kernel.system.api.pojo.login.v3.IndexMenuInfo; import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest; @@ -296,17 +296,22 @@ public class SysMenuServiceImpl extends ServiceImpl impl @Override public List getLeftMenusAntdv(SysMenuRequest sysMenuRequest) { + // 获取当前已经启用的应用,并且按排序字段排序的 + List appNameSorted = appServiceApi.getSortedApps(); + if (ObjectUtil.isEmpty(appNameSorted)) { + throw new ServiceException(SysMenuExceptionEnum.CANT_FIND_APPS); + } - // 不分应用查询菜单 - List currentUserMenus = this.getCurrentUserMenus(null, false); + // 查询菜单 + List appCodes = appNameSorted.stream().map(SysAppResult::getAppCode).collect(Collectors.toList()); + List currentUserMenus = this.getCurrentUserMenus(appCodes, false); - // 获取当前激活的应用 - List appNameSorted = appServiceApi.getAppNameSorted(); - - // 将菜单按应用编码分类,激活的应用放在最前边 + // 将菜单按应用编码分类 Map> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus); - return AntdMenusFactory.createTotalMenus(sortedUserMenus, appNameSorted); + // 获取应用名称集合,带顺序 + List appNames = appNameSorted.stream().map(SysAppResult::getAppName).collect(Collectors.toList()); + return AntdMenusFactory.createTotalMenus(sortedUserMenus, appNames); } @Override @@ -459,15 +464,15 @@ public class SysMenuServiceImpl extends ServiceImpl impl } @Override - public List getCurrentUserMenus(String appCode, Boolean layuiVisibleFlag) { + public List getCurrentUserMenus(List appCodeList, Boolean layuiVisibleFlag) { // 菜单查询条件 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode()).eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode()).orderByAsc(SysMenu::getMenuSort); // 如果应用编码不为空,则拼接应用编码 - if (StrUtil.isNotBlank(appCode)) { - queryWrapper.eq(SysMenu::getAppCode, appCode); + if (ObjectUtil.isNotEmpty(appCodeList)) { + queryWrapper.in(SysMenu::getAppCode, appCodeList); } // 如果是不分离版本,则筛选一下不需要显示的菜单 @@ -570,12 +575,13 @@ public class SysMenuServiceImpl extends ServiceImpl impl List currentUserMenus = this.getCurrentUserMenus(null, false); // 获取当前激活的应用 - List appNameSorted = appServiceApi.getAppNameSorted(); + List sortedApps = appServiceApi.getSortedApps(); + List appNames = sortedApps.stream().map(SysAppResult::getAppName).collect(Collectors.toList()); // 将菜单按应用编码分类,激活的应用放在最前边 Map> sortedUserMenus = AntdMenusFactory.sortUserMenusByAppCode(currentUserMenus); - return Antdv3MenusFactory.createTotalMenus(sortedUserMenus, appNameSorted); + return Antdv3MenusFactory.createTotalMenus(sortedUserMenus, appNames); } /**