Ver Fonte

会员列表看课时间修改

wangxy há 4 dias atrás
pai
commit
57b51b0602

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

@@ -20,6 +20,7 @@ import com.fs.qw.param.QwFsUserParam;
 import com.fs.qw.vo.QwFsUserVO;
 import com.fs.store.param.h5.FsUserPageListParam;
 import com.fs.store.param.h5.UserStatisticsCommonParam;
+import com.fs.store.vo.UserProjectPair;
 import com.fs.store.vo.h5.*;
 import com.fs.watch.domain.vo.FsUserAndCompanyAndDoctorVo;
 import org.apache.ibatis.annotations.*;
@@ -270,6 +271,8 @@ public interface FsUserMapper
 
     List<FsUserPageListVO> selectFsUserPageListNew(FsUserPageListParam param);
 
+    List<Map<String, Object>> selectLastWatchTimeByUserAndProject( @Param("userProjectPairs") List<UserProjectPair> userProjectPair);
+
     Long selectFsUserPageListCount(FsUserPageListParam param);
 
     Long selectFsUserCount(@Param("type") int type,@Param("companyId") Long companyId,@Param("companyUserId") Long companyUserId);

+ 3 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderParam.java

@@ -108,4 +108,7 @@ public class FsPackageOrderParam  extends BaseEntity{
     private Long taskId;//任务ID
 
     private  String dimension;
+
+    /** 训练营ID */
+    private Long  trainingCampId;
 }

+ 32 - 16
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -82,6 +82,7 @@ import com.fs.store.param.h5.FsUserPageListParam;
 import com.fs.store.param.h5.UserStatisticsCommonParam;
 import com.fs.store.service.cache.IFsUserCourseCountCacheService;
 import com.fs.store.vo.FsUserLastCount;
+import com.fs.store.vo.UserProjectPair;
 import com.fs.store.vo.h5.*;
 import com.fs.system.mapper.SysDictDataMapper;
 import com.fs.system.service.ISysConfigService;
@@ -256,9 +257,9 @@ public class FsUserServiceImpl implements IFsUserService {
         } else {
             fsUser.setPhone(null);
         }
