yangdamao 1 year ago
parent
commit
89ccc5d6a3
39 changed files with 1088 additions and 65 deletions
  1. 2 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  2. 1 0
      zhongzheng-admin-saas/src/main/resources/application-pre.yml
  3. 2 0
      zhongzheng-admin-saas/src/main/resources/application-prod.yml
  4. 21 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/grade/ClassGradeController.java
  5. 2 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  6. 1 1
      zhongzheng-admin/src/main/resources/application-pre.yml
  7. 2 0
      zhongzheng-admin/src/main/resources/application-prod.yml
  8. 2 0
      zhongzheng-api/src/main/resources/application-dev.yml
  9. 1 0
      zhongzheng-api/src/main/resources/application-pre.yml
  10. 2 0
      zhongzheng-api/src/main/resources/application-prod.yml
  11. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  12. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java
  13. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/UserProfileQueryBo.java
  14. 8 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  15. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java
  16. 22 11
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java
  17. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyCertificateBo.java
  18. 8 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyResultExportBo.java
  19. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/domain/ExamActivity.java
  20. 38 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamActivityServiceImpl.java
  21. 31 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java
  22. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplySiteServiceImpl.java
  23. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java
  24. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeMapper.java
  25. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  26. 186 21
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  27. 99 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentAllExportVo.java
  28. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java
  29. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsServiceImpl.java
  30. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  31. 46 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldCourseChpaterExam.java
  32. 186 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldUserInfo.java
  33. 46 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldUserRecordImage.java
  34. 62 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldUserStudyData.java
  35. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserStudyRecordServiceImpl.java
  36. 19 1
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseMapper.xml
  37. 199 8
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  38. 7 1
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml
  39. 12 12
      zhongzheng-system/src/main/resources/mapper/modules/user/UserNoteMapper.xml

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

@@ -190,6 +190,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7: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-admin-saas/src/main/resources/application-pre.yml

@@ -186,6 +186,7 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
 
 ZsBank:
     publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=

+ 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
 

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

@@ -207,6 +207,27 @@ public class ClassGradeController extends BaseController {
         return getDataTable(list);
     }
 
+    /**
+     * 查询所有班级用户列表
+     */
+    @ApiOperation("查询所有班级用户列表")
+    @PreAuthorize("@ss.hasPermi('grade:grade:list')")
+    @GetMapping("/listGradeAll")
+    public TableDataInfo<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo) {
+        startPage();
+        List<ClassGradeStudentVo> list = iClassGradeService.listGradeAll(bo);
+        return getDataTable(list);
+    }
+
+    @ApiOperation("导出所有班级用户列表")
+    @PreAuthorize("@ss.hasPermi('grade:grade:list')")
+    @GetMapping("/listGradeAllExport")
+    public AjaxResult<ClassGradeStudentAllExportVo> listGradeAllExport(ClassGradeUserQueryBo bo) {
+        List<ClassGradeStudentAllExportVo> list = iClassGradeService.listGradeAllExport(bo);
+        ExcelUtil<ClassGradeStudentAllExportVo> util = new ExcelUtil<>(ClassGradeStudentAllExportVo.class);
+        return util.exportExcel(list,"报班学员记录");
+    }
+
     /**
      * 导出班级学员列表
      */

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

@@ -191,6 +191,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7: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 - 1
zhongzheng-admin/src/main/resources/application-pre.yml

@@ -186,7 +186,7 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
-
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
 ZsBank:
     publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=
     privatekey: NBtl7WnuUtA2v5FaebEkU0/Jj1IodLGT6lQqwkzmd2E=

+ 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
 

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

@@ -193,6 +193,8 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
+    subscribeAddCertificate: http://192.168.1.7: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/resources/application-pre.yml

@@ -186,6 +186,7 @@ exam:
     subscribeSaveExam: http://192.168.1.7:9099/cd/subscribe/save/exam
     subscribeUpdateExam: http://192.168.1.7:9099/cd/subscribe/update/exam
     subscribeAddExamNum: http://192.168.1.7:9099/cd/subscribe/add/num
+    subscribeAddExamResult: http://192.168.1.7:9099/cd/exam/add/exam/result
 
 ZsBank:
     publickey: BNsIe9U0x8IeSe4h/dxUzVEz9pie0hDSfMRINRXc7s1UIXfkExnYECF4QqJ2SnHxLv3z/99gsfDQrQ6dzN5lZj0=

+ 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
 

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -146,6 +146,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/common/external/question").anonymous()
                 .antMatchers("/common/replenish/exam").anonymous()
                 .antMatchers("/common/student/image/update").anonymous()
+                .antMatchers("/common/student/image/spin").anonymous()
                 .antMatchers("/common/platform/pay").anonymous()
                 .antMatchers("/common/platform/pay/handle").anonymous()
                 .antMatchers("/common/alike/goods").anonymous()

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/QuestionServiceImpl.java

@@ -3108,6 +3108,7 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                 String indexKey = null;
                 for (XWPFParagraph paragraph : paragraphList) {
                     content = paragraph.getText();
+                    System.out.println(content);
                     List<XWPFRun> runs = paragraph.getRuns();
                     imgUrl = null;
                 //    System.out.println(content);
@@ -3352,6 +3353,9 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
                             indexKey = strArr[0]+".";
                             QuestionAddBo cAddBo = allQues.get(indexKey);
                             answerQuestion = dealImportAnswer(strArr[1]);
+                            if(Validator.isEmpty(cAddBo)){
+                                System.out.println(cAddBo);
+                            }
                             cAddBo.setAnswerQuestion(answerQuestion);
                             cAddBo.setAnalysisContent("");
                         }

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/bo/UserProfileQueryBo.java

@@ -1,6 +1,8 @@
 package com.zhongzheng.modules.base.bo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.zhongzheng.common.annotation.Excel;
+import com.zhongzheng.common.type.EncryptHandler;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -127,4 +129,8 @@ public class UserProfileQueryBo extends BaseEntity implements Serializable {
 
 	@ApiModelProperty("公司名称")
 	private String companyName;
+
+	/** 身份证号 */
+	@ApiModelProperty("身份证号")
+	private String idCard;
 }

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

