yangdamao 10 ay önce
ebeveyn
işleme
75d0a3c826

+ 13 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java

@@ -103,6 +103,19 @@ public class UserStudyRecordController extends BaseController {
         return AjaxResult.success(iUserStudyRecordService.insertByAddBo(bo));
     }
 
+    /**
+     * 重置用户学习某一节课程
+     */
+    @ApiOperation("重置用户学习某一节课程")
+    @PostMapping("/reset/section")
+    public AjaxResult<Void> resetCourseSection(@RequestBody UserStudyRecordAddBo bo) {
+        if(Validator.isEmpty(bo.getUserId())){
+            ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+            bo.setUserId(loginUser.getUser().getUserId());
+        }
+        return toAjax(iUserStudyRecordService.resetCourseSection(bo) ? 1 : 0);
+    }
+
     /**
      * 修改用户学习记录
      */

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyRecord.java

@@ -75,6 +75,8 @@ private static final long serialVersionUID=1L;
     private Integer buyCourse;
     /**  标识 */
     private String identification;
+    /**  视频校验时间 */
+    private Long videoCheckTime;
     /**  节类型 1录播 2直播 3回放 */
     private Integer sectionType;
     /** 访问IP */

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserStudyRecordMapper.java

@@ -136,4 +136,10 @@ public interface UserStudyRecordMapper extends BaseMapper<UserStudyRecord> {
 
     @InterceptorIgnore(tenantLine = "true")
     List<UserStudyRecord> getStudyRecordNoTenant(Long orderGoodsId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void updateTenant(@Param("recordIds")List<Long> recordIds);
+
+    @InterceptorIgnore(tenantLine = "true")
+    void updatePeriodTenant(@Param("ids")List<Long> ids);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserStudyRecordService.java

@@ -165,4 +165,6 @@ public interface IUserStudyRecordService extends IService<UserStudyRecord> {
     Integer checkUserVideo(CheckUserVideoBo bo);
 
 	boolean saveUserVideo(SaveUserVideoBo bo);
+
+	boolean resetCourseSection(UserStudyRecordAddBo bo);
 }

+ 52 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -382,6 +382,9 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         if(Validator.isEmpty(gradeOgUser)){
             throw new CustomException("订单数据错误");
         }
+
+        //校验是否有快进
+        checkFastForward(bo);
         /*GoodsVo goodsVo = iGoodsService.queryById(bo.getGoodsId());
         String fullName;
         CourseBusinessQueryBo queryBusinessBo = new CourseBusinessQueryBo();
@@ -569,11 +572,13 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
                         &&Validator.isNotEmpty(bo.getErJianErZao())&&bo.getErJianErZao()
                         &&Validator.isEmpty(bo.getPhoto())&&(lastVo.getVideoCurrentTime().longValue()>add.getVideoCurrentTime().longValue())){
                     if(Validator.isNotEmpty(add.getStatus())&&add.getStatus()==1){
+                        add.setVideoCheckTime(add.getVideoCurrentTime());
                         this.save(add);
                     }else{
                         return 0;
                     }
                 }else{
+                    add.setVideoCheckTime(add.getVideoCurrentTime());
                     this.save(add);
                 }
             }else{
@@ -621,6 +626,29 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         return 0;
     }
 
+    private void checkFastForward(UserStudyRecordAddBo bo) {
+        UserStudyRecord studyRecord = getOne(new LambdaQueryWrapper<UserStudyRecord>()
+                .eq(UserStudyRecord::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(UserStudyRecord::getCourseId, bo.getCourseId())
+                .eq(UserStudyRecord::getSectionId, bo.getSectionId())
+                .eq(UserStudyRecord::getCurrentStatus,1)
+                .orderByAsc(UserStudyRecord::getCreateTime)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(studyRecord) || ObjectUtils.isNull(studyRecord.getVideoCheckTime()) || ObjectUtils.isNull(bo.getVideoCurrentTime())){
+            //没有记录或者没有时间
+            return;
+        }
+        Long videoCurrentTime = bo.getVideoCurrentTime();
+        Long videoCheckTime = studyRecord.getVideoCheckTime();
+        Long time = videoCurrentTime - videoCheckTime;
+        if ((time - 15) >= 5){
+            //有快进或者拖拽
+            throw new CustomException("系统检测有快进或者拖拽情况",557);
+        }
+        studyRecord.setVideoCheckTime(bo.getVideoCurrentTime());
+        updateById(studyRecord);
+    }
+
     @Override
     public void studyFinish(UserStudyRecord bo) {
         if(Validator.isEmpty(bo.getOrderGoodsId())){
@@ -1720,6 +1748,30 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         return iUserStudyVideoService.updateById(video);
     }
 
+    @Override
+    public boolean resetCourseSection(UserStudyRecordAddBo bo) {
+        List<UserStudyRecord> studyRecords = list(new LambdaQueryWrapper<UserStudyRecord>()
+                .eq(UserStudyRecord::getUserId,bo.getUserId())
+                .eq(UserStudyRecord::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(UserStudyRecord::getSectionId, bo.getSectionId())
+                .eq(UserStudyRecord::getCurrentStatus, 1)
+                .eq(UserStudyRecord::getCourseId, bo.getCourseId()));
+        if (CollectionUtils.isNotEmpty(studyRecords)){
+            List<Long> recordIds = studyRecords.stream().map(UserStudyRecord::getRecordId).collect(Collectors.toList());
+            baseMapper.updateTenant(recordIds);
+        }
+        List<UserPeriod> periodList = iUserPeriodService.list(new LambdaQueryWrapper<UserPeriod>()
+                .eq(UserPeriod::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(UserPeriod::getSectionId, bo.getSectionId())
+                .eq(UserPeriod::getUserId, bo.getUserId())
+                .eq(UserPeriod::getCourseId, bo.getCourseId()));
+        if (CollectionUtils.isNotEmpty(periodList)){
+            List<Long> ids = periodList.stream().map(UserPeriod::getId).collect(Collectors.toList());
+            baseMapper.updatePeriodTenant(ids);
+        }
+        return true;
+    }
+
 
     /**
      * 获取最后一次看完的节

+ 13 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -177,6 +177,19 @@
         <result property="phone" column="telphone" typeHandler="com.zhongzheng.common.type.EncryptHandler"/>
     </resultMap>
 
+    <update id="updateTenant" parameterType="java.lang.Long">
+        UPDATE user_study_record SET tenant_id = (CONCAT(SUBSTRING(tenant_id, 1, LENGTH(tenant_id) - 3),111)) ,order_goods_id = (CONCAT(order_goods_id,111)) WHERE record_id in
+        <foreach collection="recordIds" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
+
+    <update id="updatePeriodTenant" parameterType="java.lang.Long">
+        UPDATE user_period SET tenant_id = (CONCAT(SUBSTRING(tenant_id, 1, LENGTH(tenant_id) - 3),111)) ,order_goods_id = (CONCAT(order_goods_id,111)) WHERE id in
+        <foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
 
     <select id="getListByBo" parameterType="com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo"
             resultMap="UserStudyRecordResult">