refactor(system): 优化用户查询功能并调整部门相关代码

- 移除了Dept实体中的members字段
- 删除了DeptMapper.xml中的members相关映射
- 移除了DeptTree类
- 更新了gateway.sql和sys_user.sql以添加用户数据
- 优化了UserController中的用户查询方法,支持按部门ID查询
- 更新了UserMapper.xml以适应新的查询逻辑
- 调整了UserQuery类,使用部门ID列表替代单个部门ID
This commit is contained in:
zhuangtianxiang 2025-01-24 18:29:33 +08:00
parent d706e56451
commit c7ae0385a0
8 changed files with 43 additions and 67 deletions

View File

@ -3,28 +3,28 @@ package com.zsc.edu.gateway.modules.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.source.tree.Tree;
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission; import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
import com.zsc.edu.gateway.framework.security.UserDetailsImpl; import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
import com.zsc.edu.gateway.modules.system.dto.UserCreateDto; import com.zsc.edu.gateway.modules.system.dto.UserCreateDto;
import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdateDto; import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdateDto;
import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdatePasswordDto; import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdatePasswordDto;
import com.zsc.edu.gateway.modules.system.dto.UserUpdateDto; import com.zsc.edu.gateway.modules.system.dto.UserUpdateDto;
import com.zsc.edu.gateway.modules.system.entity.Authority; import com.zsc.edu.gateway.modules.system.entity.*;
import com.zsc.edu.gateway.modules.system.entity.Menu;
import com.zsc.edu.gateway.modules.system.entity.Role;
import com.zsc.edu.gateway.modules.system.entity.User;
import com.zsc.edu.gateway.modules.system.query.UserQuery; import com.zsc.edu.gateway.modules.system.query.UserQuery;
import com.zsc.edu.gateway.modules.system.service.*; import com.zsc.edu.gateway.modules.system.service.*;
import com.zsc.edu.gateway.modules.system.utils.TreeUtil; import com.zsc.edu.gateway.modules.system.utils.TreeUtil;
import com.zsc.edu.gateway.modules.system.vo.MenuVo; import com.zsc.edu.gateway.modules.system.vo.MenuVo;
import com.zsc.edu.gateway.modules.system.vo.UserDetail; import com.zsc.edu.gateway.modules.system.vo.UserDetail;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.web.csrf.CsrfToken; import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 用户Controller * 用户Controller
@ -119,10 +119,14 @@ public class UserController {
* @param page 分页 * @param page 分页
* @return 分页用户信息 * @return 分页用户信息
*/ */
@DataPermission @GetMapping()
@GetMapping
@PreAuthorize("hasAuthority('system:user:query')") @PreAuthorize("hasAuthority('system:user:query')")
public Page<User> query(UserQuery query, Page<User> page) { public Page<User> query(Long deptId, UserQuery query, Page<User> page) {
if (deptId != null) {
List<Dept> deptList = TreeUtil.flat(deptService.listTree(deptId), Dept::getChildren, d -> d.setChildren(null));
List<Long> deptIds = deptList.stream().map(Dept::getId).collect(Collectors.toList());
query.setDeptIds(deptIds);
}
return service.page(page, query.wrapper()); return service.page(page, query.wrapper());
} }

View File

@ -48,7 +48,4 @@ public class Dept extends BaseEntity {
@TableField(exist = false) @TableField(exist = false)
public List<Dept> children = null; public List<Dept> children = null;
@TableField(exist = false)
public List<UserVo> members = null;
} }

View File

