mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-09-13 14:57:16 +08:00
perf: 优化用户及部门查询
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据用户名查询
|
* 根据用户名查询
|
||||||
|
@@ -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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
*/
|
*/
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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)
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user