|
|
@@ -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<>(), "查询成功");
|