From 71153d59d15f3e094fcb367bcc23f56cf8181fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 30 Mar 2026 19:47:32 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BF=AE=E6=94=B9=20=E8=8F=9C?= =?UTF-8?q?=E5=8D=95service=E7=94=A8=E6=B3=95=20=E4=B8=8E=E6=9C=80?= =?UTF-8?q?=E6=96=B0mapper=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/ISysMenuService.java | 8 +-- .../service/impl/SysMenuServiceImpl.java | 51 +++++++++---------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMenuService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMenuService.java index ddb352b64..355446791 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMenuService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysMenuService.java @@ -6,6 +6,7 @@ import org.dromara.system.domain.bo.SysMenuBo; import org.dromara.system.domain.vo.RouterVo; import org.dromara.system.domain.vo.SysMenuVo; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -56,7 +57,7 @@ public interface ISysMenuService { * @param roleIds 角色ID列表 * @return 角色权限映射 */ - Map> selectMenuPermsByRoleIds(List roleIds); + Map> selectMenuPermsByRoleIds(Collection roleIds); /** * 根据用户ID查询菜单树信息 @@ -112,7 +113,7 @@ public interface ISysMenuService { * @param menuIds 菜单ID串 * @return 结果 true 存在 false 不存在 */ - boolean hasChildByMenuId(List menuIds); + boolean hasChildByMenuId(Collection menuIds); /** * 查询菜单是否存在角色 @@ -152,7 +153,7 @@ public interface ISysMenuService { * @param menuIds 菜单ID串 * @return 结果 */ - void deleteMenuById(List menuIds); + void deleteMenuById(Collection menuIds); /** * 校验菜单名称是否唯一 @@ -169,4 +170,5 @@ public interface ISysMenuService { * @return 结果 */ boolean checkRouteConfigUnique(SysMenuBo menu); + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java index 5d382b04e..f60ea03e9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java @@ -56,27 +56,25 @@ public class SysMenuServiceImpl implements ISysMenuService { /** * 查询系统菜单列表 * - * @param menu 菜单信息 + * @param menu 菜单筛选条件 + * @param userId 当前查询的用户主键 * @return 菜单列表 */ @Override public List selectMenuList(SysMenuBo menu, Long userId) { - List menuList; - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单 - if (!LoginHelper.isSuperAdmin(userId)) { - // 通过用户id获取角色id 通过角色id获取菜单id 然后in菜单 - wrapper.inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId)); + if (LoginHelper.isSuperAdmin(userId)) { + return baseMapper.selectVoList( + new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) + .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) + .eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus()) + .eq(StringUtils.isNotBlank(menu.getMenuType()), SysMenu::getMenuType, menu.getMenuType()) + .eq(ObjectUtil.isNotNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId()) + .orderByAsc(SysMenu::getParentId) + .orderByAsc(SysMenu::getOrderNum)); } - menuList = baseMapper.selectVoList( - wrapper.like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) - .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) - .eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus()) - .eq(StringUtils.isNotBlank(menu.getMenuType()), SysMenu::getMenuType, menu.getMenuType()) - .eq(ObjectUtil.isNotNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId()) - .orderByAsc(SysMenu::getParentId) - .orderByAsc(SysMenu::getOrderNum)); - return menuList; + return baseMapper.selectMenuListByUserId(menu, userId); } /** @@ -108,7 +106,7 @@ public class SysMenuServiceImpl implements ISysMenuService { * @return 角色权限映射 */ @Override - public Map> selectMenuPermsByRoleIds(List roleIds) { + public Map> selectMenuPermsByRoleIds(Collection roleIds) { return baseMapper.selectMenuPermsByRoleIds(roleIds); } @@ -116,7 +114,7 @@ public class SysMenuServiceImpl implements ISysMenuService { * 根据用户ID查询菜单 * * @param userId 用户ID - * @return 菜单列表 + * @return 按树结构组织的菜单列表 */ @Override public List selectMenuTreeByUserId(Long userId) { @@ -124,17 +122,17 @@ public class SysMenuServiceImpl implements ISysMenuService { if (LoginHelper.isSuperAdmin(userId)) { menus = baseMapper.selectMenuTreeAll(); } else { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - menus = baseMapper.selectList( - wrapper.in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU) - .eq(SysMenu::getStatus, SystemConstants.NORMAL) - .inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId)) - .orderByAsc(SysMenu::getParentId) - .orderByAsc(SysMenu::getOrderNum)); + menus = baseMapper.selectMenuTreeByUserId(userId); } + return TreeBuildUtils.build(menus, Constants.TOP_PARENT_ID, SysMenu::getParentId, (menu, nodeTreeMaps) -> { + // 将当前节点的菜单ID用作父节点ID Long menuParentId = menu.getMenuId(); + // 从动态规划表中取出子节点列表 + // 如果不存在子节点,则返回一个空的列表,确保数据在进行JSON序列化时该字段的类型和结构是正确的 List childMenus = nodeTreeMaps.getOrDefault(menuParentId, Collections.emptyList()); + // 设置子节点 + // 如果存在根节点指向尾节点的情况,则会出现环形依赖。但在菜单表中基本不会出现这种情况... menu.setChildren(childMenus); }); } @@ -258,7 +256,7 @@ public class SysMenuServiceImpl implements ISysMenuService { * @return 结果 */ @Override - public boolean hasChildByMenuId(List menuIds) { + public boolean hasChildByMenuId(Collection menuIds) { return baseMapper.exists(new LambdaQueryWrapper().in(SysMenu::getParentId, menuIds).notIn(SysMenu::getMenuId, menuIds)); } @@ -312,11 +310,10 @@ public class SysMenuServiceImpl implements ISysMenuService { * 批量删除菜单管理信息 * * @param menuIds 菜单ID串 - * @return 结果 */ @Override @Transactional(rollbackFor = Exception.class) - public void deleteMenuById(List menuIds) { + public void deleteMenuById(Collection menuIds) { baseMapper.deleteByIds(menuIds); roleMenuMapper.deleteByMenuIds(menuIds); }