Преглед изворни кода

Merge remote-tracking branch 'origin/dev' into dev

renqianlong пре 1 година
родитељ
комит
b366c63652
20 измењених фајлова са 244 додато и 176 уклоњено
  1. 0 79
      run-prod.sh
  2. BIN
      zhongzheng-admin/src/main/resources/config/1654168249/apiclient_cert.p12
  3. 0 1
      zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  4. 2 2
      zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java
  5. 25 25
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  6. 27 8
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSectionServiceImpl.java
  7. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuVo.java
  8. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseSectionImport.java
  9. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  10. 55 18
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  11. 6 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  12. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java
  13. 11 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  14. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/IVodService.java
  15. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/VodServiceImpl.java
  16. 14 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  17. 28 26
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  18. 7 3
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseMenuMapper.xml
  19. 2 2
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  20. 27 1
      zhongzheng-system/src/main/resources/mapper/modules/user/UserExamRecordMapper.xml

+ 0 - 79
run-prod.sh

@@ -1,42 +1,3 @@
-#!/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
 # 定义应用组名
 group_admin_name='zhongzheng'
@@ -72,44 +33,4 @@ docker run \
 -d ${group_admin_name}/${app_admin_name}:${app_admin_version}
 echo '----start container admin----'
 
-echo "开始等待20秒..."
-# 1-10秒内随机
-sleep 5
-echo "等待后继续"
-
-#!/usr/bin/env bash
-# 定义应用组名
-group_admin_name='zhongzheng'
-# 定义应用名称
-app_admin_name='zhongzheng-saas-admin-top'
-# 定义应用版本
-app_admin_version='1.0-SNAPSHOT'
-# 定义应用环境
-profile_active='prod'
-echo '----copy jar admin top----'
-docker stop ${app_admin_name}
-echo '----stop container admin top----'
-docker rm ${app_admin_name}
-echo '----rm container admin top----'
-docker rmi ${group_admin_name}/${app_admin_name}:${app_admin_version}
-echo '----rm image admin top----'
-# 打包编译docker镜像
-docker build -f /mydata/maven/build/Dockerfile-saas -t ${group_admin_name}/${app_admin_name}:${app_admin_version} .
-echo '----build image admin top----'
-docker run \
--p 7077:7077 \
---name ${app_admin_name} \
---restart=always \
---log-opt max-size=50m \
---log-opt max-file=3 \
--e 'spring.profiles.active'=${profile_active} \
--e TZ="Asia/Shanghai" \
--v /etc/localtime:/etc/localtime \
--v /usr/share/fonts:/usr/share/fonts \
--v /data/logs/prod_admin_top:/logs \
--v /mydata/app/${app_admin_name}/logs:/var/logs \
--v /data/nginx/conf.d:/data/nginx/conf.d \
--d ${group_admin_name}/${app_admin_name}:${app_admin_version}
-echo '----start container admin top----'
-
 

BIN
zhongzheng-admin/src/main/resources/config/1654168249/apiclient_cert.p12


+ 0 - 1
zhongzheng-api/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -59,7 +59,6 @@ public class ClassGradeController extends BaseController {
         startPage();
         bo.setStatus(new ArrayList<Integer>(Arrays.asList(1)));
         bo.setPastDue(1L);
-
         List<ClassGradeVo> list = iClassGradeService.queryList(bo);
         return getDataTable(list);
     }

+ 2 - 2
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/ToolsUtils.java

