Browse Source

参与记录查询调整

Long 4 days ago
parent
commit
b7e77e9c2b

+ 10 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseAnswerLogsMapper.java

@@ -129,4 +129,14 @@ public interface FsCourseAnswerLogsMapper
 
     List<FsCourseAnswerLogsListVO> selectFsCourseAnswerLogsListVONew(FsCourseAnswerLogsParam param);
     Long selectFsCourseAnswerLogsListVONewCount(FsCourseAnswerLogsParam param);
+
+    /**
+     * 查询领取次数
+     *
+     * @param userId   用户ID
+     * @param courseId 课程ID
+     * @return count
+     */
+    @Select("select count(log_id) from fs_course_red_packet_log where user_id = #{userId} and course_id = #{courseId}")
+    Long selectRedStatus(@Param("userId") Long userId, @Param("courseId") Long courseId);
 }

+ 10 - 2
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java

@@ -2,7 +2,6 @@ package com.fs.course.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.course.domain.FsCourseWatchLog;
-import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.param.*;
 import com.fs.course.vo.*;
 import com.fs.sop.vo.QwRatingVO;
@@ -10,7 +9,6 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
-import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -306,4 +304,14 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
             "and company_user_id = #{companyUserId} " +
             "and user_id = #{userId} and send_type = 1 ")
     FsCourseWatchLog getWatchCourseVideoByFsUser(Long userId, Long videoId, Long companyUserId);
+
+    /**
+     * 聚合查询
+     *
+     * @param userId   用户ID
+     * @param courseId 课程ID
+     * @return map
+     */
+    @Select("select count(log_id) AS watchCount, count(case when log_type = 2 then log_id end) AS finishCount, sum(duration) AS watchTime from fs_course_watch_log where user_id = #{userId} and course_id = #{courseId}")
+    Map<String, Long> selectSumByUserIdAndCourseId(@Param("userId") Long userId, @Param("courseId") Long courseId);
 }

+ 22 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -74,6 +74,10 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     private FsCourseLinkMapper fsCourseLinkMapper;
     @Autowired
     private CompanyUserMapper companyUserMapper;
+    @Autowired
+    private FsCourseWatchLogMapper fsCourseWatchLogMapper;
+    @Autowired
+    private FsCourseAnswerLogsMapper fsCourseAnswerLogsMapper;
 
     private static final String realLink = "/courseH5/pages/course/learning?course=";
     private static final String shortLink = "/courseH5/pages/course/learning?s=";
@@ -412,6 +416,24 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
         list.forEach(recordVO -> {
             List<CompanyTag> companyTags = companyTagMapper.selectCompanyTagListByUserId(recordVO.getUserId());
             recordVO.setTags(companyTags);
+
+            Map<String, Long> sumMap = fsCourseWatchLogMapper.selectSumByUserIdAndCourseId(recordVO.getUserId(), recordVO.getCourseId());
+            // 观看次数
+            recordVO.setWatchCount(sumMap.getOrDefault("watchCount", 0L).intValue());
+
+            // 完播次数
+            recordVO.setFinishCount(sumMap.getOrDefault("finishCount", 0L).intValue());
+
+            // 观看时长
+            recordVO.setWatchTime(sumMap.getOrDefault("watchTime", 0L).intValue());
+
+            // 领取状态
+            Long count = fsCourseAnswerLogsMapper.selectRedStatus(recordVO.getUserId(), recordVO.getCourseId());
+            if (Objects.nonNull(count) && count > 0) {
+                recordVO.setRedStatus(1);
+            } else {
+                recordVO.setRedStatus(0);
+            }
         });
         return list;
     }

+ 6 - 27
fs-service-system/src/main/resources/mapper/course/FsUserCourseMapper.xml

@@ -264,35 +264,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             fu.avatar,
             fu.phone as phoneNumber,
             fu.create_time,
-            fcwl.create_time as watchDate,
-            ifnull(t1.watchCount, 0) as watchCount,
-            ifnull(t1.finishCount, 0) as finishCount,
-            ifnull(t1.watchTime, 0 ) as watchTime,
-            if(ifnull(t2.redcount, 0) > 0, 1, 0) AS redStatus
+            max(fcwl.create_time) as watchDate
         from fs_user_course fuc
         inner join fs_course_watch_log fcwl on fcwl.course_id = fuc.course_id
         inner join fs_user fu on fu.user_id = fcwl.user_id
-        left join (
-            select user_id,
-                count(log_id) AS watchCount,
-                count(case when log_type = 2 then log_id end) AS finishCount,
-                sum(duration) AS watchTime
-            from fs_course_watch_log
-            group by user_id
-        ) t1 on t1.user_id = fu.user_id
-        left join (
-            select user_id, course_id, count(log_id) as redcount
-            from fs_course_red_packet_log
-            group by user_id, course_id
-        ) t2 on t2.user_id = fu.user_id and t2.course_id = fuc.course_id
-        <if test="params.type == 0">
-            left join  (
-                select user_id, course_id, count(log_id) as count
-                from fs_course_answer_logs
-                where is_right = 1
-                group by user_id, course_id
-            ) t3 on t3.user_id = fu.user_id and t3.course_id = fuc.course_id
-        </if>
         where fuc.course_id = #{params.courseId}
         <if test="params.keyword != null and params.keyword != ''">
             and (
@@ -304,7 +279,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         <choose>
             <when test="params.type == 0">
-                and t3.count > 0
+                and (
+                    select count(log_id) as count
+                    from fs_course_answer_logs
+                    where user_id = fu.user_id and course_id = fuc.course_id and is_right = 1
+                ) > 0
             </when>
             <when test="params.type == 1">
                 and fcwl.log_type = 2