yangdamao 1 жил өмнө
parent
commit
3ea6739e1f
25 өөрчлөгдсөн 578 нэмэгдсэн , 13 устгасан
  1. 39 0
      run-prod.sh
  2. 17 3
      zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java
  3. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  4. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingLocationServiceImpl.java
  5. 27 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  6. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/Goods.java
  7. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  8. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  9. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  10. 26 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseTreeVo.java
  11. 52 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  12. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodSectionVo.java
  13. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodVo.java
  14. 69 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  15. 40 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceOcrServiceImpl.java
  16. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/CheckUserVideoBo.java
  17. 33 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/SaveUserVideoBo.java
  18. 64 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyVideo.java
  19. 15 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserStudyVideoMapper.java
  20. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserStudyRecordService.java
  21. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserStudyVideoService.java
  22. 55 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  23. 18 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyVideoServiceImpl.java
  24. 52 0
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  25. 7 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyVideoMapper.xml

+ 39 - 0
run-prod.sh

@@ -1,3 +1,42 @@
+#!/usr/bin/env bash
+# 定义应用组名
+group_name='zhongzheng'
+# 定义应用名称
+app_name='zhongzheng-saas-api'
+# 定义应用版本
+app_version='1.0-SNAPSHOT'
+# 定义应用环境
+profile_active='prod'
+echo '----copy jar----'
+docker stop ${app_name}
+echo '----stop container----'
+docker rm ${app_name}
+echo '----rm container----'
+docker rmi ${group_name}/${app_name}:${app_version}
+echo '----rm image----'
+# 打包编译docker镜像
+docker build -f /mydata/maven/build/Dockerfile -t ${group_name}/${app_name}:${app_version} .
+echo '----build image----'
+docker run -p 5055:5055 --name ${app_name} \
+--restart=always \
+-e 'spring.profiles.active'=${profile_active} \
+-e TZ="Asia/Shanghai" \
+-m 10240m \
+--cpus=3 \
+--log-opt max-size=50m \
+--log-opt max-file=3 \
+-v /etc/localtime:/etc/localtime \
+-v /usr/share/fonts:/usr/share/fonts \
+-v /data/logs/prod_api:/logs \
+-v /mydata/app/${app_name}/logs:/var/logs \
+-d ${group_name}/${app_name}:${app_version}
+echo '----start container----'
+
+echo "开始等待20秒..."
+# 1-10秒内随机
+sleep 5
+echo "等待后继续"
+
 #!/usr/bin/env bash
 #!/usr/bin/env bash
 # 定义应用组名
 # 定义应用组名
 group_admin_name='zhongzheng'
 group_admin_name='zhongzheng'

+ 17 - 3
zhongzheng-api/src/main/java/com/zhongzheng/controller/user/UserStudyRecordController.java

@@ -12,9 +12,7 @@ import com.zhongzheng.modules.grade.domain.UserPeriodStatus;
 import com.zhongzheng.modules.grade.vo.ClassPeriodVo;
 import com.zhongzheng.modules.grade.vo.ClassPeriodVo;
 import com.zhongzheng.modules.polyv.bo.PolyvLiveQueryBo;
 import com.zhongzheng.modules.polyv.bo.PolyvLiveQueryBo;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
-import com.zhongzheng.modules.user.bo.UserStudyRecordAddBo;
-import com.zhongzheng.modules.user.bo.UserStudyRecordEditBo;
-import com.zhongzheng.modules.user.bo.UserStudyRecordQueryBo;
+import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.UserStudyRecord;
 import com.zhongzheng.modules.user.domain.UserStudyRecord;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.service.IUserStudyRecordService;
 import com.zhongzheng.modules.user.service.IUserStudyRecordService;
@@ -208,4 +206,20 @@ public class UserStudyRecordController extends BaseController {
         bo.setUserId(loginUser.getUser().getUserId());
         bo.setUserId(loginUser.getUser().getUserId());
         return AjaxResult.success(iUserStudyRecordService.syncSevenModulePublicClass(bo.getOrderGoodsId(),bo.getUserId()));
         return AjaxResult.success(iUserStudyRecordService.syncSevenModulePublicClass(bo.getOrderGoodsId(),bo.getUserId()));
     }
     }
+
+    @ApiOperation("查询当前视频节是否需要录像")
+    @GetMapping("/check/video")
+    public AjaxResult<Integer> checkUserVideo(CheckUserVideoBo bo){
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iUserStudyRecordService.checkUserVideo(bo));
+    }
+
+    @ApiOperation("保存当前视频节录像")
+    @PostMapping("/save/video")
+    public AjaxResult<Void> saveUserVideo(@RequestBody SaveUserVideoBo bo){
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return toAjax(iUserStudyRecordService.saveUserVideo(bo) ? 1 : 0);
+    }
 }
 }

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -916,6 +916,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 }
                 }
                 itemImport.setSubjectIds(ToolsUtils.join(",", sIdList));
                 itemImport.setSubjectIds(ToolsUtils.join(",", sIdList));
             }
             }