-        if (ObjectUtils.isNotEmpty(fsUser.getLevel())&&fsUser.getLevel().equals(1)){
+        if (ObjectUtils.isNotEmpty(fsUser.getLevel()) && fsUser.getLevel().equals(1)) {
             fsUser.setIsShow(1);
-        }else {
+        } else {
             fsUser.setIsShow(0);
         }
         return fsUserMapper.updateFsUser(fsUser);
@@ -291,6 +292,7 @@ public class FsUserServiceImpl implements IFsUserService {
 
     /**
      * 列表查询
+     *
      * @param fsUser
      * @return
      */
@@ -301,6 +303,7 @@ public class FsUserServiceImpl implements IFsUserService {
 
     /**
      * 导出用户列表
+     *
      * @param fsUser
      * @return
      */
@@ -628,11 +631,11 @@ public class FsUserServiceImpl implements IFsUserService {
             }
 
             //解密
-            if(fsUserPageListVO.getPhone() != null && fsUserPageListVO.getPhone() != ""){
-                if(param.getIsHidePhoneMiddle()){
-                    if (fsUserPageListVO.getPhone().length()>11){
+            if (fsUserPageListVO.getPhone() != null && fsUserPageListVO.getPhone() != "") {
+                if (param.getIsHidePhoneMiddle()) {
+                    if (fsUserPageListVO.getPhone().length() > 11) {
                         fsUserPageListVO.setPhone(decryptPhoneMk(fsUserPageListVO.getPhone()));
-                    }else {
+                    } else {
                         fsUserPageListVO.setPhone(fsUserPageListVO.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
                     }
                 } else {
@@ -711,6 +714,21 @@ public class FsUserServiceImpl implements IFsUserService {
         }
         Map<Long, FsUserLastCount> countMap = fsUserCourseCounts.stream().collect(Collectors.toMap(FsUserLastCount::getUserId, Function.identity()));
 
+        List<UserProjectPair> pairs = fsUserPageListVOS.stream()
+                .map(user -> new UserProjectPair(user.getUserId(), user.getProjectId()))
+                .collect(Collectors.toList());
+        List<Map<String, Object>> mapList = fsUserMapper.selectLastWatchTimeByUserAndProject(pairs);
+        Map<Object, Date> watchTimeMap = new HashMap<>();
+        if (!CollectionUtils.isEmpty(mapList)) {
+            watchTimeMap = mapList.stream()
+                    .collect(HashMap::new,
+                            (map, item) -> map.put(
+                                    item.get("userProjectKey"),
+                                    (Date) item.get("lastWatchTime")
+                            ),
+                            HashMap::putAll
+                    );
+        }
         for (FsUserPageListVO item : fsUserPageListVOS) {
             if (item.getCompanyUserId() != null) {
                 String companyUserName = companyUserCacheService.selectCompanyUserNameUserById(item.getCompanyUserId());
@@ -739,7 +757,8 @@ public class FsUserServiceImpl implements IFsUserService {
 //                    item.setCourseCountStatus(byUserId.getStatus());
                     item.setStopWatchDays(byUserId.getStopWatchDays());
                     item.setCompleteWatchDate(byUserId.getCompleteWatchDate());
-                    item.setLastWatchDate(byUserId.getLastWatchDate());
+
+                    item.setLastWatchDate(watchTimeMap.get(item.getUserId() + "_" + item.getProjectId()));
                 }
                 FsUserLastCount fsUserCourseCount = countMap.get(item.getUserId());
                 if (fsUserCourseCount != null) {
@@ -927,7 +946,7 @@ public class FsUserServiceImpl implements IFsUserService {
 
 
         FsUserSummaryCountVO fsUserSummaryCountVO = fsUserMapper.countUserSummary(userId, companyId);
-        long start3 =System.currentTimeMillis();
+        long start3 = System.currentTimeMillis();
         logger.info("countTag 执行耗时: {}ms", start3 - start2);
         List<FsUserSummaryCountTagVO> countTagList = fsUserMapper.countTag(userId, companyId);
         fsUserSummaryCountVO.setTagList(countTagList);
@@ -1181,7 +1200,7 @@ public class FsUserServiceImpl implements IFsUserService {
 //        }
 
         // 与im账号绑定
-        if (ImTypeConfig.IMTYPE== ImTypeEnum.OPENIM){
+        if (ImTypeConfig.IMTYPE == ImTypeEnum.OPENIM) {
             openIMService.checkAndImportFriend(param.getCompanyUserId(), String.valueOf(param.getUserId()));
         }
 
@@ -1274,8 +1293,8 @@ public class FsUserServiceImpl implements IFsUserService {
     @Override
     public List<FsUserVO> selectFsUserVOListByProjectNew(FsUser fsUser) {
 
-        List<FsUserVO>  list=fsUserMapper.selectFsUserVOListByProjectNew(fsUser);
-        if(list!=null && !list.isEmpty()){
+        List<FsUserVO> list = fsUserMapper.selectFsUserVOListByProjectNew(fsUser);
+        if (list != null && !list.isEmpty()) {
             // 查询看课数和最后看课时间
             Set<Long> userIds = list.stream().map(FsUserVO::getUserId).collect(Collectors.toSet());
             List<FsUserCourseCount> fsUserCourseCounts = fsUserCourseCountMapper.selectUserLastCountList(userIds);
@@ -1323,7 +1342,7 @@ public class FsUserServiceImpl implements IFsUserService {
 
         // 判断是否是管理员
         CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getUserId());
-        if (companyUser != null && companyUser.isAdmin()){
+        if (companyUser != null && companyUser.isAdmin()) {
             param.setUserId(0L);
             param.setCompanyId(companyUser.getCompanyId());
         }
@@ -1394,14 +1413,12 @@ public class FsUserServiceImpl implements IFsUserService {
     }
 
 
-
-
     private FsUserStatisticsVO getUserStatisticsNew(UserStatisticsCommonParam param) {
         FsUserStatisticsVO fsUserStatisticsVO = new FsUserStatisticsVO();
 
         // 判断是否是管理员
         CompanyUser companyUser = companyUserMapper.selectCompanyUserById(param.getUserId());
-        if (companyUser != null && companyUser.isAdmin()){
+        if (companyUser != null && companyUser.isAdmin()) {
             param.setUserId(0L);
             param.setCompanyId(companyUser.getCompanyId());
         }
@@ -1573,7 +1590,6 @@ public class FsUserServiceImpl implements IFsUserService {
     }
 
 
-
     @Override
     public void increaseIntegral(List<Long> userIds, Long scoreAmount) {
         fsUserMapper.incrIntegral(userIds, scoreAmount);

+ 6 - 0
fs-service/src/main/java/com/fs/his/vo/FsIntegralOrderListVO.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
@@ -76,4 +77,9 @@ public class FsIntegralOrderListVO {
      * 销售公司ID
      * **/
     private Long companyId;
+
+    /**
+     * 支付金额
+     * **/
+    private BigDecimal payMoney;
 }

+ 14 - 0
fs-service/src/main/java/com/fs/store/vo/UserProjectPair.java

@@ -0,0 +1,14 @@
+package com.fs.store.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class UserProjectPair {
+
+    private Long userId;
+
+    private Integer projectId;
+
+}

+ 93 - 19
fs-service/src/main/resources/mapper/his/FsPackageOrderMapper.xml

@@ -337,6 +337,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="endEndTime != null">
                 AND po.finish_time &lt;= #{endEndTime}
             </if>
+            <!-- 训练营条件 -->
+            <if test="trainingCampId != null">
+                AND EXISTS (
+                SELECT 1 FROM fs_user_company_user ucu
+                JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+                WHERE ucu.company_id = po.company_id
+                AND camp.training_camp_id = #{trainingCampId}
+                )
+            </if>
         </where>
         GROUP BY po.company_id
         )
@@ -400,31 +409,55 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM company c
         LEFT JOIN (
         -- 合并三个查询,只扫描一次
-        SELECT company_id, 'inquiry' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
-        FROM fs_inquiry_order
-        WHERE status = 3
+        SELECT inquiry.company_id, 'inquiry' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
+        FROM fs_inquiry_order inquiry
+        WHERE inquiry.status = 3
         <if test="stTime != null and endEndTime != null">
-            AND create_time BETWEEN #{stTime} AND #{endEndTime}
+            AND inquiry.create_time BETWEEN #{stTime} AND #{endEndTime}
         </if>
-        GROUP BY company_id
+        <if test="trainingCampId != null">
+            AND EXISTS (
+            SELECT 1 FROM fs_user_company_user ucu
+            JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+            WHERE ucu.company_id = inquiry.company_id
+            AND camp.training_camp_id = #{trainingCampId}
+            )
+        </if>
+        GROUP BY inquiry.company_id
         UNION ALL
-        SELECT company_id, 'integral' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
-        FROM fs_integral_order
-        WHERE status = 3 AND pay_money IS NOT NULL
+        SELECT integral.company_id, 'integral' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
+        FROM fs_integral_order integral
+        WHERE integral.status = 3 AND pay_money IS NOT NULL
         <if test="stTime != null and endEndTime != null">
-            AND create_time BETWEEN #{stTime} AND #{endEndTime}
+            AND integral.create_time BETWEEN #{stTime} AND #{endEndTime}
         </if>
-        GROUP BY company_id
+        <if test="trainingCampId != null">
+            AND EXISTS (
+            SELECT 1 FROM fs_user_company_user ucu
+            JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+            WHERE ucu.company_id = integral.company_id
+            AND camp.training_camp_id = #{trainingCampId}
+            )
+        </if>
+        GROUP BY integral.company_id
 
         UNION ALL
 
-        SELECT company_id, 'package' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
-        FROM fs_package_order
-        WHERE status = 3
+        SELECT package.company_id, 'package' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
+        FROM fs_package_order package
+        WHERE package.status = 3
         <if test="stTime != null and endEndTime != null">
-            AND create_time BETWEEN #{stTime} AND #{endEndTime}
+            AND package.create_time BETWEEN #{stTime} AND #{endEndTime}
         </if>
-        GROUP BY company_id
+        <if test="trainingCampId != null">
+            AND EXISTS (
+            SELECT 1 FROM fs_user_company_user ucu
+            JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+            WHERE ucu.company_id = package.company_id
+            AND camp.training_camp_id = #{trainingCampId}
+            )
+        </if>
+        GROUP BY package.company_id
         ) AS all_orders ON c.company_id = all_orders.company_id
         WHERE 1=1
         <if test="companyId != null and companyId != ''">
@@ -446,39 +479,80 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM company_dept d
         LEFT JOIN company c ON d.company_id = c.company_id
         LEFT JOIN (
-        -- 合并三个查询,只扫描一次
-        SELECT company_id, 'inquiry' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
+        <!-- 问诊订单 -->
+        SELECT
+        company_id,
+        'inquiry' AS order_type,
+        COUNT(*) AS order_count,
+        COALESCE(SUM(pay_money), 0) AS order_amount
         FROM fs_inquiry_order
         WHERE status = 3
         <if test="stTime != null and endEndTime != null">
             AND create_time BETWEEN #{stTime} AND #{endEndTime}
         </if>
+        <if test="trainingCampId != null">
+            AND EXISTS (
+            SELECT 1 FROM fs_user_company_user ucu
+            JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+            WHERE ucu.company_id = fs_inquiry_order.company_id
+            AND camp.training_camp_id = #{trainingCampId}
+            )
+        </if>
         GROUP BY company_id
 
         UNION ALL
 
-        SELECT company_id, 'integral' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
+        <!-- 积分订单 -->
+        SELECT
+        company_id,
+        'integral' AS order_type,
+        COUNT(*) AS order_count,
+        COALESCE(SUM(pay_money), 0) AS order_amount
         FROM fs_integral_order
         WHERE status = 3 AND pay_money IS NOT NULL
         <if test="stTime != null and endEndTime != null">
             AND create_time BETWEEN #{stTime} AND #{endEndTime}
         </if>
+        <if test="trainingCampId != null">
+            AND EXISTS (
+            SELECT 1 FROM fs_user_company_user ucu
+            JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+            WHERE ucu.company_id = fs_integral_order.company_id
+            AND camp.training_camp_id = #{trainingCampId}
+            )
+        </if>
         GROUP BY company_id
 
         UNION ALL
 
-        SELECT company_id, 'package' AS order_type, COUNT(*) AS order_count, COALESCE(SUM(pay_money), 0) AS order_amount
+        <!-- 套餐订单 -->
+        SELECT
+        company_id,
+        'package' AS order_type,
+        COUNT(*) AS order_count,
+        COALESCE(SUM(pay_money), 0) AS order_amount
         FROM fs_package_order
         WHERE status = 3
         <if test="stTime != null and endEndTime != null">
             AND create_time BETWEEN #{stTime} AND #{endEndTime}
         </if>
+        <if test="trainingCampId != null">
+            AND EXISTS (
+            SELECT 1 FROM fs_user_company_user ucu
+            JOIN fs_user_course_training_camp camp ON ucu.company_user_id = camp.user_id
+            WHERE ucu.company_id = fs_package_order.company_id
+            AND camp.training_camp_id = #{trainingCampId}
+            )
+        </if>
         GROUP BY company_id
         ) AS all_orders ON c.company_id = all_orders.company_id
         WHERE 1=1
         <if test="deptId != null and deptId != ''">
             AND d.dept_id = #{deptId}
         </if>
+        <if test="companyId != null">
+            AND d.company_id = #{companyId}
+        </if>
         GROUP BY d.dept_id, d.dept_name
         HAVING inquiryOrderCount > 0 OR integralOrderCount > 0 OR packageOrderCount > 0
         ORDER BY inquiryOrderCount DESC, integralOrderCount DESC, packageOrderCount DESC

+ 12 - 1
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -339,7 +339,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         fs_user.avatar,
         fs_user.phone,
         fs_user.status,
-        fs_user.create_time,
+        COALESCE(ucu.update_time, ucu.create_time) createTime,
         fs_user.remark,
         ucu.company_user_id,
         ucu.company_id,
@@ -2370,6 +2370,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND log.create_time &lt;= #{endTime}
         </if>
     </select>
+    <select id="selectLastWatchTimeByUserAndProject" resultType="java.util.Map">
+        SELECT
+        CONCAT(user_id, '_', project) AS userProjectKey,
+        MAX(COALESCE(update_time, create_time)) AS lastWatchTime
+        FROM fs_course_watch_log
+        WHERE (user_id, project) IN
+        <foreach collection="userProjectPairs" item="pair" open="(" close=")" separator=",">
+            (#{pair.userId}, #{pair.projectId})
+        </foreach>
+        GROUP BY user_id, project_id
+    </select>
 
 
 </mapper>