浏览代码

#1、四福堂一个客户一天只能同项目看n节课”的限制,正常不是0点到24点 24点刷新嘛,他想改成14-第二天13,第二天13刷新

yys 1 周之前
父节点
当前提交
08b30c0d84

+ 16 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java

@@ -316,6 +316,22 @@ public interface FsUserCourseMapper
      */
     Integer selectTodayCourseWatchLogCountByUserIdAndProjectId(@Param("userId") Long userId, @Param("projectId") Long projectId);
 
+    /**
+     * 根据时间限制来进行处理
+     *
+     * @param userId
+     * @param projectId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    Long countDistinctVideoByUserAndProject(
+            @Param("userId") Long userId,
+            @Param("projectId") Long projectId,
+            @Param("startTime") String startTime,
+            @Param("endTime") String endTime
+    );
+
     @Select("select course_id,course_name,description,img_url,second_img secondImg,views from fs_user_course where " +
             " is_private = 0 and is_del = 0 and is_show = 1 and is_tui = 1 order by sort,course_id")
     List<FsUserCourseVideoAppletVO> selectFsUserCourseVideoApplet();

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

@@ -133,4 +133,14 @@ public interface FsUserCoursePeriodDaysMapper extends BaseMapper<FsUserCoursePer
     List<Long> selectFsUserCoursePeriodDaysForLastById(FsUserCoursePeriodDays param);
 
     List<FsUserCoursePeriodDays> selectFsUserCoursePeriodDaysByCourseId(@Param("courseId") Long courseId);
+
+    /**
+     * 根据课程id,营期id,小节id查询时间
+     *
+     * @param courseId
+     * @param periodId
+     * @param videoId
+     * @return
+     */
+    FsUserCoursePeriodDays selectFsUserCoursePeriodDaysByPeriodDays(@Param("courseId")Long courseId, @Param("periodId")Long periodId, @Param("videoId")Long videoId);
 }

+ 14 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.course.service.impl;
 
+import cn.hutool.core.lang.TypeReference;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
@@ -113,6 +114,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
+import static com.fs.common.utils.date.DateUtil.YYYY_MM_DD_HH_MM_SS;
 import static com.fs.course.utils.LinkUtil.generateRandomStringWithLock;
 
 /**
@@ -2645,7 +2647,18 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             return ResponseResult.fail(BizResponseEnum.WATCH_LATEST_COURSE, userCoursePeriodValid);
         }
         // 项目看课数限制
-        if (!EXCLUDE_PROJECTS.contains(signProjectName) && !CloudHostUtils.hasCloudHostName("弘德堂")) {
+        if (CloudHostUtils.hasCloudHostName("四福堂")) {
+            FsUserCoursePeriodDays fsUserCoursePeriodDays = fsUserCoursePeriodDaysMapper.selectFsUserCoursePeriodDaysByPeriodDays(param.getCourseId(),param.getPeriodId(),param.getVideoId());
+
+            String startTime = fsUserCoursePeriodDays.getStartDateTime() != null ?DateUtil.formatLocalDateTime(fsUserCoursePeriodDays.getStartDateTime(),YYYY_MM_DD_HH_MM_SS) : null;
+            String endTime = fsUserCoursePeriodDays.getEndDateTime() != null ? DateUtil.formatLocalDateTime(fsUserCoursePeriodDays.getEndDateTime(),YYYY_MM_DD_HH_MM_SS) : null;
+
+            log.error("进入了看课限制:传入参数:={},watchCourseVideo={}",param, watchCourseVideo);
+            Long logCount = fsUserCourseMapper.countDistinctVideoByUserAndProject(param.getUserId(), courseProject,startTime,endTime);
+            if (Objects.isNull(watchCourseVideo) && logCount > 0) {
+                return ResponseResult.fail(ExceptionCodeEnum.EXCEED_COURSE_LIMIT.getCode(), ExceptionCodeEnum.EXCEED_COURSE_LIMIT.getDescription());
+            }
+        }else if (!EXCLUDE_PROJECTS.contains(signProjectName) && !CloudHostUtils.hasCloudHostName("弘德堂")) {
             log.error("进入了看课限制:传入参数:={},watchCourseVideo={}",param, watchCourseVideo);
             Integer logCount = fsUserCourseMapper.selectTodayCourseWatchLogCountByUserIdAndProjectId(param.getUserId(), courseProject);
             if (Objects.isNull(watchCourseVideo) && logCount > 0) {

+ 20 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseMapper.xml

@@ -162,6 +162,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where cwl.user_id = #{userId} and uc.project = #{projectId}
           and cwl.create_time between curdate() and date_add(curdate(), interval 1 day) and cwl.send_type = 1
     </select>
+
+    <select id="countDistinctVideoByUserAndProject" resultType="java.lang.Long">
+        select count(distinct cwl.video_id)
+        from fs_course_watch_log cwl
+        inner join fs_user_course_video ucv on ucv.video_id = cwl.video_id
+        inner join fs_user_course uc on uc.course_id = ucv.course_id
+        where cwl.user_id = #{userId}
+        and uc.project = #{projectId}
+        and cwl.send_type = 1
+        and (
+        <choose>
+            <when test="startTime != null and endTime != null">
+                cwl.create_time between #{startTime} and #{endTime}
+            </when>
+            <otherwise>
+                cwl.create_time between curdate() and date_add(curdate(), interval 1 day)
+            </otherwise>
+        </choose>
+        )
+    </select>
     <select id="selectCourseNamesByIds" resultType="java.util.Map">
         SELECT CAST(course_id AS SIGNED) AS courseId, course_name AS courseName
         FROM fs_user_course

+ 16 - 0
fs-service/src/main/resources/mapper/course/FsUserCoursePeriodDaysMapper.xml

@@ -254,4 +254,20 @@
         <include refid="selectFsUserCoursePeriodDaysVo"/>
                  where del_flag ='0' and course_id = #{courseId}
     </select>
+
+
+
+
+
+    <select id="selectFsUserCoursePeriodDaysByPeriodDays"
+            resultType="com.fs.course.domain.FsUserCoursePeriodDays">
+        <include refid="selectFsUserCoursePeriodDaysVo"/>
+        where
+            NOW() between start_date_time and end_date_time
+          and course_id =  #{courseId}
+          and video_id =  #{videoId}
+          and period_id =  #{periodId}
+          and status = 1
+          and del_flag = 0;
+    </select>
 </mapper>