@@ -149,11 +149,16 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
 
     @Override
     public String querCommitment(UserProfileQueryBo bo) {
-        if(Validator.isNotEmpty(bo.getOrderGoodsId())){
-            throw new CustomException("OrderGoodsId缺失");
+        if(Validator.isEmpty(bo.getIdCard())||Validator.isEmpty(bo.getGoodsId())){
+            throw new CustomException("参数缺失");
+        }
+        User user = iUserService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, EncryptHandler.encrypt(bo.getIdCard())).last("limit 1"));
+        if (ObjectUtils.isNull(user)){
+            throw new CustomException("用户信息获取有误!");
         }
         UserProfile profile = getOne(new LambdaQueryWrapper<UserProfile>()
-                .eq(UserProfile::getOrderGoodsId, bo.getOrderGoodsId())
+                .eq(UserProfile::getUserId, user.getUserId())
+                .eq(UserProfile::getGoodsId, bo.getGoodsId())
                 .eq(UserProfile::getTypeStatus, 1)
                 .eq(UserProfile::getCurrentStatus, 1)
                 .in(UserProfile::getStatus, new ArrayList<Integer>(Arrays.asList(1,2)))

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseMapper.java

@@ -15,6 +15,7 @@ import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.order.bo.SpecialQuestionBo;
 import com.zhongzheng.modules.order.vo.SpecialQuestionVo;
+import com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo;
 import com.zhongzheng.modules.user.bo.UserPlanQueryBo;
 import org.apache.ibatis.annotations.Param;
 
@@ -79,4 +80,7 @@ public interface CourseMapper extends BaseMapper<Course> {
     Long getSpecialQuestionCount(SpecialQuestionBo bo);
 
     List<Long> getOrderGoodsIds(CourseQueryBo bo);
+
+    Long getStudyCourseNum(SubjectStudyRecordQueryBo subjectStudyRecordQueryBo);
+
 }

+ 22 - 11
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -64,6 +64,7 @@ import com.zhongzheng.modules.grade.service.IUserPeriodStatusService;
 import com.zhongzheng.modules.grade.vo.ClassGradeVo;
 import com.zhongzheng.modules.grade.vo.UserPeriodVo;
 import com.zhongzheng.modules.order.bo.SpecialQuestionBo;
+import com.zhongzheng.modules.order.domain.OrderGoods;
 import com.zhongzheng.modules.order.vo.SpecialQuestionVo;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.system.domain.SysTenant;
@@ -151,6 +152,8 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     @Autowired
     private IGoodsService iGoodsService;
     @Autowired
+    private IOrderGoodsService iOrderGoodsService;
+    @Autowired
     private IGoodsQuestionRelService iGoodsQuestionRelService;
     @Autowired
     private IQuestionMerchantService iQuestionMerchantService;
@@ -736,7 +739,9 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             goodsUserVo.setErJianErZao(false);
             goodsUserVo.setUserProfile(0);
             if(Validator.isNotEmpty(fullName)){
+                Boolean flag = false;
                 if(fullName.equals("继续教育二级建造师")||fullName.equals("继续教育二级造价师")){
+                    flag = true;
                     goodsUserVo.setErJianErZao(true);
                 }else if (goodsUserVo.getEducationName().equals("考前培训") && goodsUserVo.getProjectName().equals("施工现场专业人员")){
                     int count = iUserProfileService.count(new LambdaQueryWrapper<UserProfile>()
@@ -750,8 +755,12 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                     }
                 }
 
+                if(goodsUserVo.getEducationName().equals("继续教育") && goodsUserVo.getProjectName().equals("施工现场专业人员")){
+                    flag = true;
+                }
+
                 //继续课程显示班级名称
-                if (fullName.contains("继续教育")){
+                if (flag){
                     goodsUserVo.setGoodsName(classGradeVo.getClassName());
                 }
             }
@@ -938,7 +947,6 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
         return tableDataInfo;
     }
 
-
     @Override
     public List<GoodsUserVo> goodsStudyProgressList(CourseQueryBo bo) {
         List<GoodsUserVo> goodsUserVos = baseMapper.goodsStudyProgressList(bo);
@@ -983,19 +991,21 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                 continue;
             }
 
-            Long secLong = 0L;
-            Long studyLong = 0L;
+//            Long secLong = 0L;
+//            Long studyLong = 0L;
             SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
             subjectStudyRecordQueryBo.setGoodsId(goodsUserVo.getGoodsId());
             subjectStudyRecordQueryBo.setUserId(bo.getUserId());
             subjectStudyRecordQueryBo.setGradeId(goodsUserVo.getGradeId());
             subjectStudyRecordQueryBo.setOrderGoodsId(goodsUserVo.getOrderGoodsId());
-            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listDangAnSubject(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();
-            }
-            goodsUserVo.setSecAllNum(secLong);
+//            List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listDangAnSubject(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();
+//            }
+            goodsUserVo.setSecAllNum(goodsUserVo.getCourseNum());
+            //已学节
+            Long studyLong =  baseMapper.getStudyCourseNum(subjectStudyRecordQueryBo);
             goodsUserVo.setStuAllNum(studyLong);
             goodsUserVo.setExamNum(classGradeVo.getExamNum());
             goodsUserVo.setRecordNum(classGradeVo.getRecordNum());
@@ -1004,7 +1014,8 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
             goodsUserVo.setOfficialStatus(classGradeVo.getOfficialStatus());
 
             String businessName = iGoodsService.getGoodsBusinessName(goodsUserVo.getGoodsId());
-            if (businessName.contains("继续教育")){
+            if (businessName.contains("继续教育") &&
+                    (businessName.contains("二级建造师") || businessName.contains("二级造价师") || businessName.contains("施工现场专业人员"))){
                 goodsUserVo.setClassStatus(classGradeVo.getClassStatus());
                 goodsUserVo.setClassStartTime(classGradeVo.getClassStartTime());
                 goodsUserVo.setClassEndTime(classGradeVo.getClassEndTime());

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyCertificateBo.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.modules.exam.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年06月20日 11:22
+ */
+@Data
+public class ExamApplyCertificateBo implements Serializable {
+
+    private String userName;
+
+    private String idCard;
+
+    /** 证书编号 */
+    private String certificateCode;
+    /** 发证时间 */
+    private Long certificateStartTime;
+    /** 到期时间 */
+    private Long certificateEndTime;
+    /** 证书下载地址 */
+    private String certificateUrl;
+
+    private String major;
+
+    private Long tenantId;
+}

+ 8 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplyResultExportBo.java

@@ -47,5 +47,13 @@ public class ExamApplyResultExportBo implements Serializable {
     @Excel(name = "证书编码")
     private String certificateCode;
 
+    private Long applyTime;
 
+    private String applyStartTime;
+
+    private String applyEndTime;
+
+    private String major;
+
+    private Long tenantId;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/domain/ExamActivity.java

@@ -48,4 +48,6 @@ private static final long serialVersionUID=1L;
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private Long updateTime;
 
+    private Long tenantId;
+
 }

+ 38 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamActivityServiceImpl.java

@@ -4,6 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -31,6 +35,8 @@ import com.zhongzheng.modules.mock.domain.MockMajor;
 import com.zhongzheng.modules.mock.domain.MockMajorSubject;
 import com.zhongzheng.modules.mock.service.IMockMajorService;
 import com.zhongzheng.modules.mock.service.IMockMajorSubjectService;
+import com.zhongzheng.modules.system.domain.SysTenant;
+import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.service.IUserMockSubscribeService;
 import com.zhongzheng.modules.user.service.IUserService;
@@ -38,11 +44,14 @@ import com.zhongzheng.modules.wx.service.IWxLoginService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Base64;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -75,6 +84,10 @@ public class ExamActivityServiceImpl extends ServiceImpl<ExamActivityMapper, Exa
     private IUserService userService;
     @Autowired
     private IUserMockSubscribeService userMockSubscribeService;
+    @Autowired
+    private ISysTenantService sysTenantService;
+    @Value("${liveGotoURL}")
+    private String liveGotoURL;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -204,7 +217,31 @@ public class ExamActivityServiceImpl extends ServiceImpl<ExamActivityMapper, Exa
 
     @Override
     public String getActivityApplyCode(Long activityId) {
-        return wxLoginService.getActivityApplyCode(activityId);
+        ExamActivity activity = getById(activityId);
+        if (ObjectUtils.isNull(activity)){
+            throw new CustomException("活动不存在");
+        }
+        //H5域名
+        SysTenant tenant = sysTenantService.getById(activity.getTenantId());
+        String hostH5 = tenant.getHostH5();
+        String urlBase64 = "";
+        try {
+            QRCodeWriter qrCodeWriter = new QRCodeWriter();
+            BitMatrix bitMatrix = qrCodeWriter.encode(String.format("%s%s/pages5/mockExam/examApply?tid=%s",liveGotoURL,hostH5,activityId),
+                    BarcodeFormat.QR_CODE, 300, 300);
+            // 写到输出流
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            MatrixToImageWriter.writeToStream(bitMatrix, "jpg", outputStream);
+            //转换为base64
+            Base64.Encoder encoder1 = Base64.getEncoder();
+            urlBase64 = "data:image/jpeg;base64,"
+                    + encoder1.encodeToString(outputStream.toByteArray());
+        }catch (Exception e) {
+            e.printStackTrace();
+            throw new CustomException("二维码生成失败");
+        }
+//        wxLoginService.getActivityApplyCode(activityId);
+        return urlBase64;
     }
 
     @Override

+ 31 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplyServiceImpl.java

@@ -55,6 +55,7 @@ import com.zhongzheng.modules.system.domain.SysConfig;
 import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.user.bo.CdExamSubscribeBo;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserService;
@@ -136,6 +137,10 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
 
     @Value("${zhongzheng.profile}")
     private String ZHONGZHENG_PROFILE;
+    @Value("${exam.subscribeAddExamResult}")
+    private String EXAM_SUBSCRIBE_SAVE_RESULT;
+    @Value("${exam.subscribeAddCertificate}")
+    private String EXAM_SUBSCRIBE_SAVE_RESULT_CERTIFICATE;
 
     @Override
     public ExamApplyVo queryById(Long applyId) {
@@ -1328,9 +1333,18 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
                     default :
                         break;
             }
-
+            bo.setApplyTime(DateUtils.dateTimeSec("yyyy-MM-dd",collect.get(0)));
+            bo.setApplyStartTime(getTimeStr(collect.get(1)));
+            bo.setApplyEndTime(getTimeStr(collect.get(3)));
+            bo.setTenantId(user.getTenantId());
+            bo.setMajor(majorName);
             iUserSubscribeService.updateByIdNoTenant(subscribe);
         });
+
+        //通知B端系统
+        String param = JSONArray.toJSONString(exportBo);
+        Map<String, String> headersMap = new HashMap<>();
+        HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_SAVE_RESULT, param, headersMap);
     }
 
     @Override
@@ -1339,6 +1353,7 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             return "请勿上传空文件!";
         }
         List<String> msgList = new ArrayList<>();
+        List<ExamApplyCertificateBo> certificateBos = new ArrayList<>();
         files.forEach(multipartFile -> {
             //文件名= 身份证号码_岗位名称_证书编号_发证日期
             String fileName = multipartFile.getOriginalFilename();
@@ -1378,6 +1393,15 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             try {
                 String upload = ossService.upload(ossRequest);
                 subscribe.setCertificateUrl(upload);
+                ExamApplyCertificateBo examAp = new ExamApplyCertificateBo();
+                examAp.setCertificateUrl(upload);
+                examAp.setCertificateEndTime(timeTwo);
+                examAp.setCertificateStartTime(time);
+                examAp.setCertificateCode(collect.get(2));
+                examAp.setMajor(collect.get(1));
+                examAp.setIdCard(EncryptHandler.decrypt(user.getIdCard()));
+                examAp.setTenantId(user.getTenantId());
+                certificateBos.add(examAp);
             } catch (Exception e) {
 //                log.error("证书上传有误:"+collect.get(0));
                 msgList.add(multipartFile.getOriginalFilename());
@@ -1385,6 +1409,12 @@ public class ExamApplyServiceImpl extends ServiceImpl<ExamApplyMapper, ExamApply
             }
             iUserSubscribeService.updateByIdNoTenant(subscribe);
         });
+        //通知B端系统
+        if (CollectionUtils.isNotEmpty(certificateBos)){
+            String param = JSONArray.toJSONString(certificateBos);
+            Map<String, String> headersMap = new HashMap<>();
+            HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_SAVE_RESULT_CERTIFICATE, param, headersMap);
+        }
         return msgList.stream().collect(Collectors.joining(","));
     }
 

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/service/impl/ExamApplySiteServiceImpl.java

@@ -158,7 +158,7 @@ public class ExamApplySiteServiceImpl extends ServiceImpl<ExamApplySiteMapper, E
                 CdExamRoomUpdateBo roomBo = new CdExamRoomUpdateBo();
                 roomBo.setSignId(apply.getApplyId());
                 roomBo.setDataFrom(1);
-//                roomBo.setTenantId(apply.getTenantId());
+                roomBo.setTenantId(apply.getTenantId());
                 roomBo.setExamType(apply.getApplyNature());
                 roomBo.setExamTime(timeAddBo.getExamTime());
                 ExamApplySiteTimeTwoAddBo twoAddBo = timeAddBo.getExamApplySiteTimeTwo().stream().findFirst().orElse(null);
@@ -178,7 +178,7 @@ public class ExamApplySiteServiceImpl extends ServiceImpl<ExamApplySiteMapper, E
                 CdExamRoomBo roomBo = new CdExamRoomBo();
                 roomBo.setSignId(apply.getApplyId());
                 roomBo.setDataFrom(1);
-//                roomBo.setTenantId(apply.getTenantId());
+                roomBo.setTenantId(apply.getTenantId());
                 roomBo.setType(1);//七大员预约
                 roomBo.setExamType(apply.getApplyNature());
                 roomBo.setExamTime(timeAddBo.getExamTime());

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassGradeUserQueryBo.java

@@ -314,4 +314,5 @@ public class ClassGradeUserQueryBo extends BaseEntity {
 
 	@ApiModelProperty("录单订单编号")
 	private String inputOrderSn;
+
 }

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

@@ -29,6 +29,8 @@ public interface ClassGradeMapper extends BaseMapper<ClassGrade> {
 //    @InterceptorIgnore(tenantLine = "true")
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
 
+    List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo);
+
     List<ClassGradeUserListVo> listGradeInform(ClassGradeQueryBo bo);
 
     List<ClassGradeStudentVo> listGradeStudy(ClassGradeQueryBo bo);

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java

@@ -56,6 +56,10 @@ public interface IClassGradeService extends IService<ClassGrade> {
 
     List<ClassGradeStudentVo> listGrade(ClassGradeUserQueryBo bo);
 
+	List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo);
+
+	List<ClassGradeStudentAllExportVo> listGradeAllExport(ClassGradeUserQueryBo bo);
+
     boolean editUserGrade(ClassGradeUserAddQueryBo bo);
 
 	List<ClassGradeUserListVo> listGradeInform(ClassGradeQueryBo bo);

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

@@ -36,6 +36,7 @@ import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.domain.*;
 import com.zhongzheng.modules.grade.mapper.ClassGradeMapper;
+import com.zhongzheng.modules.grade.mapper.ClassGradeUserMapper;
 import com.zhongzheng.modules.grade.service.*;
 import com.zhongzheng.modules.grade.vo.*;
 import com.zhongzheng.modules.inform.bo.InformUserAddBo;
@@ -163,6 +164,9 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Autowired
     private IOrderGoodsService iOrderGoodsService;
 
+    @Autowired
+    private ClassGradeUserMapper classGradeUserMapper;
+
     @Autowired
     private com.zhongzheng.modules.alisms.service.IAliSmsService IAliSmsService;
 
@@ -656,8 +660,8 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     }
                 }
             }
-
-            if (bo.getStatus() != -1) {
+            if(Validator.isNotEmpty(bo.getStatus())){
+                if (bo.getStatus() != -1) {
            /* LambdaQueryWrapper<ClassGrade> lqw = Wrappers.lambdaQuery();
             lqw.eq(ClassGrade::getClassName, update.getClassName());
             lqw.eq(ClassGrade::getStatus, 1);
@@ -672,31 +676,32 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     throw new RuntimeException("班级名称不能重复");
                 }
             }*/
-            }
-            if (bo.getStatus() == -1) { //删除判断班级是否人数空
-                ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
-                classGradeUserQueryBo.setGradeId(bo.getGradeId());
-                List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
-                if (list.size() > 0) {
-                    throw new RuntimeException("班级还有学员,无法删除");
                 }
-                ClassGrade grade = getById(bo.getGradeId());
-                if (StringUtils.isNotBlank(grade.getOfficialName())) {
-                    throw new RuntimeException("二建/二造班级无法删除,请联系技术人员!");
-                }
-            }
-            if (bo.getStatus() == 0) {  //更新为无效
-                ClassGradeVo oldGrade = this.queryById(bo.getGradeId());
-                if (oldGrade.getStatus() == 1) {
+                if (bo.getStatus() == -1) { //删除判断班级是否人数空
                     ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
                     classGradeUserQueryBo.setGradeId(bo.getGradeId());
                     List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
                     if (list.size() > 0) {
-                        throw new RuntimeException("班级还有学员,无法设置为无效");
+                        throw new RuntimeException("班级还有学员,无法删除");
+                    }
+                    ClassGrade grade = getById(bo.getGradeId());
+                    if (StringUtils.isNotBlank(grade.getOfficialName())) {
+                        throw new RuntimeException("二建/二造班级无法删除,请联系技术人员!");
                     }
                 }
-                if (StringUtils.isNotBlank(oldGrade.getOfficialName()) && sysTenant.getShareClass() == 1) {
-                    throw new RuntimeException("二建/二造班级无法设置为无效,请联系技术人员!");
+                if (bo.getStatus() == 0) {  //更新为无效
+                    ClassGradeVo oldGrade = this.queryById(bo.getGradeId());
+                    if (oldGrade.getStatus() == 1) {
+                        ClassGradeUserQueryBo classGradeUserQueryBo = new ClassGradeUserQueryBo();
+                        classGradeUserQueryBo.setGradeId(bo.getGradeId());
+                        List<ClassGradeStudentVo> list = this.listGrade(classGradeUserQueryBo);
+                        if (list.size() > 0) {
+                            throw new RuntimeException("班级还有学员,无法设置为无效");
+                        }
+                    }
+                    if (StringUtils.isNotBlank(oldGrade.getOfficialName()) && sysTenant.getShareClass() == 1) {
+                        throw new RuntimeException("二建/二造班级无法设置为无效,请联系技术人员!");
+                    }
                 }
             }
             //更改班主任
@@ -936,6 +941,166 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         return classGradeStudentVos;
     }
 
+    @Override
+    public List<ClassGradeStudentVo> listGradeAll(ClassGradeUserQueryBo bo) {
+        //身份证去重
+        if (Validator.isNotEmpty(bo.getIdCard()) && Validator.isNotEmpty(bo.getIdCards())) {
+            String idCard = bo.getIdCard();
+            List<String> idCards = bo.getIdCards();
+            Set<String> set = new HashSet<>();
+            for (String id : idCards) {
+                set.add(id);
+            }
+            set.add(idCard);
+            if (Validator.isNotEmpty(set)) {
+                bo.setIdCards(new ArrayList<>(set));
+            }
+            bo.setIdCard(null);
+        }
+        //查找班级学员
+        List<ClassGradeStudentVo> classGradeStudentVos = baseMapper.listGradeAll(bo);
+        //得到每个学员的课程学习记录
+        for (ClassGradeStudentVo classGradeStudentVo : classGradeStudentVos) {
+            Long secLong = 0L;
+            Long studyLong = 0L;
+
+            SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
+            subjectStudyRecordQueryBo.setGoodsId(classGradeStudentVo.getGoodsId());
+            subjectStudyRecordQueryBo.setUserId(classGradeStudentVo.getUserId());
+            subjectStudyRecordQueryBo.setGradeId(bo.getGradeId());
+            subjectStudyRecordQueryBo.setOrderGoodsId(classGradeStudentVo.getOrderGoodsId());
+            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();
+
+            }
+
+            List<Long> timeList = classGradeUserMapper.selectStart(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId());
+            if (!org.springframework.util.CollectionUtils.isEmpty(timeList)) {
+                //查找开始学习时间
+                classGradeStudentVo.setStartTime(timeList.get(0));
+            }else{
+                classGradeStudentVo.setStartTime(classGradeUserMapper.selectStartNoPhoto(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId())
+                );
+            }
+            //BigDecimal divide = new BigDecimal(studyLong.toString()).divide(new BigDecimal(secLong.toString()),2,BigDecimal.ROUND_HALF_UP);
+            //classGradeStudentVo.setStudyNum(divide.multiply(new BigDecimal("100")).longValue());
+            classGradeStudentVo.setSecAllNum(secLong);
+            classGradeStudentVo.setStuAllNum(studyLong);
+            /*UserUpdateQueryBo userUpdateQueryBo = new UserUpdateQueryBo();
+            userUpdateQueryBo.setUserId(classGradeStudentVo.getUserId());
+            classGradeStudentVo.setUserUpdates(iUserUpdateService.queryList(userUpdateQueryBo));*/
+            /*if (Validator.isNotEmpty(classGradeStudentVo.getRebuyOrderGoodsId()) && classGradeStudentVo.getRebuyOrderGoodsId().longValue() > 0) {
+                classGradeStudentVo.setRebuy(orderMapper.getGradePeriod(classGradeStudentVo.getRebuyOrderGoodsId(), classGradeStudentVo.getUserId()));
+            }*/
+            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())){
+                SysTenant tenant = iSysTenantService.getById(classGradeStudentVo.getOrgId());
+                if (ObjectUtils.isNotNull(tenant)){
+                    classGradeStudentVo.setTenantName(tenant.getTenantName());
+                }
+            }
+        }
+        return classGradeStudentVos;
+    }
+
+    @Override
+    public List<ClassGradeStudentAllExportVo> listGradeAllExport(ClassGradeUserQueryBo bo) {
+        if (Validator.isNotEmpty(bo.getIdCard()) && Validator.isNotEmpty(bo.getIdCards())) {
+            String idCard = bo.getIdCard();
+            List<String> idCards = bo.getIdCards();
+            Set<String> set = new HashSet<>();
+            for (String id : idCards) {
+                set.add(id);
+            }
+            set.add(idCard);
+            if (Validator.isNotEmpty(set)) {
+                bo.setIdCards(new ArrayList<>(set));
+            }
+            bo.setIdCard(null);
+        }
+        //查找班级学员
+        List<ClassGradeStudentVo> classGradeStudentVos = baseMapper.listGradeAll(bo);
+        List<ClassGradeStudentAllExportVo> eList = new ArrayList<>();
+        //得到每个学员的课程学习记录
+        for (ClassGradeStudentVo classGradeStudentVo : classGradeStudentVos) {
+            Long secLong = 0L;
+            Long studyLong = 0L;
+
+            SubjectStudyRecordQueryBo subjectStudyRecordQueryBo = new SubjectStudyRecordQueryBo();
+            subjectStudyRecordQueryBo.setGoodsId(classGradeStudentVo.getGoodsId());
+            subjectStudyRecordQueryBo.setUserId(classGradeStudentVo.getUserId());
+            subjectStudyRecordQueryBo.setGradeId(bo.getGradeId());
+            subjectStudyRecordQueryBo.setOrderGoodsId(classGradeStudentVo.getOrderGoodsId());
+            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();
+
+            }
+
+            List<Long> timeList = classGradeUserMapper.selectStart(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId());
+            if (!org.springframework.util.CollectionUtils.isEmpty(timeList)) {
+                //查找开始学习时间
+                classGradeStudentVo.setStartTime(timeList.get(0));
+            }else{
+                classGradeStudentVo.setStartTime(classGradeUserMapper.selectStartNoPhoto(classGradeStudentVo.getUserId(), classGradeStudentVo.getGoodsId(), classGradeStudentVo.getGradeId(),classGradeStudentVo.getOrderGoodsId())
+                );
+            }
+            //BigDecimal divide = new BigDecimal(studyLong.toString()).divide(new BigDecimal(secLong.toString()),2,BigDecimal.ROUND_HALF_UP);
+            //classGradeStudentVo.setStudyNum(divide.multiply(new BigDecimal("100")).longValue());
+            classGradeStudentVo.setSecAllNum(secLong);
+            classGradeStudentVo.setStuAllNum(studyLong);
+            /*UserUpdateQueryBo userUpdateQueryBo = new UserUpdateQueryBo();
+            userUpdateQueryBo.setUserId(classGradeStudentVo.getUserId());
+            classGradeStudentVo.setUserUpdates(iUserUpdateService.queryList(userUpdateQueryBo));*/
+            /*if (Validator.isNotEmpty(classGradeStudentVo.getRebuyOrderGoodsId()) && classGradeStudentVo.getRebuyOrderGoodsId().longValue() > 0) {
+                classGradeStudentVo.setRebuy(orderMapper.getGradePeriod(classGradeStudentVo.getRebuyOrderGoodsId(), classGradeStudentVo.getUserId()));
+            }*/
+            if (ObjectUtils.isNotNull(classGradeStudentVo.getOrgId())){
+                SysTenant tenant = iSysTenantService.getById(classGradeStudentVo.getOrgId());
+                if (ObjectUtils.isNotNull(tenant)){
+                    classGradeStudentVo.setTenantName(tenant.getTenantName());
+                }
+            }
+            ClassGradeStudentAllExportVo exportVo = BeanUtil.toBean(classGradeStudentVo,ClassGradeStudentAllExportVo.class);
+            exportVo.setHourStr((classGradeStudentVo.getRecordNum()+classGradeStudentVo.getStuAllNum())+"/"+(classGradeStudentVo.getExamNum()+classGradeStudentVo.getSecAllNum()));
+            exportVo.setServiceTimeStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getServiceStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS)+"至"+DateUtils.timestampToDateFormat(classGradeStudentVo.getServiceEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+            exportVo.setVideoStr(classGradeStudentVo.getStuAllNum()+"/"+classGradeStudentVo.getSecAllNum());
+            exportVo.setExamStr(classGradeStudentVo.getRecordNum()+"/"+classGradeStudentVo.getExamNum());
+            exportVo.setStudyStartStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getStartTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+            exportVo.setStudyEndStr(DateUtils.timestampToDateFormat(classGradeStudentVo.getEndTime(),DateUtils.YYYY_MM_DD_HH_MM_SS));
+            if(classGradeStudentVo.getPeriodStatus()==-1||classGradeStudentVo.getPeriodStatus()==0){
+                exportVo.setStudyStatusStr("未学完");
+            }else{
+                exportVo.setStudyStatusStr("已完成");
+            }
+            exportVo.setTotalStudyCount(classGradeStudentVo.getUseStudyCount()+classGradeStudentVo.getStudyCount().intValue());
+            if(classGradeStudentVo.getUserStatus()==1){
+                exportVo.setUserStatus("变更");
+            }else{
+                exportVo.setUserStatus("未变更");
+            }
+            if(classGradeStudentVo.getOfficialStatus()==1){
+                exportVo.setOfficialStatus("是");
+            }else{
+                exportVo.setOfficialStatus("否");
+            }
+            if(classGradeStudentVo.getPeriodStatus()==1){
+                exportVo.setPeriodStatus("通过");
+            }else{
+                exportVo.setPeriodStatus("未通过");
+            }
+            if(classGradeStudentVo.getPeriodPlush()==1){
+                exportVo.setPeriodPlush("是");
+            }else{
+                exportVo.setPeriodPlush("否");
+            }
+            eList.add(exportVo);
+        }
+        return eList;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean editUserGrade(ClassGradeUserAddQueryBo bo) {
@@ -1665,7 +1830,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     @Override
     public List<ClassGradeVo> searchGradeList(ClassGradeQueryBo bo) {
         List<ClassGradeVo> classGradeVos = entity2Vo(baseMapper.searchGradeList(bo));
-        if (CollectionUtils.isEmpty(classGradeVos)) {
+        if (Validator.isEmpty(classGradeVos)||CollectionUtils.isEmpty(classGradeVos)) {
             return new ArrayList<>();
         }
         classGradeVos.forEach(item -> {

+ 99 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentAllExportVo.java

@@ -0,0 +1,99 @@
+package com.zhongzheng.modules.grade.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.zhongzheng.modules.user.vo.UserUpdateVo;
+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 ClassGradeStudentAllExportVo {
+	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 = "工作单位")
+	private String companyName;
+
+	@ApiModelProperty("班级名称")
+	@Excel(name = "班级名称")
+	private String gradeName;
+
+	@Excel(name = "学时")
+	private String hourStr;
+
+	@Excel(name = "学习服务期")
+	@ApiModelProperty("学习服务期")
+	private String serviceTimeStr;
+
+	@Excel(name = "视频学习(节)")
+	private String videoStr;
+
+	@Excel(name = "做题进度(章卷)")
+	private String examStr;
+
+	@Excel(name = "学习开始")
+	private String studyStartStr;
+
+	@Excel(name = "学习结束")
+	private String studyEndStr;
+
+	@Excel(name = "学习状态")
+	private String studyStatusStr;
+
+	@Excel(name = "学习机会(总共)")
+	@ApiModelProperty("学习机会(总共)")
+	private Integer totalStudyCount;
+
+	@Excel(name = "学习机会(消耗)")
+	@ApiModelProperty("学习机会(消耗)")
+	private Integer useStudyCount;
+
+	@Excel(name = "学习机会(剩余)")
+	@ApiModelProperty("学习机会(剩余)")
+	private Long studyCount;
+
+	@Excel(name = "资料变更")
+	@ApiModelProperty("资料是否变更过 1变更 0未变更")
+	private String userStatus;
+
+	@Excel(name = "信息上报")
+	@ApiModelProperty("官方推送状态 1是 0否")
+	private String officialStatus;
+
+	@Excel(name = "学时审核")
+	@ApiModelProperty("学时审批状态 0 未通过 1通过 2待审核")
+	private String periodStatus;
+
+	@Excel(name = "学时上报")
+	@ApiModelProperty("是否学时推送 0未推送 1推送")
+	private String periodPlush;
+
+}

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassGradeStudentVo.java

@@ -202,6 +202,9 @@ public class ClassGradeStudentVo {
 	@ApiModelProperty("项目名")
 	private String projectName;
 
+	@ApiModelProperty("教育名称")
+	private String educationName;
+
 	@ApiModelProperty("用户是否绑定微信")
 	private Integer userBindWx;
 	@ApiModelProperty("用户是否关注微信")
@@ -242,6 +245,25 @@ public class ClassGradeStudentVo {
 	@ApiModelProperty("所属机构")
 	private String tenantName;
 
+	@Excel(name = "工作单位")
+	private String companyName;
+
+	@ApiModelProperty("班级名称")
+	private String gradeName;
+
+	/** 学习有效期开始 */
+	@ApiModelProperty("学习开始")
+	private Long startTime;
+	/** 学习有效期结束 */
+	@ApiModelProperty("学习结束")
+	private Long endTime;
+
+	@ApiModelProperty("审核状态  1通过 3不通过 2待审")
+	private Integer profileStatus;
 
+	/** 开班状态 0未开班 1开班 */
+	@Excel(name = "开班状态 0未开班 1开班")
+	@ApiModelProperty("开班状态 0未开班 1开班")
+	private Integer classStatus;
 
 }

+ 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());

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -6230,7 +6230,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             if (bo.getStatus() == 1 && order.getOrderBase() == 1 && ObjectUtils.isNotNull(order.getInputOrderSn())) {
                 handleRefundOrder(list.stream().map(x -> BeanUtil.toBean(x, TopOldOrderRefundVo.class)).collect(Collectors.toList()), order.getInputOrderSn(), order.getTenantId().toString());
             }
-            checkInform(order.getOrderSn(), list.get(0).getType(), "", 1, 1, bo.getStatus() == 1 ? "已支付" : "支付失败");
+            checkInform(order.getOrderSn(), list.get(0).getType(), "", bo.getStatus(), 1, bo.getStatus() == 1 ? "已支付" : "支付失败");
             return true;
         } else if (bankPay.getType() == 1) {
             if (Validator.isEmpty(bankPay.getDivideLogId())) {

+ 46 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldCourseChpaterExam.java

@@ -0,0 +1,46 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年04月18日 14:19
+ */
+@Data
+public class OldCourseChpaterExam implements Serializable {
+
+    /// <summary>
+    /// 章节ID
+    /// </summary>
+    private Integer ChpaterId;
+
+    /// <summary>
+    /// 考试得分
+    /// </summary>
+
+    private BigDecimal ExamScore;
+    /// <summary>
+    /// 审核时间
+    /// </summary>
+
+    private Long AuditTime;
+    /// <summary>
+    /// 考试开始时间
+    /// </summary>
+
+    private Long ExamBeginTime;
+    /// <summary>
+    /// 考试结束时间
+    /// </summary>
+
+    private Long ExamEndTime;
+    /// <summary>
+    /// 考试拍照
+    /// </summary>
+
+    private List<OldUserRecordImage> ImageList;
+}

+ 186 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldUserInfo.java

@@ -0,0 +1,186 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年04月18日 14:10
+ */
+@Data
+public class OldUserInfo implements Serializable {
+
+    /// <summary>
+    /// 姓名
+    /// </summary>
+    private String userName;
+    /// <summary>
+    /// 身份证号
+    /// </summary>
+    private String idnum;
+
+    /// <summary>
+    /// 电话
+    /// </summary>
+    private String mobie;
+
+    /// <summary>
+    /// 性别,男 女
+    /// </summary>
+    private String sex;
+    /// <summary>
+    /// 公司名称
+    /// </summary>
+    private String companyName;
+
+    /// <summary>
+    /// 学历
+    /// </summary>
+    private String education;
+
+
+    /// <summary>
+    /// 工作年限
+    /// </summary>
+    private String workYears;
+
+
+    /// <summary>
+    /// 个人相片
+    /// </summary>
+    private String imageSrc;
+
+    /// <summary>
+    /// 身份证正面
+    /// </summary>
+    private String idcardPhotoSrc;
+
+
+    /// <summary>
+    /// 身份证反面
+    /// </summary>
+    private String idcardPhotoSrc2;
+
+
+    /// <summary>
+    /// 5 二建继续教育,6职称继续教育 ,10七大员继续教育,17 七大员考前培训
+    /// </summary>
+    private Integer platformId;
+
+    /// <summary>
+    /// 1继续教育,2考前培训
+    /// </summary>
+    private Integer parentPlatformId;
+
+    /// <summary>
+    /// 业务类型
+    /// </summary>
+    private String businessName;
+
+    /// <summary>
+    /// 岗位
+    /// </summary>
+
+    private String majorName;
+
+
+    /// <summary>
+    /// 毕业学校
+    /// </summary>
+
+    private String school;
+
+    /// <summary>
+    /// 毕业专业
+    /// </summary>
+    private String schoolMajor;
+
+
+    /// <summary>
+    /// 毕业时间
+    /// </summary>
+    private Long graduationTime;
+
+    /// <summary>
+    /// 单位联系人
+    /// </summary>
+    private String contactPerson;
+
+    /// <summary>
+    /// 单位联系电话
+    /// </summary>
+    private String contactMobile;
+
+    /// <summary>
+    /// 学习帐号ID
+    /// </summary>
+    private Integer userCourseCategoryId;
+
+    /// <summary>
+    /// 班级号,二建,七大员 二造
+    /// </summary>
+    private String classNo;
+
+    /// <summary>
+    /// 开通时间
+    /// </summary>
+    private Long openTime;
+
+    /// <summary>
+    /// 课程ID
+    /// </summary>
+    private Integer courseId;
+
+    /// <summary>
+    /// 机构ID
+    /// </summary>
+    private Integer orgId;
+
+    /// <summary>
+    /// 开始时间
+    /// </summary>
+    private Long beginTime;
+
+    /// <summary>
+    /// 完成时间
+    /// </summary>
+    private Long endTime;
+
+    /// <summary>
+    /// 总学时
+    /// </summary>
+    private Integer totalHours;
+
+    /// <summary>
+    /// 已学学时
+    /// </summary>
+    private Integer studyHours;
+
+    /// <summary>
+    /// 审核状态
+    /// </summary>
+    private Integer completeStatus;
+    /// <summary>
+    /// 审核时间
+    /// </summary>
+    private Long auditTime;
+
+    /// <summary>
+    /// 审核人
+    /// </summary>
+
+    private String auditor;
+
+    /// <summary>
+    /// 学员记录
+    /// </summary>
+
+    private List<OldUserStudyData> userStudyData;
+    /// <summary>
+    /// 考试记录
+    /// </summary>
+
+    private List<OldCourseChpaterExam> courseChpaterExam;
+}

+ 46 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldUserRecordImage.java

@@ -0,0 +1,46 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2024年04月18日 14:17
+ */
+@Data
+public class OldUserRecordImage implements Serializable {
+
+    /// <summary>
+    /// 学时帐号ID
+    /// </summary>
+    private Integer userCourseCategoryId;
+    /// <summary>
+    /// 视频ID
+    /// </summary>
+    private Integer videoId;
+    /// <summary>
+    /// 匹配度
+    /// </summary>
+
+    private BigDecimal matchData;
+
+    /// <summary>
+    /// 拍照类型 4视频拍照,5考试拍照
+    /// </summary>
+    private BigDecimal type;
+    /// <summary>
+    /// 章节Id 
+    /// </summary>
+    private Integer chpaterId;
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+
+    private Long createTime;
+    /// <summary>
+    /// 拍照地址
+    /// </summary>
+    private String  imageSrc;
+}

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/OldUserStudyData.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.modules.user.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2024年04月18日 14:15
+ */
+@Data
+public class OldUserStudyData implements Serializable {
+
+    /// <summary>
+    /// 记录Id  自增Id 
+    /// </summary>
+    private Integer userStudyRecordId;
+    /// <summary>
+    /// 在线学习时间
+    /// </summary>
+    private Long studyTime;
+    /// <summary>
+    /// 开始时间
+    /// </summary>
+    private Long beginTime;
+    /// <summary>
+    /// 视频完成时间
+    /// </summary>
+
+    private Long endTime;
+
+    /// <summary>
+    /// 是否完成
+    /// </summary>
+    private Integer isEnd;
+
+
+    /// <summary>
+    /// 视频ID
+    /// </summary>
+    private Integer videoId;
+
+
+    /// <summary>
+    /// 章节ID
+    /// </summary>
+    private Integer chpaterId;
+
+    /// <summary>
+    /// 创建时间
+    /// </summary>
+    private Long createTime;
+    /// <summary>
+    /// 学习拍照
+    /// </summary>
+
+    private List<OldUserRecordImage> imageList;
+
+
+}

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

@@ -446,7 +446,8 @@ public class UserStudyRecordServiceImpl extends ServiceImpl<UserStudyRecordMappe
                                                 log.info("视频学习时长不达标"+JSON.toJSONString(bo));
                                                 throw new CustomException("视频学习时长不达标,"+(videoTime.longValue()-5-(DateUtils.getNowTime().longValue()-userPeriodStatusVo.getRecordStartTime().longValue())),558);
                                             }
-                                        } else{
+                                        }
+                                        else{
                                             log.info("视频学习时长不达标"+JSON.toJSONString(bo));
                                             throw new CustomException("视频学习时长不达标,"+(videoTime.longValue()-5-(DateUtils.getNowTime().longValue()-photo.getCreateTime().longValue())),558);
                                         }

+ 19 - 1
zhongzheng-system/src/main/resources/mapper/modules/course/CourseMapper.xml

@@ -178,6 +178,8 @@
         <result property="sectionMaxNum" column="section_max_num"/>
         <result property="externalLink" column="external_link"/>
         <result property="externalLinkStatus" column="external_link_status"/>
+        <result property="courseNum" column="course_num"/>
+        <result property="examNum" column="exam_num"/>
 
         <result property="supplyName" column="supply_name"/>
         <result property="educationName" column="education_name"/>
@@ -611,6 +613,8 @@
         o.user_id,
         og.order_goods_id,
         og.grade_id,
+        og.course_num,
+        og.exam_num,
         og.create_time as open_goods_time
         FROM
         `order` o
@@ -674,7 +678,7 @@
         og.grade_id,
         IFNULL(ge.exam_num,0) as exam_num,
         og.create_time as open_goods_time,
-        (SELECT MIN(usr.create_time) FROM user_study_record usr  where usr.`status`=1 and usr.grade_id = og.grade_id and usr.user_id = o.user_id and usr.current_status = 1 and usr.order_goods_id = og.order_goods_id) as start_time,
+        (SELECT MIN(usr.create_time) FROM user_study_record usr  where  usr.grade_id = og.grade_id and usr.user_id = o.user_id and usr.current_status = 1 and usr.order_goods_id = og.order_goods_id) as start_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.grade_id = og.grade_id and ubr.user_id = o.user_id and ubr.current_status = 1) as record_num,
         (SELECT cgu.period_wait_time FROM class_grade_user cgu  where cgu.`status`=1  and cgu.grade_id = og.grade_id and cgu.user_id = o.user_id and cgu.order_goods_id = og.order_goods_id) as end_time,
         oi.old_order_sn
@@ -1082,6 +1086,20 @@
         </if>
     </select>
 
+    <select id="getStudyCourseNum" parameterType="com.zhongzheng.modules.user.bo.SubjectStudyRecordQueryBo" resultType="java.lang.Long">
+        SELECT
+            COUNT( DISTINCT course_id, module_id, chapter_id, section_id )
+        FROM
+            user_study_record
+        WHERE
+            current_status = 1
+          AND grade_id = #{gradeId}
+          AND order_goods_id = #{orderGoodsId}
+          AND user_id = #{userId}
+          AND status = 1
+          AND goods_id = #{goodsId}
+    </select>
+
     <select id="getOrderGoodsIds" parameterType="com.zhongzheng.modules.course.bo.CourseQueryBo" resultType="java.lang.Long">
         SELECT
             og.order_goods_id

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

@@ -170,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="reason" column="reason"/>
         <result property="projectName" column="project_name"/>
         <result property="businessName" column="business_name"/>
+        <result property="educationName" column="education_name"/>
         <result property="sevenYear" column="seven_year"/>
         <result property="orgId" column="org_id"/>
 
@@ -182,6 +183,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="expendBefore" column="expend_before"/>
         <result property="periodPlushMsg" column="official_status_msg"/>
         <result property="officialStatusMsg" column="period_plush_msg"/>
+        <result property="companyName" column="company_name"/>
+        <result property="gradeName" column="class_name"/>
+        <result property="endTime" column="end_time"/>
+        <result property="profileStatus" column="profile_status"/>
+        <result property="classStatus" column="class_status"/>
     </resultMap>
 
 
@@ -562,6 +568,167 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by user_info_status desc ,user_status desc ,cgu.id desc
     </select>
 
+    <select id="listGradeAll"  parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo" resultMap="ClassGradeStudentVo">
+        SELECT
+        cgu.id,
+        cgu.official_status_time,
+        cgu.official_status_num,
+        u.user_account,
+        u.user_id,
+        u.company_name,
+        cgu.`status`,
+        u.realname,
+        og.goods_id,
+        u.id_card,
+        cgu.grade_id,
+        u.telphone,
+        g.class_hours,
+        cgu.period_status,
+        cgu.finish_status,
+        cgu.period_plush,
+        g.study_start_time,
+        g.study_end_time,
+        cg.class_start_time,
+        cg.class_end_time,
+        cg.class_status,
+        cg.interface_push_id,
+        cgu.official_status,
+        cgu.official_status_msg,
+        cgu.period_plush_msg,
+        cgu.learn_status,
+        cgu.period_wait_time as end_time,
+        (case WHEN (select COUNT(uu.id) FROM user_update uu where cgu.user_id = uu.user_id and uu.status = 2) >0 then 1 ELSE 0 end) as user_status,
+        (SELECT COUNT(m.id) FROM course_menu_exam m LEFT JOIN goods_course c on m.course_id=c.course_id   where c.goods_id=og.goods_id and m.type  in (1,3) ) as exam_num,
+        (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.user_id = u.user_id and ubr.grade_id = cgu.grade_id and ubr.order_goods_id = cgu.order_goods_id and ubr.report_status=1 and ubr.current_status = 1) as record_num,
+        (og.study_count) as study_count,
+        og.order_goods_id,
+        og.rebuy_order_goods_id,
+        og.service_start_time,
+        og.service_end_time,
+        g.goods_name,
+        og.order_sn,
+        og.seven_year,
+        m.category_name,
+        g.major_id,
+        u.province,
+        cg.class_name,
+        cgu.reason,
+        cgu.tenant_id as org_id,
+        cb.business_name,
+        cpt.project_name,
+        (SELECT IFNULL(SUM(usr.study_duration),0) from user_study_record usr where usr.user_id = cgu.user_id and usr.grade_id = cgu.grade_id) as user_study_duration,
+        (SELECT count(*) from class_grade_user cgu where cgu.order_goods_id = og.order_goods_id) as use_study_count,
+        ueg.exam_number,
+        ueg.do_number,
+        ueg.expend_number,
+        ueg.expend_before,
+        up.`status` as profile_status,
+        cet.education_name
+        FROM
+        class_grade_user cgu
+        LEFT JOIN class_grade cg ON cgu.grade_id = cg.grade_id
+        LEFT JOIN `user` u ON u.user_id = cgu.user_id
+        LEFT JOIN order_goods og on cgu.order_goods_id = og.order_goods_id
+        LEFT JOIN goods g on og.goods_id = g.goods_id
+        LEFT JOIN major m ON g.major_id = m.id
+        LEFT JOIN course_business cb ON g.business_id = cb.id
+        LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+        LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+        LEFT JOIN user_exam_goods ueg ON ueg.order_goods_id = og.order_goods_id
+        LEFT JOIN user_profile up on cgu.order_goods_id = up.order_goods_id and up.type_status=1 and up.current_status = 1
+        where 1=1 and cgu.`status` = 1
+        <if test="sevenCode != null and sevenCode !='' ">
+            AND cg.seven_code = #{sevenCode}
+        </if>
+        <if test="gradeId != null and gradeId !='' and (sevenCode == null or sevenCode =='')">
+            and cgu.grade_id = #{gradeId}
+        </if>
+        <if test="choice != null and choice == 1 ">
+            and (SELECT COUNT(cge.grade_id) FROM class_grade cge LEFT JOIN class_grade_user cgur on cge.grade_id = cgur.grade_id where cgu.user_id =cgur.user_id and  cgur.order_goods_id = cgu.order_goods_id AND (unix_timestamp(now()) &lt; cge.class_end_time or cge.class_start_time is null) and cge.`status`=1 and cgur.`status` =1)= 0 and cgu.period_status=0
+            AND (SELECT COUNT(cgde.grade_id) FROM class_grade cgde where cgde.grade_id = cg.grade_id and (unix_timestamp(now()) &lt; cgde.class_end_time or cgde.class_start_time is null)) =0
+        </if>
+        <if test="choice != null and choice == 2 ">
+            and (SELECT COUNT(cge.grade_id) FROM class_grade cge LEFT JOIN class_grade_user cgur on cge.grade_id = cgur.grade_id where cgu.user_id =cgur.user_id and  cgur.order_goods_id = cgu.order_goods_id  AND (unix_timestamp(now()) &lt; cge.class_end_time or cge.class_start_time is null)
+            and cge.`status`=1 and cgur.`status` =1)> 0
+            AND (SELECT COUNT(cgde.grade_id) FROM class_grade cgde where cgde.grade_id = cg.grade_id and (unix_timestamp(now()) &lt; cgde.class_end_time or cgde.class_start_time is null)) =0
+        </if>
+        <if test="studyCountMore != null and studyCountMore == 2 ">
+            AND og.study_count > 0 AND cgu.change_grade = 0 AND (cg.status = 0 or unix_timestamp(now()) > cg.class_end_time)
+        </if>
+        <if test="studyCountMore != null and studyCountMore == 1 ">
+            AND og.study_count > 0 AND cgu.change_grade = 1
+        </if>
+        <if test="studyCountMore != null and studyCountMore == 0 ">
+            AND og.study_count = 0
+        </if>
+        <if test="officialStatus != null and officialStatus == 1 ">
+            AND cgu.official_status = 1
+        </if>
+        <if test="officialStatus != null and officialStatus == 0 ">
+            AND (cgu.official_status is NULL or cgu.official_status=0)
+        </if>
+        <if test="periodPlush != null and periodPlush == 1 ">
+            AND cgu.period_plush = 1
+        </if>
+        <if test="periodPlush != null and periodPlush == 0 ">
+            AND (cgu.period_plush is NULL or cgu.period_plush=0)
+        </if>
+        <if test="searchKey != null and searchKey != ''">
+            AND (cg.class_name like concat('%', #{searchKey}, '%') or u.realname like concat('%', #{searchKey}, '%') or u.company_name like concat('%', #{searchKey}, '%'))
+        </if>
+        <if test="telphone != null and telphone != ''">
+            AND (u.telphone like concat('%', #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%'))
+        </if>
+        <if test="idCard != null and idCard != ''">
+            AND u.id_card like concat('%', #{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
+        </if>
+        <if test="idCards != null and idCards.size() != 0">
+            AND u.id_card IN
+            <foreach collection="idCards" item="item" index="index" open="(" close=")" separator=",">
+                #{item,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+            </foreach>
+        </if>
+        <if test="orderSn != null and orderSn != ''">
+            AND og.order_sn = #{orderSn}
+        </if>
+        <if test="goodsName != null and goodsName != ''">
+            AND g.goods_name like concat('%', #{goodsName}, '%')
+        </if>
+        <if test="searchStartTime != null and searchStartTime != ''">
+            AND cgu.create_time &gt; #{searchStartTime}
+        </if>
+        <if test="searchEndTime != null and searchEndTime != ''">
+            AND cgu.create_time &lt; #{searchEndTime}
+        </if>
+        <if test="finishStatus != null">
+            AND cgu.finish_status = #{finishStatus}
+        </if>
+        <if test="learnStatus != null">
+            AND cgu.learn_status = #{learnStatus}
+        </if>
+        <if test="projectId != null and projectId != ''">
+            AND g.project_id = #{projectId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        <if test="majorId != null and majorId != ''">
+            AND m.id = #{majorId}
+        </if>
+        <if test="hasInterface != null and hasInterface == 0">
+            AND cg.interface_account_id is null AND cg.no_interface_account_id is null
+        </if>
+        <if test="hasInterface != null and hasInterface == 1">
+            AND cg.interface_account_id is not null
+        </if>
+        <if test="hasInterface != null and hasInterface == 2">
+            AND cg.no_interface_account_id is not null
+        </if>
+    </select>
+
     <select id="listGradeInform" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeQueryBo" resultMap="ClassGradeUserListVo">
         SELECT
         g.*,
@@ -1141,6 +1308,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         g.class_start_time,
         g.class_end_time,
         g.learning_status,
+        g.remark,
+        g.status,
         (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = g.grade_id and a.status =1) as student_num,
         (
         SELECT
@@ -1186,14 +1355,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND u.realname  like concat('%', #{userName}, '%')
             ) >0
         </if>
-        <if test="classStatus != null  ">
-            AND g.class_status =  #{classStatus}
+          AND  g.status != -1
+        <if test="classStatus != null and  classStatus==0">
+            AND (g.class_status =  #{classStatus} or g.class_status  is null )
+        </if>
+        <if test="classStatus != null and  classStatus==1">
+            AND g.class_status =  1 and g.class_end_time >= unix_timestamp(now())
+        </if>
+        <if test="classStatus != null and  classStatus == 2 ">
+            AND g.class_status =  1 and unix_timestamp(now()) > g.class_end_time
         </if>
         <if test="atFull != null and atFull !='' ">
             AND (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = g.grade_id and a.status =1) &lt; g.student_upper
         </if>
-        <if test="classStartTime != null and classStartTime != ''  and classEndTime != null and classEndTime != ''">
-            AND (#{classStartTime} BETWEEN g.class_start_time and g.class_end_time or #{classEndTime} BETWEEN g.class_start_time and g.class_end_time)
+        <if test="classStartTime != null and classStartTime != ''  ">
+            AND g.class_start_time >=#{classStartTime}
+        </if>
+        <if test="classEndTime != null and classEndTime != ''  ">
+            AND #{classEndTime} >= g.class_end_time
         </if>
         <if test="pastDue != null or pastDue != null ">
             AND ((unix_timestamp(now())+10*24*3600) &lt; g.class_end_time or g.class_start_time is null)
@@ -1220,6 +1399,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         g.class_start_time,
         g.class_end_time,
         g.learning_status,
+        g.remark,
+        g.status,
         (SELECT COUNT(c.id) FROM class_grade_user c where a.grade_id = c.grade_id and c.status =1) as student_num,
         (
         SELECT
@@ -1249,6 +1430,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN course_business cb ON d.business_id = cb.id
         WHERE
         1 = 1
+        AND  g.status != -1
         <if test="status != null and status.size()!=0 ">
             AND g.status in
             <foreach collection="status" item="item" index="index" open="(" close=")" separator=",">
@@ -1267,14 +1449,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND d.goods_name  like concat('%', #{searchKey}, '%')
             ) >0)
         </if>
-        <if test="classStatus != null  ">
-            AND g.class_status =  #{classStatus}
+        <if test="classStatus != null and  classStatus==0">
+            AND (g.class_status =  #{classStatus} or g.class_status   is null )
+        </if>
+        <if test="classStatus != null and  classStatus==1">
+            AND g.class_status =  1 and g.class_end_time >= unix_timestamp(now())
+        </if>
+        <if test="classStatus != null and  classStatus == 2 ">
+            AND g.class_status =  1 and unix_timestamp(now()) > g.class_end_time
         </if>
         <if test="atFull != null and atFull !='' ">
             AND (SELECT COUNT(a.id) FROM class_grade_user a where a.grade_id = g.grade_id and a.status =1) &lt; g.student_upper
         </if>
-        <if test="classStartTime != null and classStartTime != ''  and classEndTime != null and classEndTime != ''">
-            AND (#{classStartTime} BETWEEN g.class_start_time and g.class_end_time or #{classEndTime} BETWEEN g.class_start_time and g.class_end_time)
+        <if test="classStartTime != null and classStartTime != ''  ">
+            AND g.class_start_time >=#{classStartTime}
+        </if>
+        <if test="classEndTime != null and classEndTime != ''  ">
+            AND #{classEndTime} >= g.class_end_time
         </if>
         <if test="pastDue != null or pastDue != null ">
             AND ((unix_timestamp(now())+10*24*3600) &lt; g.class_end_time or g.class_start_time is null)

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

@@ -986,7 +986,13 @@
     </select>
 
     <select id="listByNotTenant"  resultType="com.zhongzheng.modules.order.domain.OrderGoods">
-        SELECT * FROM order_goods WHERE `status` = 1 AND ((course_num IS NULL OR course_num = 0)OR(exam_num IS NULL OR exam_num = 0)) AND refund_status != 2 AND pay_status != 1
+        SELECT og.* FROM order_goods og
+        LEFT JOIN goods g ON og.goods_id = g.goods_id
+        WHERE og.`status` = 1
+          AND (( og.course_num IS NULL OR og.course_num = 0 ) AND ( og.exam_num IS NULL OR og.exam_num = 0 ))
+          AND og.refund_status != 2
+          AND og.pay_status != 1
+          AND g.goods_type = 1
     </select>
 
     <update id="upBatchNumById" parameterType="com.zhongzheng.modules.order.domain.OrderGoods">

+ 12 - 12
zhongzheng-system/src/main/resources/mapper/modules/user/UserNoteMapper.xml

@@ -80,18 +80,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="goodsId != null and goodsId !='' ">
             AND un.goods_id=#{goodsId}
         </if>
-<!--        <if test="moduleId != null and moduleId !='' ">-->
-<!--            AND un.module_id=#{moduleId}-->
-<!--        </if>-->
-<!--        <if test="courseId != null and courseId !='' ">-->
-<!--            AND un.course_id =#{courseId}-->
-<!--        </if>-->
-<!--        <if test="sectionId != null and sectionId !='' ">-->
-<!--            AND un.section_id =#{sectionId}-->
-<!--        </if>-->
-<!--        <if test="chapterId != null and chapterId !='' ">-->
-<!--            AND un.chapter_id =#{chapterId}-->
-<!--        </if>-->
+        <if test="moduleId != null and moduleId !='' ">
+            AND un.module_id=#{moduleId}
+        </if>
+        <if test="courseId != null and courseId !='' ">
+            AND un.course_id =#{courseId}
+        </if>
+        <if test="sectionId != null and sectionId !='' ">
+            AND un.section_id =#{sectionId}
+        </if>
+        <if test="chapterId != null and chapterId !='' ">
+            AND un.chapter_id =#{chapterId}
+        </if>
         <if test="gradeId != null and gradeId !='' ">
             AND un.grade_id =#{gradeId}
         </if>