update 修改 菜单service用法 与最新mapper同步

This commit is contained in:
疯狂的狮子Li
2026-03-30 19:47:32 +08:00
parent 070b4bd9bb
commit 71153d59d1
2 changed files with 29 additions and 30 deletions

View File

@@ -6,6 +6,7 @@ import org.dromara.system.domain.bo.SysMenuBo;
import org.dromara.system.domain.vo.RouterVo; import org.dromara.system.domain.vo.RouterVo;
import org.dromara.system.domain.vo.SysMenuVo; import org.dromara.system.domain.vo.SysMenuVo;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -56,7 +57,7 @@ public interface ISysMenuService {
* @param roleIds 角色ID列表 * @param roleIds 角色ID列表
* @return 角色权限映射 * @return 角色权限映射
*/ */
Map<Long, Set<String>> selectMenuPermsByRoleIds(List<Long> roleIds); Map<Long, Set<String>> selectMenuPermsByRoleIds(Collection<Long> roleIds);
/** /**
* 根据用户ID查询菜单树信息 * 根据用户ID查询菜单树信息
@@ -112,7 +113,7 @@ public interface ISysMenuService {
* @param menuIds 菜单ID串 * @param menuIds 菜单ID串
* @return 结果 true 存在 false 不存在 * @return 结果 true 存在 false 不存在
*/ */
boolean hasChildByMenuId(List<Long> menuIds); boolean hasChildByMenuId(Collection<Long> menuIds);
/** /**
* 查询菜单是否存在角色 * 查询菜单是否存在角色
@@ -152,7 +153,7 @@ public interface ISysMenuService {
* @param menuIds 菜单ID串 * @param menuIds 菜单ID串
* @return 结果 * @return 结果
*/ */
void deleteMenuById(List<Long> menuIds); void deleteMenuById(Collection<Long> menuIds);
/** /**
* 校验菜单名称是否唯一 * 校验菜单名称是否唯一
@@ -169,4 +170,5 @@ public interface ISysMenuService {
* @return 结果 * @return 结果
*/ */
boolean checkRouteConfigUnique(SysMenuBo menu); boolean checkRouteConfigUnique(SysMenuBo menu);
} }

View File

@@ -56,27 +56,25 @@ public class SysMenuServiceImpl implements ISysMenuService {
/** /**
* 查询系统菜单列表 * 查询系统菜单列表
* *
* @param menu 菜单信息 * @param menu 菜单筛选条件
* @param userId 当前查询的用户主键
* @return 菜单列表 * @return 菜单列表
*/ */
@Override @Override
public List<SysMenuVo> selectMenuList(SysMenuBo menu, Long userId) { public List<SysMenuVo> selectMenuList(SysMenuBo menu, Long userId) {
List<SysMenuVo> menuList;
LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
// 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单 // 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单
if (!LoginHelper.isSuperAdmin(userId)) { if (LoginHelper.isSuperAdmin(userId)) {
// 通过用户id获取角色id 通过角色id获取菜单id 然后in菜单 return baseMapper.selectVoList(
wrapper.inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId)); new LambdaQueryWrapper<SysMenu>()
.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( return baseMapper.selectMenuListByUserId(menu, userId);
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;
} }
/** /**
@@ -108,7 +106,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
* @return 角色权限映射 * @return 角色权限映射
*/ */
@Override @Override
public Map<Long, Set<String>> selectMenuPermsByRoleIds(List<Long> roleIds) { public Map<Long, Set<String>> selectMenuPermsByRoleIds(Collection<Long> roleIds) {
return baseMapper.selectMenuPermsByRoleIds(roleIds); return baseMapper.selectMenuPermsByRoleIds(roleIds);
} }
@@ -116,7 +114,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
* 根据用户ID查询菜单 * 根据用户ID查询菜单
* *
* @param userId 用户ID * @param userId 用户ID
* @return 菜单列表 * @return 按树结构组织的菜单列表
*/ */
@Override @Override
public List<SysMenu> selectMenuTreeByUserId(Long userId) { public List<SysMenu> selectMenuTreeByUserId(Long userId) {
@@ -124,17 +122,17 @@ public class SysMenuServiceImpl implements ISysMenuService {
if (LoginHelper.isSuperAdmin(userId)) { if (LoginHelper.isSuperAdmin(userId)) {
menus = baseMapper.selectMenuTreeAll(); menus = baseMapper.selectMenuTreeAll();
} else { } else {
LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>(); menus = baseMapper.selectMenuTreeByUserId(userId);
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));
} }
return TreeBuildUtils.build(menus, Constants.TOP_PARENT_ID, SysMenu::getParentId, (menu, nodeTreeMaps) -> { return TreeBuildUtils.build(menus, Constants.TOP_PARENT_ID, SysMenu::getParentId, (menu, nodeTreeMaps) -> {
// 将当前节点的菜单ID用作父节点ID
Long menuParentId = menu.getMenuId(); Long menuParentId = menu.getMenuId();
// 从动态规划表中取出子节点列表
// 如果不存在子节点则返回一个空的列表确保数据在进行JSON序列化时该字段的类型和结构是正确的
List<SysMenu> childMenus = nodeTreeMaps.getOrDefault(menuParentId, Collections.emptyList()); List<SysMenu> childMenus = nodeTreeMaps.getOrDefault(menuParentId, Collections.emptyList());
// 设置子节点
// 如果存在根节点指向尾节点的情况,则会出现环形依赖。但在菜单表中基本不会出现这种情况...
menu.setChildren(childMenus); menu.setChildren(childMenus);
}); });
} }
@@ -258,7 +256,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
* @return 结果 * @return 结果
*/ */
@Override @Override
public boolean hasChildByMenuId(List<Long> menuIds) { public boolean hasChildByMenuId(Collection<Long> menuIds) {
return baseMapper.exists(new LambdaQueryWrapper<SysMenu>().in(SysMenu::getParentId, menuIds).notIn(SysMenu::getMenuId, menuIds)); return baseMapper.exists(new LambdaQueryWrapper<SysMenu>().in(SysMenu::getParentId, menuIds).notIn(SysMenu::getMenuId, menuIds));
} }
@@ -312,11 +310,10 @@ public class SysMenuServiceImpl implements ISysMenuService {
* 批量删除菜单管理信息 * 批量删除菜单管理信息
* *
* @param menuIds 菜单ID串 * @param menuIds 菜单ID串
* @return 结果
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteMenuById(List<Long> menuIds) { public void deleteMenuById(Collection<Long> menuIds) {
baseMapper.deleteByIds(menuIds); baseMapper.deleteByIds(menuIds);
roleMenuMapper.deleteByMenuIds(menuIds); roleMenuMapper.deleteByMenuIds(menuIds);
} }