From 8113539fc679efada13de87cfc92930184fab33e Mon Sep 17 00:00:00 2001 From: Odboy Date: Fri, 26 Dec 2025 22:01:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor(system):=20=E9=87=8D=E6=9E=84=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=A8=A1=E5=9D=97=E6=95=B0=E6=8D=AE=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/dal/dataobject/SystemDeptTb.java | 3 +- .../system/dal/model/SystemQueryRoleArgs.java | 2 - .../odboy/system/dal/model/SystemRoleVo.java | 2 +- .../system/dal/mysql/SystemRoleMapper.java | 16 +- .../system/service/SystemDeptService.java | 4 +- .../system/service/SystemRoleService.java | 136 +++++++++- .../resources/mapper/SystemRoleMapper.xml | 234 +++++++++--------- 7 files changed, 256 insertions(+), 141 deletions(-) diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java index a61e1ed6..f9e825ec 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/dataobject/SystemDeptTb.java @@ -16,6 +16,7 @@ package cn.odboy.system.dal.dataobject; import cn.odboy.base.KitBaseUserTimeTb; +import cn.odboy.system.dal.model.SystemRoleVo; import com.alibaba.fastjson2.annotation.JSONField; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; @@ -42,7 +43,7 @@ public class SystemDeptTb extends KitBaseUserTimeTb { @TableField(exist = false) @JSONField(serialize = false) @ApiModelProperty(value = "角色") - private Set roles; + private Set roles; @TableField(exist = false) @ApiModelProperty(value = "子部门") private List children; diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java index 6ce2f0df..fce53690 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemQueryRoleArgs.java @@ -31,6 +31,4 @@ public class SystemQueryRoleArgs { private Integer page = 1; @ApiModelProperty(value = "每页数据量", example = "10") private Integer size = 10; - @ApiModelProperty(value = "偏移量", hidden = true) - private long offset; } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java index 90e2d2ca..c4dafc96 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/model/SystemRoleVo.java @@ -14,7 +14,7 @@ import lombok.Setter; public class SystemRoleVo extends SystemRoleTb { @ApiModelProperty(value = "用户", hidden = true) - private Set users; + private Set users; @ApiModelProperty(value = "菜单", hidden = true) private Set menus; @ApiModelProperty(value = "部门", hidden = true) diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java index 370e750b..f92838d7 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/dal/mysql/SystemRoleMapper.java @@ -19,13 +19,9 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.odboy.system.dal.dataobject.SystemRoleTb; 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.mapper.BaseMapper; -import java.util.List; -import java.util.Set; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; /** * 角色 Mapper @@ -49,13 +45,7 @@ public interface SystemRoleMapper extends BaseMapper { return selectCount(wrapper); } - List selectRoleByArgs(@Param("criteria") SystemQueryRoleArgs criteria); - - List selectRoleByUserId(@Param("userId") Long userId); - - List selectRoleByMenuId(@Param("menuId") Long menuId); - - SystemRoleVo getRoleById(@Param("roleId") Long roleId); - - Integer countRoleByDeptIds(@Param("deptIds") Set deptIds); + default SystemRoleTb getRoleById(Long roleId) { + return selectById(roleId); + } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java index daadd604..bc96bd9d 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemDeptService.java @@ -60,7 +60,7 @@ public class SystemDeptService { @Autowired private SystemUserMapper systemUserMapper; @Autowired - private SystemRoleMapper systemRoleMapper; + private SystemRoleService systemRoleService; /** * 创建 @@ -320,7 +320,7 @@ public class SystemDeptService { if (systemUserMapper.countUserByDeptIds(deptIds) > 0) { throw new BadRequestException("所选部门存在用户关联,请解除后再试!"); } - if (systemRoleMapper.countRoleByDeptIds(deptIds) > 0) { + if (systemRoleService.countRoleByDeptIds(deptIds) > 0) { throw new BadRequestException("所选部门存在角色关联,请解除后再试!"); } } diff --git a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java index 3f2bda20..17df10d6 100644 --- a/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java +++ b/cutejava/cutejava-module-system/src/main/java/cn/odboy/system/service/SystemRoleService.java @@ -24,12 +24,19 @@ import cn.odboy.framework.exception.BadRequestException; import cn.odboy.system.dal.dataobject.SystemMenuTb; import cn.odboy.system.dal.dataobject.SystemRoleTb; 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.SystemQueryRoleArgs; import cn.odboy.system.dal.model.SystemRoleCodeVo; 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.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.KitPageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -39,6 +46,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -59,6 +67,12 @@ public class SystemRoleService { private SystemUserMapper systemUserMapper; @Autowired private SystemRoleDeptService systemRoleDeptService; + @Autowired + private SystemRoleMenuMapper systemRoleMenuMapper; + @Autowired + private SystemRoleDeptMapper systemRoleDeptMapper; + @Autowired + private SystemUserRoleMapper systemUserRoleMapper; /** * 创建 @@ -179,7 +193,31 @@ public class SystemRoleService { * @return */ public List queryRoleByArgs(SystemQueryRoleArgs criteria) { - return systemRoleMapper.selectRoleByArgs(criteria); + // 查询角色基本信息 + LambdaQueryWrapper 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 page = new Page<>(criteria.getPage(), criteria.getSize()); + Page rolePage = systemRoleMapper.selectPage(page, wrapper); + List roles = rolePage.getRecords(); + + // 转换为SystemRoleVo并关联查询 + return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList()); + } else { + List roles = systemRoleMapper.selectList(wrapper); + return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList()); + } } /** @@ -190,8 +228,7 @@ public class SystemRoleService { * @return */ public KitPageResult queryRoleByArgs(SystemQueryRoleArgs criteria, Page page) { - criteria.setOffset(page.offset()); - List roles = systemRoleMapper.selectRoleByArgs(criteria); + List roles = this.queryRoleByArgs(criteria); Long total = systemRoleMapper.countRoleByArgs(criteria); return KitPageUtil.toPage(roles, total); } @@ -203,7 +240,19 @@ public class SystemRoleService { * @return / */ public List queryRoleByUsersId(Long userId) { - return systemRoleMapper.selectRoleByUserId(userId); + // 查询用户角色关联 + LambdaQueryWrapper userRoleWrapper = new LambdaQueryWrapper<>(); + userRoleWrapper.eq(SystemUserRoleTb::getUserId, userId); + List userRoles = systemUserRoleMapper.selectList(userRoleWrapper); + + if (CollUtil.isEmpty(userRoles)) { + return new ArrayList<>(); + } + + Set roleIds = userRoles.stream().map(SystemUserRoleTb::getRoleId).collect(Collectors.toSet()); + List roles = systemRoleMapper.selectByIds(roleIds); + + return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList()); } /** @@ -236,7 +285,7 @@ public class SystemRoleService { permissions.add("admin"); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); } - List roles = systemRoleMapper.selectRoleByUserId(user.getId()); + List roles = this.queryRoleByUsersId(user.getId()); permissions = roles.stream().flatMap(role -> role.getMenus().stream()).map(SystemMenuTb::getPermission) .filter(StrUtil::isNotBlank).collect(Collectors.toSet()); return permissions.stream().map(SystemRoleCodeVo::new).collect(Collectors.toList()); @@ -262,4 +311,81 @@ public class SystemRoleService { public SystemRoleTb getRoleById(Long 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 queryRoleByMenuId(Long menuId) { + // 查询包含该菜单的角色ID列表 + LambdaQueryWrapper roleMenuWrapper = new LambdaQueryWrapper<>(); + roleMenuWrapper.eq(SystemRoleMenuTb::getMenuId, menuId); + List roleMenuList = systemRoleMenuMapper.selectList(roleMenuWrapper); + + if (CollUtil.isEmpty(roleMenuList)) { + return new ArrayList<>(); + } + + Set roleIds = roleMenuList.stream().map(SystemRoleMenuTb::getRoleId).collect(Collectors.toSet()); + List roles = systemRoleMapper.selectByIds(roleIds); + + return roles.stream().map(this::convertToRoleVo).collect(Collectors.toList()); + } + + /** + * 根据部门ID统计角色数量 + * + * @param deptIds 部门ID集合 + * @return / + */ + public Long countRoleByDeptIds(Set deptIds) { + if (CollUtil.isEmpty(deptIds)) { + return 0L; + } + + LambdaQueryWrapper 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 menus = systemRoleMenuService.queryMenuByRoleIdsAndType( + Collections.singleton(role.getId()), -1); + roleVo.setMenus(menus); + + // 查询关联的部门信息 + List depts = systemRoleDeptService.selectDeptByRoleId(role.getId()); + roleVo.setDepts(new LinkedHashSet<>(depts)); + + return roleVo; + } } diff --git a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml index 83735119..9b969750 100644 --- a/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml +++ b/cutejava/cutejava-module-system/src/main/resources/mapper/SystemRoleMapper.xml @@ -1,118 +1,118 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file