feat(system): 增加角色页面的复杂查询功能

- 添加了对角色名称、代码、状态的模糊查询
- 实现了创建时间区间的查询
-增加了对非超级管理员的权限控制,只能查看自己的角色
- 优化了查询效率,
This commit is contained in:
HuangLei 2025-06-18 18:23:25 +08:00
parent 7633bc5d5e
commit f3988af15d
1 changed files with 40 additions and 8 deletions

View File

@ -1,27 +1,59 @@
package cn.iocoder.yudao.module.system.dal.mysql.permission;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.lang.Nullable;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
@Mapper
public interface RoleMapper extends BaseMapperX<RoleDO> {
default PageResult<RoleDO> selectPage(RolePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<RoleDO>()
.likeIfPresent(RoleDO::getName, reqVO.getName())
.likeIfPresent(RoleDO::getCode, reqVO.getCode())
.eqIfPresent(RoleDO::getStatus, reqVO.getStatus())
.betweenIfPresent(BaseDO::getCreateTime, reqVO.getCreateTime())
.orderByAsc(RoleDO::getSort));
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
MPJLambdaWrapper<RoleDO> mpjLambdaWrapper = new MPJLambdaWrapper();
LocalDateTime[] createTimes = reqVO.getCreateTime();
mpjLambdaWrapper.select(
RoleDO::getId,
RoleDO::getName,
RoleDO::getCode,
RoleDO::getSort,
RoleDO::getDataScope,
RoleDO::getStatus,
RoleDO::getCreateTime,
RoleDO::getRemark,
RoleDO::getDeleted)
.distinct()
.leftJoin(UserRoleDO.class, UserRoleDO::getRoleId, RoleDO::getId)
.leftJoin(AdminUserDO.class, AdminUserDO::getId, UserRoleDO::getUserId)
.leftJoin(DeptDO.class, DeptDO::getId, AdminUserDO::getDeptId)
.likeIfExists(RoleDO::getName, reqVO.getName())
.likeIfExists(RoleDO::getCode, reqVO.getCode())
.eqIfExists(RoleDO::getStatus, reqVO.getStatus());
//判断是否是超级管理员
RoleDO roleDO = selectById(loginUserId);
if (ObjectUtil.isNull(roleDO) || !RoleCodeEnum.isSuperAdmin(roleDO.getCode())) {
mpjLambdaWrapper.eq(AdminUserDO::getId, loginUserId);
}
// 检查createTimes是否非空且有至少两个元素
if (createTimes != null && createTimes.length >= 2) {
mpjLambdaWrapper.between(RoleDO::getCreateTime, createTimes[0], createTimes[1]);
}
return selectPage(reqVO, mpjLambdaWrapper);
}
default RoleDO selectByName(String name) {