Selaa lähdekoodia

bugfix:中台权限菜单模糊查询

lyx 11 tuntia sitten
vanhempi
commit
b02af27492

+ 6 - 3
alien-store/src/main/java/shop/alien/store/controller/LifeSysMenuController.java

@@ -103,10 +103,13 @@ public class LifeSysMenuController {
 
     @ApiOperation("查询菜单树形结构")
     @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "menuName", value = "菜单名称(模糊查询)", dataType = "String", paramType = "query", required = false),
+    })
     @GetMapping(value = "/getMenuTree")
-    public R<List<LifeSysMenu>> getMenuTree() {
-        log.info("LifeSysMenuController.getMenuTree");
-        return lifeSysMenuService.getMenuTree();
+    public R<List<LifeSysMenu>> getMenuTree(@RequestParam(value = "menuName",required = false)  String menuName) {
+        log.info("LifeSysMenuController.getMenuTree => menuName={}", menuName);
+        return lifeSysMenuService.getMenuTree(menuName);
     }
 
     @ApiOperation("根据父菜单ID查询子菜单列表")

+ 3 - 2
alien-store/src/main/java/shop/alien/store/service/LifeSysMenuService.java

@@ -46,11 +46,12 @@ public interface LifeSysMenuService {
     R<LifeSysMenu> getMenuById(Long menuId);
 
     /**
-     * 查询菜单列表(树形结构)
+     * 查询菜单树形结构(可选根据菜单名称模糊查询
      *
+     * @param menuName 菜单名称(模糊查询)
      * @return R<List<LifeSysMenu>>
      */
-    R<List<LifeSysMenu>> getMenuTree();
+    R<List<LifeSysMenu>> getMenuTree(String menuName);
 
     /**
      * 根据父菜单ID查询子菜单列表

+ 66 - 7
alien-store/src/main/java/shop/alien/store/service/impl/LifeSysMenuServiceImpl.java

@@ -245,15 +245,74 @@ public class LifeSysMenuServiceImpl implements LifeSysMenuService {
     }
 
     @Override
-    public R<List<LifeSysMenu>> getMenuTree() {
-        log.info("LifeSysMenuServiceImpl.getMenuTree");
+    public R<List<LifeSysMenu>> getMenuTree(String menuName) {
+        log.info("LifeSysMenuServiceImpl.getMenuTree?menuName={}", menuName);
 
         try {
-            // 查询所有未删除的菜单
-            QueryWrapper<LifeSysMenu> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("del_flag", "0"); // 只查询未删除的菜单
-            queryWrapper.orderByAsc("menu_sort"); // 按排序值升序排列
-            List<LifeSysMenu> allMenus = lifeSysMenuMapper.selectList(queryWrapper);
+            List<LifeSysMenu> allMenus;
+            
+            if (StringUtils.hasText(menuName)) {
+                // 如果有名称查询条件,先查询匹配的菜单
+                QueryWrapper<LifeSysMenu> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("del_flag", "0"); // 只查询未删除的菜单
+                queryWrapper.like("menu_name", menuName);
+                queryWrapper.orderByAsc("menu_sort"); // 按排序值升序排列
+                List<LifeSysMenu> matchedMenus = lifeSysMenuMapper.selectList(queryWrapper);
+
+                if (matchedMenus == null || matchedMenus.isEmpty()) {
+                    return R.data(new ArrayList<>(), "查询成功");
+                }
+
+                // 收集所有匹配菜单的ID
+                Set<Long> menuIdSet = new HashSet<>();
+                for (LifeSysMenu menu : matchedMenus) {
+                    menuIdSet.add(menu.getMenuId());
+                }
+
+                // 递归查找所有父级菜单ID,直到根节点
+                Set<Long> parentIds = new HashSet<>();
+                for (LifeSysMenu menu : matchedMenus) {
+                    Long parentId = menu.getParentId();
+                    if (parentId != null && parentId != 0) {
+                        parentIds.add(parentId);
+                    }
+                }
+
+                // 递归向上查找所有父级菜单
+                while (!parentIds.isEmpty()) {
+                    Set<Long> nextLevelParentIds = new HashSet<>();
+                    // 批量查询父级菜单
+                    QueryWrapper<LifeSysMenu> parentQueryWrapper = new QueryWrapper<>();
+                    parentQueryWrapper.eq("del_flag", "0");
+                    parentQueryWrapper.in("menu_id", parentIds);
+                    List<LifeSysMenu> parentMenus = lifeSysMenuMapper.selectList(parentQueryWrapper);
+                    
+                    for (LifeSysMenu parentMenu : parentMenus) {
+                        Long parentMenuId = parentMenu.getMenuId();
+                        if (!menuIdSet.contains(parentMenuId)) {
+                            menuIdSet.add(parentMenuId);
+                            Long grandParentId = parentMenu.getParentId();
+                            if (grandParentId != null && grandParentId != 0) {
+                                nextLevelParentIds.add(grandParentId);
+                            }
+                        }
+                    }
+                    parentIds = nextLevelParentIds;
+                }
+
+                // 一次性查询所有相关的菜单(包括匹配的菜单和父级菜单)
+                QueryWrapper<LifeSysMenu> allQueryWrapper = new QueryWrapper<>();
+                allQueryWrapper.eq("del_flag", "0");
+                allQueryWrapper.in("menu_id", menuIdSet);
+                allQueryWrapper.orderByAsc("menu_sort");
+                allMenus = lifeSysMenuMapper.selectList(allQueryWrapper);
+            } else {
+                // 如果没有名称查询条件,查询所有未删除的菜单
+                QueryWrapper<LifeSysMenu> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("del_flag", "0"); // 只查询未删除的菜单
+                queryWrapper.orderByAsc("menu_sort"); // 按排序值升序排列
+                allMenus = lifeSysMenuMapper.selectList(queryWrapper);
+            }
 
             if (allMenus == null || allMenus.isEmpty()) {
                 return R.data(new ArrayList<>(), "查询成功");

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/impl/LifeSysRoleMenuServiceImpl.java

@@ -233,7 +233,7 @@ public class LifeSysRoleMenuServiceImpl extends ServiceImpl<LifeSysRoleMenuMappe
 
         try {
             // 1. 查询所有未删除的菜单
-            R<List<LifeSysMenu>> menuTreeResult = lifeSysMenuService.getMenuTree();
+            R<List<LifeSysMenu>> menuTreeResult = lifeSysMenuService.getMenuTree(null);
             if (menuTreeResult == null || menuTreeResult.getData() == null || menuTreeResult.getData().isEmpty()) {
                 log.warn("未查询到任何菜单");
                 return R.data(new ArrayList<>(), "查询成功");