Explorar o código

优化递归子节点

RuoYi %!s(int64=5) %!d(string=hai) anos
pai
achega
6b25828113

+ 1 - 7
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -269,13 +269,7 @@ public class SysDeptServiceImpl implements ISysDeptService
269 269
         {
270 270
             if (hasChild(list, tChild))
271 271
             {
272
-                // 判断是否有子节点
273
-                Iterator<SysDept> it = childList.iterator();
274
-                while (it.hasNext())
275
-                {
276
-                    SysDept n = (SysDept) it.next();
277
-                    recursionFn(list, n);
278
-                }
272
+                recursionFn(list, tChild);
279 273
             }
280 274
         }
281 275
     }

+ 11 - 12
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

@@ -178,14 +178,19 @@ public class SysMenuServiceImpl implements ISysMenuService
178 178
     public List<SysMenu> buildMenuTree(List<SysMenu> menus)
179 179
     {
180 180
         List<SysMenu> returnList = new ArrayList<SysMenu>();
181
+        List<Long> tempList = new ArrayList<Long>();
182
+        for (SysMenu dept : menus)
183
+        {
184
+            tempList.add(dept.getMenuId());
185
+        }
181 186
         for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
182 187
         {
183
-            SysMenu t = (SysMenu) iterator.next();
184
-            // 根据传入的某个父节点ID,遍历该父节点的所有子节点
185
-            if (t.getParentId() == 0)
188
+            SysMenu menu = (SysMenu) iterator.next();
189
+            // 如果是顶级节点, 遍历该父节点的所有子节点
190
+            if (!tempList.contains(menu.getParentId()))
186 191
             {
187
-                recursionFn(menus, t);
188
-                returnList.add(t);
192
+                recursionFn(menus, menu);
193
+                returnList.add(menu);
189 194
             }
190 195
         }
191 196
         if (returnList.isEmpty())
@@ -406,13 +411,7 @@ public class SysMenuServiceImpl implements ISysMenuService
406 411
         {
407 412
             if (hasChild(list, tChild))
408 413
             {
409
-                // 判断是否有子节点
410
-                Iterator<SysMenu> it = childList.iterator();
411
-                while (it.hasNext())
412
-                {
413
-                    SysMenu n = (SysMenu) it.next();
414
-                    recursionFn(list, n);
415
-                }
414
+                recursionFn(list, tChild);
416 415
             }
417 416
         }
418 417
     }