mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【首页用户详情接口】更新填充用户的应用信息
parent
71347cd90b
commit
f2c547c066
|
@ -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.db.api.pojo.page.PageResult;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
|
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.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 cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统应用 服务类
|
* 系统应用 服务类
|
||||||
|
@ -88,4 +90,14 @@ public interface SysAppService extends IService<SysApp> {
|
||||||
*/
|
*/
|
||||||
List<AppGroupDetail> getAppList();
|
List<AppGroupDetail> getAppList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据应用id获取应用的名称信息,并且按应用的排序字段进行排序
|
||||||
|
* <p>
|
||||||
|
* 一般用在用户登录后,获取首页应用信息
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/19 22:30
|
||||||
|
*/
|
||||||
|
List<IndexUserAppInfo> getIndexUserAppList(Set<Long> appIds);
|
||||||
|
|
||||||
}
|
}
|
|
@ -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.mapper.SysAppMapper;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest;
|
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.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.pojo.response.AppGroupDetail;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
@ -96,7 +97,8 @@ public class SysAppServiceImpl extends ServiceImpl<SysAppMapper, SysApp> impleme
|
||||||
LambdaQueryWrapper<SysApp> wrapper = createWrapper(sysAppRequest);
|
LambdaQueryWrapper<SysApp> 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<SysApp> sysAppPage = this.page(PageFactory.defaultPage(), wrapper);
|
Page<SysApp> sysAppPage = this.page(PageFactory.defaultPage(), wrapper);
|
||||||
return PageResultFactory.createPageResult(sysAppPage);
|
return PageResultFactory.createPageResult(sysAppPage);
|
||||||
|
@ -118,13 +120,41 @@ public class SysAppServiceImpl extends ServiceImpl<SysAppMapper, SysApp> impleme
|
||||||
// 结果转化为指定格式
|
// 结果转化为指定格式
|
||||||
ArrayList<AppGroupDetail> appGroupDetails = new ArrayList<>();
|
ArrayList<AppGroupDetail> appGroupDetails = new ArrayList<>();
|
||||||
for (SysApp sysApp : appList) {
|
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);
|
appGroupDetails.add(appGroupDetail);
|
||||||
}
|
}
|
||||||
|
|
||||||
return appGroupDetails;
|
return appGroupDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IndexUserAppInfo> getIndexUserAppList(Set<Long> appIds) {
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(appIds)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
LambdaQueryWrapper<SysApp> sysAppLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
sysAppLambdaQueryWrapper.in(SysApp::getAppId, appIds);
|
||||||
|
sysAppLambdaQueryWrapper.select(SysApp::getAppId, SysApp::getAppName);
|
||||||
|
sysAppLambdaQueryWrapper.orderByAsc(SysApp::getAppSort);
|
||||||
|
|
||||||
|
List<SysApp> sysAppList = this.list(sysAppLambdaQueryWrapper);
|
||||||
|
|
||||||
|
// 获取应用详情
|
||||||
|
ArrayList<IndexUserAppInfo> 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
|
@Override
|
||||||
public List<SysApp> findList(SysAppRequest sysAppRequest) {
|
public List<SysApp> findList(SysAppRequest sysAppRequest) {
|
||||||
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(sysAppRequest);
|
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(sysAppRequest);
|
||||||
|
|
|
@ -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.SysUserServiceApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO;
|
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.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.IndexUserOrgInfo;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UserIndexInfo;
|
import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UserIndexInfo;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
|
@ -55,6 +57,9 @@ public class UserIndexInfoService {
|
||||||
@Resource
|
@Resource
|
||||||
private SysMenuOptionsService sysMenuOptionsService;
|
private SysMenuOptionsService sysMenuOptionsService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysAppService sysAppService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户首页信息
|
* 获取用户首页信息
|
||||||
*
|
*
|
||||||
|
@ -76,9 +81,11 @@ public class UserIndexInfoService {
|
||||||
this.fillUserOrgInfo(loginUser, userIndexInfo);
|
this.fillUserOrgInfo(loginUser, userIndexInfo);
|
||||||
|
|
||||||
// 3. 获取用户的权限编码集合
|
// 3. 获取用户的权限编码集合
|
||||||
this.fillUserPermissionCodeList(loginUser, userIndexInfo);
|
ArrayList<SysMenu> userMenuList = new ArrayList<>();
|
||||||
|
this.fillUserPermissionCodeList(loginUser, userIndexInfo, userMenuList);
|
||||||
|
|
||||||
// 4. 获取用户的当前登录App和菜单
|
// 4. 获取用户的当前登录App
|
||||||
|
this.fillUserAppList(loginUser, userIndexInfo, userMenuList);
|
||||||
|
|
||||||
|
|
||||||
// 5. 获取菜单和路由的appId映射关系
|
// 5. 获取菜单和路由的appId映射关系
|
||||||
|
@ -154,6 +161,10 @@ public class UserIndexInfoService {
|
||||||
if (currentOrgId == null) {
|
if (currentOrgId == null) {
|
||||||
for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) {
|
for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) {
|
||||||
indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag());
|
indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag());
|
||||||
|
|
||||||
|
if (indexUserOrgInfo.getMainFlag()) {
|
||||||
|
// todo 更新当前用户的缓存 updateSession
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 如果有激活的组织机构
|
// 如果有激活的组织机构
|
||||||
|
@ -173,7 +184,7 @@ public class UserIndexInfoService {
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @since 2023/6/19 12:38
|
* @since 2023/6/19 12:38
|
||||||
*/
|
*/
|
||||||
private void fillUserPermissionCodeList(LoginUser loginUser, UserIndexInfo userIndexInfo) {
|
private void fillUserPermissionCodeList(LoginUser loginUser, UserIndexInfo userIndexInfo, List<SysMenu> userMenuList) {
|
||||||
|
|
||||||
Long userId = loginUser.getUserId();
|
Long userId = loginUser.getUserId();
|
||||||
|
|
||||||
|
@ -192,8 +203,8 @@ public class UserIndexInfoService {
|
||||||
HashSet<String> permissionCodeList = new HashSet<>();
|
HashSet<String> permissionCodeList = new HashSet<>();
|
||||||
|
|
||||||
// 获取菜单对应的菜单编码集合
|
// 获取菜单对应的菜单编码集合
|
||||||
List<SysMenu> menuInfoList = sysMenuService.getIndexMenuInfoList(menuIdList);
|
userMenuList = sysMenuService.getIndexMenuInfoList(menuIdList);
|
||||||
Set<String> menuCodeList = menuInfoList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet());
|
Set<String> menuCodeList = userMenuList.stream().map(SysMenu::getMenuCode).collect(Collectors.toSet());
|
||||||
permissionCodeList.addAll(menuCodeList);
|
permissionCodeList.addAll(menuCodeList);
|
||||||
|
|
||||||
// 获取功能对应的功能编码集合
|
// 获取功能对应的功能编码集合
|
||||||
|
@ -203,4 +214,37 @@ public class UserIndexInfoService {
|
||||||
userIndexInfo.setPermissionCodeList(permissionCodeList);
|
userIndexInfo.setPermissionCodeList(permissionCodeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 填充当前用户的应用列表和菜单信息
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/19 22:25
|
||||||
|
*/
|
||||||
|
private void fillUserAppList(LoginUser loginUser, UserIndexInfo userIndexInfo, List<SysMenu> userMenuList) {
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(userMenuList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 先统计用户有多少个应用
|
||||||
|
Set<Long> userAppIds = userMenuList.stream().map(SysMenu::getAppId).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 查询这些应用的应用名称,并且按应用的顺序进行排序
|
||||||
|
List<IndexUserAppInfo> 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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue