perf: 优化用户及部门查询

This commit is contained in:
2024-05-29 21:56:03 +08:00
parent 0285874540
commit 448f9a0a81
6 changed files with 16 additions and 28 deletions

View File

@@ -23,6 +23,7 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import top.continew.admin.common.config.mybatis.DataPermissionMapper; import top.continew.admin.common.config.mybatis.DataPermissionMapper;
import top.continew.admin.system.model.entity.UserDO; import top.continew.admin.system.model.entity.UserDO;
import top.continew.admin.system.model.resp.UserDetailResp;
import top.continew.starter.data.mybatis.plus.datapermission.DataPermission; import top.continew.starter.data.mybatis.plus.datapermission.DataPermission;
import top.continew.starter.security.crypto.annotation.FieldEncrypt; import top.continew.starter.security.crypto.annotation.FieldEncrypt;
@@ -44,8 +45,8 @@ public interface UserMapper extends DataPermissionMapper<UserDO> {
* @return 分页列表信息 * @return 分页列表信息
*/ */
@DataPermission("t1") @DataPermission("t1")
IPage<UserDO> selectUserPage(@Param("page") IPage<UserDO> page, IPage<UserDetailResp> selectUserPage(@Param("page") IPage<UserDO> page,
@Param(Constants.WRAPPER) QueryWrapper<UserDO> queryWrapper); @Param(Constants.WRAPPER) QueryWrapper<UserDO> queryWrapper);
/** /**
* 查询列表 * 查询列表
@@ -54,7 +55,7 @@ public interface UserMapper extends DataPermissionMapper<UserDO> {
* @return 列表信息 * @return 列表信息
*/ */
@DataPermission("t1") @DataPermission("t1")
List<UserDO> selectUserList(@Param(Constants.WRAPPER) QueryWrapper<UserDO> queryWrapper); List<UserDetailResp> selectUserList(@Param(Constants.WRAPPER) QueryWrapper<UserDO> queryWrapper);
/** /**
* 根据用户名查询 * 根据用户名查询

View File

@@ -16,16 +16,11 @@
package top.continew.admin.system.model.resp; package top.continew.admin.system.model.resp;
import cn.crane4j.annotation.AssembleMethod;
import cn.crane4j.annotation.ContainerMethod;
import cn.crane4j.annotation.Mapping;
import cn.crane4j.annotation.condition.ConditionOnExpression;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import top.continew.admin.common.enums.DisEnableStatusEnum; import top.continew.admin.common.enums.DisEnableStatusEnum;
import top.continew.admin.system.service.DeptService;
import top.continew.starter.extension.crud.annotation.TreeField; import top.continew.starter.extension.crud.annotation.TreeField;
import top.continew.starter.extension.crud.converter.ExcelBaseEnumConverter; import top.continew.starter.extension.crud.converter.ExcelBaseEnumConverter;
import top.continew.starter.extension.crud.model.resp.BaseDetailResp; import top.continew.starter.extension.crud.model.resp.BaseDetailResp;
@@ -58,18 +53,9 @@ public class DeptResp extends BaseDetailResp {
* 上级部门 ID * 上级部门 ID
*/ */
@Schema(description = "上级部门 ID", example = "2") @Schema(description = "上级部门 ID", example = "2")
@ConditionOnExpression(value = "#target.parentId != 0")
@AssembleMethod(props = @Mapping(src = "name", ref = "parentName"), targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptResp.class))
@ExcelProperty(value = "上级部门 ID", order = 3) @ExcelProperty(value = "上级部门 ID", order = 3)
private Long parentId; private Long parentId;
/**
* 上级部门
*/
@Schema(description = "上级部门", example = "天津总部")
@ExcelProperty(value = "上级部门", order = 4)
private String parentName;
/** /**
* 状态 * 状态
*/ */

View File

@@ -20,6 +20,7 @@ import cn.crane4j.annotation.Assemble;
import cn.crane4j.annotation.AssembleMethod; import cn.crane4j.annotation.AssembleMethod;
import cn.crane4j.annotation.ContainerMethod; import cn.crane4j.annotation.ContainerMethod;
import cn.crane4j.annotation.Mapping; import cn.crane4j.annotation.Mapping;
import cn.crane4j.annotation.condition.ConditionOnExpression;
import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler; import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
@@ -33,6 +34,7 @@ import top.continew.admin.system.service.DeptService;
import top.continew.starter.extension.crud.converter.ExcelBaseEnumConverter; import top.continew.starter.extension.crud.converter.ExcelBaseEnumConverter;
import top.continew.starter.extension.crud.model.resp.BaseDetailResp; import top.continew.starter.extension.crud.model.resp.BaseDetailResp;
import top.continew.starter.file.excel.converter.ExcelListConverter; import top.continew.starter.file.excel.converter.ExcelListConverter;
import top.continew.starter.security.crypto.annotation.FieldEncrypt;
import java.io.Serial; import java.io.Serial;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -86,6 +88,7 @@ public class UserDetailResp extends BaseDetailResp {
* 部门 ID * 部门 ID
*/ */
@Schema(description = "部门 ID", example = "5") @Schema(description = "部门 ID", example = "5")
@ConditionOnExpression("#target.deptName == null")
@AssembleMethod(props = @Mapping(src = "name", ref = "deptName"), targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptResp.class)) @AssembleMethod(props = @Mapping(src = "name", ref = "deptName"), targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptResp.class))
@ExcelProperty(value = "部门 ID", order = 6) @ExcelProperty(value = "部门 ID", order = 6)
private Long deptId; private Long deptId;
@@ -117,6 +120,7 @@ public class UserDetailResp extends BaseDetailResp {
*/ */
@Schema(description = "手机号码", example = "13811111111") @Schema(description = "手机号码", example = "13811111111")
@ExcelProperty(value = "手机号码", order = 10) @ExcelProperty(value = "手机号码", order = 10)
@FieldEncrypt
private String phone; private String phone;
/** /**
@@ -124,6 +128,7 @@ public class UserDetailResp extends BaseDetailResp {
*/ */
@Schema(description = "邮箱", example = "123456789@qq.com") @Schema(description = "邮箱", example = "123456789@qq.com")
@ExcelProperty(value = "邮箱", order = 11) @ExcelProperty(value = "邮箱", order = 11)
@FieldEncrypt
private String email; private String email;
/** /**

View File

@@ -17,9 +17,6 @@
package top.continew.admin.system.model.resp; package top.continew.admin.system.model.resp;
import cn.crane4j.annotation.Assemble; import cn.crane4j.annotation.Assemble;
import cn.crane4j.annotation.AssembleMethod;
import cn.crane4j.annotation.ContainerMethod;
import cn.crane4j.annotation.Mapping;
import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler; import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
@@ -27,7 +24,6 @@ import top.continew.admin.common.constant.ContainerConstants;
import top.continew.admin.common.enums.DisEnableStatusEnum; import top.continew.admin.common.enums.DisEnableStatusEnum;
import top.continew.admin.common.enums.GenderEnum; import top.continew.admin.common.enums.GenderEnum;
import top.continew.admin.common.util.helper.LoginHelper; import top.continew.admin.common.util.helper.LoginHelper;
import top.continew.admin.system.service.DeptService;
import top.continew.starter.extension.crud.model.resp.BaseDetailResp; import top.continew.starter.extension.crud.model.resp.BaseDetailResp;
import top.continew.starter.security.mask.annotation.JsonMask; import top.continew.starter.security.mask.annotation.JsonMask;
import top.continew.starter.security.mask.enums.MaskType; import top.continew.starter.security.mask.enums.MaskType;
@@ -110,7 +106,6 @@ public class UserResp extends BaseDetailResp {
* 部门 ID * 部门 ID
*/ */
@Schema(description = "部门 ID", example = "5") @Schema(description = "部门 ID", example = "5")
@AssembleMethod(props = @Mapping(src = "name", ref = "deptName"), targetType = DeptService.class, method = @ContainerMethod(bindMethod = "get", resultType = DeptResp.class))
private Long deptId; private Long deptId;
/** /**

View File

@@ -94,7 +94,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
@Override @Override
public PageResp<UserResp> page(UserQuery query, PageQuery pageQuery) { public PageResp<UserResp> page(UserQuery query, PageQuery pageQuery) {
QueryWrapper<UserDO> queryWrapper = this.buildQueryWrapper(query); QueryWrapper<UserDO> queryWrapper = this.buildQueryWrapper(query);
IPage<UserDO> page = baseMapper.selectUserPage(pageQuery.toPage(), queryWrapper); IPage<UserDetailResp> page = baseMapper.selectUserPage(pageQuery.toPage(), queryWrapper);
PageResp<UserResp> pageResp = PageResp.build(page, this.listClass); PageResp<UserResp> pageResp = PageResp.build(page, this.listClass);
pageResp.getList().forEach(this::fill); pageResp.getList().forEach(this::fill);
return pageResp; return pageResp;
@@ -288,7 +288,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
QueryWrapper<UserDO> queryWrapper = this.buildQueryWrapper(query); QueryWrapper<UserDO> queryWrapper = this.buildQueryWrapper(query);
// 设置排序 // 设置排序
super.sort(queryWrapper, sortQuery); super.sort(queryWrapper, sortQuery);
List<UserDO> entityList = baseMapper.selectUserList(queryWrapper); List<UserDetailResp> entityList = baseMapper.selectUserList(queryWrapper);
if (entityClass == targetClass) { if (entityClass == targetClass) {
return (List<E>)entityList; return (List<E>)entityList;
} }
@@ -309,7 +309,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
.eq(null != status, "t1.status", status) .eq(null != status, "t1.status", status)
.between(CollUtil.isNotEmpty(createTimeList), "t1.create_time", CollUtil.getFirst(createTimeList), CollUtil .between(CollUtil.isNotEmpty(createTimeList), "t1.create_time", CollUtil.getFirst(createTimeList), CollUtil
.getLast(createTimeList)) .getLast(createTimeList))
.and(null != deptId, q -> { .and(null != deptId && !SysConstants.SUPER_DEPT_ID.equals(deptId), q -> {
List<Long> deptIdList = deptService.listChildren(deptId) List<Long> deptIdList = deptService.listChildren(deptId)
.stream() .stream()
.map(DeptDO::getId) .map(DeptDO::getId)

View File

@@ -20,17 +20,18 @@
t1.status, t1.status,
t1.is_system, t1.is_system,
t1.pwd_reset_time, t1.pwd_reset_time,
t1.dept_id t1.dept_id,
t2.name AS deptName
FROM sys_user AS t1 FROM sys_user AS t1
LEFT JOIN sys_dept AS t2 ON t2.id = t1.dept_id LEFT JOIN sys_dept AS t2 ON t2.id = t1.dept_id
</sql> </sql>
<select id="selectUserPage" resultType="top.continew.admin.system.model.entity.UserDO"> <select id="selectUserPage" resultType="top.continew.admin.system.model.resp.UserDetailResp">
<include refid="selectUser" /> <include refid="selectUser" />
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>
<select id="selectUserList" resultType="top.continew.admin.system.model.entity.UserDO"> <select id="selectUserList" resultType="top.continew.admin.system.model.resp.UserDetailResp">
<include refid="selectUser" /> <include refid="selectUser" />
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </select>