he2802 1 năm trước cách đây
mục cha
commit
43d352f718
22 tập tin đã thay đổi với 490 bổ sung27 xóa
  1. 74 0
      run-prod.sh
  2. 1 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java
  3. 2 0
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  4. 10 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  5. 2 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  6. 1 0
      zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java
  7. 2 0
      zhongzheng-api/src/main/resources/application-prod.yml
  8. 2 1
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java
  9. 13 12
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java
  10. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java
  11. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeUserMapper.java
  12. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeUserService.java
  13. 49 7
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java
  14. 38 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java
  15. 92 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentExportProcessVo.java
  16. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentVo.java
  17. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserCourseStudyRec.java
  18. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  19. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java
  20. 5 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  21. 159 2
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  22. 3 1
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

+ 74 - 0
run-prod.sh

@@ -1,4 +1,41 @@
+#!/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
 # 定义应用组名
@@ -39,3 +76,40 @@ 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----'
+
+

+ 1 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -188,6 +188,7 @@ public class TopOldOrderController extends BaseController {
     @GetMapping("/commissionListExport")
     public AjaxResult<List<TopOldOrderSellerExportVo>> commissionListExport(TopDivideOrderQueryBo bo) {
         List<TopOldOrderCommissionExportVo> list = iTopOldOrderService.commissionListExport(bo);
+
         ExcelUtil<TopOldOrderCommissionExportVo> util = new ExcelUtil<TopOldOrderCommissionExportVo>(TopOldOrderCommissionExportVo.class);
         return util.exportExcel(list, "佣金结算列表");
     }

+ 2 - 0
zhongzheng-admin-saas/src/main/resources/application-prod.yml

@@ -190,6 +190,8 @@ exam:
     subscribeSaveExam: http://39.108.7.155:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://39.108.7.155:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://39.108.7.155:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9099/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 10 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java

@@ -28,6 +28,8 @@ import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.domain.ClassGrade;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
+import com.zhongzheng.modules.order.bo.OrderQueryBo;
+import com.zhongzheng.modules.order.vo.OrderListExportVo;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.models.auth.In;
 import lombok.RequiredArgsConstructor;
@@ -276,6 +278,14 @@ public class ClassGradeController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("导出学员学时学习记录列表")
+    @GetMapping("/exportListUserPeriodRecord")
+    public AjaxResult<ClassPeriodStudentExportProcessVo> exportListUserPeriodRecord(ClassGradeUserQueryBo bo) {
+        List<ClassPeriodStudentExportProcessVo> list = iClassGradeUserService.exportListUserPeriodRecord(bo);
+        ExcelUtil<ClassPeriodStudentExportProcessVo> util = new ExcelUtil<>(ClassPeriodStudentExportProcessVo.class);
+        return util.exportExcel(list,"学员学时学习记录列表");
+    }
+
     /**
      * 班级管理列表
      */

+ 2 - 0
zhongzheng-admin/src/main/resources/application-prod.yml

@@ -190,6 +190,8 @@ exam:
     subscribeSaveExam: http://39.108.7.155:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://39.108.7.155:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://39.108.7.155:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9099/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 1 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/goods/GoodsController.java

@@ -277,6 +277,7 @@ public class GoodsController extends BaseController {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
         startPage();
+
         List<OrderGoodsVo> list = iOrderGoodsService.listUserVideoLive(bo);
         return getDataTable(list);
     }

+ 2 - 0
zhongzheng-api/src/main/resources/application-prod.yml

@@ -203,6 +203,8 @@ exam:
     subscribeSaveExam: http://39.108.7.155:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://39.108.7.155:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://39.108.7.155:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://39.108.7.155:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://39.108.7.155:9099/cd/exam/add/exam/result/certificate
     question: http://120.79.166.78:19013/common/question/getMeasureList
     questionDetail: http://120.79.166.78:19013/common/question/getTopicList
 

+ 2 - 1
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SysLoginService.java

@@ -106,7 +106,8 @@ public class SysLoginService
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
             throw new CaptchaException();
         }