@@ -416,8 +416,8 @@ public class ToolsUtils {
         if(Validator.isEmpty(passWord)){
             return false;
         }
-        if(passWord.length()<8||passWord.length()>16){
-            throw new CustomException("密码长度限制8到16位");
+        if(passWord.length()<6||passWord.length()>16){
+            throw new CustomException("密码长度限制6到16位");
         }
         return true;
     }

+ 25 - 25
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -903,32 +903,32 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                 userProfileExportVo.setSex(jsonBean.getSex().getValue());
                 userProfileExportVo.setIdcard(jsonBean.getIdcard().getValue());
                 userProfileExportVo.setTelphone(jsonBean.getTelphone().getValue());
-                userProfileExportVo.setEducation(jsonBean.getEducation().getValue());
-                userProfileExportVo.setSchool(jsonBean.getSchool().getValue());
-                userProfileExportVo.setGraduation_time(DateUtil.formatDate(jsonBean.getGraduation_time().getValue()));
-                userProfileExportVo.setWork_unit(jsonBean.getWork_unit().getValue());
-                userProfileExportVo.setUnit_contact(jsonBean.getUnit_contact().getValue());
-                userProfileExportVo.setUnit_tel(jsonBean.getUnit_tel().getValue());
-                userProfileExportVo.setApply_post(jsonBean.getApply_post().getValue());
-                userProfileExportVo.setMajor(jsonBean.getMajor().getValue());
-                userProfileExportVo.setWorking_years(jsonBean.getWorking_years().getValue());
+                userProfileExportVo.setEducation(Validator.isEmpty(jsonBean.getEducation())?"":jsonBean.getEducation().getValue());
+                userProfileExportVo.setSchool(Validator.isEmpty(jsonBean.getSchool())?"":jsonBean.getSchool().getValue());
+                userProfileExportVo.setGraduation_time(Validator.isEmpty(jsonBean.getGraduation_time())?"":DateUtil.formatDate(jsonBean.getGraduation_time().getValue()));
+                userProfileExportVo.setWork_unit(Validator.isEmpty(jsonBean.getWork_unit())?"":jsonBean.getWork_unit().getValue());
+                userProfileExportVo.setUnit_contact(Validator.isEmpty(jsonBean.getUnit_contact())?"":jsonBean.getUnit_contact().getValue());
+                userProfileExportVo.setUnit_tel(Validator.isEmpty(jsonBean.getUnit_tel())?"":jsonBean.getUnit_tel().getValue());
+                userProfileExportVo.setApply_post(Validator.isEmpty(jsonBean.getApply_post())?"":jsonBean.getApply_post().getValue());
+                userProfileExportVo.setMajor(Validator.isEmpty(jsonBean.getMajor())?"":jsonBean.getMajor().getValue());
+                userProfileExportVo.setWorking_years(Validator.isEmpty(jsonBean.getWorking_years())?"":jsonBean.getWorking_years().getValue());
                 List<String> fileList = new ArrayList<>();
                 if (Validator.isNotEmpty(jsonBean.getRecent_photos().getValue())) {
                     userProfileExportVo.setRecent_photos(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getRecent_photos().getValue());
                     fileList.add(jsonBean.getRecent_photos().getValue());
                 }
 
-                if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo().getValue())) {
+                if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo())) {
                     userProfileExportVo.setIdcard_face_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_face_photo().getValue());
                     fileList.add(jsonBean.getIdcard_face_photo().getValue());
                 }
 
-                if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo().getValue())) {
+                if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo())) {
                     userProfileExportVo.setIdcard_national_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_national_photo().getValue());
                     fileList.add(jsonBean.getIdcard_national_photo().getValue());
                 }
 
-                if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature().getValue())) {
+                if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature())) {
                     userProfileExportVo.setCommitment_electr_signature(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getCommitment_electr_signature().getValue());
                     fileList.add(jsonBean.getCommitment_electr_signature().getValue());
                 }
@@ -1014,30 +1014,30 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                     userProfileExportVo.setSex(jsonBean.getSex().getValue());
                     userProfileExportVo.setIdcard(jsonBean.getIdcard().getValue());
                     userProfileExportVo.setTelphone(jsonBean.getTelphone().getValue());
-                    userProfileExportVo.setEducation(jsonBean.getEducation().getValue());
-                    userProfileExportVo.setSchool(jsonBean.getSchool().getValue());
-                    userProfileExportVo.setGraduation_time(DateUtil.formatDate(jsonBean.getGraduation_time().getValue()));
-                    userProfileExportVo.setWork_unit(jsonBean.getWork_unit().getValue());
-                    userProfileExportVo.setUnit_contact(jsonBean.getUnit_contact().getValue());
-                    userProfileExportVo.setUnit_tel(jsonBean.getUnit_tel().getValue());
-                    userProfileExportVo.setApply_post(jsonBean.getApply_post().getValue());
-                    userProfileExportVo.setMajor(jsonBean.getMajor().getValue());
-                    userProfileExportVo.setWorking_years(jsonBean.getWorking_years().getValue());
+                    userProfileExportVo.setEducation(Validator.isEmpty(jsonBean.getEducation())?"":jsonBean.getEducation().getValue());
+                    userProfileExportVo.setSchool(Validator.isEmpty(jsonBean.getSchool())?"":jsonBean.getSchool().getValue());
+                    userProfileExportVo.setGraduation_time(Validator.isEmpty(jsonBean.getGraduation_time())?"":DateUtil.formatDate(jsonBean.getGraduation_time().getValue()));
+                    userProfileExportVo.setWork_unit(Validator.isEmpty(jsonBean.getWork_unit())?"":jsonBean.getWork_unit().getValue());
+                    userProfileExportVo.setUnit_contact(Validator.isEmpty(jsonBean.getUnit_contact())?"":jsonBean.getUnit_contact().getValue());
+                    userProfileExportVo.setUnit_tel(Validator.isEmpty(jsonBean.getUnit_tel())?"":jsonBean.getUnit_tel().getValue());
+                    userProfileExportVo.setApply_post(Validator.isEmpty(jsonBean.getApply_post())?"":jsonBean.getApply_post().getValue());
+                    userProfileExportVo.setMajor(Validator.isEmpty(jsonBean.getMajor())?"":jsonBean.getMajor().getValue());
+                    userProfileExportVo.setWorking_years(Validator.isEmpty(jsonBean.getWorking_years())?"":jsonBean.getWorking_years().getValue());
                     List<String> fileList = new ArrayList<>();
-                    if (Validator.isNotEmpty(jsonBean.getRecent_photos().getValue())) {
+                    if (Validator.isNotEmpty(jsonBean.getRecent_photos())) {
                         userProfileExportVo.setRecent_photos(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getRecent_photos().getValue());
                         fileList.add(jsonBean.getRecent_photos().getValue());
                     }
-                    if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo().getValue())) {
+                    if (Validator.isNotEmpty(jsonBean.getIdcard_face_photo())) {
                         userProfileExportVo.setIdcard_face_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_face_photo().getValue());
                         fileList.add(jsonBean.getIdcard_face_photo().getValue());
                     }
-                    if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo().getValue())) {
+                    if (Validator.isNotEmpty(jsonBean.getIdcard_national_photo())) {
                         userProfileExportVo.setIdcard_national_photo(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getIdcard_national_photo().getValue());
                         fileList.add(jsonBean.getIdcard_national_photo().getValue());
 
                     }
-                    if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature().getValue())) {
+                    if (Validator.isNotEmpty(jsonBean.getCommitment_electr_signature())) {
                         userProfileExportVo.setCommitment_electr_signature(ALIYUN_OSS_ENDPOINT + "/" + jsonBean.getCommitment_electr_signature().getValue());
                         fileList.add(jsonBean.getCommitment_electr_signature().getValue());
 

+ 27 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSectionServiceImpl.java

@@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.Page;
+import com.tencentcloudapi.vod.v20180717.models.MediaBasicInfo;
+import com.tencentcloudapi.vod.v20180717.models.MediaInfo;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -32,6 +34,7 @@ import com.zhongzheng.modules.polyv.bo.PolyvLiveQueryBo;
 import com.zhongzheng.modules.polyv.service.IPolyvLiveService;
 import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
 import com.zhongzheng.modules.polyv.vo.PolyvVideoQuerVo;
+import com.zhongzheng.modules.tencentcloud.service.IVodService;
 import net.polyv.live.v1.entity.chat.LiveGetMessageListResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -82,6 +85,9 @@ public class CourseSectionServiceImpl extends ServiceImpl<CourseSectionMapper, C
     @Autowired
     private IPolyvVideoService iPolyvVideoService;
 
+    @Autowired
+    private IVodService iVodService;
+
     @Autowired
     private IPolyvLiveService iPolyvLiveService;
 
@@ -326,7 +332,7 @@ public class CourseSectionServiceImpl extends ServiceImpl<CourseSectionMapper, C
             bo.setPublishStatus(sectionImport.getPublishStatus().equals("发布")?1:0);
             bo.setStatus(1);
             bo.setCoverUrl("oss/images/avatar/20211013/1634097664410_1397766697");
-
+            bo.setViewSign(sectionImport.getViewSign());
 
 
             if(Validator.isNotEmpty(sectionImport.getLiveStartTime())){
@@ -354,15 +360,28 @@ public class CourseSectionServiceImpl extends ServiceImpl<CourseSectionMapper, C
                 }
             }
             if(bo.getSectionType()==1){
-                try{
-                    PolyvVideoQuerVo poly = iPolyvVideoService.queryById(bo.getRecordingUrl());
-                    if(Validator.isNotEmpty(poly)){
-                        bo.setDurationTime(new Long(DateUtils.durationFormat(poly.getDuration())));
+                if(Validator.isEmpty(bo.getViewSign())||bo.getViewSign()==1){
+                    try{
+                        PolyvVideoQuerVo poly = iPolyvVideoService.queryById(bo.getRecordingUrl());
+                        if(Validator.isNotEmpty(poly)){
+                            bo.setDurationTime(new Long(DateUtils.durationFormat(poly.getDuration())));
+                        }
+                    }catch (Exception e){
+                        errorLog+="第"+(size - Index)+"条:读取保利威时长错误。\r\n";
+                        continue;
+                    }
+                }else{
+                    try{
+                        MediaInfo mediaInfo = iVodService.describeMediaInfo(bo.getRecordingUrl());
+                        if(Validator.isNotEmpty(mediaInfo)){
+                            bo.setDurationTime(mediaInfo.getMetaData().getDuration().longValue());
+                        }
+                    }catch (Exception e){
+                        errorLog+="第"+(size - Index)+"条:读取腾讯云时长错误。\r\n";
+                        continue;
                     }
-                }catch (Exception e){
-                    errorLog+="第"+(size - Index)+"条:读取保利威时长错误。\r\n";
-                    continue;
                 }
+
             }
             if(bo.getSectionType()==2){
                 bo.setDurationTime(bo.getLiveEndTime().longValue() - bo.getLiveStartTime().longValue());

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseMenuVo.java

@@ -99,5 +99,6 @@ public class CourseMenuVo {
 	@Excel(name = "是否优选  0没有 1选中")
 	@ApiModelProperty("是否优选  0没有 1选中")
 	private Integer firstChoiceStatus;
-
+	@ApiModelProperty("视频标签:1保利威 2腾讯")
+	private Integer viewSign;
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/vo/CourseSectionImport.java

@@ -76,7 +76,7 @@ public class CourseSectionImport {
     private Long durationTime;
     /** 视频标签:1保利威 2腾讯 */
     @ApiModelProperty("视频标签:1保利威 2腾讯")
-    @Excel(name = "视频标签:1保利威 2腾讯")
+    @Excel(name = "视频标签")
     private Integer viewSign;
 
     private Long educationTypeId;

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

@@ -987,7 +987,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
             subjectStudyRecordQueryBo.setGoodsId(classGradeStudentVo.getGoodsId());
             subjectStudyRecordQueryBo.setUserId(classGradeStudentVo.getUserId());
-            subjectStudyRecordQueryBo.setGradeId(bo.getGradeId());
+            subjectStudyRecordQueryBo.setGradeId(classGradeStudentVo.getGradeId());
             subjectStudyRecordQueryBo.setOrderGoodsId(classGradeStudentVo.getOrderGoodsId());
             List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listSubject(subjectStudyRecordQueryBo);
             for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {

+ 55 - 18
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -311,6 +311,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                         .eq(ClassGradeUser::getStatus, 1)
                         .eq(ClassGradeUser::getGradeId, bo.getOldGradeId())
                         .last("limit 1"));
+                classGradeUser.setStatus(0);
                 classGradeUser.setChangeGrade(1);
                 classGradeUser.setUpdateTime(DateUtils.getNowTime());
                 updateById(classGradeUser);
@@ -723,13 +724,28 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                 return null;
             } else {
                 //推送失败
-                LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
-                objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, userVo.getId());
-                objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusMsg, respone);
-                objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
-                objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusTime, DateUtils.getNowTime());
-                this.update(null, objectLambdaUpdateWrapper);
-                return respone;
+                if("ERROR|该学员已经存在本班".equals(respone)){
+                    LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, userVo.getId());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatus, 1);
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusMsg, "OK||"+dataTxt);
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusTime, DateUtils.getNowTime());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusNum, userVo.getOfficialStatusNum() + 1);
+                    this.update(null, objectLambdaUpdateWrapper);
+
+                    //修改资料变更状态
+
+                    return null;
+                }else{
+                    LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, userVo.getId());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusMsg, respone);
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusTime, DateUtils.getNowTime());
+                    this.update(null, objectLambdaUpdateWrapper);
+                    return respone;
+                }
             }
         } catch (IOException e) {
             //    throw new CustomException("请求错误");
@@ -934,13 +950,31 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                 return null;
             } else {
                 //推送失败
-                LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
-                objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, userVo.getId());
-                objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusMsg, respone);
-                objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
-                objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusTime, DateUtils.getNowTime());
-                this.update(null, objectLambdaUpdateWrapper);
-                return respone;
+                if("ERROR|该学员已经存在本班".equals(respone)){
+                    //推送成功
+                    LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, userVo.getId());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatus, 1);
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusMsg, "OK||"+dataTxt);
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusTime, DateUtils.getNowTime());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusNum, userVo.getOfficialStatusNum() + 1);
+                    this.update(null, objectLambdaUpdateWrapper);
+
+                    //修改资料变更状态
+
+                    return null;
+                }else{
+                    //推送失败
+                    LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+                    objectLambdaUpdateWrapper.eq(ClassGradeUser::getId, userVo.getId());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusMsg, respone);
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getUpdateTime, DateUtils.getNowTime());
+                    objectLambdaUpdateWrapper.set(ClassGradeUser::getOfficialStatusTime, DateUtils.getNowTime());
+                    this.update(null, objectLambdaUpdateWrapper);
+                    return respone;
+                }
+
             }
         } catch (IOException e) {
             //    throw new CustomException("请求错误");
@@ -1323,6 +1357,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         LoginUser loginUser = new LoginUser();
         loginUser.setUser(sysUser);
         studentVo.setToken(iUserService.createToken(loginUser));
+        if(SEVEN_OFFICIALPUSH_INFOACCOUNT.equals("GD005")){
+            studentVo.setTenantName("广东省祥粤职业培训学院");
+        }
         return studentVo;
     }
 
