Просмотр исходного кода

MenuServiceImpl 中引入一个 getSubMenus 方法, 获取 dir menu 的所有子 menu(包括子 menu 的子 menu)

reghao 1 год назад
Родитель
Сommit
36deac6e88

+ 35 - 19
web/src/main/java/cn/reghao/devops/web/account/service/impl/MenuServiceImpl.java

@@ -138,16 +138,8 @@ public class MenuServiceImpl implements MenuService {
         deletedMenus.add(menu);
         String type = menu.getType();
         if (type.equals(MenuType.dir.name())) {
-            List<Menu> list1 = menuRepository.findByPid(menu.getId());
+            List<Menu> list1 = getSubMenus(menu.getId());
             deletedMenus.addAll(list1);
-            Map<String, List<Menu>> map =  list1.stream().collect(Collectors.groupingBy(Menu::getType));
-            List<Menu> dirMenus = map.get(MenuType.dir.name());
-            if (dirMenus != null) {
-                dirMenus.forEach(dirMenu -> {
-                    List<Menu> list2 = menuRepository.findByPid(dirMenu.getId());
-                    deletedMenus.addAll(list2);
-                });
-            }
         }
 
         // 删除 Role 关联的 Menu
@@ -165,6 +157,28 @@ public class MenuServiceImpl implements MenuService {
         return Result.result(ResultStatus.SUCCESS);
     }
 
+    /**
+     * 获取某个 dir menu 的所有子 menu(包括子 menu 的子 menu)
+     *
+     * @param
+     * @return
+     * @date 2024-08-01 09:23:42
+     */
+    private List<Menu> getSubMenus(int menuId) {
+        List<Menu> list1 = menuRepository.findByPid(menuId);
+        List<Menu> results = new ArrayList<>(list1);
+        Map<String, List<Menu>> map =  list1.stream().collect(Collectors.groupingBy(Menu::getType));
+        List<Menu> dirMenus = map.get(MenuType.dir.name());
+        if (dirMenus != null) {
+            dirMenus.forEach(dirMenu -> {
+                List<Menu> list2 = menuRepository.findByPid(dirMenu.getId());
+                results.addAll(list2);
+            });
+        }
+
+        return results;
+    }
+
     @Override
     public List<MenuTree> getMenusByStatus(Boolean enabled) {
         List<Menu> menuList = menuRepository.findAllByEnabled(enabled);
@@ -205,20 +219,22 @@ public class MenuServiceImpl implements MenuService {
     }
 
     public void updateMenusStatus(boolean status, List<Integer> menuIds) {
-        Map<String, List<Menu>> map = menuIds.stream()
+        List<Menu> results = menuIds.stream()
                 .map(menuId -> menuRepository.findById(menuId).orElse(null))
                 .filter(Objects::nonNull)
-                .collect(Collectors.groupingBy(Menu::getType));
+                .collect(Collectors.toList());
 
-        List<Menu> dirMenus = map.get(MenuType.dir.name());
-        if (dirMenus != null) {
-        }
+        List<Menu> dirMenus = results.stream()
+                .filter(menu -> menu.getType().equals(MenuType.dir.name()))
+                .collect(Collectors.toList());
+        List<Menu> subMenus = dirMenus.stream()
+                .map(menu -> getSubMenus(menu.getId()))
+                .flatMap(Collection::stream)
+                .collect(Collectors.toList());
+        results.addAll(subMenus);
 
-        List<Menu> pageMenus = map.get(MenuType.page.name());
-        if (pageMenus != null) {
-            pageMenus.stream().peek(menu -> menu.setEnabled(status));
-            //menuRepository.saveAll(pageMenus);
-        }
+        results.forEach(menu -> menu.setEnabled(status));
+        menuRepository.saveAll(results);
     }
 
     public Map<Integer, String> getSortedChildGroupByPid(int pid) {