-        iUserLoginErrorService.checkLimit(username);
+
+//        iUserLoginErrorService.checkLimit(username);
         // 用户验证
         Authentication authentication = null;
         try

+ 13 - 12
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/CertificateTpServiceImpl.java

@@ -205,6 +205,7 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
         bo.setPageSize(null);
         bo.setPageNum(null);
         GoodsVo goodsVo = iGoodsService.selectDetail(bo.getGoodsId());
+        goodsVo.setSelfClassHours(goodsVo.getClassHours());
         //获取培训开始时间
         UserStudyRecordQueryBo studyRecordQueryBo = new UserStudyRecordQueryBo();
         studyRecordQueryBo.setUserId(bo.getUserId());
@@ -371,8 +372,8 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             for(CourseChapterVo chapterVo : chapterList){
                 totalHour+=chapterVo.getSectionNum();
             }
-            goodsVo.setClassHours(new BigDecimal(totalHour));
-            vo.setClassHours(totalHour+"");
+            goodsVo.setClassHours(goodsVo.getSelfClassHours());
+            vo.setClassHours(goodsVo.getSelfClassHours()+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -406,8 +407,8 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             for(CourseChapterVo chapterVo : chapterList){
                 totalHour+=chapterVo.getSectionNum();
             }
-            goodsVo.setClassHours(new BigDecimal(totalHour));
-            vo.setClassHours(totalHour+"");
+            goodsVo.setClassHours(goodsVo.getSelfClassHours());
+            vo.setClassHours(goodsVo.getSelfClassHours()+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -441,8 +442,8 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             for(CourseChapterVo chapterVo : chapterList){
                 totalHour+=chapterVo.getSectionNum();
             }
-            goodsVo.setClassHours(new BigDecimal(totalHour));
-            vo.setClassHours(totalHour+"");
+            goodsVo.setClassHours(goodsVo.getSelfClassHours());
+            vo.setClassHours(goodsVo.getSelfClassHours()+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -476,8 +477,8 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             for(CourseChapterVo chapterVo : chapterList){
                 totalHour+=chapterVo.getSectionNum();
             }
-            goodsVo.setClassHours(new BigDecimal(totalHour));
-            vo.setClassHours(totalHour+"");
+            goodsVo.setClassHours(goodsVo.getSelfClassHours());
+            vo.setClassHours(goodsVo.getSelfClassHours()+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -511,8 +512,8 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             for(CourseChapterVo chapterVo : chapterList){
                 totalHour+=chapterVo.getSectionNum();
             }
-            goodsVo.setClassHours(new BigDecimal(totalHour));
-            vo.setClassHours(totalHour+"");
+            goodsVo.setClassHours(goodsVo.getSelfClassHours());
+            vo.setClassHours(goodsVo.getSelfClassHours()+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));
             vo.setDateD(nowDate.substring(8, 10));
@@ -546,8 +547,8 @@ public class CertificateTpServiceImpl extends ServiceImpl<CertificateTpMapper, C
             for(CourseChapterVo chapterVo : chapterList){
                 totalHour+=chapterVo.getSectionNum();
             }
-            goodsVo.setClassHours(new BigDecimal(totalHour));
-            vo.setClassHours(totalHour+"");
+            goodsVo.setClassHours(goodsVo.getSelfClassHours());
+            vo.setClassHours(goodsVo.getSelfClassHours()+"");
     //        vo.setClassHours(goodsVo.getClassHours().setScale( 0, BigDecimal.ROUND_HALF_UP )+"");
             vo.setDateY(nowDate.substring(0, 4));
             vo.setDateM(nowDate.substring(5, 7));

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsVo.java

@@ -125,6 +125,10 @@ public class GoodsVo {
 	@Excel(name = "封面地址")
 	@ApiModelProperty("封面地址")
 	private String coverUrl;
+
+	@Excel(name = "学时")
+	@ApiModelProperty("学时")
+	private BigDecimal selfClassHours;
 	/** 学时 */
 	@Excel(name = "学时")
 	@ApiModelProperty("学时")

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeUserMapper.java

@@ -34,6 +34,8 @@ public interface ClassGradeUserMapper extends BaseMapper<ClassGradeUser> {
 
     List<ClassPeriodStudentVo> listUserPeriod(ClassGradeUserQueryBo bo);
 
+    List<ClassPeriodStudentVo> exportUserPeriod(ClassGradeUserQueryBo bo);
+
     List<ClassPeriodStudentVo> listUserWeekPeriod(ClassGradeUserQueryBo bo);
 
     Long listUserWeekStudyTime(ClassGradeUserQueryBo bo);

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeUserService.java

@@ -95,6 +95,8 @@ public interface IClassGradeUserService extends IService<ClassGradeUser> {
 
 	List<ClassPeriodStudentVo> listUserPeriodRecord(ClassGradeUserQueryBo bo);
 
+	List<ClassPeriodStudentExportProcessVo> exportListUserPeriodRecord(ClassGradeUserQueryBo bo);
+
 	List<ClassPeriodStudentVo> listUserPeriodWeekRecord(ClassGradeUserQueryBo bo);
 
 	List<ClassPeriodStudentVo> listUserVideoRecord(ClassGradeUserQueryBo bo);

+ 49 - 7
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeUserServiceImpl.java

@@ -181,6 +181,9 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Autowired
     private IUserExamRecordService iUserExamRecordService;
 
+    @Autowired
+    private IMajorService iMajorService;
+
     @Value("${aliyun.oss.endpoint}")
     private String ALIYUN_OSS_ENDPOINT;
 
@@ -217,8 +220,6 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Autowired
     private ISysOldOrgService sysOldOrgService;
 
-    @Autowired
-    private IMajorService iMajorService;
 
     @Autowired
     private IGoodsAttachedService iGoodsAttachedService;
@@ -660,6 +661,8 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             return "用户信息缺失";
         }
         userVo.setRealName(ToolsUtils.removeAllTrim(userVo.getRealName()));
+        userVo.setIdCard(ToolsUtils.removeAllTrim(userVo.getIdCard()));
+        userVo.setTelPhone(ToolsUtils.removeAllTrim(userVo.getTelPhone()));
         if(fullName.contains("继续教育")&&fullName.contains("施工现场专业人员")){
             return pushSevenOfficialInfo(bo,userVo,orderGoods,goods);
         }
@@ -787,6 +790,8 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         if (Validator.isEmpty(userVo.getEduLevel()) || Validator.isEmpty(userVo.getCompanyName()) || Validator.isEmpty(userVo.getSex())) {
             return "用户详细信息缺失";
         }
+        userVo.setCompanyName(ToolsUtils.removeAllTrim(userVo.getCompanyName()));
+        userVo.setEduLevel(ToolsUtils.removeAllTrim(userVo.getEduLevel()));
         if(Validator.isEmpty(goods.getMajorId())){
             throw new CustomException("商品专业不存在");
         }
@@ -940,6 +945,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
     @Override
     public boolean resetQdyCheckInfo(){
         this.baseMapper.updateListUserNoTenant("培训周期时间未到");
+        this.baseMapper.updateListUserNoTenant("无需2024继续教育");
         return true;
     }
 
@@ -2074,7 +2080,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             }
 
             //查询学员最近人脸照
-            LambdaQueryWrapper<UserStudyRecordPhoto> lqw = Wrappers.lambdaQuery();
+           /* LambdaQueryWrapper<UserStudyRecordPhoto> lqw = Wrappers.lambdaQuery();
             lqw.eq(UserStudyRecordPhoto::getUserId, classPeriodStudentVo.getUserId());
             lqw.orderByDesc(UserStudyRecordPhoto::getCreateTime).last(" limit 5");
             List<UserStudyRecordPhoto> userStudyRecordPhotoList = iUserStudyRecordPhotoService.list(lqw);
@@ -2084,7 +2090,7 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
                     recenPhotosList.add(userStudyRecordPhoto.getPhoto());
                 }
             });
-            classPeriodStudentVo.setRecenPhotosList(recenPhotosList);
+            classPeriodStudentVo.setRecenPhotosList(recenPhotosList);*/
         }
         return classPeriodStudentVos;
     }
@@ -2167,6 +2173,43 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
         return classPeriodStudentVos;
     }
 
+    @Override
+    public List<ClassPeriodStudentExportProcessVo> exportListUserPeriodRecord(ClassGradeUserQueryBo bo) {
+        //查询班级学员信息
+        List<ClassPeriodStudentVo> classPeriodStudentVos = baseMapper.exportUserPeriod(bo);
+        List<ClassPeriodStudentExportProcessVo> exlist = new ArrayList<>();
+        //查找学员学习记录
+        for (ClassPeriodStudentVo classPeriodStudentVo : classPeriodStudentVos) {
+            Long secLong = 0L;
+            Long studyLong = 0L;
+            SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
+            subjectStudyRecordQueryBo.setGoodsId(classPeriodStudentVo.getGoodsId());
+            subjectStudyRecordQueryBo.setUserId(classPeriodStudentVo.getUserId());
+            subjectStudyRecordQueryBo.setGradeId(classPeriodStudentVo.getGradeId());
+            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listSubject(subjectStudyRecordQueryBo);
+            for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
+                secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
+                studyLong = new BigDecimal(studyLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getRecordNum().toString())).longValue();
+
+            }
+            //总节数
+            classPeriodStudentVo.setSecAllNum(secLong);
+            //学习节数
+            classPeriodStudentVo.setStuAllNum(studyLong);
+
+            ClassPeriodStudentExportProcessVo vo = BeanUtil.toBean(classPeriodStudentVo,ClassPeriodStudentExportProcessVo.class);
+            String process = (studyLong+classPeriodStudentVo.getRecordNum())+"/"+(secLong+classPeriodStudentVo.getExamNum());
+            vo.setProcess(process);
+
+            Major major = iMajorService.getById(classPeriodStudentVo.getMajorId());
+            if (ObjectUtils.isNotNull(major)){
+                vo.setCategoryName(major.getCategoryName());
+            }
+            exlist.add(vo);
+        }
+        return exlist;
+    }
+
     @Override
     public List<ClassPeriodStudentVo> listUserPeriodWeekRecord(ClassGradeUserQueryBo bo) {
         //查询班级学员信息
@@ -3769,9 +3812,8 @@ public class ClassGradeUserServiceImpl extends ServiceImpl<ClassGradeUserMapper,
             } catch (Exception e) {
                 throw new CustomException(e.getMessage());
             }