@@ -2168,7 +2205,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             classPeriodStudentVo.setStuAllNum(studyLong);
 
             //总的审核状态按照策划规则
-            ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
+/*            ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
             classGradeUserQueryBo.setGradeId(classPeriodStudentVo.getGradeId());
             classGradeUserQueryBo.setUserId(classPeriodStudentVo.getUserId());
             classGradeUserQueryBo.setGoodsId(classPeriodStudentVo.getGoodsId());
@@ -2176,12 +2213,12 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             ClassPeriodUserVo classPeriodUserVos = classPeriodUserVos1.get(0);
             classPeriodUserVos.setPending(classPeriodStudentVo.getSecAllNum() - classPeriodUserVos.getPass() - classPeriodUserVos.getCheat());
             classPeriodUserVos.setExamPending(classPeriodUserVos.getExamNum() - classPeriodUserVos.getExamPass() - classPeriodUserVos.getExamCheat());
+            classPeriodStudentVo.setWaitRebuildNum(classPeriodUserVos.getCheat() + classPeriodUserVos.getExamCheat());*/
             //當前班級學員審核狀態 -1不可审核 0待審  1未通过 2通过
             Integer gradePeriodStatus = 0; //班级里的审核状态字段,保持一致 0 未通过 1通过 2待审核 -1 不可审核
 
             classPeriodStudentVo.setAllStatus(changePeriodStatus(classPeriodStudentVo.getPeriodStatus()));
 
