Browse Source

优化代码查询接口

Guos 2 tuần trước cách đây
mục cha
commit
4cc98a51ea

+ 30 - 9
fs-admin/src/main/java/com/fs/his/controller/FsUserController.java

@@ -1,6 +1,7 @@
 package com.fs.his.controller;
 
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 import com.alibaba.fastjson.JSON;
@@ -9,6 +10,8 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.domain.entity.SysRole;
 import com.fs.common.core.domain.entity.SysUser;
+import com.fs.common.core.page.PageDomain;
+import com.fs.common.core.page.TableSupport;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.SecurityUtils;
@@ -45,6 +48,7 @@ import org.apache.ibatis.session.SqlSessionFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.Assert;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -142,16 +146,29 @@ public class FsUserController extends BaseController
 
     @PreAuthorize("@ss.hasPermi('his:user:list')")
     @GetMapping("/listProject")
-    public TableDataInfo listProject(FsUser fsUser)
-    {
-        startPage();
+    public TableDataInfo listProject(FsUser fsUser) {
+        Assert.notNull(fsUser.getPageNum(),"当前页码不能为空!");
+        Assert.notNull(fsUser.getPageSize(),"每页展示条数不为空!");
         if(StringUtils.isNotEmpty(fsUser.getPhone())){
             fsUser.setPhone(encryptPhone(fsUser.getPhone()));
         }
-        List<FsUserVO> list = fsUserService.selectFsUserVOListByProject(fsUser);
+        //总条数
+        CompletableFuture<Integer> totalCompletableFuture = CompletableFuture.supplyAsync(() -> {
+            Integer total = fsUserService.selectFsUserVOCountByProject(fsUser);
+            return total;
+        });
+        //计算分页并查询数据
+        CompletableFuture<List<FsUserVO>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
+            Integer pageNum = fsUser.getPageNum();
+            Integer pageSize = fsUser.getPageSize();
+            fsUser.setPageNum((pageNum - 1) * pageSize);
+            List<FsUserVO> list = fsUserService.selectFsUserVOListByProject(fsUser);
+            return list;
+        });
+        List<FsUserVO> list = listCompletableFuture.join();
         SysRole sysRole = isCheckPermission();
         for (FsUserVO fsUserVO : list) {
-            if(fsUserVO.getPhone() != null&&fsUserVO.getPhone()!=""){
+            if(fsUserVO.getPhone() != null && fsUserVO.getPhone() !="") {
                 if (!(sysRole.getIsCheckPhone()==1)){
                     if (fsUserVO.getPhone().length()>11){
                         fsUserVO.setPhone(decryptPhoneMk(fsUserVO.getPhone()));
@@ -165,20 +182,24 @@ public class FsUserController extends BaseController
                 }
             }
         }
-        return getDataTable(list);
+        //重新setTotal
+        TableDataInfo dataTable = getDataTable(list);
+        dataTable.setTotal(totalCompletableFuture.join());
+        return dataTable;
     }
 
     @PreAuthorize("@ss.hasPermi('his:user:export')")
     @GetMapping("/exportListProject")
-    public AjaxResult exportListProject(FsUser fsUser)
-    {
+    public AjaxResult exportListProject(FsUser fsUser) {
         if(StringUtils.isNotEmpty(fsUser.getPhone())){
             fsUser.setPhone(encryptPhone(fsUser.getPhone()));
         }
+        fsUser.setPageNum(null);
+        fsUser.setPageSize(null);
         List<FsUserVO> list = fsUserService.selectFsUserVOListByProject(fsUser);
         SysRole sysRole = isCheckPermission();
         for (FsUserVO fsUserVO : list) {
-            if(fsUserVO.getPhone() != null&&fsUserVO.getPhone()!=""){
+            if(fsUserVO.getPhone() != null&&fsUserVO.getPhone() !="") {
                 if (!(sysRole.getIsCheckPhone()==1)){
                     if (fsUserVO.getPhone().length()>11){
                         fsUserVO.setPhone(decryptPhoneMk(fsUserVO.getPhone()));

+ 4 - 0
fs-service/src/main/java/com/fs/his/domain/FsUser.java

@@ -21,6 +21,10 @@ public class FsUser extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    private Integer pageNum;
+
+    private Integer pageSize;
+
     /** 用户id */
     @Excel(name = "ID", sort = 0)
     private Long userId;

+ 14 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -351,8 +351,21 @@ public interface FsUserMapper
 
     @Select("select * from fs_user where user_id=#{userId} for update")
     FsUser selectFsUserByIdForUpdate(Long userId);
+
+    /**
+     * 查询项目会员数据
+     * @param fsUser
+     * @return
+     */
     List<FsUserVO> selectFsUserVOListByProject(@Param("maps") FsUser fsUser);
 
+    /**
+     * 查询项目会员数据(统计总条数)
+     * @param fsUser
+     * @return
+     */
+    Integer selectFsUserVOCountByProject(@Param("maps") FsUser fsUser);
+
     FsUserAndCompanyAndDoctorVo selectCompanyAndDoctor(@Param("userId")Long userId);
 
     List<FsUser> selectUserNameByIds(@Param("userIds") String userIds);
@@ -429,4 +442,5 @@ public interface FsUserMapper
 
     @Select("select * from fs_user where ma_open_id=#{openid}")
     FsUser selectFsUserByMaOpenId(String openid);
+
 }

+ 9 - 1
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -189,12 +189,20 @@ public interface IFsUserService
 
     /**
      * 查询项目会员数据
-     *
+     * 重载1
      * @param fsUser
      * @return
      */
     List<FsUserVO> selectFsUserVOListByProject(FsUser fsUser);
 
+    /**
+     * 查询项目会员数据(统计)
+     *
+     * @param fsUser
+     * @return
+     */
+    Integer selectFsUserVOCountByProject(FsUser fsUser);
+
     FsUserAndCompanyAndDoctorVo selectCompanyAndDoctor(Long userId);
 
     List<FsUser> selectUserByIds(String userIds);

+ 12 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -1179,6 +1179,18 @@ public class FsUserServiceImpl implements IFsUserService {
         return fsUserMapper.selectFsUserVOListByProject(fsUser);
     }
 
+    /**
+     * 查询项目会员数据(统计总条数)
+     *
+     * @param fsUser
+     * @return
+     */
+    @Override
+    public Integer selectFsUserVOCountByProject(FsUser fsUser){
+        return fsUserMapper.selectFsUserVOCountByProject(fsUser);
+    }
+
+
     @Override
     public FsUserAndCompanyAndDoctorVo selectCompanyAndDoctor(Long userId) {
         return fsUserMapper.selectCompanyAndDoctor(userId);

+ 109 - 33
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -1821,42 +1821,54 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectFsUserVOListByProject" resultType="com.fs.his.vo.FsUserVO">
-        SELECT distinct
-        b.total_amount,b.last_buy_time,p.pay_money as number,p.payment_id,p.pay_time,
-        u.user_id, u.nick_name, u.avatar, u.phone, u.integral, u.now_money,
-        fcc.watch_course_count, fcc.part_course_count, company_user.nick_name AS companyUserNickName, fcc.last_watch_date
-        ,company.company_name,
-        ucu.project_id,
-        ucu.id as companyUserId,
-        ucu.create_time as bindTime,
-        ucu.status
-        FROM
-        fs_user u
+        SELECT DISTINCT
+            b.total_amount,
+            b.last_buy_time,
+            p.pay_money AS number,
+            p.payment_id,
+            p.pay_time,
+            u.user_id,
+            u.nick_name,
+            u.avatar,
+            u.phone,
+            u.integral,
+            u.now_money,
+            fcc.watch_course_count,
+            fcc.part_course_count,
+            company_user.nick_name AS companyUserNickName,
+            fcc.last_watch_date,
+            company.company_name,
+            ucu.project_id,
+            ucu.id AS companyUserId,
+            ucu.create_time AS bindTime,
+            ucu.STATUS
+        FROM fs_user u
         LEFT JOIN (
-        SELECT max( payment_id ) AS payment_id, max( pay_time ) AS last_buy_time, SUM( pay_money ) AS total_amount,
-        user_id
-        FROM
-        fs_store_payment
-        WHERE
-        STATUS = 1
-        AND user_id IS NOT NULL
-        GROUP BY
-        user_id
+            SELECT
+            max(payment_id) AS payment_id,
+            max(pay_time) AS last_buy_time,
+            SUM(pay_money) AS total_amount,
+            user_id
+            FROM
+            fs_store_payment
+            WHERE
+            STATUS = 1
+            AND user_id IS NOT NULL
+            GROUP BY
+            user_id
         ) b ON u.user_id = b.user_id
-        LEFT JOIN fs_store_payment p ON u.user_id = p.user_id
-        AND b.last_buy_time = p.pay_time
-        AND b.payment_id = p.payment_id
+        LEFT JOIN fs_store_payment p ON u.user_id = p.user_id AND b.last_buy_time = p.pay_time AND b.payment_id = p.payment_id
         LEFT JOIN (
-        SELECT
-        fs_user_course_count.user_id,Max( fs_user_course_count.last_watch_date ) AS last_watch_date,fs_user_course_count.watch_course_count,
-        fs_user_course_count.part_course_count
-        FROM
-        fs_user_course_count
-        GROUP BY fs_user_course_count.user_id
+            SELECT fs_user_course_count.user_id,
+            MAX(fs_user_course_count.last_watch_date) AS last_watch_date,
+            MAX(fs_user_course_count.watch_course_count) AS watch_course_count,
+            MAX(fs_user_course_count.part_course_count) AS part_course_count
+            FROM fs_user_course_count
+            GROUP BY fs_user_course_count.user_id
         ) fcc ON fcc.user_id = u.user_id
-        inner join fs_user_company_user ucu on ucu.user_id = u.user_id
+        INNER JOIN fs_user_company_user ucu ON ucu.user_id = u.user_id
         LEFT JOIN company_user ON company_user.user_id = ucu.company_user_id
-        LEFT JOIN company on company.company_id = company_user.company_id
+        LEFT JOIN company ON company.company_id = company_user.company_id
         <where>
             1 = 1 and u.nick_name is not null
             and u.is_del = 0
@@ -1890,9 +1902,73 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 AND ucu.project_id = #{maps.projectId}
             </if >
         </where>
-        ORDER BY
-        user_id DESC
+        ORDER BY user_id DESC
+        <if test="maps.pageSize != null and maps.pageNum != null">
+        LIMIT #{maps.pageNum}, #{maps.pageSize}
+        </if>
+    </select>
+
+    <select id="selectFsUserVOCountByProject" resultType="java.lang.Integer">
+        SELECT count(u.user_id) FROM fs_user u
+        LEFT JOIN (
+            SELECT
+                max(payment_id) AS payment_id,
+                max(pay_time) AS last_buy_time,
+                SUM(pay_money) AS total_amount,
+                user_id
+            FROM fs_store_payment
+            WHERE STATUS = 1 AND user_id IS NOT NULL
+            GROUP BY user_id
+        ) b ON u.user_id = b.user_id
+        LEFT JOIN fs_store_payment p ON u.user_id = p.user_id AND b.last_buy_time = p.pay_time
+        AND b.payment_id = p.payment_id
+        LEFT JOIN (
+            SELECT
+            fs_user_course_count.user_id,
+            MAX(fs_user_course_count.last_watch_date) AS last_watch_date,
+            MAX(fs_user_course_count.watch_course_count) AS watch_course_count,
+            MAX(fs_user_course_count.part_course_count) AS part_course_count
+            FROM
+            fs_user_course_count
+            GROUP BY
+            fs_user_course_count.user_id
+        ) fcc ON fcc.user_id = u.user_id
+        INNER JOIN fs_user_company_user ucu ON ucu.user_id = u.user_id
+        LEFT JOIN company_user ON company_user.user_id = ucu.company_user_id
+        LEFT JOIN company ON company.company_id = company_user.company_id
+        <where>
+            1 = 1 and u.nick_name is not null and u.is_del = 0
+            <if test = "maps.nickname != null and  maps.nickname !='' " >
+                AND u.nick_name LIKE CONCAT("%",#{maps.nickname},"%")
+            </if >
+            <if test = "maps.userId != null and  maps.userId !='' " >
+                AND u.user_id = #{maps.userId}
+            </if >
+            <if test = "maps.phone != null   and  maps.phone !='' " >
+                AND u.phone LIKE CONCAT("%",#{maps.phone},"%")
+            </if >
+            <if test = "maps.startCreateTime != null and maps.endCreateTime != null" >
+                AND (DATE_FORMAT( ucu.create_time, "%Y-%m-%d" ) &gt;= DATE_FORMAT(#{maps.startCreateTime}, "%Y-%m-%d")
+                and DATE_FORMAT( ucu.create_time, "%Y-%m-%d" ) &lt;= DATE_FORMAT(#{maps.endCreateTime}, "%Y-%m-%d"))
+            </if >
+            <if test = "maps.registerCode != null  and  maps.registerCode !=''  " >
+                AND u.register_code = #{maps.registerCode}
+            </if >
+            <if test = "maps.status != null" >
+                AND ucu.status = #{maps.status}
+            </if >
+            <if test = "maps.companyId != null and maps.companyId != '' " >
+                AND company.company_id = #{maps.companyId}
+            </if >
+            <if test = "maps.companyUserId != null" >
+                AND company_user.user_id = #{maps.companyUserId}
+            </if >
+            <if test = "maps.projectId != null" >
+                AND ucu.project_id = #{maps.projectId}
+            </if >
+        </where>
     </select>
+
     <select id="selectCompanyAndDoctor" resultType="com.fs.watch.domain.vo.FsUserAndCompanyAndDoctorVo">
         SELECT
             f.*,