-            Long aLong = baseMapper.checkFinishRequiredCourse(bo);
-            if (aLong > 0){
-                List<Long> goodsIds = baseMapper.getFinishRequiredCourse(bo);
+            List<Long> goodsIds = baseMapper.getFinishRequiredCourse(bo);
+            if(Validator.isNotEmpty(goodsIds)&&goodsIds.size()>0){
                 Goods goods = iGoodsService.getById(goodsIds.get(0));
                 throw new CustomException("请按顺序学习,把【"+goods.getGoodsName()+"】学习完成,再学习另一个课程");
             }

+ 38 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/UserPeriodServiceImpl.java

@@ -20,7 +20,10 @@ import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
+import com.zhongzheng.modules.base.bo.UserProfileFit;
+import com.zhongzheng.modules.base.domain.UserProfile;
 import com.zhongzheng.modules.base.service.ICertificateTpService;
+import com.zhongzheng.modules.base.service.IUserProfileService;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.course.bo.CourseChapterSectionQueryBo;
 import com.zhongzheng.modules.course.bo.CourseMenuQueryBo;
@@ -208,12 +211,18 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
     @Autowired
     private ICourseModuleService iCourseModuleService;
 
+    @Autowired
+    private IUserProfileService iUserProfileService;
+
     @Value("${oldStudySys.syncPath}")
     private String SYNC_PATH;
 
     @Value("${exam.subscribeSave}")
     private String EXAM_SUBSCRIBE_SAVE;
 
+    @Value("${aliyun.oss.endpoint}")
+    private String ALIYUN_OSS_ENDPOINT;
+
     @Override
     public UserPeriodVo queryById(Long id) {
         UserPeriod db = this.baseMapper.selectById(id);
@@ -731,6 +740,35 @@ public class UserPeriodServiceImpl extends ServiceImpl<UserPeriodMapper, UserPer
         studyRec.setCourseBuyTime(DateUtils.timestampToDateFormat(orderGoods.getCreateTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
         studyRec.setClassNo(classGrade.getOfficialName());
         studyRec.setOrderGoodsId(orderGoods.getOrderGoodsId());
+        studyRec.setWorkYear(userVo.getWorkYear());
+        studyRec.setGraduationTime(userVo.getGraduationTime());
+        studyRec.setCompanyName(userVo.getCompanyName());
+        studyRec.setUnitContact(userVo.getUnitContact());
+        studyRec.setUnitTel(userVo.getUnitTel());
+        studyRec.setEduLevel(userVo.getEduLevel());
+        UserProfile profile = iUserProfileService.getOne(new LambdaQueryWrapper<UserProfile>()
+                .eq(UserProfile::getOrderGoodsId, gradeUser.getOrderGoodsId())
+                .eq(UserProfile::getTypeStatus, 1)
+                .eq(UserProfile::getCurrentStatus, 1)
+                .in(UserProfile::getStatus, new ArrayList<Integer>(Arrays.asList(1,2)))
+                .orderByDesc(UserProfile::getId)
+                .last("limit 1"));
+        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);
+            }
+            if(maps.containsKey("school")){
+                String school = JSONObject.parseObject(String.valueOf(maps.get("school")), UserProfileFit.class).getValue();
+                studyRec.setSchool(school);
+            }
+            if(maps.containsKey("major")){
+                String major = JSONObject.parseObject(String.valueOf(maps.get("major")), UserProfileFit.class).getValue();
+                studyRec.setMajor(major);
+            }
+        }
+
         Long bmrq = 0L;
         if(Validator.isNotEmpty(classGrade.getClassStartTime())){
             if(classGrade.getClassStartTime().longValue()<orderGoods.getCreateTime().longValue()){

+ 92 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassPeriodStudentExportProcessVo.java

@@ -0,0 +1,92 @@
+package com.zhongzheng.modules.grade.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+
+/**
+ * 学员记录视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2021-11-10
+ */
+@Data
+@ApiModel("学员学时视图对象")
+public class ClassPeriodStudentExportProcessVo {
+	private static final long serialVersionUID = 1L;
+
+
+	/** 学员编码 */
+	@Excel(name = "学员姓名")
+	@ApiModelProperty("学员姓名")
+	private String realName;
+
+
+	/** 学员编码 */
+	@Excel(name = "学员身份证")
+	@ApiModelProperty("学员身份证")
+	private String idCard;
+
+	/** 学员编码 */
+	@Excel(name = "学员电话")
+	@ApiModelProperty("学员电话")
+	private String telPhone;
+
+
+	@Excel(name = "单号")
+	@ApiModelProperty("单号")
+	private String orderSn;
+
+
+	@Excel(name = "学习进度")
+	@ApiModelProperty("学习进度")
+	private String process;
+
+	/** 学习进度 */
+	@ApiModelProperty("已学节数")
+	private Long stuAllNum;
+
+
+	/** 学习进度 */
+	@ApiModelProperty("总节数")
+	private Long secAllNum;
+
+
+	/** 节数 */
+	@ApiModelProperty("试卷数")
+	private Long examNum;
+
+
+	/** 已做试卷 */
+	@ApiModelProperty("已做试卷")
+	private Long recordNum;
+
+
+	@ApiModelProperty("商品名称")
+	private String goodsName;
+
+	/** 业务名称 */
+	@ApiModelProperty("业务名称")
+	private String businessName;
+
+	/** 项目名称 */
+	@ApiModelProperty("项目名称")
+	private String projectName;
+
+
+	/** 项目名称 */
+	@ApiModelProperty("教育名")
+	private String educationName;
+
+	@Excel(name = "专业名")
+	@ApiModelProperty("专业名")
+	private String categoryName;
+
+
+
+}

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

@@ -264,4 +264,9 @@ public class ClassPeriodStudentVo {
 	@ApiModelProperty("商品年份")
 	private String goodsYear;
 
+	@ApiModelProperty("订单号")
+	private String orderSn;
+
+	private Long majorId;
+
 }

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/SyncUserCourseStudyRec.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.grade.vo;
 
 import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.List;
@@ -49,4 +50,23 @@ public class SyncUserCourseStudyRec {
 
     private List<SyncUserChapterList> ChapterList;
 
+    @ApiModelProperty("工作年限")
+    private String workYear;
+    @ApiModelProperty("毕业时间")
+    private String graduationTime;
+    @ApiModelProperty("毕业专业")
+    private String major;
+    @ApiModelProperty("公司名称")
+    private String companyName;
+    @ApiModelProperty("单位联系人")
+    private String unitContact;
+    @ApiModelProperty("单位联系电话")
+    private String unitTel;
+    @ApiModelProperty("毕业学校")
+    private String school;
+    @ApiModelProperty("承诺书")
+    private String commitmentSeal;
+    @ApiModelProperty("学历")
+    private String eduLevel;
+
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java

@@ -646,7 +646,8 @@ public class OrderGoodsServiceImpl extends ServiceImpl<OrderGoodsMapper, OrderGo
                 if(Validator.isEmpty(classGradeVo)){
                     continue;
                 }
-                if (fullName.contains("继续教育")){
+                if (fullName.contains("继续教育") &&
+                        ((fullName.contains("二级建造师")) || (fullName.contains("二级造价师")) ||(fullName.contains("施工现场专业人员")))){
                     goodsVo.setGoodsName(classGradeVo.getClassName());
                 }
                 goodsVo.setPeriodStatus(classGradeVo.getPeriodStatus());

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/schedule/service/IScheduleService.java

@@ -20,10 +20,10 @@ public interface IScheduleService extends IService<PolyvVideo> {
 
     void updateExamSend(UserQueryBo bo);
 
-    void timeSend(UserQueryBo bo);
-
     void sendServiceEnd();
 
+    void timeSend(UserQueryBo bo);
+
     void closeTimeOutOrder();
 
     void updateIssue(UserQueryBo bo) throws ParseException;

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java

@@ -496,7 +496,11 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
                 }else{
                     throw new CustomException("未报名推送成功,无法学习",600);
                 }
-
+                ClassGradeUserQueryBo userQueryBo = new ClassGradeUserQueryBo();
+                userQueryBo.setGoodsId(bo.getGoodsId());
+                userQueryBo.setGradeId(bo.getGradeId());
+                userQueryBo.setUserId(bo.getUserId());
+                iClassGradeUserService.checkFinishRequiredCourse(userQueryBo);
             }
 
         }

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

@@ -147,6 +147,8 @@
         <result property="goodsYear" column="goods_year"/>
         <result property="createTime" column="create_time"/>
         <result property="profileStatus" column="profile_status"/>
+        <result property="orderSn" column="order_sn"/>
+        <result property="majorId" column="major_id"/>
     </resultMap>
 
     <resultMap type="com.zhongzheng.modules.grade.vo.ClassPeriodUserVo" id="ClassPeriodUserVo">
@@ -449,6 +451,8 @@
         cgu.period_status_num,
         cgu.period_time,
         cgu.order_goods_id,
+        og.order_sn,
+        g.major_id,
         /*    IFNULL(ge.exam_num,0) as exam_num, */
         <if test="userPhoto != null and userPhoto == 1">
             up.key_value,
@@ -572,6 +576,159 @@
         </if>
     </select>
 
+    <select id="exportUserPeriod" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo"
+            resultMap="ClassPeriodStudentVo">
+        SELECT
+        u.user_account,
+        u.user_id,
+        cgu.`status`,
+        u.realname,
+        og.goods_id,
+        u.id_card,
+        cgu.grade_id,
+        u.telphone,
+        u.one_inch_photos,
+        u.company_name,
+        up.`status` as profile_status,
+        g.class_hours as class_hours,
+        g.study_start_time as study_start_time,
+        g.study_end_time as study_end_time,
+        g.goods_name,
+        g.code as goods_code,
+        g.stand_price,
+        cgu.period_status,
+        cg.class_start_time,
+        cg.class_end_time,
+        cg.class_name,
+        cgu.period_plush,
+        cgu.period_status_num,
+        cgu.period_time,
+        cgu.order_goods_id,
+        og.order_sn,
+        g.major_id,
+        IFNULL(ge.exam_num,0) as exam_num,
+        <if test="userPhoto != null and userPhoto == 1">
+            up.key_value,
+        </if>
+        cgu.period_wait_time as end_time,
+        (SELECT og.seven_year FROM order_goods og  where og.order_goods_id = cgu.order_goods_id ) as seven_year,
+        (SELECT og.service_start_time FROM order_goods og  where og.order_goods_id = cgu.order_goods_id ) as service_start_time,
+        (SELECT og.service_end_time FROM order_goods og  where og.order_goods_id = cgu.order_goods_id ) as service_end_time,
+        (SELECT COUNT(DISTINCT ubr.module_id,ubr.chapter_id,ubr.exam_id) FROM user_bank_record ubr  where ubr.`status`=1 and ubr.`type` in (1,3) and ubr.report_status=1 and ubr.order_goods_id = cgu.order_goods_id and ubr.grade_id = cgu.grade_id and ubr.user_id = cgu.user_id and ubr.current_status = 1) as record_num
+        <if test="userPhoto == null">
+            /* ,(select COUNT(up.id) from user_period up LEFT JOIN user_period_status ups on up.id=ups.period_id where up.goods_id = og.goods_id and up.grade_id = cgu.grade_id and up.order_goods_id = cgu.order_goods_id and up.user_id = u.user_id
+            and ups.period_status=0 and ups.`status`=0 and (SELECT COUNT(upss.id) from user_period_status upss where upss.id = ups.id and upss.period_status = 1 and upss.`status` = 2) > 0 ) as rebuild_num */
+        </if>
+        FROM
+        class_grade_user cgu
+        LEFT JOIN class_grade cg ON cgu.grade_id = cg.grade_id
+        LEFT JOIN order_goods og ON cgu.order_goods_id = og.order_goods_id
+        LEFT JOIN `user` u ON u.user_id = cgu.user_id
+        LEFT JOIN user_profile up on u.user_id =up.user_id and up.goods_id = og.goods_id and cgu.order_goods_id = up.order_goods_id and up.type_status=1 and up.current_status = 1
+        LEFT JOIN goods g on og.goods_id = g.goods_id
+        LEFT JOIN course_business cb ON g.business_id = cb.id
+       LEFT JOIN (SELECT
+        COUNT( m.id ) AS exam_num,
+        c.goods_id
+        FROM
+        course_menu_exam m
+        LEFT JOIN goods_course c ON m.course_id = c.course_id
+        where
+        m.type in (1,3)
+        GROUP BY c.goods_id ) ge on og.goods_id = ge.goods_id
+        where 1=1
+        and cgu.`status` =1
+        and cb.`period_check_sign` = 1
+        <if test="periodPlush != null and periodPlush != ''">
+            AND cgu.period_plush = #{periodPlush}
+        </if>
+        <if test="officialStatus != null and officialStatus != ''">
+            AND cgu.official_status = #{officialStatus}
+        </if>
+        <if test="changeGrade != null and changeGrade != ''">
+            AND cgu.change_grade = #{changeGrade}
+        </if>
+        <if test="profileStatus != null and profileStatus != ''">
+            AND up.status = #{profileStatus}
+        </if>
+        <if test="gradeId != null and gradeId !='' ">
+            and cgu.grade_id = #{gradeId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        <if test="projectId != null and projectId != ''">
+            AND g.project_id = #{projectId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        <if test="schoolId != null and schoolId != ''">
+            AND g.school_id = #{schoolId}
+        </if>
+        <if test="majorId != null and majorId != ''">
+            AND g.major_id = #{majorId}
+        </if>
+        <if test="periodStatus != null ">
+            and cgu.period_status = #{periodStatus}
+        </if>
+        <if test="classStartTime != null and classStartTime != '' ">
+            AND cg.class_start_time >= #{classStartTime}
+        </if>
+        <if test="classEndTime != null and classEndTime != '' ">
+            AND #{classEndTime} >=  cg.class_end_time
+        </if>
+        <if test="studyStatus != null and studyStatus == 1 ">
+            and cgu.period_status = -1
+        </if>
+        <if test="studyStatus != null and studyStatus == 2 ">
+            and cgu.period_status != -1
+        </if>
+        <if test="className != null and className !='' ">
+            and  cg.class_name like concat('%', #{className}, '%')
+        </if>
+        <if test="searchKey != null and searchKey != '' ">
+            and (u.realname like concat('%', #{searchKey}, '%')
+            or u.id_card like concat('%', #{searchKey,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
+            or g.goods_name like concat('%', #{searchKey}, '%')
+            or cg.class_name like concat('%', #{searchKey}, '%')
+            or u.company_name like concat('%', #{searchKey}, '%'))
+        </if>
+        <if test="inputOrderSn != null and inputOrderSn != '' ">
+            and (select count(*) from `order` o where o.order_sn =og.order_sn and o.input_order_sn =  #{inputOrderSn})>0
+        </if>
+        <if test="companyName != null and companyName != '' ">
+            and u.company_name like concat('%', #{companyName}, '%')
+        </if>
+        <if test="idCard != null and idCard !='' ">
+            AND u.id_card = #{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+        </if>
+        <if test="telphone != null and telphone !='' ">
+            AND u.telphone = #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+        </if>
+        <if test="searchStartTime != null and searchStartTime !='' ">
+            AND cgu.create_time >=#{searchStartTime}
+        </if>
+        <if test="searchEndTime != null and searchEndTime !='' ">
+            AND #{searchEndTime} >= cgu.create_time
+        </if>
+        <if test="periodStartTime != null and periodStartTime !='' ">
+            AND cgu.period_time >=#{periodStartTime}
+        </if>
+        <if test="periodEndTime != null and periodEndTime !='' ">
+            AND #{periodEndTime} >= cgu.period_time
+        </if>
+        <if test="periodStatus != 2 and periodStatus != 3">
+            order by cgu.update_time desc
+        </if>
+        <if test="periodStatus == 2 ">
+            order by cgu.period_wait_time,cgu.create_time
+        </if>
+        <if test="periodStatus == 3 ">
+            order by cgu.period_ing_time,cgu.create_time
+        </if>
+    </select>
+
     <select id="listUserWeekStudyTime" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo"
             resultType="Long">
         SELECT
@@ -1727,6 +1884,7 @@
           AND (unix_timestamp(now())  BETWEEN cg.class_start_time and cg.class_end_time)
           and g.business_id = #{businessId}
           and g.goods_id != #{goodsId}
+          and cgu.`status` = 1
           AND (
             SELECT
             IFNULL( count(*), 0 )
@@ -1734,8 +1892,7 @@
             user_period up
             WHERE
             1 = 1
-          AND up.user_id = cgu.user_id
-          AND up.grade_id = cgu.grade_id
+          AND up.order_goods_id = cgu.order_goods_id
             )>0
     </select>
 

+ 3 - 1
zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

@@ -973,13 +973,15 @@
         SELECT
             og.*,o.user_id
         FROM
-             order_goods og
+            order_goods og
                 LEFT JOIN `order` o on og.order_sn = o.order_sn
                 LEFT JOIN goods g on og.goods_id = g.goods_id
                 LEFT JOIN inform_remind_business irb on  irb.business_id = g.business_id
+                LEFT JOIN class_grade_user cgu on cgu.order_goods_id = og.order_goods_id
         where 1=1
           and irb.remind_id =#{remindId}
           and og.status = 1
+          and cgu.period_status in (0,-1)
           AND og.service_end_time BETWEEN ( unix_timestamp(now()) + 864000) AND (unix_timestamp(now()) + 950400)
     </select>