+
             User user = getOne(new LambdaQueryWrapper<User>()
             User user = getOne(new LambdaQueryWrapper<User>()
                     .eq(User::getIdCard,EncryptHandler.encrypt(itemImport.getIdCard())).last("limit 1"));
                     .eq(User::getIdCard,EncryptHandler.encrypt(itemImport.getIdCard())).last("limit 1"));
             if(Validator.isNotNull(user)){
             if(Validator.isNotNull(user)){

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/ActivityAdvertisingLocationServiceImpl.java

@@ -2,7 +2,9 @@ package com.zhongzheng.modules.base.service.impl;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationAddBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationAddBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationEditBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationEditBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationQueryBo;
 import com.zhongzheng.modules.base.bo.ActivityAdvertisingLocationQueryBo;

+ 27 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -170,7 +170,8 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     private String OLD_GOODS;
     private String OLD_GOODS;
     @Autowired
     @Autowired
     private ClassGradeUserMapper classGradeUserMapper;
     private ClassGradeUserMapper classGradeUserMapper;
-
+    @Autowired
+    private IUserStudyVideoService iUserStudyVideoService;
 
 
 
 
     @Override
     @Override
@@ -459,6 +460,31 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             userPeriodStatusAddBo.setUpdateTime(DateUtils.getNowTime());
             userPeriodStatusAddBo.setUpdateTime(DateUtils.getNowTime());
             userPeriodStatusAddBo.setStatus(3);
             userPeriodStatusAddBo.setStatus(3);
             userPeriodStatusService.insertByAddBo(userPeriodStatusAddBo);
             userPeriodStatusService.insertByAddBo(userPeriodStatusAddBo);
+            //处理学习录像
+            UserPeriod userPeriod = iUserPeriodService.getById(goodsPeriodStatusVo.getId());
+            List<UserStudyVideo> list = iUserStudyVideoService.list(new LambdaQueryWrapper<UserStudyVideo>()
+                    .eq(UserStudyVideo::getOrderGoodsId, userPeriod.getOrderGoodsId())
+                    .eq(UserStudyVideo::getUserId, userPeriod.getUserId())
+                    .eq(UserStudyVideo::getGoodsId, userPeriod.getGoodsId())
+                    .eq(UserStudyVideo::getCourseId, userPeriod.getCourseId())
+                    .eq(UserStudyVideo::getModuleId, userPeriod.getModuleId())
+                    .eq(UserStudyVideo::getChapterId, userPeriod.getChapterId())
+                    .eq(UserStudyVideo::getSectionId, userPeriod.getSectionId())
+                    .eq(UserStudyVideo::getCurrentStatus, 1)
+                    .eq(UserStudyVideo::getStatus, 1));
+            if (CollectionUtils.isNotEmpty(list)){
+                list.forEach(x -> x.setCurrentStatus(0));
+                iUserStudyVideoService.updateBatchById(list);
+                //新增一条
+                List<UserStudyVideo> studyVideos = list.stream().map(item -> {
+                    item.setCurrentStatus(1);
+                    item.setVideoCurrentTime(null);
+                    item.setVideoUrl(null);
+                    item.setFromPlat(null);
+                    return item;
+                }).collect(Collectors.toList());
+                iUserStudyVideoService.saveBatch(studyVideos);
+            }
             UserPeriodVo vo = iUserPeriodService.queryById(goodsPeriodStatusVo.getPeriodId());
             UserPeriodVo vo = iUserPeriodService.queryById(goodsPeriodStatusVo.getPeriodId());
             LambdaUpdateWrapper<CoursePhotoLog> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
             LambdaUpdateWrapper<CoursePhotoLog> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
             objectLambdaUpdateWrapper.eq(CoursePhotoLog::getUserId, bo.getUserId());
             objectLambdaUpdateWrapper.eq(CoursePhotoLog::getUserId, bo.getUserId());

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/Goods.java

@@ -192,4 +192,6 @@ private static final long serialVersionUID=1L;
     /** 前培和补考商品关联多个 */
     /** 前培和补考商品关联多个 */
     @TableField(updateStrategy=FieldStrategy.IGNORED)
     @TableField(updateStrategy=FieldStrategy.IGNORED)
     private String makeGoodsIds;
     private String makeGoodsIds;
+    /** 录单标签:0正常 1隐藏 */
+    private Integer inputSign;
 }
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java

@@ -135,4 +135,5 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     @InterceptorIgnore(tenantLine = "true")
     @InterceptorIgnore(tenantLine = "true")
     List<Exam> getExam();
     List<Exam> getExam();
 
 
+    List<GoodsCourseTreeVo> getGoodsCourseTree(Long goodsId);
 }
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -172,4 +172,5 @@ public interface IGoodsService extends IService<Goods> {
 
 
 	String createUserAccount(UserAccountBo bo);
 	String createUserAccount(UserAccountBo bo);
 
 
+	List<GoodsCourseTreeVo> getGoodsCourseTree(Long goodsId);
 }
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -5481,6 +5481,11 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return url;
         return url;
     }
     }
 
 
+    @Override
+    public List<GoodsCourseTreeVo> getGoodsCourseTree(Long goodsId) {
+        return baseMapper.getGoodsCourseTree(goodsId);
+    }
+
     private void updateHandoutsId(Long goodsId, Long tenantId, Long handoutsId) {
     private void updateHandoutsId(Long goodsId, Long tenantId, Long handoutsId) {
         baseMapper.updateHandoutsId(goodsId, tenantId, handoutsId);
         baseMapper.updateHandoutsId(goodsId, tenantId, handoutsId);
     }
     }

+ 26 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsCourseTreeVo.java

@@ -0,0 +1,26 @@
+package com.zhongzheng.modules.goods.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class GoodsCourseTreeVo implements Serializable {
+
+    @ApiModelProperty("")
+    private Long goodsId;
+
+    @ApiModelProperty("")
+    private Long courseId;
+
+    @ApiModelProperty("")
+    private Long moduleId;
+
+    @ApiModelProperty("")
+    private Long chapterId;
+
+    @ApiModelProperty("")
+    private Long sectionId;
+
+}

