【7.6.0】【sys】【首页用户详情接口】更新填充用户菜单信息

pull/57/head
fengshuonan 2023-06-19 22:57:36 +08:00
parent f2c547c066
commit f07f80fc86
4 changed files with 82 additions and 6 deletions

View File

@ -1,6 +1,8 @@
package cn.stylefeng.roses.kernel.sys.modular.login.pojo;
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
import lombok.Data;
import java.math.BigDecimal;
@ -13,7 +15,7 @@ import java.util.List;
* @since 2023/6/18 22:26
*/
@Data
public class IndexUserMenuInfo {
public class IndexUserMenuInfo implements AbstractTreeNode<IndexUserMenuInfo> {
/**
* id
@ -21,6 +23,12 @@ public class IndexUserMenuInfo {
@ChineseDescription("菜单id")
private Long menuId;
/**
* id
*/
@ChineseDescription("菜单父级id")
private Long menuParentId;
/**
*
*/
@ -75,4 +83,25 @@ public class IndexUserMenuInfo {
@ChineseDescription("子级菜单")
private List<IndexUserMenuInfo> children;
@Override
public String getNodeId() {
if (this.menuId == null) {
return null;
}
return this.menuId.toString();
}
@Override
public String getNodeParentId() {
if (this.menuParentId == null) {
return TreeConstants.DEFAULT_PARENT_ID.toString();
}
return this.menuParentId.toString();
}
@Override
public void setChildrenNodes(List<IndexUserMenuInfo> childrenNodes) {
this.children = childrenNodes;
}
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.sys.api.SysUserOrgServiceApi;
import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi;
import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi;
@ -11,6 +12,7 @@ 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.IndexUserMenuInfo;
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;
@ -87,10 +89,14 @@ public class UserIndexInfoService {
// 4. 获取用户的当前登录App
this.fillUserAppList(loginUser, userIndexInfo, userMenuList);
// 5. 填充用户的菜单信息
this.fillUserMenuList(loginUser, userIndexInfo, userMenuList);
// 5. 获取菜单和路由的appId映射关系
// 6. 获取菜单和路由的appId映射关系
// 6. 构建websocket url
// 7. 构建websocket url
// 8. 更新用户的session信息因为可能更新了loginUser中的值
return userIndexInfo;
}
@ -162,8 +168,9 @@ public class UserIndexInfoService {
for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) {
indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag());
// 更新用户的当前组织机构id
if (indexUserOrgInfo.getMainFlag()) {
// todo 更新当前用户的缓存 updateSession
loginUser.setCurrentOrgId(indexUserOrgInfo.getOrgId());
}
}
}
@ -236,6 +243,8 @@ public class UserIndexInfoService {
// 如果没绑定的,则默认选中第一个
if (ObjectUtil.isEmpty(loginUser.getCurrentAppId())) {
indexUserAppList.get(0).setCurrentSelectFlag(true);
// 更新用户的当前应用id
loginUser.setCurrentAppId(indexUserAppList.get(0).getAppId());
} else {
for (IndexUserAppInfo indexUserAppInfo : indexUserAppList) {
if (indexUserAppInfo.getAppId().equals(loginUser.getCurrentAppId())) {
@ -247,4 +256,39 @@ public class UserIndexInfoService {
userIndexInfo.setUserAppInfoList(indexUserAppList);
}
/**
*
*
* @author fengshuonan
* @since 2023/6/19 22:38
*/
private void fillUserMenuList(LoginUser loginUser, UserIndexInfo userIndexInfo, List<SysMenu> userMenuList) {
// 获取用户当前激活的应用
Long currentAppId = loginUser.getCurrentAppId();
// 从用户菜单中筛选这个应用下的所有菜单
List<SysMenu> sysUserMenus = userMenuList.stream().filter(i -> i.getAppId().equals(currentAppId)).collect(Collectors.toList());
// 菜单信息转化为首页需要的菜单信息
ArrayList<IndexUserMenuInfo> userIndexMenus = new ArrayList<>();
for (SysMenu menuItem : sysUserMenus) {
IndexUserMenuInfo indexUserMenuInfo = new IndexUserMenuInfo();
indexUserMenuInfo.setMenuId(menuItem.getMenuId());
indexUserMenuInfo.setMenuParentId(menuItem.getMenuParentId());
indexUserMenuInfo.setTitle(menuItem.getMenuName());
indexUserMenuInfo.setIcon(menuItem.getAntdvIcon());
indexUserMenuInfo.setHide(YesOrNotEnum.N.getCode().equals(menuItem.getAntdvVisible()));
indexUserMenuInfo.setActive(menuItem.getAntdvActiveUrl());
indexUserMenuInfo.setPath(menuItem.getAntdvRouter());
indexUserMenuInfo.setComponent(menuItem.getAntdvComponent());
indexUserMenuInfo.setSortNumber(menuItem.getMenuSort());
userIndexMenus.add(indexUserMenuInfo);
}
// 构造树形结构
List<IndexUserMenuInfo> indexUserMenuInfos = new DefaultTreeBuildFactory<IndexUserMenuInfo>().doTreeBuild(userIndexMenus);
userIndexInfo.setMenuList(indexUserMenuInfos);
}
}

View File

@ -105,7 +105,7 @@ public interface SysMenuService extends IService<SysMenu> {
List<SysMenu> getTotalMenuList();
/**
* idid
* ididid
* <p>
*
*

View File

@ -189,10 +189,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
sysMenuLambdaQueryWrapper.in(SysMenu::getMenuId, menuIdList);
// 查询指定的菜单内容
sysMenuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getAppId, SysMenu::getMenuCode, SysMenu::getMenuName,
sysMenuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getAppId, SysMenu::getMenuCode,
SysMenu::getMenuName,
SysMenu::getAntdvIcon, SysMenu::getAntdvVisible, SysMenu::getAntdvActiveUrl, SysMenu::getAntdvRouter,
SysMenu::getAntdvComponent, SysMenu::getMenuSort);
sysMenuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort);
return this.list(sysMenuLambdaQueryWrapper);
}