From 5e57de9b12ee136e45ce5754c7fe2e7eb12af05a Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 12 Jun 2026 18:35:45 +0800
Subject: [PATCH] 1
---
trading-order-sys/src/main/java/com/yami/trading/sys/service/impl/SysMenuServiceImpl.java | 97 +++++++++++++++++++-----------------------------
1 files changed, 38 insertions(+), 59 deletions(-)
diff --git a/trading-order-sys/src/main/java/com/yami/trading/sys/service/impl/SysMenuServiceImpl.java b/trading-order-sys/src/main/java/com/yami/trading/sys/service/impl/SysMenuServiceImpl.java
index 8162316..9f7c97a 100644
--- a/trading-order-sys/src/main/java/com/yami/trading/sys/service/impl/SysMenuServiceImpl.java
+++ b/trading-order-sys/src/main/java/com/yami/trading/sys/service/impl/SysMenuServiceImpl.java
@@ -19,7 +19,6 @@
import com.yami.trading.sys.model.SysMenu;
import com.yami.trading.sys.service.SysMenuService;
import lombok.AllArgsConstructor;
-import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -38,15 +37,12 @@
@Override
public List<SysMenu> listMenuByUserId(Long userId,String appType) {
- // 用户的所有菜单信息
List<SysMenu> sysMenus ;
- //系统管理员,拥有最高权限
if(userId == Constant.SUPER_ADMIN_ID||userId == Constant.SUPER_ROOT_ID){
sysMenus = sysMenuMapper.listMenu(appType);
}else {
sysMenus = sysMenuMapper.listMenuByUserId(userId,appType);
- //记录全勾选
Map<Long,SysMenu> mapSysMenu = new HashMap<>();
for (SysMenu sysMenu : sysMenus) {
mapSysMenu.put(sysMenu.getMenuId(), sysMenu);
@@ -54,7 +50,6 @@
List<Long> bigIntArrays = new Vector<>();
- //权限
List<SysMenu> sysMenus3 = sysMenuMapper.queryAllPerms2(userId);
for (SysMenu sysMenu : sysMenus3) {
if (!mapSysMenu.containsKey(sysMenu.getParentId())
@@ -64,88 +59,72 @@
}
}
- //补充
if(!bigIntArrays.isEmpty()){
List<SysMenu> sysMenus2 = sysMenuMapper.listMenuByUserId2(bigIntArrays,appType);
for (SysMenu sysMenu : sysMenus2) {
mapSysMenu.put(sysMenu.getMenuId(), sysMenu);
- //权限按钮的父节点
- if (!mapSysMenu.containsKey(sysMenu.getParentId())
- && !bigIntArrays.contains(sysMenu.getParentId())
- && sysMenu.getParentId() != 0) {
- bigIntArrays.add(sysMenu.getParentId());
- }
}
sysMenus.addAll(sysMenus2);
}
- bigIntArrays.clear();
- //子菜单
- for (SysMenu sysMenu : sysMenus) {
- if (!mapSysMenu.containsKey(sysMenu.getParentId())
- && !bigIntArrays.contains(sysMenu.getParentId())
- && sysMenu.getParentId() != 0) {
- bigIntArrays.add(sysMenu.getParentId());
- }
- }
-
- //补充
- if(!bigIntArrays.isEmpty()){
- List<SysMenu> sysMenus2 = sysMenuMapper.listMenuByUserId2(bigIntArrays,appType);
-// for (SysMenu sysMenu : sysMenus2) {
-// mapSysMenu.put(sysMenu.getMenuId(), sysMenu);
-// //权限按钮的父节点
-// if (!mapSysMenu.containsKey(sysMenu.getParentId())
-// && !bigIntArrays.contains(sysMenu.getParentId())
-// && sysMenu.getParentId() != 0) {
-// bigIntArrays.add(sysMenu.getParentId());
-// }
-// }
- sysMenus.addAll(sysMenus2);
- }
-
-
-
-
-
+ appendMissingMenuAncestors(sysMenus, mapSysMenu, appType);
}
Map<Long, List<SysMenu>> sysMenuLevelMap = sysMenus.stream()
.sorted(Comparator.comparing(SysMenu::getOrderNum))
.collect(Collectors.groupingBy(SysMenu::getParentId));
- //System.out.println("sys = " +sysMenuLevelMap.values());
-
- // 一级菜单
List<SysMenu> rootMenu = sysMenuLevelMap.get(0L);
if (CollectionUtil.isEmpty(rootMenu)) {
return Collections.emptyList();
}
- // 二级菜单
for (SysMenu sysMenu : rootMenu) {
- sysMenu.setList(sysMenuLevelMap.get(sysMenu.getMenuId()));
- }
-
- // 三级菜单
- for (SysMenu sysMenu : rootMenu) {
- List list = sysMenu.getList();
- if(list != null){
- for (Object object : list) {
- SysMenu sysMenu2 = (SysMenu)object;
- sysMenu2.setList(sysMenuLevelMap.get(sysMenu2.getMenuId()));
- }
- }
+ attachMenuChildren(sysMenu, sysMenuLevelMap);
}
return rootMenu;
}
+ private void appendMissingMenuAncestors(List<SysMenu> sysMenus, Map<Long, SysMenu> mapSysMenu, String appType) {
+ while (true) {
+ List<Long> missingParents = new ArrayList<>();
+ for (SysMenu sysMenu : sysMenus) {
+ Long parentId = sysMenu.getParentId();
+ if (parentId != null && parentId != 0
+ && !mapSysMenu.containsKey(parentId)
+ && !missingParents.contains(parentId)) {
+ missingParents.add(parentId);
+ }
+ }
+ if (missingParents.isEmpty()) {
+ return;
+ }
+ List<SysMenu> parents = sysMenuMapper.listMenuByUserId2(missingParents, appType);
+ if (CollectionUtil.isEmpty(parents)) {
+ return;
+ }
+ for (SysMenu parent : parents) {
+ mapSysMenu.put(parent.getMenuId(), parent);
+ }
+ sysMenus.addAll(parents);
+ }
+ }
+
+ private void attachMenuChildren(SysMenu menu, Map<Long, List<SysMenu>> sysMenuLevelMap) {
+ List<SysMenu> children = sysMenuLevelMap.get(menu.getMenuId());
+ menu.setList(children);
+ if (CollectionUtil.isEmpty(children)) {
+ return;
+ }
+ for (SysMenu child : children) {
+ attachMenuChildren(child, sysMenuLevelMap);
+ }
+ }
+
@Override
public void deleteMenuAndRoleMenu(Long menuId){
- //删除菜单
this.removeById(menuId);
- //删除菜单与角色关联
sysRoleMenuMapper.deleteByMenuId(menuId);
}
--
Gitblit v1.9.3