diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java index 8ceaaa0..5e67380 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java @@ -20,6 +20,8 @@ public interface SysMenuMapper extends BaseMapper { * @return 菜单列表 */ public List selectMenuList (SysMenu menu); + public List findMenusWithParents(@Param("longs") List longs); + List findMenusChParents(@Param("longs") List longs); /** * 根据用户所有权限 @@ -135,4 +137,6 @@ public interface SysMenuMapper extends BaseMapper { * @return 结果 */ public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId); + + } diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/SysMenuService.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/SysMenuService.java index 29bfb07..dc2f897 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/SysMenuService.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/SysMenuService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.muyu.system.domain.SysMenu; import com.muyu.system.domain.vo.RouterVo; import com.muyu.system.domain.vo.TreeSelect; +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Set; @@ -158,4 +159,5 @@ public interface SysMenuService extends IService { * @return 结果 */ public boolean checkMenuNameUnique (SysMenu menu); + } diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java index e4e2ec8..2d8580e 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java @@ -15,6 +15,7 @@ import com.muyu.system.mapper.SysMenuMapper; import com.muyu.system.mapper.SysRoleMapper; import com.muyu.system.mapper.SysRoleMenuMapper; import com.muyu.system.service.SysMenuService; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -58,19 +59,81 @@ public class SysMenuServiceImpl extends ServiceImpl impl * * @return 菜单列表 */ + @Override public List selectMenuList (SysMenu menu, Long userId) { List menuList = null; - // 管理员显示所有菜单信息 + // 判断是否为管理员,管理员显示所有菜单 if (SysUser.isAdmin(userId)) { + // 查询所有菜单 menuList = menuMapper.selectMenuList(menu); + // 添加具有父菜单的菜单项 +// menuList.addAll(findMenusWithParents(menuList)); + List menusWithParents = findMenusWithParents(menuList); + System.out.println("=------------------------->"+menusWithParents); + if (menusWithParents!=null && menusWithParents.size()!=0){ + menuList.addAll(menusWithParents); + } + // 添加具有祖父级菜单的菜单项 + List menusChParents = findMenusChParents(menuMapper.selectMenuList(menu)); + if (menusChParents!=null && menusChParents.size()!=0){ + menuList.addAll(menusChParents); + } } else { + // 非管理员,根据用户ID查询有权限的菜单 menu.getParams().put("userId", userId); menuList = menuMapper.selectMenuListByUserId(menu); } + // 去重,确保菜单列表中没有重复的菜单项 + menuList = menuList.stream().distinct().toList(); return menuList; } + /** + * 查询具有父菜单的菜单列表 + * @param menuList 原始菜单列表 + * @return 返回具有父菜单的菜单列表 + */ + public List findMenusWithParents( List menuList) { + // 获取所有非根菜单的父菜单ID + List longs = menuList.stream() + .map(menu -> menu.getParentId()) + .filter(parentId -> parentId != 0) + .distinct().toList(); + if (longs.size()==0){ + return null; + } + // 查询这些父菜单及其子菜单 + List menus = menuMapper.findMenusWithParents(longs); + List menusWithParents = findMenusWithParents(menus); + if (menusWithParents!=null){ + menus.addAll(menusWithParents); + + } + return menus; + } + + /** + * 查询具有祖父级菜单的菜单列表 + * @param menuList 原始菜单列表 + * @return 返回具有祖父级菜单的菜单列表 + */ + public List findMenusChParents(List menuList){ + // 获取所有菜单的父菜单ID + List longs = menuList.stream().map(menu -> menu.getParentId()).toList(); + List sysMenus = menuMapper.findMenusChParents(longs); + if (sysMenus!=null && sysMenus.size()!=0){ + // 查询这些祖父级菜单的父菜单及其子菜单 + List menus = findMenusWithParents(sysMenus); + if (menus!=null){ + sysMenus.addAll(menus); + } + }else{ + return null; + } + return sysMenus; + } + /** * 根据用户ID查询权限 * @@ -321,6 +384,8 @@ public class SysMenuServiceImpl extends ServiceImpl impl return UserConstants.UNIQUE; } + + /** * 获取路由名称 * diff --git a/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml b/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml index 1dac5c4..b2bad67 100644 --- a/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -185,6 +185,31 @@ where menu_name=#{menuName} and parent_id = #{parentId} limit 1 + + + update sys_menu