Browse Source

3.3.0 阅卷数据初始化

xiaofei 1 năm trước cách đây
mục cha
commit
eff2f1edf7
30 tập tin đã thay đổi với 575 bổ sung120 xóa
  1. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamDetailCourseDto.java
  2. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java
  3. 57 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java
  4. 41 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/vo/OriginalVo.java
  5. 105 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/vo/PaperInfoVo.java
  6. 26 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java
  7. 3 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  8. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java
  9. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  10. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java
  11. 0 17
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintFinishService.java
  12. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  13. 2 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java
  14. 0 66
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintFinishServiceImpl.java
  15. 28 0
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  16. 14 0
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  17. 4 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java
  18. 12 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanAnswerCard.java
  19. 3 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardService.java
  20. 3 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/FileServiceImpl.java
  21. 19 10
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java
  22. 3 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/FileStoreUtils.java
  23. 1 0
      teachcloud-mark/src/main/resources/mapper/ScanAnswerCardMapper.xml
  24. 3 5
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/enums/JobEnum.java
  25. 29 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/InitMarkDataJob.java
  26. 5 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java
  27. 26 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  28. 17 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/PrintFinishService.java
  29. 144 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java
  30. 18 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

+ 0 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamDetailCourseDto.java

@@ -1,9 +1,7 @@
 package com.qmth.distributed.print.business.bean.dto;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.enums.ExamTaskSyncStatusEnum;
