Procházet zdrojové kódy

Merge branch 'dev_v3.1.0' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev_v3.1.0

xiaof před 3 roky
rodič
revize
b550c8565a
16 změnil soubory, kde provedl 113 přidání a 54 odebrání
  1. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CalculateNotifyResult.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/analyze/GradeBatchPaperResult.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/analyze/GradeBatchResult.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeBatch.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeBatchPaper.java
  6. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncReportServiceImpl.java
  7. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java
  8. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java
  9. 6 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/NotifyApiController.java
  10. 5 5
      distributed-print/src/main/resources/application-dev.properties
  11. 3 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/GradeAnalyzePaperStatusEnum.java
  12. 13 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/bean/params/CalculateParams.java
  13. 4 0
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBSyncTask.java
  14. 43 18
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/AnalyzeDataCalculateServiceImpl.java
  15. 22 4
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CalculateTaskTemplate.java
  16. 5 10
      teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CourseCodeSyncTaskService.java

+ 5 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/CalculateNotifyResult.java

@@ -2,11 +2,12 @@ package com.qmth.distributed.print.business.bean.result;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
-import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 计算回调结果
@@ -22,7 +23,7 @@ public class CalculateNotifyResult implements Serializable {
     private Long examId;
 
     @ApiModelProperty(value = "课程编码,一个分析试卷的唯一标识")
-    private List<String> courseCode;
+    private Map<String, GradeAnalyzePaperStatusEnum> courseCode;
 
     @ApiModelProperty(value = "进度")
     private BigDecimal progress;
@@ -41,11 +42,11 @@ public class CalculateNotifyResult implements Serializable {
         this.examId = examId;
     }
 
-    public List<String> getCourseCode() {
+    public Map<String, GradeAnalyzePaperStatusEnum> getCourseCode() {
         return courseCode;
     }
 
-    public void setCourseCode(List<String> courseCode) {
+    public void setCourseCode(Map<String, GradeAnalyzePaperStatusEnum> courseCode) {
         this.courseCode = courseCode;
     }
 

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/analyze/GradeBatchPaperResult.java

@@ -2,7 +2,7 @@ package com.qmth.distributed.print.business.bean.result.analyze;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 /**

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/analyze/GradeBatchResult.java

@@ -2,7 +2,7 @@ package com.qmth.distributed.print.business.bean.result.analyze;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 /**

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeBatch.java

@@ -2,8 +2,8 @@ package com.qmth.distributed.print.business.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeBatchPaper.java

@@ -2,8 +2,8 @@ package com.qmth.distributed.print.business.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncReportServiceImpl.java

@@ -5,13 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.distributed.print.business.entity.GradeBatch;
 import com.qmth.distributed.print.business.entity.GradeBatchPaper;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.distributed.print.business.service.DataSyncReportService;
 import com.qmth.distributed.print.business.service.GradeBatchPaperService;
 import com.qmth.distributed.print.business.service.GradeBatchService;
 import com.qmth.distributed.print.business.service.TBSyncTaskService;
 import com.qmth.teachcloud.common.entity.BasicSemester;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.service.BasicSemesterService;

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java

@@ -10,7 +10,6 @@ import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchPaperPa
 import com.qmth.distributed.print.business.bean.result.analyze.GradeBatchPaperResult;
 import com.qmth.distributed.print.business.entity.GradeBatch;
 import com.qmth.distributed.print.business.entity.GradeBatchPaper;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.distributed.print.business.mapper.GradeBatchPaperMapper;
 import com.qmth.distributed.print.business.service.GradeBatchPaperService;
 import com.qmth.distributed.print.business.service.GradeBatchService;
@@ -18,6 +17,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java

@@ -14,7 +14,6 @@ import com.qmth.distributed.print.business.bean.result.analyze.GradeBatchResult;
 import com.qmth.distributed.print.business.entity.GradeBatch;
 import com.qmth.distributed.print.business.entity.GradeBatchPaper;
 import com.qmth.distributed.print.business.entity.GradeBatchStudent;
-import com.qmth.distributed.print.business.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamStudentMapper;
 import com.qmth.distributed.print.business.mapper.GradeBatchMapper;
 import com.qmth.distributed.print.business.service.GradeBatchPaperService;
@@ -23,6 +22,7 @@ import com.qmth.distributed.print.business.service.GradeBatchStudentService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.excel.ExcelError;
 import org.apache.commons.lang3.StringUtils;

+ 6 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/NotifyApiController.java

@@ -23,8 +23,7 @@ import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * <p>
@@ -68,7 +67,11 @@ public class NotifyApiController {
                 throw ExceptionResultEnum.ERROR.exception("签名不匹配");
             }
             CalculateNotifyResult calculateNotifyResult = JSONObject.toJavaObject(JSONObject.parseObject(decodeJson), CalculateNotifyResult.class);
-            String source = Base64Util.encode(ShaUtils.sha1(calculateNotifyResult.getExamId() + calculateNotifyResult.getCourseCode().toString()));
+            List<String> courseCodeList = new ArrayList<>();
+            courseCodeList.addAll(calculateNotifyResult.getCourseCode().keySet());
+            Collections.sort(courseCodeList);
+
+            String source = Base64Util.encode(ShaUtils.sha1(calculateNotifyResult.getExamId() + courseCodeList.toString()));
             log.info("source:{}", source);
             //TODO 更新grade_batch(状态和进度)和grade_batch_paper(状态)
         } catch (Exception e) {

+ 5 - 5
distributed-print/src/main/resources/application-dev.properties

@@ -61,7 +61,7 @@ com.qmth.fss.private.config=oss://key:secret@teachcloud-print-dev-private.oss-ap
 com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-private
 
 #\u7CFB\u7EDF\u914D\u7F6E
-sys.config.oss=true
+sys.config.oss=false
 sys.config.attachmentType=.xlsx,.xls,.doc,.docx,.pdf,.jpg,.jpeg,.png,.html,.zip,.mp3,.wav,.dll,.exe,.ftl,.bpmn,.xml
 sys.config.attachmentLength=100
 sys.config.attachmentSize=200
@@ -73,8 +73,8 @@ sys.config.serverHost=localhost:7001
 sys.config.accessKey=274f823e5f59410f8b3bb6edcd8e2b6e
 sys.config.accessSecret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
 sys.config.adminLogoUrl=http://qmth-test.oss-cn-shenzhen.aliyuncs.com/frontend/wx_logo.png
-#sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
-sys.config.htmlToPdfUrl=E:/devUtils/wkhtmltopdf/bin/wkhtmltopdf.exe
+sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
+#sys.config.htmlToPdfUrl=E:/devUtils/wkhtmltopdf/bin/wkhtmltopdf.exe
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=true
@@ -158,8 +158,8 @@ sync.config.groupCountUrl=/api/exam/mark_group/count
 sync.config.groupDeleteUrl=/api/exam/mark_group/delete
 sync.config.markerSaveUrl=/api/exam/marker/save
 
-com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
-com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
+#com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
+#com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
 #com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
 
 sms.config.smsNormalCode=qmth

+ 3 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/GradeAnalyzePaperStatusEnum.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/GradeAnalyzePaperStatusEnum.java

@@ -1,4 +1,4 @@
-package com.qmth.distributed.print.business.enums;
+package com.qmth.teachcloud.common.enums;
 
 /**
  * @Description: 教研分析试卷状态枚举类
@@ -11,8 +11,8 @@ public enum GradeAnalyzePaperStatusEnum {
     SETTING_GRADE_PAPER_PARAM("蓝图数据准备中","推送分析数据给教研分析并且返回成功则设置此状态,并给命题老师发待办提醒。(如果推送失败则在推送任务管理里重新发起推送)"),
     READY_TO_CALCULATE("待计算","批次下的所有科目都已上传蓝图数据则设置此状态"),
     CALCULATING("计算中","发起分析则设置此状态。(发起分析后针对批次返回任务状态和进度,科目只显示计算中状态不显示进度。如果计算失败则在批次界面可以重新开始分析[断点续传]和错误原因.txt)"),
-    FINISH_CALCULATE("已完成","分析完毕后则设置此状态"),
-    ;
+    FINISH_CALCULATE("已完成","分析完毕后则设置此状态");
+
     private final String desc;
     private final String interpret;
 

+ 13 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/bean/params/CalculateParams.java

@@ -3,12 +3,14 @@ package com.qmth.teachcloud.report.business.bean.params;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.report.business.entity.TBSyncTask;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.util.CollectionUtils;
 
 import java.io.Serializable;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 /**
@@ -37,6 +39,17 @@ public class CalculateParams implements Serializable {
     @ApiModelProperty(value = "需要重算的课程编号")
     private List<String> repeatCalculateCourseCodeList;
 
+    @ApiModelProperty(value = "课程编码状态")
+    private Map<String, GradeAnalyzePaperStatusEnum> courseCodeMap;
+
+    public Map<String, GradeAnalyzePaperStatusEnum> getCourseCodeMap() {
+        return courseCodeMap;
+    }
+
+    public void setCourseCodeMap(Map<String, GradeAnalyzePaperStatusEnum> courseCodeMap) {
+        this.courseCodeMap = courseCodeMap;
+    }
+
     /**
      * 参数校验
      */

+ 4 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/entity/TBSyncTask.java

@@ -1,5 +1,7 @@
 package com.qmth.teachcloud.report.business.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.base.BaseEntity;
@@ -42,6 +44,7 @@ public class TBSyncTask extends BaseEntity implements Serializable {
     private Long thirdRelateId;
 
     @ApiModelProperty(value = "实体信息")
+    @TableField(value = "obj", updateStrategy = FieldStrategy.IGNORED)
     private String obj;
 
     @ApiModelProperty(value = "进度")
@@ -57,6 +60,7 @@ public class TBSyncTask extends BaseEntity implements Serializable {
     private TaskResultEnum result;
 
     @ApiModelProperty(value = "备注")
+    @TableField(value = "remark", updateStrategy = FieldStrategy.IGNORED)
     private String remark;
 
     @ApiModelProperty(value = "重试次数")

+ 43 - 18
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/AnalyzeDataCalculateServiceImpl.java

@@ -1,6 +1,8 @@
 package com.qmth.teachcloud.report.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.report.business.bean.params.CalculateParams;
 import com.qmth.teachcloud.report.business.entity.TBSyncTask;
 import com.qmth.teachcloud.report.business.enums.DataCalculateSequenceEnum;
@@ -10,7 +12,6 @@ import com.qmth.teachcloud.report.business.service.AnalyzeForReportService;
 import com.qmth.teachcloud.report.business.service.TBExamCourseService;
 import com.qmth.teachcloud.report.business.templete.strategy.CalculateTaskTemplate;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.IOException;
@@ -32,7 +33,6 @@ public class AnalyzeDataCalculateServiceImpl implements AnalyzeDataCalculateServ
     @Resource
     private TBExamCourseService tbExamCourseService;
 
-    @Transactional(rollbackFor = Exception.class)
     @Override
     public void dataCalculateStart(CalculateParams calculateParams) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, IOException {
         AnalyzeForReportService analyzeForReportService = SpringContextHolder.getBean(AnalyzeForReportService.class);
@@ -43,7 +43,7 @@ public class AnalyzeDataCalculateServiceImpl implements AnalyzeDataCalculateServ
         Long schoolId = calculateParams.getSchoolId();
         List<String> courseCodeList = calculateParams.getCourseCode();
         List<String> needRepeatCourseCodeList = calculateParams.getRepeatCalculateCourseCodeList();
-        if (needRepeatCourseCodeList == null){
+        if (needRepeatCourseCodeList == null) {
             needRepeatCourseCodeList = new ArrayList<>();
         }
 
@@ -56,28 +56,34 @@ public class AnalyzeDataCalculateServiceImpl implements AnalyzeDataCalculateServ
 
 
         for (String courseCode : courseCodeList) {
+            // TODO: 2022/6/13 测试用全部重算
+//            needRepeatCourseCodeList.add(courseCode);
+
             // 判断是否不需要计算
-            if (!needRepeatCourseCodeList.contains(courseCode)){
+            if (!needRepeatCourseCodeList.contains(courseCode)) {
                 // 如果不用重算,判断是否已经算过
-                if (tbExamCourseService.checkFinishCalculate(schoolId,examId,courseCode)){
+                if (tbExamCourseService.checkFinishCalculate(schoolId, examId, courseCode)) {
                     // 如果不用重算且已经算过(记录进度)
                     currentTask.addAndGet(DataCalculateSequenceEnum.getTotalWeight());
+                    this.submitTBSyncTask(tbSyncTask, totalTask, currentTask, courseCode, GradeAnalyzePaperStatusEnum.FINISH_CALCULATE);
+                    calculateTaskTemplate.updateProgress(calculateParams);
                     continue;
                 }
             }
             // 准备计算
-            analyzeForReportService.realityForCalculate(examId,courseCode);
+            analyzeForReportService.realityForCalculate(examId, courseCode);
             // 上次计算异常且不需要重算的 - 断点续算
             try {
-                if (courseCode.equals(errorCourseCode) && !needRepeatCourseCodeList.contains(courseCode)){
+                if (courseCode.equals(errorCourseCode) && !needRepeatCourseCodeList.contains(courseCode)) {
                     // 上次计算异常的课程,且不需要重算
                     String errorMethod = tbSyncTask.getRemark();
                     DataCalculateSequenceEnum error = DataCalculateSequenceEnum.valueOf(errorMethod);
                     int errorIndex = error.getIndex();
 
+                    // 表级计算
                     for (DataCalculateSequenceEnum dataCalculateSequenceEnum : DataCalculateSequenceEnum.values()) {
                         int currentIndex = dataCalculateSequenceEnum.getIndex();
-                        if (currentIndex < errorIndex){
+                        if (currentIndex < errorIndex) {
                             // 已经计算过的方法,不用重算,但进度需要累加
                             currentTask.addAndGet(dataCalculateSequenceEnum.getWeight());
                             continue;
@@ -86,32 +92,51 @@ public class AnalyzeDataCalculateServiceImpl implements AnalyzeDataCalculateServ
                         tbSyncTask.setRemark(dataCalculateSequenceEnum.name());
                         String currentMethodName = dataCalculateSequenceEnum.getMethodName();
 
-                        Method currenMethod = analyzeForReportService.getClass().getDeclaredMethod(currentMethodName,Long.class,String.class);
-                        currenMethod.invoke(analyzeForReportService,examId,courseCode); // 实例化对象,参数
+                        Method currenMethod = analyzeForReportService.getClass().getDeclaredMethod(currentMethodName, Long.class, String.class);
+                        currenMethod.invoke(analyzeForReportService, examId, courseCode); // 实例化对象,参数
                         currentTask.addAndGet(dataCalculateSequenceEnum.getWeight());
-                        tbSyncTask.setProgress(BigDecimal.valueOf(currentTask.get()).divide(BigDecimal.valueOf(totalTask.get()),2, RoundingMode.HALF_UP));
+                        this.submitTBSyncTask(tbSyncTask, totalTask, currentTask, courseCode, GradeAnalyzePaperStatusEnum.CALCULATING);
                         calculateTaskTemplate.updateProgress(calculateParams);
                     }
                 } else {
                     // 正常计算和重算
+                    // 表级计算
                     for (DataCalculateSequenceEnum dataCalculateSequenceEnum : DataCalculateSequenceEnum.values()) {
                         // 没有计算的方法和断点的方法都需要重新计算
                         tbSyncTask.setRemark(dataCalculateSequenceEnum.name());
                         String currentMethodName = dataCalculateSequenceEnum.getMethodName();
-                        Method currenMethod = analyzeForReportService.getClass().getDeclaredMethod(currentMethodName,Long.class,String.class);
-                        currenMethod.invoke(analyzeForReportService,examId,courseCode); // 实例化对象,参数
+                        Method currenMethod = analyzeForReportService.getClass().getDeclaredMethod(currentMethodName, Long.class, String.class);
+                        currenMethod.invoke(analyzeForReportService, examId, courseCode); // 实例化对象,参数
                         currentTask.addAndGet(dataCalculateSequenceEnum.getWeight());
-                        tbSyncTask.setProgress(BigDecimal.valueOf(currentTask.get()).divide(BigDecimal.valueOf(totalTask.get()),2, RoundingMode.HALF_UP));
+                        this.submitTBSyncTask(tbSyncTask, totalTask, currentTask, courseCode, GradeAnalyzePaperStatusEnum.CALCULATING);
                         calculateTaskTemplate.updateProgress(calculateParams);
                     }
                 }
                 // 计算完成
-                analyzeForReportService.updateCoursePublishStatus(examId,courseCode, PublishStatusEnum.UN_PUBLISH);
-            }catch (Exception e){
+                analyzeForReportService.updateCoursePublishStatus(examId, courseCode, PublishStatusEnum.UN_PUBLISH);
+                this.submitTBSyncTask(tbSyncTask, totalTask, currentTask, courseCode, GradeAnalyzePaperStatusEnum.FINISH_CALCULATE);
+                calculateTaskTemplate.updateProgress(calculateParams);
+            } catch (Exception e) {
                 // 教研分析计算部分出错时,需要回归t_b_exam_course表状态为未计算 再向外抛出异常
-                analyzeForReportService.updateCoursePublishStatus(examId,courseCode, PublishStatusEnum.UN_COMPUTE);
+                analyzeForReportService.updateCoursePublishStatus(examId, courseCode, PublishStatusEnum.UN_COMPUTE);
                 throw e;
             }
-        }
+        } //所有科目计算完成后任务状态变成已完成并且清除obj和remark
+    }
+
+    /**
+     * 提交task变化
+     *
+     * @param tbSyncTask                  tbSyncTask
+     * @param totalTask                   总任务
+     * @param currentTask                 当前执行的任务量
+     * @param courseCode                  课程编号
+     * @param gradeAnalyzePaperStatusEnum 状态
+     */
+    private void submitTBSyncTask(TBSyncTask tbSyncTask, AtomicInteger totalTask, AtomicInteger currentTask, String courseCode, GradeAnalyzePaperStatusEnum gradeAnalyzePaperStatusEnum) {
+        tbSyncTask.setProgress(BigDecimal.valueOf(currentTask.get()).divide(BigDecimal.valueOf(totalTask.get()), 2, RoundingMode.HALF_UP));
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put(courseCode, gradeAnalyzePaperStatusEnum);
+        tbSyncTask.setObj(jsonObject.toJSONString());
     }
 }

+ 22 - 4
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CalculateTaskTemplate.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.service.CommonCacheService;
@@ -21,6 +22,9 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URLEncoder;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -42,18 +46,23 @@ public abstract class CalculateTaskTemplate {
     protected void createSyncTask(CalculateParams calculateParams) throws IOException {
         log.info("createSyncTask come in");
         TBSyncTaskService tbSyncTaskService = SpringContextHolder.getBean(TBSyncTaskService.class);
+        Collections.sort(calculateParams.getCourseCode());
+
         String source = Base64Util.encode(ShaUtils.sha1(calculateParams.getExamId() + calculateParams.getCourseCode().toString()));
         QueryWrapper<TBSyncTask> tbSyncTaskQueryWrapper = new QueryWrapper<>();
         tbSyncTaskQueryWrapper.lambda().eq(TBSyncTask::getThirdRelateId, calculateParams.getExamId())
                 .eq(TBSyncTask::getSource, source);
         TBSyncTask tbSyncTask = tbSyncTaskService.getOne(tbSyncTaskQueryWrapper);
-        calculateParams.setTbSyncTask(tbSyncTask);
         if (Objects.isNull(tbSyncTask)) {
             tbSyncTask = new TBSyncTask(calculateParams.getSchoolId(), calculateParams.getExamId(), source);
             tbSyncTaskService.save(tbSyncTask);
-        } else if (tbSyncTask.getStatus() == TaskStatusEnum.FINISH && tbSyncTask.getResult() == TaskResultEnum.SUCCESS) {
-            throw ExceptionResultEnum.ERROR.exception("该批次已完成计算");
         }
+        calculateParams.setTbSyncTask(tbSyncTask);
+        Map<String, GradeAnalyzePaperStatusEnum> map = new LinkedHashMap<>();
+        for (String s : calculateParams.getCourseCode()) {
+            map.put(s, GradeAnalyzePaperStatusEnum.READY_TO_CALCULATE);
+        }
+        calculateParams.setCourseCodeMap(map);
     }
 
     /**
@@ -83,6 +92,13 @@ public abstract class CalculateTaskTemplate {
         TBSyncTaskService tbSyncTaskService = SpringContextHolder.getBean(TBSyncTaskService.class);
         TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
         tbSyncTaskService.updateById(tbSyncTask);
+
+        if (Objects.nonNull(tbSyncTask.getObj())) {
+            JSONObject jsonObject = JSONObject.parseObject(tbSyncTask.getObj());
+            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
+                calculateParams.getCourseCodeMap().put(entry.getKey(), GradeAnalyzePaperStatusEnum.valueOf((String) entry.getValue()));
+            }
+        }
         callback(calculateParams);
     }
 
@@ -97,6 +113,8 @@ public abstract class CalculateTaskTemplate {
         TBSyncTask tbSyncTask = calculateParams.getTbSyncTask();
         tbSyncTask.setStatus(TaskStatusEnum.FINISH);
         tbSyncTask.setResult(TaskResultEnum.SUCCESS);
+        tbSyncTask.setRemark(null);
+        tbSyncTask.setObj(null);
         updateProgress(calculateParams);
     }
 
@@ -129,7 +147,7 @@ public abstract class CalculateTaskTemplate {
         Long time = System.currentTimeMillis();
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("examId", tbSyncTask.getThirdRelateId());
-        jsonObject.put("courseCode", calculateParams.getCourseCode());
+        jsonObject.put("courseCode", calculateParams.getCourseCodeMap());
         jsonObject.put("progress", tbSyncTask.getProgress());
         jsonObject.put("status", tbSyncTask.getStatus());
         jsonObject.put("time", time);

+ 5 - 10
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CourseCodeSyncTaskService.java

@@ -1,17 +1,12 @@
 package com.qmth.teachcloud.report.business.templete.strategy;
 
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.report.business.bean.params.CalculateParams;
-import com.qmth.teachcloud.report.business.entity.TBExamCourse;
 import com.qmth.teachcloud.report.business.entity.TBSyncTask;
-import com.qmth.teachcloud.report.business.enums.DataCalculateSequenceEnum;
-import com.qmth.teachcloud.report.business.enums.PublishStatusEnum;
 import com.qmth.teachcloud.report.business.service.AnalyzeDataCalculateService;
 import com.qmth.teachcloud.report.business.service.AnalyzeDataCheckService;
 import com.qmth.teachcloud.report.business.service.AnalyzeForReportService;
-import com.qmth.teachcloud.report.business.service.TBExamCourseService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -19,11 +14,6 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * @Description: 科目(试卷)计算service
@@ -72,6 +62,11 @@ public class CourseCodeSyncTaskService extends CalculateTaskTemplate {
         tbSyncTask.setStatus(TaskStatusEnum.RUNNING);
         updateProgress(calculateParams);
 
+//        JSONObject jsonObject = new JSONObject();
+//        jsonObject.put(calculateParams.getCourseCode().get(0), GradeAnalyzePaperStatusEnum.CALCULATING);
+//        tbSyncTask.setObj(jsonObject.toJSONString());
+//        updateProgress(calculateParams);
+
         //TODO 此处加计算数据具体逻辑方法,推荐service方法然后加@Transactional注解
         analyzeDataCalculateService.dataCalculateStart(calculateParams);
     }