From 80302ded05fd278eafb0a45501a0c31fd2390af2 Mon Sep 17 00:00:00 2001 From: mengwang <2765723797@qq.com> Date: Fri, 12 Apr 2024 21:19:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8B=A5=E4=BE=9D=E5=90=8E=E5=8F=B0=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=8F=9C=E5=8D=95=E6=9F=A5=E8=AF=A2=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/muyu/system/mapper/SysMenuMapper.java | 12 ++++++- .../service/impl/SysMenuServiceImpl.java | 35 ++++++++++++++++++- .../resources/mapper/system/SysMenuMapper.xml | 8 +++-- 3 files changed, 51 insertions(+), 4 deletions(-) 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 db63d22..2fea3e8 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 @@ -136,7 +136,17 @@ public interface SysMenuMapper extends BaseMapper { */ public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId); - public List selectSysMenuList(@Param("longList") List longList); + /** + * 通过ID列表查询系统菜单列表。 + * @param longList 需要查询的菜单ID列表,类型为List。 + * @return 返回一个SysMenu类型的菜单列表,包含所有指定ID的菜单项。 + */ + List selectSysMenuList(@Param("longList") List longList); + /** + * 通过ID列表查询系统菜单的子菜单列表。 + * @param longList 需要查询子菜单的菜单ID列表,类型为List。 + * @return 返回一个SysMenu类型的子菜单列表,包含所有指定菜单ID下的子菜单项。 + */ List selectSysChildrenList(@Param("longList") List longList); } 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 38a102e..3f93b3c 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 @@ -51,34 +51,55 @@ public class SysMenuServiceImpl extends ServiceImpl impl return selectMenuList(new SysMenu(), userId); } + /** + * 递归查询菜单列表 + * @param sysMenuList 待处理的菜单列表 + * @return 返回处理后的菜单列表,如果不存在父菜单不是0的菜单则返回null + */ public List selectMenuList (List sysMenuList) { + // 从给定的菜单列表中,筛选出所有父菜单ID不为0的ID,并去重 List longList = sysMenuList.stream() .map(SysMenu::getParentId) .filter(parentId -> parentId != 0) .distinct() .toList(); + // 如果筛选后的列表为空,则表示没有需要处理的菜单,直接返回null if(longList.isEmpty()){ return null; } + // 根据筛选出的父菜单ID列表,查询相应的菜单信息 List sysMenus = menuMapper.selectSysMenuList(longList); + // 递归调用,查询这些菜单的子菜单 List sysMenus1 = selectMenuList(sysMenus); + // 如果递归查询到了子菜单,则将其添加到主菜单列表中 if(sysMenus1 != null){ sysMenus.addAll(sysMenus1); } return sysMenus; } + /** + * 查询系统菜单的子菜单列表。 + * + * @param sysMenuList 父级菜单列表,通过这些父级菜单ID来查询它们的子菜单。 + * @return 返回子菜单列表,如果不存在子菜单则返回null。 + */ public List selectSysChildrenList (List sysMenuList) { + // 将父级菜单列表转换为菜单ID列表 List longList = sysMenuList.stream() .map(SysMenu::getMenuId) .toList(); + // 根据菜单ID列表查询子菜单列表 List sysMenus = menuMapper.selectSysChildrenList(longList); if(sysMenus != null && !sysMenus.isEmpty()){ + // 递归查询子菜单的子菜单 List sysMenus1 = selectMenuList(sysMenus); if(sysMenus1 != null){ + // 将查询到的子菜单添加到原子菜单列表中 sysMenus.addAll(sysMenus1); } }else { + // 如果没有查询到子菜单,则返回null return null; } return sysMenus; @@ -91,30 +112,42 @@ public class SysMenuServiceImpl extends ServiceImpl impl * * @return 菜单列表 */ + /** + * 根据用户权限查询菜单列表 + * @param menu 菜单实体,用于查询条件 + * @param userId 用户ID,用于判断用户权限 + * @return 返回不重复的菜单列表 + */ @Override public List selectMenuList (SysMenu menu, Long userId) { List menuList = null; - // 管理员显示所有信息 + // 判断是否为管理员,管理员显示所有菜单信息 if(SysUser.isAdmin(userId)){ + // 查询所有菜单 menuList = menuMapper.selectMenuList(menu); + // 通过递归查询所有子菜单 List sysMenus = selectMenuList(menuList); if(sysMenus != null && !sysMenus.isEmpty()){ menuList.addAll(sysMenus); } + // 查询直接子菜单 List sysMenus1 = selectSysChildrenList(menuMapper.selectMenuList(menu)); if(sysMenus1 != null && !sysMenus1.isEmpty()){ menuList.addAll(sysMenus1); } }else { + // 为非管理员用户查询权限内的菜单 menu.getParams().put("userId",userId); menuList = menuMapper.selectMenuListByUserId(menu); } + // 去除菜单列表中的重复元素 menuList = menuList.stream() .distinct() .toList(); return menuList; } + /** * 根据用户ID查询权限 * 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 7f6a4ac..bb7247a 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,8 +185,9 @@ where menu_name=#{menuName} and parent_id = #{parentId} limit 1 + + + + update sys_menu