-            classPeriodStudentVo.setWaitRebuildNum(classPeriodUserVos.getCheat() + classPeriodUserVos.getExamCheat());
             List<Long> timeList = baseMapper.selectStart(classPeriodStudentVo.getUserId(), classPeriodStudentVo.getGoodsId(), classPeriodStudentVo.getGradeId(),classPeriodStudentVo.getOrderGoodsId());
             if (!CollectionUtils.isEmpty(timeList)) {
                 //查找开始学习时间
@@ -3420,7 +3457,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                                     if ((startTotalTime == 0L && Validator.isNotEmpty(classPeriodSectionVo.getStudyStartTime())) || (Validator.isNotEmpty(classPeriodSectionVo.getStudyStartTime()) && startTotalTime.longValue() > classPeriodSectionVo.getStudyStartTime().longValue())) {
                                         startTotalTime = classPeriodSectionVo.getStudyStartTime();
                                     }
-                                    if (endTotalTime == 0L || (Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime()) && endTotalTime.longValue() < classPeriodSectionVo.getStudyEndTime().longValue())) {
+                                    if ((endTotalTime == 0L&&Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime())) || (Validator.isNotEmpty(classPeriodSectionVo.getStudyEndTime()) && endTotalTime.longValue() < classPeriodSectionVo.getStudyEndTime().longValue())) {
                                         endTotalTime = classPeriodSectionVo.getStudyEndTime();
                                     }
                                     classPeriodSectionVo.setPeriodStatus(userPeriodStatusVo.getPeriodStatus());
@@ -4052,7 +4089,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if(Validator.isEmpty(classGradeUser)){
             throw new CustomException("数据不存在");
         }