+ 52 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -76,6 +76,7 @@ import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserStudyRecordPhoto;
 import com.zhongzheng.modules.user.domain.UserStudyRecordPhoto;
+import com.zhongzheng.modules.user.domain.UserStudyVideo;
 import com.zhongzheng.modules.user.mapper.UserStudyRecordPhotoMapper;
 import com.zhongzheng.modules.user.mapper.UserStudyRecordPhotoMapper;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.vo.*;
 import com.zhongzheng.modules.user.vo.*;
@@ -236,6 +237,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Autowired
     @Autowired
     private IQuestionChapterExamService iQuestionChapterExamService;
     private IQuestionChapterExamService iQuestionChapterExamService;
 
 
+    @Autowired
+    private IUserStudyVideoService iUserStudyVideoService;
+
 
 
     /*private String SEVEN_OFFICIALPUSH_INFOACCOUNT;
     /*private String SEVEN_OFFICIALPUSH_INFOACCOUNT;
     private String SEVEN_OFFICIALPUSH_TOKEN;*/
     private String SEVEN_OFFICIALPUSH_TOKEN;*/
@@ -3393,7 +3397,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             if (classPeriodVo.getType() == 1) {
             if (classPeriodVo.getType() == 1) {
                 moduleTotal++;
                 moduleTotal++;
                 CourseModuleVo moduleVo = iCourseModuleService.queryById(classPeriodVo.getId());
                 CourseModuleVo moduleVo = iCourseModuleService.queryById(classPeriodVo.getId());
-                classPeriodVo.setCommonGradeName(commonGradeName);
+                if (moduleVo.getCommonSign() == 1){
+                    classPeriodVo.setCommonGradeName(commonGradeName);
+                }
                 List<ClassPeriodChapterVo> classPeriodChapterVos = baseMapper.listperiodChapter(classPeriodVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), bo.getGradeId(),bo.getOrderGoodsId());
                 List<ClassPeriodChapterVo> classPeriodChapterVos = baseMapper.listperiodChapter(classPeriodVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), bo.getGradeId(),bo.getOrderGoodsId());
                 Collections.sort(classPeriodChapterVos);
                 Collections.sort(classPeriodChapterVos);
                 classPeriodChapterVos.addAll(baseMapper.listperiodModuleExam(bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), classPeriodVo.getId()));
                 classPeriodChapterVos.addAll(baseMapper.listperiodModuleExam(bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), classPeriodVo.getId()));
