Bläddra i källkod

FIX: 会员训练营列表查询卡顿优化

Long 4 dagar sedan
förälder
incheckning
b548108b93

+ 5 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -519,4 +519,9 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
     Long selectByWatchlxDay(@Param("userId") Long userId,@Param("projectId")  Long projectId);
 
     List<FsCourseWatchLogListVO> selectFsCourseWatchLogListVOexport(@Param("maps") FsCourseWatchLogListParam param);
+
+    /**
+     * 查询训练营看课人数
+     */
+    Integer getUserCountByCampId(@Param("trainingCampId") Long trainingCampId);
 }

+ 5 - 5
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseTrainingCampServiceImpl.java

@@ -11,10 +11,7 @@ import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.domain.FsUserCoursePeriodDays;
 import com.fs.course.domain.FsUserCourseTrainingCamp;
 import com.fs.course.dto.FsUserCourseTrainingCampDTO;
-import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
-import com.fs.course.mapper.FsUserCoursePeriodMapper;
-import com.fs.course.mapper.FsUserCourseTrainingCampMapper;
-import com.fs.course.mapper.FsUserCourseVideoRedPackageMapper;
+import com.fs.course.mapper.*;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
 import com.fs.course.service.IFsUserCourseTrainingCampService;
 import com.fs.course.vo.FsUserCourseTrainingCampVO;
@@ -46,6 +43,7 @@ public class FsUserCourseTrainingCampServiceImpl extends ServiceImpl<FsUserCours
     private final FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
 
     private final IFsUserCoursePeriodDaysService fsUserCoursePeriodDaysService;
+    private final FsCourseWatchLogMapper fsCourseWatchLogMapper;
 
     /**
      * 查询训练营列表
@@ -54,7 +52,9 @@ public class FsUserCourseTrainingCampServiceImpl extends ServiceImpl<FsUserCours
      */
     @Override
     public List<FsUserCourseTrainingCampVO> selectFsUserCourseTrainingCampVOListByMap(Map<String, Object> params) {
-        return baseMapper.selectFsUserCourseTrainingCampVOListByMap(params);
+        List<FsUserCourseTrainingCampVO> trainingCampVOS = baseMapper.selectFsUserCourseTrainingCampVOListByMap(params);
+        trainingCampVOS.forEach(camp -> camp.setVipCount(fsCourseWatchLogMapper.getUserCountByCampId(camp.getTrainingCampId())));
+        return trainingCampVOS;
     }
 
     /**

+ 7 - 0
fs-service/src/main/resources/mapper/course/FsCourseWatchLogMapper.xml

@@ -829,4 +829,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by l.finish_time desc,l.update_time desc,l.create_time desc
     </select>
 
+    <select id="getUserCountByCampId" resultType="java.lang.Integer">
+        select count(distinct cwl.user_id)
+        from fs_user_course_period ucp
+        inner join fs_course_watch_log cwl on ucp.period_id = cwl.period_id
+        where ucp.training_camp_id = #{trainingCampId}
+    </select>
+
 </mapper>

+ 4 - 3
fs-service/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml

@@ -11,11 +11,12 @@
         ctc.training_camp_name,
         ctc.order_number,
         min(if(ctp.period_starting_time >= CURDATE(), ctp.period_starting_time, null)) as recent_date,
-        count(distinct ctp.period_id) as period_count,
-        count(distinct cu.user_id)  as vip_count
+        count(distinct ctp.period_id) as period_count
         from fs_user_course_training_camp ctc
         left join fs_user_course_period ctp on ctc.training_camp_id = ctp.training_camp_id
-        left join fs_course_watch_log cu on cu.period_id = ctp.period_id
+        <if test="params.userId != null and params.userId != ''">
+            left join fs_course_watch_log cu on cu.period_id = ctp.period_id
+        </if>
         <where>
             ctc.del_flag ='0'
             <if test="params.trainingCampName != null and params.trainingCampName != ''">