-        if(classGradeUser.getSevenPushCheck()==0||classGradeUser.getSevenPushCheck()==2){
+        if(classGradeUser.getSevenPushCheck()==2){
             throw new CustomException("无效操作");
         }
         /*LambdaUpdateWrapper<ClassGradeUser> objectLambdaUpdateWrapper = Wrappers.lambdaUpdate();

+ 6 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -756,8 +756,12 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         if(Validator.isNotEmpty(profile)){
             Map<String, String> maps = JSONObject.parseObject(profile.getKeyValue(), Map.class);
             if(maps.containsKey("commitment_seal")){
-                String commitment_seal = ALIYUN_OSS_ENDPOINT + "/" + JSONObject.parseObject(String.valueOf(maps.get("commitment_seal")), UserProfileFit.class).getValue();
-                studyRec.setCommitmentSeal(commitment_seal);
+                String path = JSONObject.parseObject(String.valueOf(maps.get("commitment_seal")), UserProfileFit.class).getValue();
+                if(Validator.isNotEmpty(path)&&!path.equals("null")){
+                    String commitment_seal = ALIYUN_OSS_ENDPOINT + "/" +path;
+                    studyRec.setCommitmentSeal(commitment_seal);
+                }
+
             }
             if(maps.containsKey("school")){
                 String school = JSONObject.parseObject(String.valueOf(maps.get("school")), UserProfileFit.class).getValue();

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java

@@ -269,4 +269,6 @@ public class ClassPeriodStudentVo {
 
 	private Long majorId;
 
+	private String tenantName;
+
 }

+ 11 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -2174,11 +2174,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     private Boolean validUserBeforeBuy(Goods goods, Long userId) {
         if (goods.getGoodsType() == 3 || goods.getGoodsType() == 4) {
             Long makeGoodsId = goods.getMakeGoodsId();
-            UserExamGoods entity = userExamGoodsService.getOne(new LambdaQueryWrapper<UserExamGoods>().eq(UserExamGoods::getUserId, userId).eq(UserExamGoods::getGoodsId, makeGoodsId).last("limit 1"));
-            if (Validator.isEmpty(entity)) {
-                throw new CustomException("请先购买此补考前培商品的绑定商品", 510);
+            String makeGoodsIds = goods.getMakeGoodsIds();
+            if(Validator.isNotEmpty(makeGoodsIds)){
+                List<String> makeGoodsIdList = Arrays.stream(makeGoodsIds.toString().split(",")).collect(Collectors.toList());
+                UserExamGoods entity = userExamGoodsService.getOne(new LambdaQueryWrapper<UserExamGoods>().eq(UserExamGoods::getUserId, userId)
+                        .in(UserExamGoods::getGoodsId,makeGoodsIdList).last("limit 1"));
+                if (Validator.isEmpty(entity)) {
+                    throw new CustomException("请先购买此补考前培商品的绑定商品", 510);
+                }
+            }else{
+                throw new CustomException("补考商品未关联商品", 510);
             }
 
+
         }
         return true;
     }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/IVodService.java

@@ -1,6 +1,8 @@
 package com.zhongzheng.modules.tencentcloud.service;
 
 
+import com.tencentcloudapi.vod.v20180717.models.MediaBasicInfo;
+import com.tencentcloudapi.vod.v20180717.models.MediaInfo;
 import com.zhongzheng.modules.tencentcloud.bo.FaceQueryBo;
 import com.zhongzheng.modules.tencentcloud.bo.InvoiceQueryBo;
 
@@ -10,6 +12,8 @@ public interface IVodService {
 
     Map<String,Object> describeMediaInfos(String[] fileIds);
 
+    MediaInfo describeMediaInfo(String fileId);
+
     Map<String,Object> vodSignRequest(String FileId);
 
 

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/tencentcloud/service/impl/VodServiceImpl.java

@@ -21,6 +21,8 @@ import com.tencentcloudapi.ocr.v20181119.models.*;
 import com.tencentcloudapi.vod.v20180717.VodClient;
 import com.tencentcloudapi.vod.v20180717.models.DescribeMediaInfosRequest;
 import com.tencentcloudapi.vod.v20180717.models.DescribeMediaInfosResponse;
+import com.tencentcloudapi.vod.v20180717.models.MediaBasicInfo;
+import com.tencentcloudapi.vod.v20180717.models.MediaInfo;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.alioss.bo.OssRequest;
@@ -83,6 +85,34 @@ public class VodServiceImpl implements IVodService {
         return null;
     }
 
+    @Override
+    public MediaInfo describeMediaInfo(String fileId) {
+        try{
+            String[] fileIds = new String[]{fileId};
+            Credential cred = new Credential(SecretId, SecretKey);
+            // 实例化一个http选项,可选的,没有特殊需求可以跳过
+            HttpProfile httpProfile = new HttpProfile();
+            httpProfile.setEndpoint("vod.tencentcloudapi.com");
+            // 实例化一个client选项,可选的,没有特殊需求可以跳过
+            ClientProfile clientProfile = new ClientProfile();
+            clientProfile.setHttpProfile(httpProfile);
+            // 实例化要请求产品的client对象,clientProfile是可选的
+            VodClient client = new VodClient(cred, "", clientProfile);
+            // 实例化一个请求对象,每个接口都会对应一个request对象
+            DescribeMediaInfosRequest req = new DescribeMediaInfosRequest();
+            req.setSubAppId(1306117675L);
+            //        String[] fileIdss = new String[]{"3270835015060309946"};
+            req.setFileIds(fileIds);
+            // 返回的resp是一个DescribeMediaInfosResponse的实例,与请求对象对应
+            DescribeMediaInfosResponse resp = client.DescribeMediaInfos(req);
+            System.out.println(resp);
+            return resp.getMediaInfoSet()[0];
+        }catch (TencentCloudSDKException e){
+            System.out.println("错误"+e.getMessage());
+        }
+        return null;
+    }
+
     @Override
     public Map<String, Object> vodSignRequest(String FileId) {
         Integer AppId = 1306117675;

+ 14 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -496,11 +496,11 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
                 }else{
                     throw new CustomException("未报名推送成功,无法学习",600);
                 }
-                ClassGradeUserQueryBo userQueryBo = new ClassGradeUserQueryBo();
+               /* ClassGradeUserQueryBo userQueryBo = new ClassGradeUserQueryBo();
                 userQueryBo.setGoodsId(bo.getGoodsId());
                 userQueryBo.setGradeId(bo.getGradeId());
                 userQueryBo.setUserId(bo.getUserId());
-                iClassGradeUserService.checkFinishRequiredCourse(userQueryBo);
+                iClassGradeUserService.checkFinishRequiredCourse(userQueryBo);*/
             }
 
         }