@@ -3407,6 +3413,21 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                         classPeriodSectionVos.addAll(baseMapper.listperiodExam(classPeriodChapterVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), classPeriodVo.getId()));
                         classPeriodSectionVos.addAll(baseMapper.listperiodExam(classPeriodChapterVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId(), classPeriodVo.getId()));
                         for (ClassPeriodSectionVo classPeriodSectionVo : classPeriodSectionVos) {
                         for (ClassPeriodSectionVo classPeriodSectionVo : classPeriodSectionVos) {
                             if (classPeriodSectionVo.getType() == 3) {
                             if (classPeriodSectionVo.getType() == 3) {
+                                //获取视频录像
+                                UserStudyVideo studyVideo = iUserStudyVideoService.getOne(new LambdaQueryWrapper<UserStudyVideo>()
+                                        .eq(UserStudyVideo::getOrderGoodsId,bo.getOrderGoodsId())
+                                        .eq(UserStudyVideo::getUserId,classPeriodSectionVo.getUserId())
+                                        .eq(UserStudyVideo::getCourseId,classPeriodSectionVo.getCourseId())
+                                        .eq(UserStudyVideo::getChapterId,classPeriodChapterVo.getId())
+                                        .eq(UserStudyVideo::getModuleId,classPeriodVo.getId())
+                                        .eq(UserStudyVideo::getSectionId,classPeriodSectionVo.getId())
+                                        .eq(UserStudyVideo::getGoodsId,bo.getGoodsId())
+                                        .eq(UserStudyVideo::getCurrentStatus,1)
+                                        .eq(UserStudyVideo::getStatus,1));
+                                if (ObjectUtils.isNotNull(studyVideo)){
+                                    classPeriodSectionVo.setVideoUrl(studyVideo.getVideoUrl());
+                                    classPeriodSectionVo.setVideoCurrentTime(studyVideo.getVideoCurrentTime());
+                                }
                                 sectionTotal++;
                                 sectionTotal++;
                                 secTotalTime += classPeriodSectionVo.getDurationTime();
                                 secTotalTime += classPeriodSectionVo.getDurationTime();
                                 //节
                                 //节
@@ -3571,6 +3592,21 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                 List<ClassPeriodSectionVo> classPeriodSectionVos = baseMapper.listPeriodSection(classPeriodVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId());
                 List<ClassPeriodSectionVo> classPeriodSectionVos = baseMapper.listPeriodSection(classPeriodVo.getId(), bo.getGoodsId(), classPeriodVo.getCourseId(), bo.getUserId());
                 Collections.sort(classPeriodSectionVos);
                 Collections.sort(classPeriodSectionVos);
                 for (ClassPeriodSectionVo classPeriodSectionVo : classPeriodSectionVos) {
                 for (ClassPeriodSectionVo classPeriodSectionVo : classPeriodSectionVos) {
+                    //获取视频录像
+                    UserStudyVideo studyVideo = iUserStudyVideoService.getOne(new LambdaQueryWrapper<UserStudyVideo>()
+                            .eq(UserStudyVideo::getOrderGoodsId,bo.getOrderGoodsId())
+                            .eq(UserStudyVideo::getUserId,classPeriodSectionVo.getUserId())
+                            .eq(UserStudyVideo::getCourseId,classPeriodSectionVo.getCourseId())
+                            .eq(UserStudyVideo::getChapterId,classPeriodVo.getId())
+                            .eq(UserStudyVideo::getModuleId,0L)
+                            .eq(UserStudyVideo::getSectionId,classPeriodSectionVo.getId())
+                            .eq(UserStudyVideo::getGoodsId,bo.getGoodsId())
+                            .eq(UserStudyVideo::getCurrentStatus,1)
+                            .eq(UserStudyVideo::getStatus,1));
+                    if (ObjectUtils.isNotNull(studyVideo)){
+                        classPeriodSectionVo.setVideoUrl(studyVideo.getVideoUrl());
+                        classPeriodSectionVo.setVideoCurrentTime(studyVideo.getVideoCurrentTime());
+                    }
                     sectionTotal++;
                     sectionTotal++;
                     secTotalTime += classPeriodSectionVo.getDurationTime();
                     secTotalTime += classPeriodSectionVo.getDurationTime();
                     UserPeriodQueryBo userPeriodQueryBo = new UserPeriodQueryBo();
                     UserPeriodQueryBo userPeriodQueryBo = new UserPeriodQueryBo();
@@ -3692,6 +3728,21 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
 
 
             //为节搜索学时记录
             //为节搜索学时记录
             if (classPeriodVo.getType() == 3) {
             if (classPeriodVo.getType() == 3) {
+                //获取视频录像
+                UserStudyVideo studyVideo = iUserStudyVideoService.getOne(new LambdaQueryWrapper<UserStudyVideo>()
+                        .eq(UserStudyVideo::getOrderGoodsId,bo.getOrderGoodsId())
+                        .eq(UserStudyVideo::getUserId,classPeriodVo.getUserId())
+                        .eq(UserStudyVideo::getCourseId,classPeriodVo.getCourseId())
+                        .eq(UserStudyVideo::getChapterId,0L)
+                        .eq(UserStudyVideo::getModuleId,0L)
+                        .eq(UserStudyVideo::getSectionId,classPeriodVo.getId())
+                        .eq(UserStudyVideo::getGoodsId,bo.getGoodsId())
+                        .eq(UserStudyVideo::getCurrentStatus,1)
+                        .eq(UserStudyVideo::getStatus,1));
+                if (ObjectUtils.isNotNull(studyVideo)){
+                    classPeriodVo.setVideoUrl(studyVideo.getVideoUrl());
+                    classPeriodVo.setVideoCurrentTime(studyVideo.getVideoCurrentTime());
+                }
                 sectionTotal++;
                 sectionTotal++;
                 secTotalTime += classPeriodVo.getDurationTime();
                 secTotalTime += classPeriodVo.getDurationTime();
                 UserPeriodQueryBo userPeriodQueryBo = new UserPeriodQueryBo();
                 UserPeriodQueryBo userPeriodQueryBo = new UserPeriodQueryBo();

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodSectionVo.java

@@ -185,6 +185,12 @@ public class ClassPeriodSectionVo implements Comparable<ClassPeriodSectionVo> {
 
 
 	private Long orderGoodsId;
 	private Long orderGoodsId;
 
 
+	@ApiModelProperty("视频地址")
+	private String videoUrl;
+
+	@ApiModelProperty("视频当前播放时刻")
+	private Long videoCurrentTime;
+
 	@ApiModelProperty("试卷ID")
 	@ApiModelProperty("试卷ID")
 	private Long examId;
 	private Long examId;
 	@Override
 	@Override

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodVo.java

@@ -222,6 +222,11 @@ public class ClassPeriodVo implements Comparable<ClassPeriodVo> {
 	private Long sectionTotal;
 	private Long sectionTotal;
 	@ApiModelProperty("复制班级名称")
 	@ApiModelProperty("复制班级名称")
 	private String commonGradeName;
 	private String commonGradeName;
+	@ApiModelProperty("视频地址")
+	private String videoUrl;
+
+	@ApiModelProperty("视频当前播放时刻")
+	private Long videoCurrentTime;
 	@Override
 	@Override
 	public int compareTo(ClassPeriodVo o) {
 	public int compareTo(ClassPeriodVo o) {
 		if(o.getCourseSort()==this.getCourseSort()){
 		if(o.getCourseSort()==this.getCourseSort()){

+ 69 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -46,6 +46,7 @@ import com.zhongzheng.modules.goods.service.IGoodsFreeBankService;
 import com.zhongzheng.modules.goods.service.IGoodsQuestionRelService;
 import com.zhongzheng.modules.goods.service.IGoodsQuestionRelService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.service.IQuestionMerchantService;
 import com.zhongzheng.modules.goods.service.IQuestionMerchantService;
+import com.zhongzheng.modules.goods.vo.GoodsCourseTreeVo;
 import com.zhongzheng.modules.goods.vo.QuestionOpenImportVo;
 import com.zhongzheng.modules.goods.vo.QuestionOpenImportVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.domain.*;
 import com.zhongzheng.modules.grade.domain.*;
@@ -80,9 +81,11 @@ import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserExamGoods;
 import com.zhongzheng.modules.user.domain.UserExamGoods;
+import com.zhongzheng.modules.user.domain.UserStudyVideo;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserExamGoodsService;
 import com.zhongzheng.modules.user.service.IUserExamGoodsService;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.service.IUserService;
+import com.zhongzheng.modules.user.service.IUserStudyVideoService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
 import com.zhongzheng.modules.user.service.IUserSubscribeService;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import com.zhongzheng.modules.wx.service.IWxPayService;
@@ -213,6 +216,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     private ISysOldOrgService iSysOldOrgService;
     private ISysOldOrgService iSysOldOrgService;
     @Autowired
     @Autowired
     private ISysTenantService iSysTenantService;
     private ISysTenantService iSysTenantService;
+    @Autowired
+    private IUserStudyVideoService iUserStudyVideoService;
     @Value("${oldStudySys.createExamPath}")
     @Value("${oldStudySys.createExamPath}")
     private String CREATE_EXAM_PATH;
     private String CREATE_EXAM_PATH;
 
 
@@ -600,6 +605,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //暂不计算优惠券
             //暂不计算优惠券
             payPrice = payPrice.add(g.getGoodsPrice());
             payPrice = payPrice.add(g.getGoodsPrice());
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            //二建课程设置课程录像
+            setCourseVideo(bo.getUserId(),g.getGoodsId(),orderGoods.getOrderGoodsId());
             boolean canRepeatBuy = false;
             boolean canRepeatBuy = false;
             validUserBeforeBuy(goods, bo.getUserId());
             validUserBeforeBuy(goods, bo.getUserId());
             //判断视频/题库商品是否有购买过,服务期是否过期
             //判断视频/题库商品是否有购买过,服务期是否过期
@@ -675,6 +682,60 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return result;
         return result;
     }
     }
 
 
+    private void setCourseVideo(Long userId, Long goodsId, Long orderGoodsId) {
+        String businessName = iGoodsService.getBusinessName(goodsId);
+        List<String> list = Arrays.asList("继续教育二级建造师", "继续教育二级造价师");
+        if (!list.contains(businessName)){
+            return;
+        }
+        //随便抽取3到5个视频录像
+        List<GoodsCourseTreeVo> treeVos = iGoodsService.getGoodsCourseTree(goodsId);
+        if (CollectionUtils.isEmpty(treeVos)){
+            return;
+        }
+        int[] numbers = {3, 4, 5, 6}; // 这是你的数字集合
+        Random random = new Random();
+        // 随机获取一个索引
+        int index = random.nextInt(numbers.length);
+        // 获取该索引对应的数字
+        int randomNumber = numbers[index];
+
+        List<GoodsCourseTreeVo> treeVoList = new ArrayList<>();
+        List<Integer> numList = new ArrayList<>();
+        Integer number = treeVos.size() > randomNumber ? randomNumber: treeVos.size();
+        for (int i = 0; i < number; i++) {
+            Random random2 = new Random();
+            // 随机获取一个索引
+            int index2 = random2.nextInt(treeVos.size());
+            if (CollectionUtils.isNotEmpty(numList)){
+                //已存在
+                while (numList.contains(index2)){
+                    Random random3 = new Random();
+                    // 随机获取一个索引
+                    index2 = random3.nextInt(treeVos.size());
+                }
+            }
+            treeVoList.add(treeVos.get(index2));
+            numList.add(index2);
+        }
+        List<UserStudyVideo> studyVideos = treeVoList.stream().map(item -> {
+            UserStudyVideo video = new UserStudyVideo();
+            video.setUserId(userId);
+            video.setGoodsId(goodsId);
+            video.setOrderGoodsId(orderGoodsId);
+            video.setCourseId(item.getCourseId());
+            video.setModuleId(item.getModuleId());
+            video.setChapterId(item.getChapterId());
+            video.setSectionId(item.getSectionId());
+            video.setStatus(1);
+            video.setCurrentStatus(1);
+            video.setCreateTime(DateUtils.getNowTime());
+            video.setUpdateTime(DateUtils.getNowTime());
+            return video;
+        }).collect(Collectors.toList());
+        iUserStudyVideoService.saveBatch(studyVideos);
+    }
+
     /**
     /**
      * 系统录单
      * 系统录单
      *
      *
@@ -776,6 +837,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //已收价格
             //已收价格
             receivedPrice = receivedPrice.add(g.getGoodsReceived());
             receivedPrice = receivedPrice.add(g.getGoodsReceived());
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            //二建课程设置课程录像
+            setCourseVideo(bo.getUserId(),g.getGoodsId(),orderGoods.getOrderGoodsId());
             boolean canRepeatBuy = false;
             boolean canRepeatBuy = false;
             validUserBeforeBuy(goods, bo.getUserId());
             validUserBeforeBuy(goods, bo.getUserId());
             //判断是否有购买过
             //判断是否有购买过
@@ -1450,6 +1513,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 payPrice = payPrice.add(goods.getStandPrice());
                 payPrice = payPrice.add(goods.getStandPrice());
             }
             }
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            //二建课程设置课程录像
+            setCourseVideo(bo.getUserId(),g.getGoodsId(),orderGoods.getOrderGoodsId());
             if (ObjectUtils.isNotNull(g.getRelevanceId())){
             if (ObjectUtils.isNotNull(g.getRelevanceId())){
                 //购买关联题库商品
                 //购买关联题库商品
                 questionOrderHandle(g.getRelevanceId(),g.getGoodsId(),orderGoods.getOrderGoodsId(),bo.getUserId());
                 questionOrderHandle(g.getRelevanceId(),g.getGoodsId(),orderGoods.getOrderGoodsId(),bo.getUserId());
@@ -1894,6 +1959,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 payPrice = payPrice.add(goods.getStandPrice());
                 payPrice = payPrice.add(goods.getStandPrice());
             }
             }
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            //二建课程设置课程录像
+            setCourseVideo(bo.getUserId(),g.getGoodsId(),orderGoods.getOrderGoodsId());
             if (ObjectUtils.isNotNull(g.getRelevanceId())){
             if (ObjectUtils.isNotNull(g.getRelevanceId())){
                 //购买关联题库商品
                 //购买关联题库商品
                 questionOrderHandle(g.getRelevanceId(),g.getGoodsId(),orderGoods.getOrderGoodsId(),bo.getUserId());
                 questionOrderHandle(g.getRelevanceId(),g.getGoodsId(),orderGoods.getOrderGoodsId(),bo.getUserId());
@@ -2095,6 +2162,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //暂不计算优惠券
             //暂不计算优惠券
             payPrice = payPrice.add(goods.getStandPrice());
             payPrice = payPrice.add(goods.getStandPrice());
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+            //二建课程设置课程录像
+            setCourseVideo(bo.getUserId(),g.getGoodsId(),orderGoods.getOrderGoodsId());
             if (ObjectUtils.isNotNull(g.getRelevanceId())){
             if (ObjectUtils.isNotNull(g.getRelevanceId())){
                 //购买关联题库商品
                 //购买关联题库商品
                 questionOrderHandle(g.getRelevanceId(),g.getGoodsId(),orderGoods.getOrderGoodsId(),bo.getUserId());
                 questionOrderHandle(g.getRelevanceId(),g.getGoodsId(),orderGoods.getOrderGoodsId(),bo.getUserId());

+ 40 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/FaceOcrServiceImpl.java

@@ -3,6 +3,7 @@ package com.zhongzheng.modules.tencentcloud.service.impl;
 
 
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.tencentcloudapi.bda.v20200324.models.SegmentPortraitPicRequest;
 import com.tencentcloudapi.bda.v20200324.models.SegmentPortraitPicRequest;
 import com.tencentcloudapi.common.Credential;
 import com.tencentcloudapi.common.Credential;
 import com.tencentcloudapi.common.exception.TencentCloudSDKException;
 import com.tencentcloudapi.common.exception.TencentCloudSDKException;
@@ -133,22 +134,53 @@ public class FaceOcrServiceImpl implements IFaceOcrService {
             faceRequest.setMinFaceSize(40L);
             faceRequest.setMinFaceSize(40L);
             faceRequest.setMaxFaceNum(1L);
             faceRequest.setMaxFaceNum(1L);
             FaceInfo[] face = response.getFaceInfos();
             FaceInfo[] face = response.getFaceInfos();
-            if(face[0].getFaceQualityInfo().getBrightness().intValue()<25){
-                log.info("照片光照不达标"+face[0].getFaceQualityInfo().getBrightness().intValue());
-                throw new CustomException("照片光照不达标"+face[0].getFaceQualityInfo().getBrightness().intValue());
+            Long imageWidth = response.getImageWidth();
+            Long imageHeight = response.getImageHeight();
+            if(face[0].getFaceQualityInfo().getBrightness().intValue()<30){
+                throw new CustomException("照片光照不合格,请重新拍照!");
+            }
+            if(face[0].getFaceQualityInfo().getSharpness().intValue()<50){
+                throw new CustomException("照片清晰度不合格,请重新拍照!");
             }
             }
             if(face[0].getFaceQualityInfo().getBrightness().intValue()>95){
             if(face[0].getFaceQualityInfo().getBrightness().intValue()>95){
-                log.info("照片光照不达标"+face[0].getFaceQualityInfo().getBrightness().intValue());
-                throw new CustomException("照片光照曝光"+face[0].getFaceQualityInfo().getBrightness().intValue());
+                throw new CustomException("照片光照曝光,请重新拍照!");
             }
             }
             if(face[0].getFaceQualityInfo().getScore().intValue()<30){
             if(face[0].getFaceQualityInfo().getScore().intValue()<30){
-                log.info("照片质量不达标"+face[0].getFaceQualityInfo().getScore().intValue());
-                throw new CustomException("照片质量不达标"+face[0].getFaceQualityInfo().getScore().intValue());
+                throw new CustomException("照片质量不合格,请重新拍照!");
             }
             }
             if(Validator.isEmpty(face[0].getFaceQualityInfo().getCompleteness())){
             if(Validator.isEmpty(face[0].getFaceQualityInfo().getCompleteness())){
-                log.info("照片五官不达标");
                 throw new CustomException("照片五官不达标");
                 throw new CustomException("照片五官不达标");
             }
             }
+            FaceQualityCompleteness completeness = face[0].getFaceQualityInfo().getCompleteness();
+            if (ObjectUtils.isNull(completeness.getEyebrow()) || completeness.getEyebrow() < 80){
+                throw new CustomException("请勿遮挡眉毛");
+            }
+            if (ObjectUtils.isNull(completeness.getEye()) || completeness.getEye() < 80){
+                throw new CustomException("请勿遮挡眼睛");
+            }
+            if (ObjectUtils.isNull(completeness.getNose()) || completeness.getNose() < 60){
+                throw new CustomException("请勿遮挡鼻子");
+            }
+            if (ObjectUtils.isNull(completeness.getCheek()) || completeness.getCheek() < 70){
+                throw new CustomException("请勿遮挡脸颊");
+            }
+            if (ObjectUtils.isNull(completeness.getMouth()) || completeness.getMouth() < 50){
+                throw new CustomException("请勿遮挡嘴巴");
+            }
+            if (ObjectUtils.isNull(completeness.getChin()) || completeness.getChin() < 60){
+                throw new CustomException("请勿遮挡下巴");
+            }
+            if (imageWidth * 0.55 < face[0].getWidth()){
+                throw new CustomException("人脸与摄像头距离太近,请把摄像头或手机离脸远一些再拍照!");
+            }
+            if (imageHeight * 0.85 < (face[0].getY()+face[0].getHeight())){
+                throw new CustomException("照片的人脸太下,请拍照时把两肩拍出来!");
+            }
+            if(face[0].getX()<0|| face[0].getY()<0
+                    || (face[0].getX() + face[0].getWidth()) > imageWidth)
+            {
+                throw new CustomException("请保证人脸全部在照片范围内!");
+            }
         }catch (TencentCloudSDKException e){
         }catch (TencentCloudSDKException e){
             log.info("人脸检测错误"+e.getMessage());
             log.info("人脸检测错误"+e.getMessage());
             throw new CustomException("人脸检测错误"+e.getMessage());
             throw new CustomException("人脸检测错误"+e.getMessage());

+ 23 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/CheckUserVideoBo.java

@@ -0,0 +1,23 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CheckUserVideoBo implements Serializable {
+
+    private Long userId;
+
+    private Long orderGoodsId;
+
+    private Long goodsId;
+
+    private Long courseId;
+
+    private Long moduleId;
+
+    private Long chapterId;
+
+    private Long sectionId;
+}

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/SaveUserVideoBo.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.user.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SaveUserVideoBo implements Serializable {
+
+    private Long userId;
+
+    private Long orderGoodsId;
+
+    private Long goodsId;
+
+    private Long courseId;
+
+    private Long moduleId;
+
+    private Long chapterId;
+
+    private Long sectionId;
+
+    @ApiModelProperty("视频当前播放时刻")
+    private Long videoCurrentTime;
+
+    @ApiModelProperty("来源平台 1小程序 2PC网站 3h5")
+    private Integer fromPlat;
+
+    @ApiModelProperty("视频地址")
+    private String videoUrl;
+}

+ 64 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/domain/UserStudyVideo.java

@@ -0,0 +1,64 @@
+package com.zhongzheng.modules.user.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 用户学习记录对象 user_study_record
+ *
+ * @author ruoyi
+ * @date 2021-12-16
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("user_study_video")
+public class UserStudyVideo implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** 学习记录ID */
+    @TableId(value = "video_id")
+    private Long videoId;
+    /** $column.columnComment */
+    private Long userId;
+    /** 订单商品ID */
+    private Long orderGoodsId;
+    /** 商品Id */
+    private Long goodsId;
+    /** 课程ID */
+    private Long courseId;
+    /** 模块ID */
+    private Long moduleId;
+    /** 章ID */
+    private Long chapterId;
+    /** 节ID */
+    private Long sectionId;
+    /** 视频当前播放时刻 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long videoCurrentTime;
+    /**  来源平台 1小程序 2网站 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Integer fromPlat;
+    /** 当前状态 1 当前状态 0过往状态 */
+    private Integer currentStatus;
+    /** 视频地址 */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String videoUrl;
+    /** 0无效 1有效 */
+    private Integer status;
+    /** 创建时间 */
+    private Long tenantId;
+    /** 商户ID */
+    private Long createTime;
+    /** 修改时间 */
+    private Long updateTime;
+
+}

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserStudyVideoMapper.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.user.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.user.domain.UserStudyVideo;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author change
+ * @date 2021-06-24
+ */
+public interface UserStudyVideoMapper extends BaseMapper<UserStudyVideo> {
+
+}

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

@@ -161,4 +161,8 @@ public interface IUserStudyRecordService extends IService<UserStudyRecord> {
 	Boolean syncUserDateStudyLog();
 	Boolean syncUserDateStudyLog();
 
 
     List<UserStudyRecord> getStudyRecordNoTenant(Long orderGoodsId);
     List<UserStudyRecord> getStudyRecordNoTenant(Long orderGoodsId);
+
+    Integer checkUserVideo(CheckUserVideoBo bo);
+
+	boolean saveUserVideo(SaveUserVideoBo bo);
 }
 }

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserStudyVideoService.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.user.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.user.domain.UserStudyVideo;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+public interface IUserStudyVideoService extends IService<UserStudyVideo> {
+
+}

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

@@ -174,6 +174,9 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
     @Autowired
     @Autowired
     private ICourseMenuService iCourseMenuService;
     private ICourseMenuService iCourseMenuService;
 
 
+    @Autowired
+    private IUserStudyVideoService iUserStudyVideoService;
+
 
 
     @Value("${fileHost}")
     @Value("${fileHost}")
     private String fileHost;
     private String fileHost;
@@ -1664,6 +1667,58 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         return baseMapper.getStudyRecordNoTenant(orderGoodsId);
         return baseMapper.getStudyRecordNoTenant(orderGoodsId);
     }
     }
 
 
+    @Override
+    public Integer checkUserVideo(CheckUserVideoBo bo) {
+        User user = iUserService.getById(bo.getUserId());
+        if (ObjectUtils.isNull(user)){
+            throw new CustomException("用户不存在,请检查!");
+        }
+        OrderGoods orderGoods = iOrderGoodsService.getById(bo.getOrderGoodsId());
+        if (ObjectUtils.isNull(orderGoods)){
+            throw new CustomException("订单不存在,请检查!");
+        }
+        return iUserStudyVideoService.count(new LambdaQueryWrapper<UserStudyVideo>()
+                .eq(UserStudyVideo::getUserId, bo.getUserId())
+                .eq(UserStudyVideo::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(UserStudyVideo::getGoodsId, bo.getGoodsId())
+                .eq(UserStudyVideo::getCourseId, bo.getCourseId())
+                .eq(UserStudyVideo::getModuleId, bo.getModuleId())
+                .eq(UserStudyVideo::getChapterId, bo.getChapterId())
+                .eq(UserStudyVideo::getSectionId, bo.getSectionId())
+                .eq(UserStudyVideo::getCurrentStatus, 1)
+                .isNull(UserStudyVideo::getVideoUrl)
+                .eq(UserStudyVideo::getStatus, 1));
+    }
+
+    @Override
+    public boolean saveUserVideo(SaveUserVideoBo bo) {
+        User user = iUserService.getById(bo.getUserId());
+        if (ObjectUtils.isNull(user)){
+            throw new CustomException("用户不存在,请检查!");
+        }
+        OrderGoods orderGoods = iOrderGoodsService.getById(bo.getOrderGoodsId());
+        if (ObjectUtils.isNull(orderGoods)){
+            throw new CustomException("订单不存在,请检查!");
+        }
+        UserStudyVideo video = iUserStudyVideoService.getOne(new LambdaQueryWrapper<UserStudyVideo>()
+                .eq(UserStudyVideo::getUserId, bo.getUserId())
+                .eq(UserStudyVideo::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(UserStudyVideo::getGoodsId, bo.getGoodsId())
+                .eq(UserStudyVideo::getCourseId, bo.getCourseId())
+                .eq(UserStudyVideo::getModuleId, bo.getModuleId())
+                .eq(UserStudyVideo::getChapterId, bo.getChapterId())
+                .eq(UserStudyVideo::getSectionId, bo.getSectionId())
+                .eq(UserStudyVideo::getCurrentStatus, 1)
+                .eq(UserStudyVideo::getStatus, 1));
+        if (ObjectUtils.isNull(video)){
+            throw new CustomException("当前视频不存在,请检查!");
+        }
+        video.setVideoCurrentTime(bo.getVideoCurrentTime());
+        video.setFromPlat(bo.getFromPlat());
+        video.setVideoUrl(bo.getVideoUrl());
+        return iUserStudyVideoService.updateById(video);
+    }
+
 
 
     /**
     /**
      * 获取最后一次看完的节
      * 获取最后一次看完的节

+ 18 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyVideoServiceImpl.java

@@ -0,0 +1,18 @@
+package com.zhongzheng.modules.user.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.user.domain.UserStudyVideo;
+import com.zhongzheng.modules.user.mapper.UserStudyVideoMapper;
+import com.zhongzheng.modules.user.service.IUserStudyVideoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-06-24
+ */
+@Service
+public class UserStudyVideoServiceImpl extends ServiceImpl<UserStudyVideoMapper, UserStudyVideo> implements IUserStudyVideoService {
+
+}

+ 52 - 0
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -433,6 +433,7 @@
         WHERE
         WHERE
         1 = 1
         1 = 1
         AND g.goods_type != 5
         AND g.goods_type != 5
+        AND g.input_sign = 0
         AND g.first_choice_goods = 0
         AND g.first_choice_goods = 0
         <if test="status != null and status.size()!=0 ">
         <if test="status != null and status.size()!=0 ">
             AND g.status in
             AND g.status in
@@ -1002,6 +1003,57 @@
         VALUES(#{educationTypeId},#{businessId},#{tenantId},#{projectId},#{subjectId},#{majorId},#{type})
         VALUES(#{educationTypeId},#{businessId},#{tenantId},#{projectId},#{subjectId},#{majorId},#{type})
     </insert>
     </insert>
 
 
+    <select id="getGoodsCourseTree" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.goods.vo.GoodsCourseTreeVo">
+        SELECT
+            gc.goods_id,
+            cm.course_id,
+            cmc.module_id,
+            cpc.chapter_id,
+            cs.section_id
+        FROM
+            goods_course gc
+                LEFT JOIN course_menu cm ON gc.course_id = cm.course_id
+                LEFT JOIN course_module_chapter cmc ON cm.menu_id = cmc.module_id
+                LEFT JOIN course_chapter_section cpc ON cmc.chapter_id = cpc.chapter_id
+                LEFT JOIN course_section cs ON cpc.section_id = cs.section_id
+        WHERE
+            gc.goods_id = #{goodsId}
+          AND cm.`status` = 1
+          AND cs.`status` = 1
+          AND cm.type = 1 UNION ALL
+        SELECT
+            gc.goods_id,
+            cm.course_id,
+            0 AS module_id,
+            cpc.chapter_id,
+            cs.section_id
+        FROM
+            goods_course gc
+                LEFT JOIN course_menu cm ON gc.course_id = cm.course_id
+                LEFT JOIN course_chapter_section cpc ON cm.menu_id = cpc.chapter_id
+                LEFT JOIN course_section cs ON cpc.section_id = cs.section_id
+        WHERE
+            gc.goods_id = #{goodsId}
+          AND cm.`status` = 1
+          AND cs.`status` = 1
+          AND cm.type = 2 UNION ALL
+        SELECT
+            gc.goods_id,
+            cm.course_id,
+            0 AS module_id,
+            0 AS chapter_id,
+            cs.section_id
+        FROM
+            goods_course gc
+                LEFT JOIN course_menu cm ON gc.course_id = cm.course_id
+                LEFT JOIN course_section cs ON cm.menu_id = cs.section_id
+        WHERE
+            gc.goods_id = #{goodsId}
+          AND cm.`status` = 1
+          AND cs.`status` = 1
+          AND cm.type = 3
+    </select>
+
     <update id="updateByTenant" parameterType="com.zhongzheng.modules.goods.domain.Goods">
     <update id="updateByTenant" parameterType="com.zhongzheng.modules.goods.domain.Goods">
         UPDATE goods
         UPDATE goods
         SET `year`                  = #{year},
         SET `year`                  = #{year},

+ 7 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyVideoMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.user.mapper.UserStudyVideoMapper">
+
+</mapper>