-import io.swagger.annotations.ApiModelProperty;
 
 /**
  * 考场科目dto

+ 0 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/SyncExamTaskDto.java

@@ -8,8 +8,6 @@ import com.qmth.distributed.print.business.enums.ExamTaskSyncStatusEnum;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 
 import java.util.Date;
-import java.util.List;
-import java.util.Map;
 
 /**
  * @Date: 2021/3/29.

+ 57 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java

@@ -0,0 +1,57 @@
+package com.qmth.distributed.print.business.bean.dto.initMarkData;
+
+import com.qmth.distributed.print.business.entity.ExamDetailCourse;
+import com.qmth.distributed.print.business.enums.ExamTaskSyncStatusEnum;
+
+/**
+ * 课程同步阅卷数据dto
+ */
+public class ExamDetailCourseInitMarkDto extends ExamDetailCourse {
+
+    private Long examDetailId;
+    private Long examId;
+    private String packageCode;
+    private String examPlace;
+    private String examRoom;
+    @Override
+    public Long getExamDetailId() {
+        return examDetailId;
+    }
+
+    @Override
+    public void setExamDetailId(Long examDetailId) {
+        this.examDetailId = examDetailId;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+
+    public String getExamPlace() {
+        return examPlace;
+    }
+
+    public void setExamPlace(String examPlace) {
+        this.examPlace = examPlace;
+    }
+
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+}

+ 41 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/vo/OriginalVo.java

@@ -0,0 +1,41 @@
+package com.qmth.distributed.print.business.bean.vo;
+
+public class OriginalVo {
+
+    private String id;
+    private Long updateTime;
+    private int pages;
+    private String pageSize;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Long getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Long updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    public String getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(String pageSize) {
+        this.pageSize = pageSize;
+    }
+}

+ 105 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/vo/PaperInfoVo.java

@@ -0,0 +1,105 @@
+package com.qmth.distributed.print.business.bean.vo;
+
+public class PaperInfoVo {
+
+    private String name;
+    private String attachmentId;
+    private Long cardId;
+    private String cardType;
+    private String createMethod;
+    private String cardTitle;
+    private String filename;
+    private int pages;
+    private boolean used;
+    private String createId;
+
+    private OriginalVo original;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAttachmentId() {
+        return attachmentId;
+    }
+
+    public void setAttachmentId(String attachmentId) {
+        this.attachmentId = attachmentId;
+    }
+
+    public Long getCardId() {
+        return cardId;
+    }
+
+    public void setCardId(Long cardId) {
+        this.cardId = cardId;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getCreateMethod() {
+        return createMethod;
+    }
+
+    public void setCreateMethod(String createMethod) {
+        this.createMethod = createMethod;
+    }
+
+    public String getCardTitle() {
+        return cardTitle;
+    }
+
+    public void setCardTitle(String cardTitle) {
+        this.cardTitle = cardTitle;
+    }
+
+    public String getFilename() {
+        return filename;
+    }
+
+    public void setFilename(String filename) {
+        this.filename = filename;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    public boolean isUsed() {
+        return used;
+    }
+
+    public void setUsed(boolean used) {
+        this.used = used;
+    }
+
+    public String getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(String createId) {
+        this.createId = createId;
+    }
+
+    public OriginalVo getOriginal() {
+        return original;
+    }
+
+    public void setOriginal(OriginalVo original) {
+        this.original = original;
+    }
+}

+ 26 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java

@@ -1,15 +1,21 @@
 package com.qmth.distributed.print.business.entity;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
 
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -193,4 +199,24 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
     public void setOperateType(String operateType) {
         this.operateType = operateType;
     }
+
+    /**
+     * 解析试卷数据,指定了paperTypes,则返回对应卷型对象,为空,返回所有卷型对象
+     *
+     * @param path       试卷json
+     * @param paperTypes 指定卷型(可为空)
+     */
+    public static List<PaperInfoVo> parsePaperAttachmentPath(String path, String paperTypes) {
+        List<PaperInfoVo> paperInfoVos = new ArrayList<>();
+        if (StringUtils.isNotBlank(path)) {
+            paperInfoVos = JSON.parseArray(path, PaperInfoVo.class);
+            if (StringUtils.isBlank(paperTypes)) {
+                return paperInfoVos;
+            } else {
+                List<String> paperTypeList = Arrays.asList(paperTypes.split(","));
+                paperInfoVos = paperInfoVos.stream().filter(m -> paperTypeList.contains(m.getName())).collect(Collectors.toList());
+            }
+        }
+        return paperInfoVos;
+    }
 }

+ 3 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java

@@ -4,18 +4,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.result.ExaminationDetailResult;
 import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.bean.result.SummarizedDataResult;
 import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
-import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * <p>
@@ -122,4 +121,6 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
     SummarizedDataResult findSummarizedData(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("printPlanIdList") List<Long> printPlanIdList, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("examPlace") String examPlace, @Param("examRoom") String examRoom, @Param("packageCode") String packageCode, @Param("startDate") Long startDate, @Param("endDate") Long endDate, @Param("dpr") DataPermissionRule dpr);
 
     List<ExamDetailCourseDto> listByExamIdAndCourseCode(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseCode") String courseCode);
+
+    List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(@Param("printStatus") String printStatus, @Param("startTime") long startTime, @Param("markStatus") String markStatus);
 }

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java

@@ -62,4 +62,6 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
     List<String> listUserClass(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 
     ExamStudent listByExamDetailCourseIdLimit1(@Param("schoolId") Long schoolId, @Param("examDetailCourseId") Long examDetailCourseId);
+
+    List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(@Param("examDetailCourseId") Long examDetailCourseId);
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.examRule.FieldsDto;
 import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.bean.result.ExaminationDetailResult;
@@ -245,4 +246,6 @@ public interface ExamDetailService extends IService<ExamDetail> {
     void deleteExaminationDataByExamDetailIds(List<Long> examDetailIdList);
 
     void resetExamDetail(Long entityId, boolean clearPaperType);
+
+    List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(String printStatus, long startTime, String markStatus);
 }

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

@@ -55,5 +55,5 @@ public interface ExamStudentService extends IService<ExamStudent> {
 
     ExamStudent listByExamDetailCourseIdLimit1(Long schoolId, Long examDetailCourseId);
 
-    List<ExamStudent> listByExamDetailCourseId(Long examDetailCourseId);
+    List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId);
 }

+ 0 - 17
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintFinishService.java

@@ -1,17 +0,0 @@
-package com.qmth.distributed.print.business.service;
-
-import com.qmth.distributed.print.business.entity.ExamDetail;
-
-/**
- * 打印结束后操作服务类
- */
-public interface PrintFinishService {
-
-    /*public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber);
-
-    public void insertMarkStudent(ExamDetail examDetail);
-
-    public void insertScanAnswerCard();
-
-    public void insertMarkQuestion();*/
-}

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.examRule.CodeNameEnableValue;
 import com.qmth.distributed.print.business.bean.examRule.FieldsDto;
 import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
@@ -1202,6 +1203,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
     }
 
+    @Override
+    public List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(String printStatus, long startTime, String markStatus) {
+        return this.baseMapper.listPrintFinishExamDetailCourse(printStatus, startTime, markStatus);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void deleteExaminationData(Long printPlanId, ExamDataSourceEnum source) {

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

@@ -142,9 +142,7 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     }
 
     @Override
-    public List<ExamStudent> listByExamDetailCourseId(Long examDetailCourseId) {
-        QueryWrapper<ExamStudent> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourseId);
-        return this.list(queryWrapper);
+    public List<ExamStudent> listByExamDetailCourseIdNotIntMarkStudent(Long examDetailCourseId) {
+        return this.baseMapper.listByExamDetailCourseIdNotIntMarkStudent(examDetailCourseId);
     }
 }

+ 0 - 66
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintFinishServiceImpl.java

@@ -1,66 +0,0 @@
-package com.qmth.distributed.print.business.service.impl;
-
-import com.qmth.distributed.print.business.service.PrintFinishService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class PrintFinishServiceImpl implements PrintFinishService {
-
-    /*@Resource
-    private MarkPaperService markPaperService;
-    @Resource
-    private MarkQuestionService markQuestionService;
-    @Resource
-    private MarkStudentService markStudentService;
-    @Resource
-    private ExamDetailCourseService examDetailCourseService;
-    @Resource
-    private ExamStudentService examStudentService;
-
-    *//**
-     * 打印结束后,生成阅卷科目数据
-     *
-     * @param examId
-     * @param courseCode
-     * @param courseName
-     * @param paperNumber
-     *//*
-    @Override
-    public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber) {
-        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
-        if (markPaper != null) {
-            return;
-        }
-        MarkPaper insertMarkPaper = new MarkPaper(examId, courseCode, courseName, paperNumber);
-        markPaperService.save(insertMarkPaper);
-    }
-
-    @Override
-    public void insertMarkStudent(ExamDetail examDetail) {
-        List<MarkStudent> markStudentList = new ArrayList<>();
-        List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamDetailId(examDetail.getId());
-        for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
-            List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseId(examDetailCourse.getId());
-            for (ExamStudent examStudent : examStudentList) {
-                MarkStudent markStudent = markStudentService.getById(examStudent.getId());
-                if (markStudent != null) {
-                    continue;
-                }
-                markStudentList.add(new MarkStudent(examStudent.getId(), examDetail.getExamId(), examDetailCourse.getCourseCode(), examDetailCourse.getCourseName(), examDetailCourse.getPaperNumber(), examStudent.getStudentCode(), examStudent.getStudentName(), examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(), examStudent.getStudentName()));
-            }
-        }
-        if (CollectionUtils.isNotEmpty(markStudentList)) {
-            markStudentService.saveBatch(markStudentList);
-        }
-    }
-
-    @Override
-    public void insertScanAnswerCard() {
-
-    }
-
-    @Override
-    public void insertMarkQuestion() {
-
-    }*/
-}

+ 28 - 0
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -685,4 +685,32 @@
             edc.school_id = #{schoolId} AND ed.exam_id = #{examId}
           AND edc.course_code = #{courseCode} AND ed.status != 'CANCEL'
     </select>
+    <select id="listPrintFinishExamDetailCourse"
+            resultType="com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto">
+        SELECT
+            ed.id examDetailId,
+            ed.exam_id examId,
+            edc.id,
+            ed.package_code packageCode,
+            ed.exam_place examPlace,
+            ed.exam_room examRoom,
+            edc.course_code courseCode,
+            edc.course_name courseName,
+            edc.paper_number paperNumber
+        FROM
+            exam_detail ed
+                LEFT JOIN
+            exam_detail_course edc ON ed.id = edc.exam_detail_id
+        WHERE
+            ed.status = #{printStatus}
+          AND ed.print_end_time > #{startTime}
+          AND NOT EXISTS( SELECT
+                              1
+                          FROM
+                              mark_paper mp
+                          WHERE
+                              ed.exam_id = mp.exam_id
+                            AND edc.paper_number = mp.paper_number
+                            AND mp.status = #{markStatus})
+    </select>
 </mapper>

+ 14 - 0
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -322,4 +322,18 @@
         </where>
         limit 1
     </select>
+    <select id="listByExamDetailCourseIdNotIntMarkStudent" resultMap="BaseResultMap">
+        SELECT
+            *
+        FROM
+            exam_student es
+        WHERE
+            es.exam_detail_course_id = #{examDetailCourseId}
+          AND NOT EXISTS( SELECT
+                              1
+                          FROM
+                              mark_student ms
+                          WHERE
+                              es.id = ms.id)
+    </select>
 </mapper>

+ 4 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkProblemController.java

@@ -38,9 +38,9 @@ public class MarkProblemController {
     private MarkProblemHistoryService markProblemHistoryService;
 
     /**
-     * 问题卷列表查询
+     * 问题卷列表
      */
-    @ApiOperation(value = "评卷质量列表")
+    @ApiOperation(value = "问题卷列表")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                        @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
@@ -55,9 +55,9 @@ public class MarkProblemController {
     }
 
     /**
-     * 问题试卷列表查询
+     * 重置
      */
-    @ApiOperation(value = "评卷质量列表")
+    @ApiOperation(value = "重置")
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
     public Result reset(@ApiParam(value = "问题卷任务ID集合", required = true) @RequestParam List<Long> taskIds) {
         markProblemHistoryService.resetProblem(taskIds);

+ 12 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/ScanAnswerCard.java

@@ -36,6 +36,9 @@ public class ScanAnswerCard implements Serializable {
     @ApiModelProperty(value = "试卷编号(交互)")
     private String coursePaperId;
 
+    @ApiModelProperty(value = "题卡ID")
+    private Long cardId;
+
     @ApiModelProperty(value = "序号")
     private Integer number;
     @ApiModelProperty("卡格式文件存储路径")
@@ -97,6 +100,15 @@ public class ScanAnswerCard implements Serializable {
     public void setCoursePaperId(String coursePaperId) {
         this.coursePaperId = coursePaperId;
     }
+
+    public Long getCardId() {
+        return cardId;
+    }
+
+    public void setCardId(Long cardId) {
+        this.cardId = cardId;
+    }
+
     public Integer getNumber() {
         return number;
     }

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/ScanAnswerCardService.java

@@ -27,6 +27,8 @@ public interface ScanAnswerCardService extends IService<ScanAnswerCard> {
 
 	void cardSave(AnswerCardSaveDomain domain);
 
+	Integer findMaxCardNumberByExamId(Long examId);
+
 	void cardDelete(Long examId, Integer number);
 
 	UriVo adapteUpload(Long examId, String coursePaperId, Integer cardNumber, String md5, Integer dpi,
@@ -34,4 +36,5 @@ public interface ScanAnswerCardService extends IService<ScanAnswerCard> {
 
 	AnswerCardVo cardGet(Long examId, Integer number);
 
+    ScanAnswerCard getByExamIdAndCoursePaperIdAndCardId(Long examId, String coursePaperId, Long cardId);
 }

+ 3 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/FileServiceImpl.java

@@ -26,7 +26,7 @@ public class FileServiceImpl implements FileService {
     public String uploadAnswerCard(InputStream in, String md5, Long examId, String coursePaperId, Integer number) {
         String path = getAnswerCardUri(examId, coursePaperId, number);
         try {
-            path = fileStoreUtils.uploadFileByPattern(in, md5, UploadFileEnum.CARD, path);
+            path = fileStoreUtils.uploadFile(in, md5, UploadFileEnum.CARD, path);
             return fileStoreUtils.filePreview(path);
         } catch (RuntimeException e) {
             throw e;
@@ -46,7 +46,7 @@ public class FileServiceImpl implements FileService {
     public String uploadAdapteFile(InputStream in, String md5, Long examId, String coursePaperId, Integer number) {
         String path = getAdapteFileUri(examId, coursePaperId, number);
         try {
-            path = fileStoreUtils.uploadFileByPattern(in, md5, UploadFileEnum.ADAPT, path);
+            path = fileStoreUtils.uploadFile(in, md5, UploadFileEnum.ADAPT, path);
             return fileStoreUtils.filePreview(path);
         } catch (RuntimeException e) {
             throw e;
@@ -72,7 +72,7 @@ public class FileServiceImpl implements FileService {
                               String studentCode, Integer paperNumber, Integer pageIndex) {
         String path = getSheetUri(examId, coursePaperId, studentCode, paperNumber, pageIndex);
         try {
-            path = fileStoreUtils.uploadFileByPattern(in, md5, UploadFileEnum.SHEET, path);
+            path = fileStoreUtils.uploadFile(in, md5, UploadFileEnum.SHEET, path);
             return fileStoreUtils.filePreview(path);
         } catch (RuntimeException e) {
             throw e;

+ 19 - 10
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanAnswerCardServiceImpl.java

@@ -1,14 +1,5 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -28,6 +19,14 @@ import com.qmth.teachcloud.mark.service.FileService;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
 import com.qmth.teachcloud.mark.service.ScanAnswerCardService;
 import com.qmth.teachcloud.mark.service.ScanPaperService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
 
 /**
  * <p>
@@ -136,7 +135,8 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         return objectMapper.readValue(data, CardFile.class);
     }
 
-    private Integer findMaxCardNumberByExamId(Long examId) {
+    @Override
+    public Integer findMaxCardNumberByExamId(Long examId) {
         int number = 0;
         QueryWrapper<ScanAnswerCard> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ScanAnswerCard::getExamId, examId);
@@ -206,4 +206,13 @@ public class ScanAnswerCardServiceImpl extends ServiceImpl<ScanAnswerCardMapper,
         return list.get(0);
     }
 
+    @Override
+    public ScanAnswerCard getByExamIdAndCoursePaperIdAndCardId(Long examId, String coursePaperId, Long cardId) {
+        QueryWrapper<ScanAnswerCard> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ScanAnswerCard::getExamId, examId)
+                .eq(ScanAnswerCard::getCoursePaperId, coursePaperId)
+                .eq(ScanAnswerCard::getCardId, cardId);
+        return this.getOne(queryWrapper);
+    }
+
 }

+ 3 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/FileStoreUtils.java

@@ -276,7 +276,7 @@ public class FileStoreUtils {
         return file;
     }
 
-    public String uploadFileByPattern(InputStream inputStream, String md5, UploadFileEnum uploadFileEnum, String path) {
+    public String uploadFile(InputStream inputStream, String md5, UploadFileEnum uploadFileEnum, String path) {
         try {
             String fileMd5 = DigestUtils.md5Hex(inputStream);
             if (!Objects.equals(fileMd5, md5)) {
@@ -284,7 +284,7 @@ public class FileStoreUtils {
             }
             FssDomain fssDomain = getFssDomain(uploadFileEnum.getFssType());
             boolean oss = dictionaryConfig.sysDomain().isOss();
-            String fileName = getFssPathByPattern(oss, uploadFileEnum, path);
+            String fileName = getFssPath(oss, uploadFileEnum, path);
             String type;
             //上传至oss
             if (oss || fssDomain.getConfig().startsWith(SystemConstant.START_PARENT)) {
@@ -356,7 +356,7 @@ public class FileStoreUtils {
      * @param uploadFileEnum 文件上传类型
      * @param path           文件路径
      */
-    private String getFssPathByPattern(boolean oss, UploadFileEnum uploadFileEnum, String path) {
+    private String getFssPath(boolean oss, UploadFileEnum uploadFileEnum, String path) {
         FssDomain fssDomain = getFssDomain(uploadFileEnum.getFssType());
         StringJoiner stringJoiner = new StringJoiner("");
         if (!oss && StringUtils.isNotBlank(fssDomain.getConfig()) && !fssDomain.getConfig().startsWith(SystemConstant.START_PARENT)) {

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/ScanAnswerCardMapper.xml

@@ -7,6 +7,7 @@
         <id column="exam_id" property="examId" />
         <result column="paper_number" property="paperNumber" />
         <result column="course_paper_id" property="coursePaperId" />
+        <result column="card_id" property="cardId" />
         <result column="number" property="number" />
         <result column="source" property="source" />
         <result column="uri" property="uri" />

+ 3 - 5
teachcloud-task/src/main/java/com/qmth/teachcloud/task/enums/JobEnum.java

@@ -31,17 +31,15 @@ public enum JobEnum {
 
     SYNC_REUNIFY_JOB_GROUP("自动统分定时任务job组"),
 
-    SYNC_STUDENT_JOB("自动同步考生定时任务"),
-
-    SYNC_STUDENT_JOB_GROUP("自动同步考生定时任务job组"),
-
     REDIS_MQ_JOB("学校信息同步定时任务"),
 
     REDIS_MQ_JOB_GROUP("学校信息同步定时任务组"),
     UPDATE_MARKER_QUALITY("更新评卷员质量监控指标"),
     UPDATE_MARKER_QUALITY_GROUP("更新评卷员质量监控指标任务组"),
     BUILD_MARK_TASK("创建评卷任务"),
-    BUILD_MARK_TASK_GROUP("创建评卷任务任务组");
+    BUILD_MARK_TASK_GROUP("创建评卷任务任务组"),
+    INIT_MARK_DATA("初始化阅卷数据"),
+    INIT_MARK_DATA_GROUP("初始化阅卷数据任务组");
 
     private String title;
 

+ 29 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/InitMarkDataJob.java

@@ -0,0 +1,29 @@
+package com.qmth.teachcloud.task.job;
+
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.task.job.service.JobService;
+import org.quartz.JobExecutionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import javax.annotation.Resource;
+
+/**
+ * 初始化阅卷数据(课程、考生、卡格式、解析题卡结构)
+ */
+public class InitMarkDataJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(InitMarkDataJob.class);
+
+    @Resource
+    JobService jobService;
+
+    @Override
+    protected void executeInternal(JobExecutionContext jobExecutionContext) {
+        try {
+            jobService.initMarkData();
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
+}

+ 5 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java

@@ -56,4 +56,9 @@ public interface JobService {
      * 创建评卷任务
      */
     void updateBuildMarkTask();
+
+    /**
+     * 初始化阅卷数据
+     */
+    void initMarkData();
 }

+ 26 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -1,9 +1,14 @@
 package com.qmth.teachcloud.task.job.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.qmth.boot.redis.uid.RedisMachineService;
+import com.qmth.distributed.print.business.bean.dto.ExamDetailCourseDto;
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 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.util.DateDisposeUtils;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.mark.enums.LockType;
@@ -15,6 +20,8 @@ import com.qmth.teachcloud.mark.service.MarkGroupService;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.MarkUserGroupService;
 import com.qmth.teachcloud.task.job.service.JobService;
+import com.qmth.teachcloud.task.service.PrintFinishService;
+import org.apache.commons.lang3.time.DateUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -59,6 +66,11 @@ public class JobServiceImpl implements JobService {
     @Resource
     MarkService markService;
 
+    @Resource
+    ExamDetailService examDetailService;
+    @Resource
+    PrintFinishService printFinishService;
+
     @Resource
     RedisUtil redisUtil;
 
@@ -99,6 +111,7 @@ public class JobServiceImpl implements JobService {
     public void machineHeart() {
         redisUtil.set(SystemConstant.TASK_MACHINE_ID + redisMachineService.getMachineId(), redisMachineService.getMachineId(), 30, TimeUnit.SECONDS);
     }
+
     @Override
     public void updateMarkerQuality() {
         log.info("start auto-update marker");
@@ -141,6 +154,19 @@ public class JobServiceImpl implements JobService {
             log.info("finish auto-create library");
         }
     }
+
+    @Override
+    public void initMarkData() {
+        // 结束阅卷的课程,不同步,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());
+            printFinishService.insertMarkStudent(dto);
+            printFinishService.insertScanAnswerCard(dto);
+        }
+    }
+
     /**
      * 组装job
      *

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

@@ -0,0 +1,17 @@
+package com.qmth.teachcloud.task.service;
+
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
+
+/**
+ * 打印结束后操作服务类
+ */
+public interface PrintFinishService {
+
+    public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber);
+
+    public void insertMarkStudent(ExamDetailCourseInitMarkDto examDetail);
+
+    public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto);
+
+    public void insertMarkQuestion();
+}

+ 144 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -0,0 +1,144 @@
+package com.qmth.teachcloud.task.service.impl;
+
+import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
+import com.qmth.distributed.print.business.bean.vo.PaperInfoVo;
+import com.qmth.distributed.print.business.entity.ExamCard;
+import com.qmth.distributed.print.business.entity.ExamStudent;
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+import com.qmth.distributed.print.business.service.ExamCardService;
+import com.qmth.distributed.print.business.service.ExamDetailCourseService;
+import com.qmth.distributed.print.business.service.ExamStudentService;
+import com.qmth.distributed.print.business.service.ExamTaskDetailService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
+import com.qmth.teachcloud.mark.enums.CardSource;
+import com.qmth.teachcloud.mark.service.*;
+import com.qmth.teachcloud.mark.utils.FileStoreUtils;
+import com.qmth.teachcloud.task.service.PrintFinishService;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class PrintFinishServiceImpl implements PrintFinishService {
+
+    private static final Logger log = LoggerFactory.getLogger(PrintFinishServiceImpl.class);
+
+    @Resource
+    private MarkPaperService markPaperService;
+    @Resource
+    private MarkQuestionService markQuestionService;
+    @Resource
+    private MarkStudentService markStudentService;
+    @Resource
+    private ScanAnswerCardService scanAnswerCardService;
+    @Resource
+    private ExamDetailCourseService examDetailCourseService;
+    @Resource
+    private ExamStudentService examStudentService;
+    @Resource
+    private ExamTaskDetailService examTaskDetailService;
+    @Resource
+    private ExamCardService examCardService;
+    @Resource
+    private FileStoreUtils fileStoreUtils;
+    @Resource
+    private FileService fileService;
+
+    /**
+     * 打印结束后,生成阅卷科目数据
+     *
+     * @param examId
+     * @param courseCode
+     * @param courseName
+     * @param paperNumber
+     */
+    @Override
+    public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        if (markPaper != null) {
+            return;
+        }
+        MarkPaper insertMarkPaper = new MarkPaper(examId, courseCode, courseName, paperNumber);
+        markPaperService.save(insertMarkPaper);
+    }
+
+    @Override
+    public void insertMarkStudent(ExamDetailCourseInitMarkDto dto) {
+        List<MarkStudent> markStudentList = new ArrayList<>();
+        List<ExamStudent> examStudentList = examStudentService.listByExamDetailCourseIdNotIntMarkStudent(dto.getId());
+        for (ExamStudent examStudent : examStudentList) {
+            MarkStudent markStudent = markStudentService.getById(examStudent.getId());
+            if (markStudent != null) {
+                continue;
+            }
+            markStudentList.add(new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), examStudent.getStudentCode(), examStudent.getStudentName(), dto.getPackageCode(), dto.getExamPlace(), dto.getExamRoom(), examStudent.getStudentName()));
+        }
+        if (CollectionUtils.isNotEmpty(markStudentList)) {
+            markStudentService.saveBatch(markStudentList);
+        }
+    }
+
+    @Override
+    public void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto) {
+        String paperType = dto.getPaperType();
+        if (StringUtils.isNotBlank(paperType)) {
+            ExamTaskDetail examTaskDetail = examTaskDetailService.findByExamIdAndCourseCodeAndPaperNumber(dto.getSchoolId(), dto.getExamId(), dto.getCourseCode(), dto.getPaperNumber());
+            List<PaperInfoVo> paperInfoVoList = ExamTaskDetail.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), paperType);
+            for (PaperInfoVo paperInfoVo : paperInfoVoList) {
+                ExamCard examCard = examCardService.getById(paperInfoVo.getCardId());
+                if (examCard != null) {
+                    ScanAnswerCard scanAnswerCard = scanAnswerCardService.getByExamIdAndCoursePaperIdAndCardId(dto.getExamId(), dto.getCoursePaperId(), paperInfoVo.getCardId());
+                    if (scanAnswerCard != null) {
+                        continue;
+                    }
+
+                    File tempFile = SystemConstant.getFileTempDirVar(System.currentTimeMillis() + File.separator + SystemConstant.getNanoId(), SystemConstant.TEMP_PREFIX);
+                    String rootPath = tempFile.getParent();
+                    String jsonPath = rootPath + File.separator + paperInfoVo.getCardId() + SystemConstant.JSON_PREFIX;
+                    File jsonFile = SystemConstant.createJsonFile(jsonPath, examCard.getContent());
+                    if (jsonFile.exists()) {
+                        try {
+                            FileInputStream inputStream = new FileInputStream(jsonFile);
+                            String md5 = DigestUtils.md5Hex(inputStream);
+                            Integer number = scanAnswerCardService.findMaxCardNumberByExamId(dto.getExamId());
+                            String path = fileService.getAnswerCardUri(dto.getExamId(), dto.getCoursePaperId(), number);
+                            String uploadPath = fileStoreUtils.uploadFile(inputStream, md5, UploadFileEnum.CARD, path);
+
+                            scanAnswerCard = new ScanAnswerCard();
+                            scanAnswerCard.setExamId(dto.getExamId());
+                            scanAnswerCard.setPaperNumber(dto.getPaperNumber());
+                            scanAnswerCard.setCoursePaperId(dto.getCoursePaperId());
+                            scanAnswerCard.setCardId(paperInfoVo.getCardId());
+                            scanAnswerCard.setNumber(number);
+                            scanAnswerCard.setSource(CardSource.WEB);
+                            scanAnswerCard.setUri(uploadPath);
+                            scanAnswerCard.setMd5(md5);
+                            scanAnswerCard.setNeedAdapte(true);
+                        } catch (IOException e) {
+                            log.info("考试[],试卷编号[],题卡ID[]同步阅卷失败", dto.getExamId(), dto.getPaperNumber(), paperInfoVo.getCardId());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void insertMarkQuestion() {
+
+    }
+}

+ 18 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

@@ -90,11 +90,28 @@ public class StartRunning implements CommandLineRunner {
 
         // 每1分钟一次
         log.info("增加更新评卷员质量监控指标定时任务 start");
+        Map qualityJobMap = new HashMap();
+        qualityJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
+        quartzService.deleteJob(JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY_GROUP.name());
+        quartzService.addJob(SubjectCalculateJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY_GROUP.name(), "0 */1 * * * ?", qualityJobMap);
+        log.info("增加更新评卷员质量监控指标定时任务 end");
+
+
+        // 每1分钟一次
+        log.info("增加评卷任务生成定时任务 start");
         Map buildMarkTaskJobMap = new HashMap();
         buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
         quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK_GROUP.name());
         quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK_GROUP.name(), "0 */1 * * * ?", buildMarkTaskJobMap);
-        log.info("增加更新评卷员质量监控指标定时任务 end");
+        log.info("增加评卷任务生成定时任务 end");
+
+        // 每1分钟一次
+        log.info("增加初始化阅卷数据定时任务 start");
+        Map initMarkDataJobMap = new HashMap();
+        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
+        quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name());
+        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name(), "0 */1 * * * ?", initMarkDataJobMap);
+        log.info("增加初始化阅卷数据定时任务 end");
 
         log.info("服务器启动时执行 end");
     }