@@ -1313,6 +1313,17 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
         if(Validator.isEmpty(orderGoodsId)||Validator.isEmpty(userId)){
             throw new CustomException("参数错误");
         }
+        ClassGradeUser gradeOgUser = iClassGradeUserService.getOne(new LambdaQueryWrapper<ClassGradeUser>()
+                .eq(ClassGradeUser::getOrderGoodsId, orderGoodsId)
+                .eq(ClassGradeUser::getStatus, 1)
+                .last("limit 1"));
+        if(Validator.isEmpty(gradeOgUser)){
+            throw new CustomException("参数错误");
+        }
+        if(Validator.isEmpty(gradeOgUser.getOfficialStatus())||gradeOgUser.getOfficialStatus()!=1){
+            throw new CustomException("信息推送不成功,无法操作");
+        }
+
         OrderGoods newOrderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderGoodsId, orderGoodsId));
         if(newOrderGoods.getSevenClassStatus()==1||newOrderGoods.getSevenClassStatus()==2||newOrderGoods.getSevenClassStatus()==3){
             return 0;
@@ -1787,7 +1798,7 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
             if(Validator.isEmpty(bo.getSimilarity())){
                 throw new CustomException("相似度缺失");
             }
-            if(bo.getSimilarity()<80){
+            if(bo.getSimilarity()<65){
                 throw new CustomException("相似度不达标");
             }
             UserStudyRecordPhotoAddBo userStudyRecordPhotoAddBo = new UserStudyRecordPhotoAddBo();

+ 28 - 26
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -1071,20 +1071,21 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 userSubscribeImport.setCause("用户信息错误");
                 userSubscribeImports.add(userSubscribeImport);
                 continue;
-            }else {
-                List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
-                if (!userSubscribes.isEmpty()){
-                    UserSubscribe userSubscribe = userSubscribes.get(0);
-                    if (Validator.isNotEmpty(userSubscribeImport.getStudentType())){
-                        String name = getName(userSubscribe.getStudentType().longValue());
-                        if (!userSubscribeImport.getStudentType().equals(name)){
-                            userSubscribeImport.setCause("学员类型错误");
-                            userSubscribeImports.add(userSubscribeImport);
-                            continue;
-                        }
-                    }
-                }
             }
+//            else {
+//                List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
+//                if (!userSubscribes.isEmpty()){
+//                    UserSubscribe userSubscribe = userSubscribes.get(0);
+//                    if (Validator.isNotEmpty(userSubscribeImport.getStudentType())){
+//                        String name = getName(userSubscribe.getStudentType().longValue());
+//                        if (!userSubscribeImport.getStudentType().equals(name)){
+//                            userSubscribeImport.setCause("学员类型错误");
+//                            userSubscribeImports.add(userSubscribeImport);
+//                            continue;
+//                        }
+//                    }
+//                }
+//            }
             userSubscribeAddBo.setUserId(userId);
             //预约状态
             userSubscribeAddBo.setSubscribeStatus(1);
@@ -1397,20 +1398,21 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
                 userSubscribeImport.setCause("用户信息错误");
                 userSubscribeImports.add(userSubscribeImport);
                 continue;
-            }else {
-                List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
-                if (!userSubscribes.isEmpty()){
-                    UserSubscribe userSubscribe = userSubscribes.get(0);
-                    if (Validator.isNotEmpty(userSubscribeImport.getStudentType())){
-                        String name = getName(userSubscribe.getStudentType().longValue());
-                        if (!userSubscribeImport.getStudentType().equals(name)){
-                            userSubscribeImport.setCause("学员类型错误");
-                            userSubscribeImports.add(userSubscribeImport);
-                            continue;
-                        }
-                    }
-                }
             }
