From 92774a4522fa30003970eb6430e7df4eb3fd2cad Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期一, 17 十一月 2025 19:51:05 +0800
Subject: [PATCH] 菜单处理

---
 ruoyi-admin/src/test/java/com/ruoyi/web/test/BaseTest.java                       |  114 ++++++++++++++++++++++++--------------
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java            |    4 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java |   39 +++++++++++-
 ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml                  |    7 ++
 4 files changed, 117 insertions(+), 47 deletions(-)

diff --git a/ruoyi-admin/src/test/java/com/ruoyi/web/test/BaseTest.java b/ruoyi-admin/src/test/java/com/ruoyi/web/test/BaseTest.java
index 643a5c8..75f1405 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/web/test/BaseTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/web/test/BaseTest.java
@@ -188,8 +188,14 @@
 			"        \"path\": \"/community/communityMap\",\n" +
 			"        \"children\": [\n" +
 			"          {\n" +
-			"            \"name\": \"编辑\",\n" +
-			"            \"path\": \"edit\"\n" +
+			"            \"name\": \"社区地图管理\",\n" +
+			"            \"path\": \"/community/communityMap\",\n" +
+			"            \"children\": [\n" +
+			"              {\n" +
+			"                \"name\": \"编辑\",\n" +
+			"                \"path\": \"edit\"\n" +
+			"              }\n" +
+			"            ]\n" +
 			"          }\n" +
 			"        ]\n" +
 			"      },\n" +
@@ -198,16 +204,22 @@
 			"        \"path\": \"/community/pointPersonClass\",\n" +
 			"        \"children\": [\n" +
 			"          {\n" +
-			"            \"name\": \"新增\",\n" +
-			"            \"path\": \"add\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"编辑\",\n" +
-			"            \"path\": \"edit\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"删除\",\n" +
-			"            \"path\": \"delete\"\n" +
+			"            \"name\": \"重点人员分类\",\n" +
+			"            \"path\": \"/community/pointPersonClass\",\n" +
+			"            \"children\": [\n" +
+			"              {\n" +
+			"                \"name\": \"新增\",\n" +
+			"                \"path\": \"add\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"编辑\",\n" +
+			"                \"path\": \"edit\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"删除\",\n" +
+			"                \"path\": \"delete\"\n" +
+			"              }\n" +
+			"            ]\n" +
 			"          }\n" +
 			"        ]\n" +
 			"      },\n" +
@@ -216,20 +228,26 @@
 			"        \"path\": \"/community/pointPersonData\",\n" +
 			"        \"children\": [\n" +
 			"          {\n" +
-			"            \"name\": \"新增\",\n" +
-			"            \"path\": \"add\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"编辑\",\n" +
-			"            \"path\": \"edit\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"删除\",\n" +
-			"            \"path\": \"delete\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"导入\",\n" +
-			"            \"path\": \"import\"\n" +
+			"            \"name\": \"重点人员数据管理\",\n" +
+			"            \"path\": \"/community/pointPersonData\",\n" +
+			"            \"children\": [\n" +
+			"              {\n" +
+			"                \"name\": \"新增\",\n" +
+			"                \"path\": \"add\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"编辑\",\n" +
+			"                \"path\": \"edit\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"删除\",\n" +
+			"                \"path\": \"delete\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"导入\",\n" +
+			"                \"path\": \"import\"\n" +
+			"              }\n" +
+			"            ]\n" +
 			"          }\n" +
 			"        ]\n" +
 			"      },\n" +
@@ -238,20 +256,26 @@
 			"        \"path\": \"/community/gridPersonnel\",\n" +
 			"        \"children\": [\n" +
 			"          {\n" +
-			"            \"name\": \"新增\",\n" +
-			"            \"path\": \"add\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"编辑\",\n" +
-			"            \"path\": \"edit\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"删除\",\n" +
-			"            \"path\": \"delete\"\n" +
-			"          },\n" +
-			"          {\n" +
-			"            \"name\": \"导入\",\n" +
-			"            \"path\": \"import\"\n" +
+			"            \"name\": \"社区网格人员管理\",\n" +
+			"            \"path\": \"/community/gridPersonnel\",\n" +
+			"            \"children\": [\n" +
+			"              {\n" +
+			"                \"name\": \"新增\",\n" +
+			"                \"path\": \"add\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"编辑\",\n" +
+			"                \"path\": \"edit\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"删除\",\n" +
+			"                \"path\": \"delete\"\n" +
+			"              },\n" +
+			"              {\n" +
+			"                \"name\": \"导入\",\n" +
+			"                \"path\": \"import\"\n" +
+			"              }\n" +
+			"            ]\n" +
 			"          }\n" +
 			"        ]\n" +
 			"      },\n" +
