mirror of
https://gitee.com/dromara/RuoYi-Cloud-Plus.git
synced 2026-04-25 13:18:35 +08:00
[重大更新] 集成 mybatis-plus-join 重构项目代码(实验性功能不稳定)
This commit is contained in:
@@ -4,11 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.toolkit.JoinWrappers;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.annotation.DataColumn;
|
||||
import org.dromara.common.mybatis.annotation.DataPermission;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import org.dromara.system.domain.SysRole;
|
||||
import org.dromara.system.domain.SysUser;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysUserBo;
|
||||
import org.dromara.system.domain.vo.SysUserExportVo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
|
||||
@@ -60,7 +68,24 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.create_by")
|
||||
})
|
||||
List<SysUserExportVo> selectUserExportList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
|
||||
default List<SysUserExportVo> selectUserExportList(SysUserBo user, List<Long> deptIds) {
|
||||
MPJLambdaWrapper<SysUser> wrapper = JoinWrappers.lambda("u", SysUser.class)
|
||||
.selectAll(SysUser.class)
|
||||
.selectAs(SysDept::getDeptName, SysUserExportVo::getDeptName)
|
||||
.selectAs("u1", SysUser::getUserName, SysUserExportVo::getLeaderName)
|
||||
.leftJoin(SysDept.class, "d", SysDept::getDeptId, SysUser::getDeptId)
|
||||
.leftJoin(SysUser.class, "u1", SysUser::getUserId, SysDept::getLeader)
|
||||
.eq("u", SysUser::getDelFlag, SystemConstants.NORMAL)
|
||||
.like(StringUtils.isNotBlank(user.getUserName()), "u", SysUser::getUserName, user.getUserName())
|
||||
.like(StringUtils.isNotBlank(user.getNickName()), "u", SysUser::getNickName, user.getNickName())
|
||||
.eq(StringUtils.isNotBlank(user.getStatus()), "u", SysUser::getStatus, user.getStatus())
|
||||
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u", SysUser::getPhonenumber, user.getPhonenumber())
|
||||
.between(user.getParams().get("beginTime") != null && user.getParams().get("endTime") != null,
|
||||
"u", SysUser::getCreateTime, user.getParams().get("beginTime"), user.getParams().get("endTime"))
|
||||
.in(deptIds != null && !deptIds.isEmpty(), "u", SysUser::getDeptId, deptIds)
|
||||
.orderByAsc("u", SysUser::getUserId);
|
||||
return this.selectJoinList(SysUserExportVo.class, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据条件分页查询已配用户角色列表
|
||||
@@ -73,7 +98,12 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.create_by")
|
||||
})
|
||||
Page<SysUserVo> selectAllocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
|
||||
default Page<SysUserVo> selectAllocatedList(Page<SysUserVo> page, SysUserBo user) {
|
||||
MPJLambdaWrapper<SysUser> wrapper = this.buildUserRoleJoinWrapper(user)
|
||||
.eq(user.getRoleId() != null, "r", SysRole::getRoleId, user.getRoleId())
|
||||
.orderByAsc("u", SysUser::getUserId);
|
||||
return this.selectJoinPage(page, SysUserVo.class, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据条件分页查询未分配用户角色列表
|
||||
@@ -85,7 +115,12 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.create_by")
|
||||
})
|
||||
Page<SysUserVo> selectUnallocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
|
||||
default Page<SysUserVo> selectUnallocatedList(Page<SysUserVo> page, SysUserBo user, List<Long> userIds) {
|
||||
MPJLambdaWrapper<SysUser> wrapper = this.buildUserRoleJoinWrapper(user)
|
||||
.notIn(userIds != null && !userIds.isEmpty(), "u", SysUser::getUserId, userIds)
|
||||
.orderByAsc("u", SysUser::getUserId);
|
||||
return this.selectJoinPage(page, SysUserVo.class, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID统计用户数量
|
||||
@@ -128,4 +163,17 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
|
||||
})
|
||||
int updateById(@Param(Constants.ENTITY) SysUser user);
|
||||
|
||||
private MPJLambdaWrapper<SysUser> buildUserRoleJoinWrapper(SysUserBo user) {
|
||||
return JoinWrappers.lambda("u", SysUser.class)
|
||||
.distinct()
|
||||
.selectAll(SysUser.class)
|
||||
.leftJoin(SysDept.class, "d", SysDept::getDeptId, SysUser::getDeptId)
|
||||
.leftJoin(SysUserRole.class, "sur", SysUserRole::getUserId, SysUser::getUserId)
|
||||
.leftJoin(SysRole.class, "r", SysRole::getRoleId, SysUserRole::getRoleId)
|
||||
.eq("u", SysUser::getDelFlag, SystemConstants.NORMAL)
|
||||
.like(StringUtils.isNotBlank(user.getUserName()), "u", SysUser::getUserName, user.getUserName())
|
||||
.eq(StringUtils.isNotBlank(user.getStatus()), "u", SysUser::getStatus, user.getStatus())
|
||||
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u", SysUser::getPhonenumber, user.getPhonenumber());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ public interface ISysPermissionService {
|
||||
* 根据角色列表构建数据权限角色映射
|
||||
*
|
||||
* @param roles 角色列表
|
||||
* @return key 为权限码 value 为命中的角色列表
|
||||
* @return key 为权限码 value 为命中的角色ID列表
|
||||
*/
|
||||
Map<String, List<RoleDTO>> getDataScopeRoleMap(List<RoleDTO> roles);
|
||||
Map<String, List<Long>> getDataScopeRoleMap(List<RoleDTO> roles);
|
||||
|
||||
}
|
||||
|
||||
@@ -62,16 +62,15 @@ public class SysPermissionServiceImpl implements ISysPermissionService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<RoleDTO>> getDataScopeRoleMap(List<RoleDTO> roles) {
|
||||
public Map<String, List<Long>> getDataScopeRoleMap(List<RoleDTO> roles) {
|
||||
if (CollUtil.isEmpty(roles)) {
|
||||
return Map.of();
|
||||
}
|
||||
Map<Long, RoleDTO> roleMap = StreamUtils.toIdentityMap(roles, RoleDTO::getRoleId);
|
||||
List<Long> roleIds = StreamUtils.toList(roles, RoleDTO::getRoleId);
|
||||
Map<Long, Set<String>> permsRoleIds = menuService.selectMenuPermsByRoleIds(roleIds);
|
||||
Map<String, List<RoleDTO>> rolePermsMap = new LinkedHashMap<>();
|
||||
Map<String, List<Long>> rolePermsMap = new LinkedHashMap<>();
|
||||
permsRoleIds.forEach((roleId, perms) -> {
|
||||
perms.forEach(perm -> rolePermsMap.computeIfAbsent(perm, k -> new ArrayList<>()).add(roleMap.get(roleId)));
|
||||
perms.forEach(perm -> rolePermsMap.computeIfAbsent(perm, key -> new ArrayList<>()).add(roleId));
|
||||
});
|
||||
return rolePermsMap;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -70,20 +69,8 @@ public class SysUserServiceImpl implements ISysUserService {
|
||||
*/
|
||||
@Override
|
||||
public List<SysUserExportVo> selectUserExportList(SysUserBo user) {
|
||||
Map<String, Object> params = user.getParams();
|
||||
QueryWrapper<SysUser> wrapper = Wrappers.query();
|
||||
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
|
||||
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
|
||||
.like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
|
||||
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
|
||||
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
|
||||
.between(params.get("beginTime") != null && params.get("endTime") != null,
|
||||
"u.create_time", params.get("beginTime"), params.get("endTime"))
|
||||
.and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
|
||||
List<Long> deptIds = deptMapper.selectDeptAndChildById(user.getDeptId());
|
||||
w.in("u.dept_id", deptIds);
|
||||
}).orderByAsc("u.user_id");
|
||||
return baseMapper.selectUserExportList(wrapper);
|
||||
List<Long> deptIds = ObjectUtil.isNotNull(user.getDeptId()) ? deptMapper.selectDeptAndChildById(user.getDeptId()) : null;
|
||||
return baseMapper.selectUserExportList(user, deptIds);
|
||||
}
|
||||
|
||||
private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) {
|
||||
@@ -116,14 +103,7 @@ public class SysUserServiceImpl implements ISysUserService {
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> selectAllocatedList(SysUserBo user, PageQuery pageQuery) {
|
||||
QueryWrapper<SysUser> wrapper = Wrappers.query();
|
||||
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
|
||||
.eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
|
||||
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
|
||||
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
|
||||
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
|
||||
.orderByAsc("u.user_id");
|
||||
Page<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
|
||||
Page<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), user);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@@ -136,14 +116,7 @@ public class SysUserServiceImpl implements ISysUserService {
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> selectUnallocatedList(SysUserBo user, PageQuery pageQuery) {
|
||||
List<Long> userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
|
||||
QueryWrapper<SysUser> wrapper = Wrappers.query();
|
||||
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
|
||||
.and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
|
||||
.notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
|
||||
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
|
||||
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
|
||||
.orderByAsc("u.user_id");
|
||||
Page<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
|
||||
Page<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), user, userIds);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,39 +4,4 @@
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.system.mapper.SysUserMapper">
|
||||
|
||||
<resultMap type="org.dromara.system.domain.vo.SysUserVo" id="SysUserResult">
|
||||
<id property="userId" column="user_id"/>
|
||||
</resultMap>
|
||||
<resultMap type="org.dromara.system.domain.vo.SysUserExportVo" id="SysUserExportResult">
|
||||
<id property="userId" column="user_id"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectUserExportList" resultMap="SysUserExportResult">
|
||||
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
|
||||
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
|
||||
d.dept_name, d.leader, u1.user_name as leaderName
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user u1 on u1.user_id = d.leader
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
<select id="selectAllocatedList" resultMap="SysUserResult">
|
||||
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role sur on u.user_id = sur.user_id
|
||||
left join sys_role r on r.role_id = sur.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
<select id="selectUnallocatedList" resultMap="SysUserResult">
|
||||
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role sur on u.user_id = sur.user_id
|
||||
left join sys_role r on r.role_id = sur.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user