+//            else {
+//                List<UserSubscribe> userSubscribes = this.list(new LambdaQueryWrapper<UserSubscribe>().eq(UserSubscribe::getUserId, userId).eq(UserSubscribe::getSubscribeStatus, 1).last("limit 1"));
+//                if (!userSubscribes.isEmpty()){
+//                    UserSubscribe userSubscribe = userSubscribes.get(0);
+//                    if (Validator.isNotEmpty(userSubscribeImport.getStudentType())){
+//                        String name = getName(userSubscribe.getStudentType().longValue());
+//                        if (!userSubscribeImport.getStudentType().equals(name)){
+//                            userSubscribeImport.setCause("学员类型错误");
+//                            userSubscribeImports.add(userSubscribeImport);
+//                            continue;
+//                        }
+//                    }
+//                }
+//            }
             userSubscribeAddBo.setUserId(userId);
             //预约状态
             userSubscribeAddBo.setSubscribeStatus(1);

+ 7 - 3
zhongzheng-system/src/main/resources/mapper/modules/course/CourseMenuMapper.xml

@@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="code" column="code"/>
         <result property="publishStatus" column="publish_status"/>
         <result property="firstChoiceStatus" column="first_choice_status"/>
+        <result property="viewSign" column="view_sign"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.course.vo.CourseUserMenuVo" id="CourseUserMenuVo">
@@ -87,7 +88,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHEN 3 THEN
         ( SELECT exam_name FROM exam WHERE exam_id = cm.free_exam_id ) ELSE ( NULL )
         END
-        ) free_exam_name
+        ) free_exam_name,
+        cm.view_sign
         FROM
         course_menu m
         LEFT JOIN course_module cm ON m.menu_id = cm.module_id
@@ -108,7 +110,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         NULL AS recording_url,
         NULL AS exam_type,
         NULL AS free_exam_id,
-        NULL as  free_exam_name
+        NULL as  free_exam_name,
+        cc.view_sign
         FROM
         course_menu m
         LEFT JOIN course_chapter cc ON m.menu_id = cc.chapter_id
@@ -129,7 +132,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         cs.recording_url AS recording_url,
         NULL AS exam_type,
         NULL AS free_exam_id,
-        NULL as  free_exam_name
+        NULL as  free_exam_name,
+        cs.view_sign
         FROM
         course_menu m
         LEFT JOIN course_section cs ON m.menu_id = cs.section_id

+ 2 - 2
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -183,8 +183,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="doNumber" column="do_number"/>
         <result property="expendNumber" column="expend_number"/>
         <result property="expendBefore" column="expend_before"/>
-        <result property="periodPlushMsg" column="official_status_msg"/>
-        <result property="officialStatusMsg" column="period_plush_msg"/>
+        <result property="periodPlushMsg" column="period_plush_msg"/>
+        <result property="officialStatusMsg" column="official_status_msg"/>
         <result property="companyName" column="company_name"/>
         <result property="gradeName" column="class_name"/>
         <result property="endTime" column="end_time"/>

+ 27 - 1
zhongzheng-system/src/main/resources/mapper/modules/user/UserExamRecordMapper.xml

@@ -500,7 +500,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 <!--        ORDER by ue.record_id DESC-->
 <!--    </select>-->
 
-    <select id="selectDoNum" parameterType="com.zhongzheng.modules.user.bo.UserExamRecordQueryBo" resultType="Long">
+    <!--<select id="selectDoNum" parameterType="com.zhongzheng.modules.user.bo.UserExamRecordQueryBo" resultType="Long">
         SELECT
             IFNULL( COUNT(DISTINCT question_id), 0 ) num
         FROM
@@ -522,6 +522,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                                                                                     </if>
                                                                                                      and do_question_ids is not null and `status` = 1 GROUP BY exam_id ) e
                         LEFT JOIN question q ON FIND_IN_SET( q.question_id, e.ids )) AS eq
+    </select>-->
+
+    <select id="selectDoNum" parameterType="com.zhongzheng.modules.user.bo.UserExamRecordQueryBo" resultType="Long">
+        SELECT
+        IFNULL( COUNT( DISTINCT q.emp_id ), 0 ) num
+        FROM
+        (
+        SELECT
+        SUBSTRING_INDEX( SUBSTRING_INDEX( a.do_question_ids, ',', b.help_topic_id + 1 ), ',', - 1 ) AS emp_id
+        FROM
+        user_exam_record a
+        JOIN mysql.help_topic b ON b.help_topic_id <![CDATA[ < ]]> ( LENGTH( a.do_question_ids ) - LENGTH( REPLACE ( a.do_question_ids, ',', '' )) + 1 )
+        WHERE
+        user_id = #{userId}
+        AND order_goods_id = #{orderGoodsId}
+        <if test="doModes != null and doModes.size()!=0 ">
+            AND do_mode in
+            <foreach collection="doModes" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="doMode != null and doMode != ''">
+            AND do_mode = #{doMode}
+        </if>
+        and do_question_ids is not null and `status` = 1
+        ) q
     </select>
 
     <select id="selectRightNum" parameterType="com.zhongzheng.modules.user.bo.UserExamRecordQueryBo" resultType="Long">