@@ -260,8 +284,14 @@
 			"        \"path\": \"/community/communityProfile\",\n" +
 			"        \"children\": [\n" +
 			"          {\n" +
-			"            \"name\": \"编辑\",\n" +
-			"            \"path\": \"edit\"\n" +
+			"            \"name\": \"社区概况\",\n" +
+			"            \"path\": \"/community/communityProfile\",\n" +
+			"            \"children\": [\n" +
+			"              {\n" +
+			"                \"name\": \"编辑\",\n" +
+			"                \"path\": \"edit\"\n" +
+			"              }\n" +
+			"            ]\n" +
 			"          }\n" +
 			"        ]\n" +
 			"      }\n" +
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
index 39b086e..5c14d52 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.mapper;
 
 import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.system.domain.SysRoleMenu;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -132,4 +133,7 @@
 
     List<SysMenu> selectList();
 
+    List<SysRoleMenu> selectRoleMenuByRoleId(@Param("roleId")Long roleId);
+
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index b4855e9..7f1f50c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -19,6 +19,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -542,13 +543,43 @@
     public List<SysMenu> roleInfoFromUserId(Long userId) {
         SysRole sysRole = roleMapper.selectRoleByUserId(userId);
         // 获取当前角色的菜单列表
-        List<SysMenu> menus = menuMapper.selectListByRoleId(sysRole.getRoleId());
-        if(menus.size()==0){
+        List<SysRoleMenu> roleMenus = menuMapper.selectRoleMenuByRoleId(sysRole.getRoleId());
+        if(CollectionUtils.isEmpty(roleMenus)){
             return new ArrayList<>();
         }
-        List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
+        List<Long> menusId = roleMenus.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList());
         // 获取当前的权限菜单(有层级)
-        return this.getMenuLevelList(menusId);
+        return this.getResourcesLevelList(menusId);
+    }
+
+    public List<SysMenu> getResourcesLevelList(List<Long> menusId) {
+        //获取当前的权限菜单
+        List<SysMenu> allResources = menuMapper.getAllInIds(menusId);
+        SysMenu item;
+        //获取根节点的集合
+        List<SysMenu> root = new ArrayList<>();
+        Map<Long, SysMenu> tempMap = new HashMap<>(3);
+        //子节点集合
+        SysMenu parent;
+        for (SysMenu resources : allResources) {
+            item = com.ruoyi.system.utils.util.SpringUtils.beanCopy(resources, SysMenu.class);
+            //每次循环都将集合重新循环添加到父集合中
+            tempMap.put(resources.getMenuId(), item);
+            parent = tempMap.get(resources.getParentId());
+            if (Objects.nonNull(parent)) {
+                //父集合不为空时,获取下级集合
+                //子节点集合
+                parent.getChildren().add(item);
+                // 对子集排序,升序
+//                parent.getChildren().sort(comparing(SysMenu::getSort));
+            } else {
+                //根集合
+                root.add(item);
+                // 对根集合排序,升序
+//                root.sort(comparing(SysMenu::getSort));
+            }
+        }
+        return root;
     }
 
     @Override
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
index 17f8a9b..e261a12 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -181,8 +181,13 @@
 			create_time AS createTime
 		from sys_menu
 	</select>
+	<select id="selectRoleMenuByRoleId" resultType="com.ruoyi.system.domain.SysRoleMenu">
+		select srm.menu_id AS menuId, srm.role_id AS roleId
+		from sys_role_menu srm
+		WHERE srm.role_id = #{roleId}
+	</select>
 
-    <update id="updateMenu" parameterType="SysMenu">
+	<update id="updateMenu" parameterType="SysMenu">
 		update sys_menu
 		<set>
 			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>

--
Gitblit v1.7.1