推送用户列表查询的分页bug

This commit is contained in:
2025-06-26 21:58:49 +08:00
parent d0b280070e
commit f0836aac73
2 changed files with 51 additions and 16 deletions

View File

@@ -1,6 +1,7 @@
package com.ruoyi.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.annotation.DataColumn;
@@ -22,7 +23,7 @@ public interface SysUserMapper extends BaseMapperPlus<SysUserMapper, SysUser, Sy
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUser> selectPageUserList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
Page<SysUser> selectPageUserList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) QueryWrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询用户列表

View File

@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
<resultMap type="SysUser" id="SysUserResult">
<resultMap type="com.ruoyi.common.core.domain.entity.SysUser" id="SysUserResult">
<id property="userId" column="user_id"/>
<result property="deptId" column="dept_id"/>
<result property="userName" column="user_name"/>
@@ -28,11 +28,16 @@
<result property="bankCard" column="bank_card"/>
<result property="insure" column="insure"/>
<result property="laborCost" column="labor_cost"/>
<association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
<association property="dept" column="dept_id" javaType="com.ruoyi.common.core.domain.entity.SysDept" resultMap="deptResult"/>
<!-- 嵌套查询加载 roles 列表 -->
<collection property="roles"
ofType="com.ruoyi.common.core.domain.entity.SysRole"
column="user_id"
select="selectRolesByUserId"/>
</resultMap>
<resultMap id="deptResult" type="SysDept">
<resultMap id="deptResult" type="com.ruoyi.common.core.domain.entity.SysDept">
<id property="deptId" column="dept_id"/>
<result property="parentId" column="parent_id"/>
<result property="deptName" column="dept_name"/>
@@ -42,7 +47,7 @@
<result property="status" column="dept_status"/>
</resultMap>
<resultMap id="RoleResult" type="SysRole">
<resultMap id="RoleResult" type="com.ruoyi.common.core.domain.entity.SysRole">
<id property="roleId" column="role_id"/>
<result property="roleName" column="role_name"/>
<result property="roleKey" column="role_key"/>
@@ -62,6 +67,44 @@
<result property="laborCost" column="labor_cost"/>
</resultMap>
<select id="selectPageUserList" resultMap="SysUserResult">
SELECT
u.*,
d.dept_name,
d.leader
FROM (
-- 子查询:去重并分页
SELECT u.user_id
FROM sys_user u
LEFT JOIN sys_user_role sur
ON sur.user_id = u.user_id
LEFT JOIN sys_role sr
ON sr.role_id = sur.role_id
${ew.getCustomSqlSegment}
GROUP BY u.user_id
) ids
-- 回联完整用户表alias: u_full
JOIN sys_user u
ON u.user_id = ids.user_id
-- 回联部门表
LEFT JOIN sys_dept d
ON u.dept_id = d.dept_id
</select>
<!-- 嵌套查询:根据 user_id 加载角色 -->
<select id="selectRolesByUserId"
resultMap="RoleResult"
parameterType="long">
SELECT
r.role_id,
r.role_name
FROM sys_role r
INNER JOIN sys_user_role sur
ON r.role_id = sur.role_id
WHERE sur.user_id = #{user_id}
</select>
<sql id="selectUserVo">
select u.user_id,
u.dept_id,
@@ -103,18 +146,9 @@
left join sys_role r on r.role_id = sur.role_id
</sql>
<select id="selectPageUserList" resultMap="SysUserResult">
select u.user_id, u.insure, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,u.id_card,u.bank_card,u.labor_cost,
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader,sr.role_id,sr.role_name
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_user_role sur on sur.user_id = u.user_id
left join sys_role sr on sr.role_id = sur.role_id
${ew.getCustomSqlSegment}
</select>
<select id="selectUserList" resultMap="SysUserResult">
select u.user_id, u.insure, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
select distinct u.user_id, u.insure, 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
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id