diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/SysAppService.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/SysAppService.java index 80810a647..bf728351a 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/SysAppService.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/SysAppService.java @@ -3,10 +3,12 @@ package cn.stylefeng.roses.kernel.sys.modular.app.service; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp; import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest; +import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserAppInfo; import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Set; /** * 系统应用 服务类 @@ -88,4 +90,14 @@ public interface SysAppService extends IService { */ List getAppList(); + /** + * 根据应用id获取应用的名称信息,并且按应用的排序字段进行排序 + *

+ * 一般用在用户登录后,获取首页应用信息 + * + * @author fengshuonan + * @since 2023/6/19 22:30 + */ + List getIndexUserAppList(Set appIds); + } \ No newline at end of file diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/impl/SysAppServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/impl/SysAppServiceImpl.java index 4e845f6ce..f9bbc987d 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/impl/SysAppServiceImpl.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/app/service/impl/SysAppServiceImpl.java @@ -14,6 +14,7 @@ import cn.stylefeng.roses.kernel.sys.modular.app.enums.SysAppExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.app.mapper.SysAppMapper; import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest; import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService; +import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserAppInfo; import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail; import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -96,7 +97,8 @@ public class SysAppServiceImpl extends ServiceImpl impleme LambdaQueryWrapper wrapper = createWrapper(sysAppRequest); // 只查询有用的列 - wrapper.select(SysApp::getAppId, SysApp::getAppName, SysApp::getAppCode, SysApp::getAppIcon, SysApp::getStatusFlag, SysApp::getAppSort, BaseEntity::getCreateTime); + wrapper.select(SysApp::getAppId, SysApp::getAppName, SysApp::getAppCode, SysApp::getAppIcon, SysApp::getStatusFlag, + SysApp::getAppSort, BaseEntity::getCreateTime); Page sysAppPage = this.page(PageFactory.defaultPage(), wrapper); return PageResultFactory.createPageResult(sysAppPage); @@ -118,13 +120,41 @@ public class SysAppServiceImpl extends ServiceImpl impleme // 结果转化为指定格式 ArrayList appGroupDetails = new ArrayList<>(); for (SysApp sysApp : appList) { - AppGroupDetail appGroupDetail = new AppGroupDetail(sysApp.getAppId(), sysApp.getAppName(), sysApp.getAppIcon(), sysApp.getRemark()); + AppGroupDetail appGroupDetail = new AppGroupDetail(sysApp.getAppId(), sysApp.getAppName(), sysApp.getAppIcon(), + sysApp.getRemark()); appGroupDetails.add(appGroupDetail); } return appGroupDetails; } + @Override + public List getIndexUserAppList(Set appIds) { + + if (ObjectUtil.isEmpty(appIds)) { + return new ArrayList<>(); + } + + LambdaQueryWrapper sysAppLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysAppLambdaQueryWrapper.in(SysApp::getAppId, appIds); + sysAppLambdaQueryWrapper.select(SysApp::getAppId, SysApp::getAppName); + sysAppLambdaQueryWrapper.orderByAsc(SysApp::getAppSort); + + List sysAppList = this.list(sysAppLambdaQueryWrapper); + + // 获取应用详情 + ArrayList indexUserAppInfos = new ArrayList<>(); + for (SysApp sysApp : sysAppList) { + IndexUserAppInfo indexUserAppInfo = new IndexUserAppInfo(); + indexUserAppInfo.setAppId(sysApp.getAppId()); + indexUserAppInfo.setAppName(sysApp.getAppName()); + indexUserAppInfo.setCurrentSelectFlag(false); + indexUserAppInfos.add(indexUserAppInfo); + } + + return indexUserAppInfos; + } + @Override public List findList(SysAppRequest sysAppRequest) { LambdaQueryWrapper wrapper = this.createWrapper(sysAppRequest); diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java index 277f32626..c373836e6 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java @@ -9,6 +9,8 @@ import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi; import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; +import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService; +import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserAppInfo; import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserOrgInfo; import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UserIndexInfo; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu; @@ -55,6 +57,9 @@ public class UserIndexInfoService { @Resource private SysMenuOptionsService sysMenuOptionsService; + @Resource + private SysAppService sysAppService; + /** * 获取用户首页信息 * @@ -76,9 +81,11 @@ public class UserIndexInfoService { this.fillUserOrgInfo(loginUser, userIndexInfo); // 3. 获取用户的权限编码集合 - this.fillUserPermissionCodeList(loginUser, userIndexInfo); + ArrayList userMenuList = new ArrayList<>(); + this.fillUserPermissionCodeList(loginUser, userIndexInfo, userMenuList); - // 4. 获取用户的当前登录App和菜单 + // 4. 获取用户的当前登录App + this.fillUserAppList(loginUser, userIndexInfo, userMenuList); // 5. 获取菜单和路由的appId映射关系 @@ -154,6 +161,10 @@ public class UserIndexInfoService { if (currentOrgId == null) { for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) { indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag()); + + if (indexUserOrgInfo.getMainFlag()) { + // todo 更新当前用户的缓存 updateSession + } } } // 如果有激活的组织机构 @@ -173,7 +184,7 @@ public class UserIndexInfoService { * @author fengshuonan * @since 2023/6/19 12:38 */ - private void fillUserPermissionCodeList(LoginUser loginUser, UserIndexInfo userIndexInfo) { + private void fillUserPermissionCodeList(LoginUser loginUser, UserIndexInfo userIndexInfo, List userMenuList) { Long userId = loginUser.getUserId(); @@ -192,8 +203,8 @@ public class UserIndexInfoService { HashSet permissionCodeList = new HashSet<>(); // 获取菜单对应的菜单编码集合 - List menuInfoList = sysMenuService.getIndexMenuInfoList(menuIdList); - Set menuCodeList = menuInfoList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet()); + userMenuList = sysMenuService.getIndexMenuInfoList(menuIdList); + Set menuCodeList = userMenuList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet()); permissionCodeList.addAll(menuCodeList); // 获取功能对应的功能编码集合 @@ -203,4 +214,37 @@ public class UserIndexInfoService { userIndexInfo.setPermissionCodeList(permissionCodeList); } + /** + * 填充当前用户的应用列表和菜单信息 + * + * @author fengshuonan + * @since 2023/6/19 22:25 + */ + private void fillUserAppList(LoginUser loginUser, UserIndexInfo userIndexInfo, List userMenuList) { + + if (ObjectUtil.isEmpty(userMenuList)) { + return; + } + + // 先统计用户有多少个应用 + Set userAppIds = userMenuList.stream().map(SysMenu::getAppId).collect(Collectors.toSet()); + + // 查询这些应用的应用名称,并且按应用的顺序进行排序 + List indexUserAppList = sysAppService.getIndexUserAppList(userAppIds); + + // 判断当前用户是否有绑定的应用id + // 如果没绑定的,则默认选中第一个 + if (ObjectUtil.isEmpty(loginUser.getCurrentAppId())) { + indexUserAppList.get(0).setCurrentSelectFlag(true); + } else { + for (IndexUserAppInfo indexUserAppInfo : indexUserAppList) { + if (indexUserAppInfo.getAppId().equals(loginUser.getCurrentAppId())) { + indexUserAppInfo.setCurrentSelectFlag(true); + } + } + } + + userIndexInfo.setUserAppInfoList(indexUserAppList); + } + }