@ -1,12 +1,14 @@
package com.zsc.edu.gateway.modules.system.query; package com.zsc.edu.gateway.modules.system.query;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.zsc.edu.gateway.modules.system.entity.User; import com.zsc.edu.gateway.modules.system.entity.User;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@ -48,7 +50,9 @@ public class UserQuery {
/** /**
* 部门集合 * 部门集合
*/ */
public Long deptId; public List<Long> deptIds;
public LambdaQueryWrapper<User> wrapper() { public LambdaQueryWrapper<User> wrapper() {
@ -57,7 +61,7 @@ public class UserQuery {
queryWrapper.eq(StringUtils.hasText(this.phone), User::getPhone, this.phone); queryWrapper.eq(StringUtils.hasText(this.phone), User::getPhone, this.phone);
queryWrapper.eq(StringUtils.hasText(this.email), User::getEmail, this.email); queryWrapper.eq(StringUtils.hasText(this.email), User::getEmail, this.email);
queryWrapper.eq(Objects.nonNull(this.enableState), User::getEnableState, this.enableState); queryWrapper.eq(Objects.nonNull(this.enableState), User::getEnableState, this.enableState);
queryWrapper.eq(Objects.nonNull(this.deptId),User::getDeptId,this.deptId); queryWrapper.in(CollectionUtils.isNotEmpty(this.deptIds), User::getDeptId, this.deptIds);
queryWrapper.eq(Objects.nonNull(this.roleId),User::getRoleId,this.roleId); queryWrapper.eq(Objects.nonNull(this.roleId),User::getRoleId,this.roleId);
return queryWrapper; return queryWrapper;
} }

View File

@ -1,25 +0,0 @@
package com.zsc.edu.gateway.modules.system.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.zsc.edu.gateway.modules.system.entity.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhuang
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DeptTree {
private Long id;
private Long pid;
private String name;
List<DeptTree> children = new ArrayList<>();
List<UserVo> members = new ArrayList<>();
}

View File

@ -754,3 +754,15 @@ comment on column sys_user.enable_state is '状态';
alter table sys_user alter table sys_user
owner to gitea; owner to gitea;
INSERT INTO sys_user (dept_id, role_id, username, password, phone, email, name, avatar, address, create_by, update_by,
create_time, update_time, remark, enable_state, create_id)
VALUES (1, 1, 'user1', 'password1', '13800138000', 'user1@example.com', '张三', 'avatar1.jpg', '北京市', 'admin',
'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '备注1', '启用', 1),
(2, 2, 'user2', 'password2', '13800138001', 'user2@example.com', '李四', 'avatar2.jpg', '上海市', 'admin',
'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '备注2', '启用', 2),
(3, 3, 'user3', 'password3', '13800138002', 'user3@example.com', '王五', 'avatar3.jpg', '广州市', 'admin',
'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '备注3', '禁用', 3),
(4, 4, 'user4', 'password4', '13800138003', 'user4@example.com', '赵六', 'avatar4.jpg', '深圳市', 'admin',
'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '备注4', '启用', 4),
(5, 5, 'user5', 'password5', '13800138004', 'user5@example.com', '孙七', 'avatar5.jpg', '杭州市', 'admin',
'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '备注5', '启用', 5);

View File

@ -1,5 +1,8 @@
create table sys_user create table sys_user
( (
id bigserial
constraint _copy_3
primary key,
dept_id bigint, dept_id bigint,
role_id bigint, role_id bigint,
username varchar(20) not null, username varchar(20) not null,
@ -15,8 +18,7 @@ create table sys_user
update_time timestamp(6), update_time timestamp(6),
remark varchar(255), remark varchar(255),
enable_state varchar(5), enable_state varchar(5),
id bigint not null create_id bigint
primary key
); );
comment comment
@ -55,14 +57,13 @@ on column sys_user.update_by is '更新者';
comment comment
on column sys_user.enable_state is '状态'; on column sys_user.enable_state is '状态';
alter table sys_user comment
owner to gitea; on column sys_user.create_id is '创建者ID';
_user
.
enable_state
is '状态';
alter table sys_user alter table sys_user
owner to gitea; owner to gitea;
lter
table sys_user
owner to gitea;

View File

@ -9,26 +9,10 @@
<result column="name" property="name"/> <result column="name" property="name"/>
<result column="dept_sort" property="deptSort"/> <result column="dept_sort" property="deptSort"/>
<result column="remark" property="remark"/> <result column="remark" property="remark"/>
<collection
property="members"
ofType="com.zsc.edu.gateway.modules.system.vo.UserVo"
autoMapping="true"
columnPrefix="members_"
>
<id column="id" jdbcType="BIGINT" property="userId"/>
<result column="username" jdbcType="VARCHAR" property="username"/>
<result column="email" jdbcType="VARCHAR" property="email"/>
<result column="phone" jdbcType="VARCHAR" property="phone"/>
</collection>
</resultMap> </resultMap>
<select id="selectDeptTree" resultMap="deptMap"> <select id="selectDeptTree" resultMap="deptMap">
SELECT sd.*, SELECT *
su.id as members_id, FROM sys_dept
su.username as members_username,
su.email as members_email,
su.phone as members_phone
FROM sys_dept sd
left join sys_user su on sd.id = su.dept_id
</select> </select>
</mapper> </mapper>

View File

@ -49,9 +49,8 @@
</select> </select>
<select id="page" resultType="com.zsc.edu.gateway.modules.system.vo.UserVo" resultMap="UserVoMap"> <select id="page" resultType="com.zsc.edu.gateway.modules.system.vo.UserVo" resultMap="UserVoMap">
select select su.*
* from sys_user su
from sys_user
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<select id="detail" resultType="com.zsc.edu.gateway.modules.system.vo.UserVo" resultMap="UserVoMap"> <select id="detail" resultType="com.zsc.edu.gateway.modules.system.vo.UserVo" resultMap="UserVoMap">