From fc5cda9c324a91948dd964e91960623b41baf293 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 02 一月 2025 10:55:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java |   41 ++++++++++++++++++++++++++---------------
 1 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java
index a0663ce..1356fee 100644
--- a/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java
+++ b/medicalWaste-admin/src/main/java/com/sinata/web/controller/backend/system/SysMenuController.java
@@ -24,6 +24,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -47,24 +48,34 @@
         if (menus.size() == 0) {
             return AjaxResult.success(new ArrayList<>());
         }
-        // 第三级
-        List<SysMenu> s3 = menus.stream().filter(e -> e.getMenuType().equals("F")).collect(Collectors.toList());
-        // 第二级
-        List<SysMenu> s2 = menus.stream().filter(e -> e.getMenuType().equals("C")).collect(Collectors.toList());
         // 第一级
-        List<SysMenu> s1 = menus.stream().filter(e -> e.getMenuType().equals("M")).collect(Collectors.toList());
-
-        for (SysMenu menu : s2) {
-            List<SysMenu> collect = s3.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
-            menu.setChildren(collect);
-        }
-        for (SysMenu menu : s1) {
-            List<SysMenu> collect = s2.stream().filter(e -> e.getParentId().equals(menu.getMenuId())).collect(Collectors.toList());
-            menu.setChildren(collect);
-        }
-
+        List<SysMenu> s1 = menus.stream().filter(e -> e.getMenuType().equals("M") && e.getParentId().equals(0L)).collect(Collectors.toList());
+        // 构建以 parentId 为键的 Map
+        Map<Long, List<SysMenu>> menuMap = menus.stream()
+                .collect(Collectors.groupingBy(SysMenu::getParentId));
+        // 构建树形结构
+        buildMenuTree(menuMap, s1);
         return AjaxResult.success(s1);
     }
+
+    /**
+     * 封装树形层级
+     *
+     * @param menuMap
+     * @param s1
+     */
+    public void buildMenuTree(Map<Long, List<SysMenu>> menuMap, List<SysMenu> s1) {
+        for (SysMenu sysMenu : s1) {
+            // 获取当前菜单的子级
+            List<SysMenu> children = menuMap.getOrDefault(sysMenu.getMenuId(), new ArrayList<>());
+            sysMenu.setChildren(children);
+            //移除当前菜单
+            menuMap.remove(sysMenu.getMenuId());
+            // 递归设置子级菜单
+            buildMenuTree(menuMap, children);
+        }
+    }
+
     /**
      * 获取菜单列表
      */

--
Gitblit v1.7.1