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;
|
package cn.stylefeng.roses.kernel.sys.modular.login.pojo;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
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 lombok.Data;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
@ -13,7 +15,7 @@ import java.util.List;
|
||||||
* @since 2023/6/18 22:26
|
* @since 2023/6/18 22:26
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class IndexUserMenuInfo {
|
public class IndexUserMenuInfo implements AbstractTreeNode<IndexUserMenuInfo> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单id
|
* 菜单id
|
||||||
|
@ -21,6 +23,12 @@ public class IndexUserMenuInfo {
|
||||||
@ChineseDescription("菜单id")
|
@ChineseDescription("菜单id")
|
||||||
private Long menuId;
|
private Long menuId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单父级id
|
||||||
|
*/
|
||||||
|
@ChineseDescription("菜单父级id")
|
||||||
|
private Long menuParentId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单的名称
|
* 菜单的名称
|
||||||
*/
|
*/
|
||||||
|
@ -75,4 +83,25 @@ public class IndexUserMenuInfo {
|
||||||
@ChineseDescription("子级菜单")
|
@ChineseDescription("子级菜单")
|
||||||
private List<IndexUserMenuInfo> children;
|
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.context.LoginContext;
|
||||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
||||||
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
|
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.SysUserOrgServiceApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi;
|
import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi;
|
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.api.pojo.user.UserOrgDTO;
|
||||||
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.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.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;
|
||||||
|
@ -87,10 +89,14 @@ public class UserIndexInfoService {
|
||||||
// 4. 获取用户的当前登录App
|
// 4. 获取用户的当前登录App
|
||||||
this.fillUserAppList(loginUser, userIndexInfo, userMenuList);
|
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;
|
return userIndexInfo;
|
||||||
}
|
}
|
||||||
|
@ -162,8 +168,9 @@ public class UserIndexInfoService {
|
||||||
for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) {
|
for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) {
|
||||||
indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag());
|
indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag());
|
||||||
|
|
||||||
|
// 更新用户的当前组织机构id
|
||||||
if (indexUserOrgInfo.getMainFlag()) {
|
if (indexUserOrgInfo.getMainFlag()) {
|
||||||
// todo 更新当前用户的缓存 updateSession
|
loginUser.setCurrentOrgId(indexUserOrgInfo.getOrgId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,6 +243,8 @@ public class UserIndexInfoService {
|
||||||
// 如果没绑定的,则默认选中第一个
|
// 如果没绑定的,则默认选中第一个
|
||||||
if (ObjectUtil.isEmpty(loginUser.getCurrentAppId())) {
|
if (ObjectUtil.isEmpty(loginUser.getCurrentAppId())) {
|
||||||
indexUserAppList.get(0).setCurrentSelectFlag(true);
|
indexUserAppList.get(0).setCurrentSelectFlag(true);
|
||||||
|
// 更新用户的当前应用id
|
||||||
|
loginUser.setCurrentAppId(indexUserAppList.get(0).getAppId());
|
||||||
} else {
|
} else {
|
||||||
for (IndexUserAppInfo indexUserAppInfo : indexUserAppList) {
|
for (IndexUserAppInfo indexUserAppInfo : indexUserAppList) {
|
||||||
if (indexUserAppInfo.getAppId().equals(loginUser.getCurrentAppId())) {
|
if (indexUserAppInfo.getAppId().equals(loginUser.getCurrentAppId())) {
|
||||||
|
@ -247,4 +256,39 @@ public class UserIndexInfoService {
|
||||||
userIndexInfo.setUserAppInfoList(indexUserAppList);
|
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();
|
List<SysMenu> getTotalMenuList();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单对应的菜单编码,以及菜单id、应用id,菜单名称、菜单图标、菜单是否隐藏、菜单激活地址、菜单路由、组件路径、排序信息
|
* 获取菜单对应的菜单编码,以及菜单id、父级id,应用id,菜单名称、菜单图标、菜单是否隐藏、菜单激活地址、菜单路由、组件路径、排序信息
|
||||||
* <p>
|
* <p>
|
||||||
* 用在用户登录后,获取用户首页信息接口
|
* 用在用户登录后,获取用户首页信息接口
|
||||||
*
|
*
|
||||||
|
|
|
@ -189,10 +189,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||||
sysMenuLambdaQueryWrapper.in(SysMenu::getMenuId, menuIdList);
|
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::getAntdvIcon, SysMenu::getAntdvVisible, SysMenu::getAntdvActiveUrl, SysMenu::getAntdvRouter,
|
||||||
SysMenu::getAntdvComponent, SysMenu::getMenuSort);
|
SysMenu::getAntdvComponent, SysMenu::getMenuSort);
|
||||||
|
|
||||||
|
sysMenuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||||
|
|
||||||
return this.list(sysMenuLambdaQueryWrapper);
|
return this.list(sysMenuLambdaQueryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue