mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【首页用户详情接口】更新填充用户菜单信息
parent
f2c547c066
commit
f07f80fc86
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||
List<SysMenu> getTotalMenuList();
|
||||
|
||||
/**
|
||||
* 获取菜单对应的菜单编码,以及菜单id、应用id,菜单名称、菜单图标、菜单是否隐藏、菜单激活地址、菜单路由、组件路径、排序信息
|
||||
* 获取菜单对应的菜单编码,以及菜单id、父级id,应用id,菜单名称、菜单图标、菜单是否隐藏、菜单激活地址、菜单路由、组件路径、排序信息
|
||||
* <p>
|
||||
* 用在用户登录后,获取用户首页信息接口
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue