Browse Source

3.3.0 fix

xiaofei 1 year ago
parent
commit
08c360b74b

+ 12 - 37
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TBSyncTask.java

@@ -51,6 +51,10 @@ public class TBSyncTask extends BaseEntity implements Serializable {
     @TableField("paper_number")
     private String paperNumber;
 
+    @ApiModelProperty(value = "试卷类型")
+    @TableField("paper_type")
+    private String paperType;
+
     @ApiModelProperty(value = "机构id")
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField(value = "org_id", updateStrategy = FieldStrategy.IGNORED)
@@ -60,15 +64,6 @@ public class TBSyncTask extends BaseEntity implements Serializable {
     @TableField(value = "type")
     private PushTypeEnum type;
 
-    @ApiModelProperty(value = "第三方关联id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    @TableField("third_relate_id")
-    private Long thirdRelateId;
-
-    @ApiModelProperty(value = "第三方关联名称")
-    @TableField("third_relate_name")
-    private String thirdRelateName;
-
     @ApiModelProperty(value = "考试时间")
     @TableField("exam_time")
     private String examTime;
@@ -78,10 +73,6 @@ public class TBSyncTask extends BaseEntity implements Serializable {
     @TableField(value = "object_id")
     private Long objectId;
 
-    @ApiModelProperty(value = "机构编码")
-    @TableField(value = "org_code")
-    private String orgCode;
-
     @ApiModelProperty(value = "任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成")
     @TableField(value = "status")
     private TaskStatusEnum status;
@@ -176,28 +167,20 @@ public class TBSyncTask extends BaseEntity implements Serializable {
         this.paperNumber = paperNumber;
     }
 
-    public Long getOrgId() {
-        return orgId;
-    }
-
-    public void setOrgId(Long orgId) {
-        this.orgId = orgId;
+    public String getPaperType() {
+        return paperType;
     }
 
-    public Long getThirdRelateId() {
-        return thirdRelateId;
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
     }
 
-    public void setThirdRelateId(Long thirdRelateId) {
-        this.thirdRelateId = thirdRelateId;
-    }
-
-    public String getThirdRelateName() {
-        return thirdRelateName;
+    public Long getOrgId() {
+        return orgId;
     }
 
-    public void setThirdRelateName(String thirdRelateName) {
-        this.thirdRelateName = thirdRelateName;
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
     }
 
     public String getExamTime() {
@@ -224,14 +207,6 @@ public class TBSyncTask extends BaseEntity implements Serializable {
         this.objectId = objectId;
     }
 
-    public String getOrgCode() {
-        return orgCode;
-    }
-
-    public void setOrgCode(String orgCode) {
-        this.orgCode = orgCode;
-    }
-
     public TaskStatusEnum getStatus() {
         return status;
     }

+ 4 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBSyncTaskService.java

@@ -17,9 +17,11 @@ public interface TBSyncTaskService extends IService<TBSyncTask> {
 
     TBSyncTask saveTask(Long schoolId, Long objectId, PushTypeEnum type, String remark);
 
-    void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage);
+    TBSyncTask saveTask(Long schoolId, Long examId, String paperNumber, String paperType, PushTypeEnum type, String remark);
 
-    void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage, String remark);
+    void updateStatusAndResultById(Long id, TaskStatusEnum status, TaskResultEnum result, String errorMessage);
+
+    void updateStatusAndResultById(Long id, TaskStatusEnum status, TaskResultEnum result, String errorMessage, String remark);
 
     /**
      * 同步任务管理分页查询

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

@@ -68,7 +68,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         try {
             // 同步中
             status = TaskStatusEnum.RUNNING;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, null, null);
 
             // 同步学期
             BasicSemester basicSemester = basicSemesterService.getById(semesterId);
@@ -134,7 +134,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         } finally {
             // 同步结束
             status = TaskStatusEnum.FINISH;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, result, errorMessage);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, result, errorMessage);
 
             // 更新批次表学期Id、考试ID、状态
             gradeBatchService.updateById(gradeBatch);
@@ -154,7 +154,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         try {
             // 同步中
             status = TaskStatusEnum.RUNNING;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, null, null);
 
             QueryWrapper<GradeBatchPaper> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(GradeBatchPaper::getBatchId, gradeBatch.getId());
@@ -203,7 +203,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         } finally {
             // 同步结束
             status = TaskStatusEnum.FINISH;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, result, errorMessage, remark);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, result, errorMessage, remark);
         }
     }
 
@@ -219,7 +219,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         try {
             // 同步中
             status = TaskStatusEnum.RUNNING;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, null, null);
 
             publish = teachCloudReportTaskUtils.publish(schoolId, gradeBatch.getThirdExamId(), gradeBatchPaper.getGradeCourseCode(), true);
             // 任务结果
@@ -230,7 +230,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         } finally {
             // 同步结束
             status = TaskStatusEnum.FINISH;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, result, errorMessage);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, result, errorMessage);
 
             if (!gradeBatchPaper.getPublishStatus()) {
                 UpdateWrapper<GradeBatchPaper> updateWrapper = new UpdateWrapper<>();
@@ -251,7 +251,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         try {
             // 同步中
             status = TaskStatusEnum.RUNNING;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, null, null);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, null, null);
 
             if (Objects.isNull(gradeBatch)) {
                 throw ExceptionResultEnum.ERROR.exception("要删除的批次不存在");
@@ -299,7 +299,7 @@ public class DataSyncReportServiceImpl implements DataSyncReportService {
         } finally {
             // 同步结束
             status = TaskStatusEnum.FINISH;
-            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), null, status, result, errorMessage);
+            tbSyncTaskService.updateStatusAndResultById(tbSyncTask.getId(), status, result, errorMessage);
         }
     }
 }

+ 36 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java

@@ -77,10 +77,43 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
     }
 
     @Override
-    public void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage) {
+    public TBSyncTask saveTask(Long schoolId, Long examId, String paperNumber, String paperType, PushTypeEnum type, String remark) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(TBSyncTask::getSchoolId, schoolId)
+                .eq(TBSyncTask::getExamId, examId)
+                .eq(TBSyncTask::getPaperNumber, paperNumber)
+                .eq(TBSyncTask::getPaperType, paperType)
+                .eq(TBSyncTask::getType, type);
+        TBSyncTask tbSyncTask = this.getOne(queryWrapper);
+
+        if (tbSyncTask != null) {
+            if (!TaskStatusEnum.FINISH.equals(tbSyncTask.getStatus())) {
+                return tbSyncTask;
+            }
+            tbSyncTask.setStatus(TaskStatusEnum.INIT);
+            tbSyncTask.setRemark(remark);
+            tbSyncTask.setUpdateId(sysUser.getId());
+            tbSyncTask.setUpdateTime(System.currentTimeMillis());
+        } else {
+            tbSyncTask = new TBSyncTask();
+            tbSyncTask.setId(SystemConstant.getDbUuid());
+            tbSyncTask.setSchoolId(schoolId);
+            tbSyncTask.setExamId(examId);
+            tbSyncTask.setType(type);
+            tbSyncTask.setRemark(remark);
+            tbSyncTask.setStatus(TaskStatusEnum.INIT);
+            tbSyncTask.setCreateId(sysUser.getId());
+            tbSyncTask.setCreateTime(System.currentTimeMillis());
+        }
+        this.saveOrUpdate(tbSyncTask);
+        return tbSyncTask;
+    }
+
+    @Override
+    public void updateStatusAndResultById(Long id, TaskStatusEnum status, TaskResultEnum result, String errorMessage) {
         UpdateWrapper<TBSyncTask> tbSyncTaskUpdateWrapper = new UpdateWrapper<>();
         tbSyncTaskUpdateWrapper.lambda().set(TBSyncTask::getStatus, status)
-                .set(TBSyncTask::getThirdRelateId, thirdRelateId)
                 .set(TBSyncTask::getResult, result)
                 .set(TBSyncTask::getErrorMessage, errorMessage)
                 .eq(TBSyncTask::getId, id);
@@ -88,10 +121,9 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
     }
 
     @Override
-    public void updateStatusAndResultById(Long id, Long thirdRelateId, TaskStatusEnum status, TaskResultEnum result, String errorMessage, String remark) {
+    public void updateStatusAndResultById(Long id, TaskStatusEnum status, TaskResultEnum result, String errorMessage, String remark) {
         UpdateWrapper<TBSyncTask> tbSyncTaskUpdateWrapper = new UpdateWrapper<>();
         tbSyncTaskUpdateWrapper.lambda().set(TBSyncTask::getStatus, status)
-                .set(TBSyncTask::getThirdRelateId, thirdRelateId)
                 .set(TBSyncTask::getResult, result)
                 .set(TBSyncTask::getErrorMessage, errorMessage)
                 .set(TBSyncTask::getRemark, remark)

+ 6 - 1
distributed-print/install/mysql/upgrade/3.3.0.sql

@@ -176,4 +176,9 @@ DELETE FROM `sys_privilege` WHERE (`id` = '822');
 DELETE FROM `sys_privilege` WHERE (`id` = '823');
 DELETE FROM `sys_privilege` WHERE (`id` = '824');
 DELETE FROM `sys_privilege` WHERE (`id` = '818');
-
+delete from t_b_sync_task where type in ('EXAM_PUSH','STRUCTURE_GROUP_PUSH','MARK_LEADER_PUSH','MARKER_PUSH','PAPER_ANSWER_FILE_PUSH','OBJECTIVE_ANSWER_PUSH', 'SCORE_PUSH');
+ALTER TABLE `t_b_sync_task`
+    DROP COLUMN `org_code`,
+    DROP COLUMN `third_relate_name`,
+    DROP COLUMN `third_relate_id`,
+    ADD COLUMN `paper_type` VARCHAR(10) NULL COMMENT '试卷类型' AFTER `paper_number`;

+ 1 - 12
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/PushTypeEnum.java

@@ -11,18 +11,7 @@ import java.util.Objects;
  */
 public enum PushTypeEnum {
 
-    EXAM_PUSH("考试、考生、题卡数据推送"),
-
-    STRUCTURE_GROUP_PUSH("试卷结构、分组、评卷员绑定关系数据推送"),
-
-    MARK_LEADER_PUSH("科组长数据推送"),
-    MARKER_PUSH("评卷员、分班阅数据推送"),
-
-    PAPER_ANSWER_FILE_PUSH("试卷、标答文件推送"),
-
-    OBJECTIVE_ANSWER_PUSH("客观题答案推送"),
-
-    SCORE_PUSH("成绩推送"),
+    INIT_MARK_DATA("阅卷数据初始化"),
 
     GRADE_BATCH_PUSH("分析批次推送"),
 

+ 21 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/CardParseUtils.java

@@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.teachcloud.common.enums.QuestionType;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.*;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -97,6 +99,25 @@ public class CardParseUtils {
         return structList;
     }
 
+    /**
+     * 获取题卡页数
+     *
+     * @param content 题卡内容
+     * @param isPaper 是否返回张数(页数/2)
+     */
+    public static int calcPaperCount(String content, Boolean isPaper) {
+        if (StringUtils.isNotBlank(content)) {
+            JSONObject jsonObject = JSON.parseObject(content, JSONObject.class);
+            List<Pages> pages = JSON.parseArray(jsonObject.getString("pages"), Pages.class);
+            if (CollectionUtils.isNotEmpty(pages)) {
+                int pageSize = pages.size();
+                return isPaper ? pageSize / 2 : pageSize;
+            }
+        }
+        return 0;
+
+    }
+
     private static QuestionType getQuestionType(Elements topic) {
         String type = topic.getType();
         if ("COMPOSITION".equals(type) || "EXPLAIN".equals(type)) {

+ 22 - 17
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -2,13 +2,14 @@ package com.qmth.teachcloud.task.job.service.impl;
 
 import com.qmth.boot.redis.uid.RedisMachineService;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
+import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
-import com.qmth.distributed.print.business.service.BasicMessageService;
-import com.qmth.distributed.print.business.service.ExamDetailService;
-import com.qmth.distributed.print.business.service.PrintCommonService;
-import com.qmth.distributed.print.business.service.SmsSendService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.PushTypeEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.util.DateDisposeUtils;
 import com.qmth.teachcloud.common.util.RedisUtil;
@@ -27,7 +28,6 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -46,33 +46,28 @@ public class JobServiceImpl implements JobService {
 
     @Resource
     PrintCommonService printCommonService;
-
     @Resource
     SmsSendService smsSendService;
-
     @Resource
     BasicMessageService basicMessageService;
-
     @Resource
     MarkPaperService markPaperService;
-
     @Resource
     MarkGroupService markGroupService;
     @Resource
     MarkUserGroupService markUserGroupService;
     @Resource
     MarkService markService;
-
     @Resource
     ExamDetailService examDetailService;
     @Resource
     PrintFinishService printFinishService;
-
     @Resource
     RedisUtil redisUtil;
-
     @Resource
     RedisMachineService redisMachineService;
+    @Resource
+    TBSyncTaskService tbSyncTaskService;
 
     /**
      * 重新生成pdf失败任务
@@ -149,16 +144,26 @@ public class JobServiceImpl implements JobService {
 
     @Override
     public void initMarkData() {
-        log.info("开始同步数据:" + DateDisposeUtils.dateTime(new Date()));
+        log.info("开始同步数据:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
         // 结束阅卷的课程,不同步,3.3.0版本更新前的历史数据,统一不同步
         long startTime = DateDisposeUtils.parseDate("2023-10-01 00:00:00").getTime();
         List<ExamDetailCourseInitMarkDto> examDetailCourseInitMarkDtoList = examDetailService.listPrintFinishExamDetailCourse(ExamDetailStatusEnum.FINISH.name(), startTime, MarkPaperStatus.FINISH.name());
         for (ExamDetailCourseInitMarkDto dto : examDetailCourseInitMarkDtoList) {
-            printFinishService.insertMarkPaper(dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPackageCode(), dto.getCreateId(), dto.getPaperType());
-            printFinishService.insertMarkStudent(dto);
-            printFinishService.insertScanAnswerCardAndMarkQuestion(dto);
+            TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(dto.getSchoolId(), dto.getExamId(), dto.getPaperNumber(), dto.getPaperType(), PushTypeEnum.INIT_MARK_DATA, "");
+            try {
+                printFinishService.insertMarkPaper(dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getCoursePaperId(), dto.getPackageCode(), dto.getCreateId(), dto.getPaperType());
+                printFinishService.insertMarkStudent(dto);
+                printFinishService.insertScanAnswerCardAndMarkQuestion(dto);
+                tbSyncTask.setResult(TaskResultEnum.SUCCESS);
+            } catch (Exception e) {
+                tbSyncTask.setResult(TaskResultEnum.ERROR);
+                log.info("结束同步失败:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
+            } finally {
+                tbSyncTask.setStatus(TaskStatusEnum.FINISH);
+                tbSyncTaskService.updateById(tbSyncTask);
+                log.info("结束同步数据:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
+            }
         }
-        log.info("结束同步数据:" + DateDisposeUtils.dateTime(new Date()));
     }
 
     /**

+ 1 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/PrintFinishService.java

@@ -14,7 +14,7 @@ public interface PrintFinishService {
 
     void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto);
 
-    void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo);
+    void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content);
 
     void insertMarkQuestion(Long examId, String paperNumber, String content);
 }

+ 6 - 3
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.task.service.impl;
 
+import ch.qos.logback.classic.turbo.TurboFilter;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamStudent;
@@ -135,17 +136,16 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), examCard.getContent());
 
                     // 保存卡格式
-                    this.insertScanAnswerCard(dto, paperInfoVo);
+                    this.insertScanAnswerCard(dto, paperInfoVo, examCard.getContent());
                 }
             }
         }
     }
 
     @Override
-    public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo) {
+    public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content) {
         ExamCard examCard = examCardService.getById(paperInfoVo.getCardId());
         if (examCard != null) {
-
             ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndCardId(dto.getExamId(), dto.getCoursePaperId(), paperInfoVo.getCardId());
             if (scanAnswerCard != null) {
                 return;
@@ -174,6 +174,9 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     scanAnswerCard.setUri(uploadPath);
                     scanAnswerCard.setMd5(md5);
                     scanAnswerCard.setNeedAdapte(true);
+                    // 题卡张数
+                    int paperCount = CardParseUtils.calcPaperCount(content, true);
+                    scanAnswerCard.setPaperCount(paperCount);
                     scanAnswerCardService.save(scanAnswerCard);
                 } catch (IOException e) {
                     log.info("考试[{}],试卷编号[{}],题卡ID[{}]同步阅卷失败", dto.getExamId(), dto.getPaperNumber(), paperInfoVo.getCardId());