refactor(system): 重构角色模块数据查询逻辑

This commit is contained in:
2025-12-27 11:42:52 +08:00
parent e31d9d7be8
commit 8113539fc6
7 changed files with 256 additions and 141 deletions
@@ -16,6 +16,7 @@
package cn.odboy.system.dal.dataobject; package cn.odboy.system.dal.dataobject;
import cn.odboy.base.KitBaseUserTimeTb; import cn.odboy.base.KitBaseUserTimeTb;
import cn.odboy.system.dal.model.SystemRoleVo;
import com.alibaba.fastjson2.annotation.JSONField; import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
@@ -42,7 +43,7 @@ public class SystemDeptTb extends KitBaseUserTimeTb {
@TableField(exist = false) @TableField(exist = false)
@JSONField(serialize = false) @JSONField(serialize = false)
@ApiModelProperty(value = "角色") @ApiModelProperty(value = "角色")
private Set<SystemRoleTb> roles; private Set<SystemRoleVo> roles;
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty(value = "子部门") @ApiModelProperty(value = "子部门")
private List<SystemDeptTb> children; private List<SystemDeptTb> children;
@@ -31,6 +31,4 @@ public class SystemQueryRoleArgs {
private Integer page = 1; private Integer page = 1;
@ApiModelProperty(value = "每页数据量", example = "10") @ApiModelProperty(value = "每页数据量", example = "10")
private Integer size = 10; private Integer size = 10;
@ApiModelProperty(value = "偏移量", hidden = true)
private long offset;
} }
@@ -14,7 +14,7 @@ import lombok.Setter;
public class SystemRoleVo extends SystemRoleTb { public class SystemRoleVo extends SystemRoleTb {
@ApiModelProperty(value = "用户", hidden = true) @ApiModelProperty(value = "用户", hidden = true)
private Set<SystemUserTb> users; private Set<SystemUserVo> users;
@ApiModelProperty(value = "菜单", hidden = true) @ApiModelProperty(value = "菜单", hidden = true)
private Set<SystemMenuTb> menus; private Set<SystemMenuTb> menus;
@ApiModelProperty(value = "部门", hidden = true) @ApiModelProperty(value = "部门", hidden = true)
@@ -19,13 +19,9 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemQueryRoleArgs; import cn.odboy.system.dal.model.SystemQueryRoleArgs;
import cn.odboy.system.dal.model.SystemRoleVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import java.util.Set;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/** /**
* 角色 Mapper * 角色 Mapper
@@ -49,13 +45,7 @@ public interface SystemRoleMapper extends BaseMapper<SystemRoleTb> {
return selectCount(wrapper); return selectCount(wrapper);
} }
List<SystemRoleVo> selectRoleByArgs(@Param("criteria") SystemQueryRoleArgs criteria); default SystemRoleTb getRoleById(Long roleId) {
return selectById(roleId);
List<SystemRoleVo> selectRoleByUserId(@Param("userId") Long userId); }
List<SystemRoleVo> selectRoleByMenuId(@Param("menuId") Long menuId);
SystemRoleVo getRoleById(@Param("roleId") Long roleId);
Integer countRoleByDeptIds(@Param("deptIds") Set<Long> deptIds);
} }
@@ -60,7 +60,7 @@ public class SystemDeptService {
@Autowired @Autowired
private SystemUserMapper systemUserMapper; private SystemUserMapper systemUserMapper;
@Autowired @Autowired
private SystemRoleMapper systemRoleMapper; private SystemRoleService systemRoleService;
/** /**
* 创建 * 创建
@@ -320,7 +320,7 @@ public class SystemDeptService {
if (systemUserMapper.countUserByDeptIds(deptIds) > 0) { if (systemUserMapper.countUserByDeptIds(deptIds) > 0) {
throw new BadRequestException("所选部门存在用户关联,请解除后再试!"); throw new BadRequestException("所选部门存在用户关联,请解除后再试!");
} }
if (systemRoleMapper.countRoleByDeptIds(deptIds) > 0) { if (systemRoleService.countRoleByDeptIds(deptIds) > 0) {
throw new BadRequestException("所选部门存在角色关联,请解除后再试!"); throw new BadRequestException("所选部门存在角色关联,请解除后再试!");
} }
} }
@@ -24,12 +24,19 @@ import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleTb; import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.dataobject.SystemUserTb; import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateRoleArgs; import cn.odboy.system.dal.model.SystemCreateRoleArgs;
import cn.odboy.system.dal.model.SystemQueryRoleArgs; import cn.odboy.system.dal.model.SystemQueryRoleArgs;
import cn.odboy.system.dal.model.SystemRoleCodeVo; import cn.odboy.system.dal.model.SystemRoleCodeVo;
import cn.odboy.system.dal.model.SystemRoleVo; import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.dal.dataobject.SystemRoleMenuTb;
import cn.odboy.system.dal.dataobject.SystemRoleDeptTb;
import cn.odboy.system.dal.dataobject.SystemUserRoleTb;
import cn.odboy.system.dal.mysql.SystemRoleMapper; import cn.odboy.system.dal.mysql.SystemRoleMapper;
import cn.odboy.system.dal.mysql.SystemUserMapper; import cn.odboy.system.dal.mysql.SystemUserMapper;
import cn.odboy.system.dal.mysql.SystemRoleMenuMapper;
import cn.odboy.system.dal.mysql.SystemRoleDeptMapper;
import cn.odboy.system.dal.mysql.SystemUserRoleMapper;
import cn.odboy.util.KitFileUtil; import cn.odboy.util.KitFileUtil;
import cn.odboy.util.KitPageUtil; import cn.odboy.util.KitPageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -39,6 +46,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -59,6 +67,12 @@ public class SystemRoleService {
private SystemUserMapper systemUserMapper; private SystemUserMapper systemUserMapper;
@Autowired @Autowired
private SystemRoleDeptService systemRoleDeptService; private SystemRoleDeptService systemRoleDeptService;
@Autowired
private SystemRoleMenuMapper systemRoleMenuMapper;
@Autowired
private SystemRoleDeptMapper systemRoleDeptMapper;
@Autowired
private SystemUserRoleMapper systemUserRoleMapper;
/** /**
* 创建 * 创建
@@ -179,7 +193,31 @@ public class SystemRoleService {
* @return * @return
*/ */
public List<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs criteria) { public List<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs criteria) {
return systemRoleMapper.selectRoleByArgs(criteria); // 查询角色基本信息
LambdaQueryWrapper<SystemRoleTb> wrapper = new LambdaQueryWrapper<>();
if (criteria != null) {
wrapper.and(StrUtil.isNotBlank(criteria.getBlurry()),
c -> c.like(SystemRoleTb::getName, criteria.getBlurry()).or()
.like(SystemRoleTb::getDescription, criteria.getBlurry()));
if (CollUtil.isNotEmpty(criteria.getCreateTime()) && criteria.getCreateTime().size() >= 2) {
wrapper.between(SystemRoleTb::getCreateTime, criteria.getCreateTime().get(0),
criteria.getCreateTime().get(1));
}
}
wrapper.orderByAsc(SystemRoleTb::getLevel);
// 分页处理
if (criteria != null && criteria.getSize() != null) {
Page<SystemRoleTb> page = new Page<>(criteria.getPage(), criteria.getSize());
Page<SystemRoleTb> rolePage = systemRoleMapper.selectPage(page, wrapper);
List<SystemRoleTb> roles = rolePage.getRecords();
// 转换为SystemRoleVo并关联查询
return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList());
} else {
List<SystemRoleTb> roles = systemRoleMapper.selectList(wrapper);
return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList());
}
} }
/** /**
@@ -190,8 +228,7 @@ public class SystemRoleService {
* @return * @return
*/ */
public KitPageResult<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs criteria, Page<Object> page) { public KitPageResult<SystemRoleVo> queryRoleByArgs(SystemQueryRoleArgs criteria, Page<Object> page) {
criteria.setOffset(page.offset()); List<SystemRoleVo> roles = this.queryRoleByArgs(criteria);
List<SystemRoleVo> roles = systemRoleMapper.selectRoleByArgs(criteria);
Long total = systemRoleMapper.countRoleByArgs(criteria); Long total = systemRoleMapper.countRoleByArgs(criteria);
return KitPageUtil.toPage(roles, total); return KitPageUtil.toPage(roles, total);
} }
@@ -203,7 +240,19 @@ public class SystemRoleService {
* @return / * @return /
*/ */
public List<SystemRoleVo> queryRoleByUsersId(Long userId) { public List<SystemRoleVo> queryRoleByUsersId(Long userId) {
return systemRoleMapper.selectRoleByUserId(userId); // 查询用户角色关联
LambdaQueryWrapper<SystemUserRoleTb> userRoleWrapper = new LambdaQueryWrapper<>();
userRoleWrapper.eq(SystemUserRoleTb::getUserId, userId);
List<SystemUserRoleTb> userRoles = systemUserRoleMapper.selectList(userRoleWrapper);
if (CollUtil.isEmpty(userRoles)) {
return new ArrayList<>();
}
Set<Long> roleIds = userRoles.stream().map(SystemUserRoleTb::getRoleId).collect(Collectors.toSet());
List<SystemRoleTb> roles = systemRoleMapper.selectByIds(roleIds);
return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList());
} }
/** /**
@@ -236,7 +285,7 @@ public class SystemRoleService {
permissions.add("admin"); permissions.add("admin");
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
} }
List<SystemRoleVo> roles = systemRoleMapper.selectRoleByUserId(user.getId()); List<SystemRoleVo> roles = this.queryRoleByUsersId(user.getId());
permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuTb::getPermission) permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuTb::getPermission)
.filter(StrUtil::isNotBlank).collect(Collectors.toSet()); .filter(StrUtil::isNotBlank).collect(Collectors.toSet());
return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList());
@@ -262,4 +311,81 @@ public class SystemRoleService {
public SystemRoleTb getRoleById(Long id) { public SystemRoleTb getRoleById(Long id) {
return systemRoleMapper.selectById(id); return systemRoleMapper.selectById(id);
} }
/**
* 根据ID查询角色详情(包含关联信息)
*
* @param id /
* @return /
*/
public SystemRoleVo getRoleVoById(Long id) {
SystemRoleTb role = systemRoleMapper.selectById(id);
if (role == null) {
return null;
}
return convertToRoleVo(role);
}
/**
* 根据菜单ID查询角色
*
* @param menuId 菜单ID
* @return /
*/
public List<SystemRoleVo> queryRoleByMenuId(Long menuId) {
// 查询包含该菜单的角色ID列表
LambdaQueryWrapper<SystemRoleMenuTb> roleMenuWrapper = new LambdaQueryWrapper<>();
roleMenuWrapper.eq(SystemRoleMenuTb::getMenuId, menuId);
List<SystemRoleMenuTb> roleMenuList = systemRoleMenuMapper.selectList(roleMenuWrapper);
if (CollUtil.isEmpty(roleMenuList)) {
return new ArrayList<>();
}
Set<Long> roleIds = roleMenuList.stream().map(SystemRoleMenuTb::getRoleId).collect(Collectors.toSet());
List<SystemRoleTb> roles = systemRoleMapper.selectByIds(roleIds);
return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList());
}
/**
* 根据部门ID统计角色数量
*
* @param deptIds 部门ID集合
* @return /
*/
public Long countRoleByDeptIds(Set<Long> deptIds) {
if (CollUtil.isEmpty(deptIds)) {
return 0L;
}
LambdaQueryWrapper<SystemRoleDeptTb> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SystemRoleDeptTb::getDeptId, deptIds);
return systemRoleDeptMapper.selectCount(wrapper);
}
/**
* 转换为SystemRoleVo并关联查询菜单和部门信息
*
* @param role 角色基本信息
* @return 包含关联信息的SystemRoleVo
*/
private SystemRoleVo convertToRoleVo(SystemRoleTb role) {
if (role == null) {
return null;
}
SystemRoleVo roleVo = BeanUtil.copyProperties(role, SystemRoleVo.class);
// 查询关联的菜单信息
Set<SystemMenuTb> menus = systemRoleMenuService.queryMenuByRoleIdsAndType(
Collections.singleton(role.getId()), -1);
roleVo.setMenus(menus);
// 查询关联的部门信息
List<SystemDeptTb> depts = systemRoleDeptService.selectDeptByRoleId(role.getId());
roleVo.setDepts(new LinkedHashSet<>(depts));
return roleVo;
}
} }