Bladeren bron

更改用户管理查询缓慢原因

gaoxiong 2 jaren geleden
bovenliggende
commit
5a7674a7f1

+ 6 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/SysUser.java

@@ -218,6 +218,12 @@ public class SysUser extends BaseEntity {
     @ApiModelProperty(value = "同步人员的编码")
     private String code;
 
+    /**
+     * 原始机构id
+     */
+    @ApiModelProperty(value = "原始机构id")
+    private Long originalOrgId;
+
 
     /** 机构对象 */
     @TableField(exist = false)

+ 10 - 1
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysUserMapper.java

@@ -1,6 +1,7 @@
 package com.xunmei.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.domain.vo.SysUserVO;
@@ -10,7 +11,7 @@ import java.util.List;
 
 /**
  * 用户表 数据层
- * 
+ *
  * @author xunmei
  */
 public interface SysUserMapper extends BaseMapper<SysUser>
@@ -24,6 +25,14 @@ public interface SysUserMapper extends BaseMapper<SysUser>
      List<SysUser> selectUserList(SysUser sysUser);
 
     /**
+     * sql重写分页数据
+     * @param page
+     * @param info
+     * @return
+     */
+     Page<SysUser> getPage(Page<SysUser> page,@Param("info") SysUser info);
+
+    /**
      * 根据条件分页查询已配用户角色列表
      *
      * @param user 用户信息

+ 10 - 27
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysUserServiceImpl.java

@@ -91,38 +91,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         } else {
             page = new Page<>();
         }
+
         //查询条件
-        QueryWrapper<SysUser> query = new QueryWrapper<>(user);
-        QueryWrapper queryWrapper = new QueryWrapper();
-        queryWrapper.eq("parent_id", -1);
-        SysOrg sysOrg1 = sysOrgMapper.selectOne(queryWrapper);
+        QueryWrapper<SysOrg> queryWrapper = new QueryWrapper<>();
+        SysOrg org = null;
         if (null == user.getOrgId()) {
-            user.setOrgId(sysOrg1.getId());
+            queryWrapper.eq("parent_id", -1);
+            org = sysOrgMapper.selectOne(queryWrapper);
+        }else{
+            org = sysOrgMapper.selectById(user.getOrgId());
         }
-        //下穿
-        if (user.getCheckSub()) {
-            List<Long> ids = orgService.selectCheckSubOrgIdList(user.getOrgId());
-            //清空前端传递的org_id
-            user.setOrgId(null);
-            //添加in条件
-            query.in("org_id", ids);
+        user.setOrgPath(org.getPath());
 
-        }
-        //时间范围查询
-        if (user.getParams().get("beginTime") != null && user.getParams().get("endTime") != null) {
-            query.between("create_time", user.getParams().get("beginTime"), user.getParams().get("endTime"));
-        }
-        //模糊查询
-        if (StringUtils.isNotNull(user.getUsername())) {
-            query.like("username", user.getUsername());
-            user.setUsername(null);
-        }
         //获取数据
-        page = userMapper.selectPage(page, query);
-        for (SysUser u :
-                page.getRecords()) {
-            u.setOrgName(orgService.selectSysOrgById(u.getOrgId()).getName());
-        }
+        page = userMapper.getPage(page,user);
+
         //抓换为TableDataInfo适配前端
         return TableDataInfo.build(page);
 

+ 67 - 3
soc-modules/soc-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -137,7 +137,7 @@
     </select>
 
     <select id="selectAllocatedList" parameterType="com.xunmei.system.domain.vo.SysUserVO"
-            resultType="com.xunmei.system.domain.vo.SysUserVO">
+            resultType="com.xunmei.system.api.domain.SysUser">
         select distinct u.name as name,u.is_lock as isLock, u.id as id, u.dept_id as deptId, u.username as username,
         u.phone as phone, u.create_time as createTime
         from sys_user u
@@ -156,7 +156,7 @@
     </select>
 
     <select id="selectUnallocatedList" parameterType="com.xunmei.system.domain.vo.SysUserVO"
-            resultType="com.xunmei.system.domain.vo.SysUserVO">
+            resultType="com.xunmei.system.api.domain.SysUser">
         select distinct u.id, u.dept_id, u.username, u.name, u.phone, u.is_lock, u.create_time
         from sys_user u
         left join sys_dept d on u.dept_id = d.dept_id
@@ -388,4 +388,68 @@
                  inner join sys_user u on o.id = u.org_id
         where u.id = #{userId}
     </select>
-</mapper>
+
+    <select id="getPage" resultType="com.xunmei.system.api.domain.SysUser">
+        select
+        u.id,
+        u.dept_id,
+        u.is_lock,
+        u.job_id,
+        u.name,
+        u.username,
+        u.org_id,
+        u.phone,
+        u.create_time,
+        u.modified_name,
+        u.update_time,
+        u.modified_id,
+        u.password,
+        u.salt,
+        u.deleted,
+        u.last_ip,
+        u.last_time,
+        o.name as org_name,
+        o.path as org_path,
+        u.image,
+        u.card,
+        u.gender,
+        u.job_number,
+        u.note,
+        u.is_sign,
+        u.sign_time,
+        u.agreement_id,
+        u.sign_version,
+        u.approve_status,
+        u.locked,
+        u.create_by,
+        u.update_by,
+        u.code,
+        u.source,
+        u.original_org_id
+        from sys_user u
+        left join  sys_org o on u.original_org_id = o.id
+        where 1=1
+        <choose>
+            <when test="info.checkSub">
+                AND o.path like concat('%', #{info.orgPath}, '%')
+            </when>
+            <otherwise>
+                AND o.id = #{info.orgId}
+            </otherwise>
+        </choose>
+        <if test="info.isLock != null and info.isLock != ''">
+            AND u.is_lock = #{isLock}
+        </if>
+        <if test="info.username != null and info.username != ''">
+            AND u.username like concat('%', #{info.username}, '%')
+        </if>
+        <if test="info.params.beginTime != null and info.params.beginTime != ''">
+            <!-- 开始时间检索 -->
+            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+        </if>
+        <if test="info.params.endTime != null and info.params.endTime != ''">
+            <!-- 结束时间检索 -->
+            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+        </if>
+    </select>
+</mapper>