Преглед на файлове

3.3.1 电子交卷选择题库试卷调试

xiaofei преди 1 година
родител
ревизия
3a0e2f8621
променени са 21 файла, в които са добавени 210 реда и са изтрити 210 реда
  1. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java
  2. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardService.java
  3. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBTaskPdfService.java
  4. 14 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  5. 27 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  6. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBTaskPdfServiceImpl.java
  7. 1 14
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/create/AsyncCreateTaskTemplete.java
  8. 2 81
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCreatePdfTempleteService.java
  9. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/PdfTaskLogicService.java
  10. 20 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PdfTaskLogicServiceImpl.java
  11. 4 0
      distributed-print/install/mysql/upgrade/3.3.1.sql
  12. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  13. 7 29
      distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskPdfController.java
  14. 12 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  15. 0 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/kit/TikuUtils.java
  16. 18 32
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/enums/JobEnum.java
  17. 29 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/CreatePdfTaskJob.java
  18. 1 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/SubjectCalculateJob.java
  19. 2 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java
  20. 17 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  21. 27 27
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCard.java

@@ -105,6 +105,9 @@ public class ExamCard extends BaseEntity implements Serializable {
     @TableField(value = "blank_card_path", updateStrategy = FieldStrategy.IGNORED)
     @TableField(value = "blank_card_path", updateStrategy = FieldStrategy.IGNORED)
     private String blankCardPath;
     private String blankCardPath;
 
 
+    @TableField(value = "paper_id")
+    private Long paperId;
+
     @TableField(exist = false)
     @TableField(exist = false)
     private List<SysOrg> orgs;
     private List<SysOrg> orgs;
     @TableField(exist = false)
     @TableField(exist = false)
@@ -282,6 +285,14 @@ public class ExamCard extends BaseEntity implements Serializable {
         this.blankCardPath = blankCardPath;
         this.blankCardPath = blankCardPath;
     }
     }
 
 
+    public Long getPaperId() {
+        return paperId;
+    }
+
+    public void setPaperId(Long paperId) {
+        this.paperId = paperId;
+    }
+
     public List<String> getImageUrls() {
     public List<String> getImageUrls() {
         return imageUrls;
         return imageUrls;
     }
     }

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

@@ -9,6 +9,7 @@ import com.qmth.distributed.print.business.entity.ExamCard;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -20,7 +21,7 @@ import java.util.List;
  */
  */
 public interface ExamCardService extends IService<ExamCard> {
 public interface ExamCardService extends IService<ExamCard> {
 
 
-    String saveExamCard(ExamCardParams examCardParams) throws Exception;
+    Map<String, String> saveExamCard(ExamCardParams examCardParams) throws Exception;
 
 
     List<ExamCard> listSelectCard(String courseCode, Long cardRuleId, String paperNumber);
     List<ExamCard> listSelectCard(String courseCode, Long cardRuleId, String paperNumber);
 
 

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBTaskPdfService.java

@@ -34,4 +34,6 @@ public interface TBTaskPdfService extends IService<TBTaskPdf> {
     int countRunningByExamDetailIds(List<Long> examDetailIds);
     int countRunningByExamDetailIds(List<Long> examDetailIds);
 
 
     IPage<TaskPdfResult> pageData(Page<TaskPdfResult> page, Long examId, String printPlanId, String courseCode, String paperNumber, TaskStatusEnum status, TaskResultEnum result, String examPlace, String examRoom, Long examStartTime, Long examEndTime);
     IPage<TaskPdfResult> pageData(Page<TaskPdfResult> page, Long examId, String printPlanId, String courseCode, String paperNumber, TaskStatusEnum status, TaskResultEnum result, String examPlace, String examRoom, Long examStartTime, Long examEndTime);
+
+    List<TBTaskPdf> listWaitingTask();
 }
 }

+ 14 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -94,7 +94,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
 
 
     @Transactional
     @Transactional
     @Override
     @Override
-    public String saveExamCard(ExamCardParams examCardParams) {
+    public Map<String, String> saveExamCard(ExamCardParams examCardParams) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser user = (SysUser) ServletUtil.getRequestUser();
         SysUser user = (SysUser) ServletUtil.getRequestUser();
 
 
@@ -106,10 +106,12 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         if (examCardParams.getId() == null) {
         if (examCardParams.getId() == null) {
             validateCardData(examCardParams);
             validateCardData(examCardParams);
 
 
+            String title = examCardParams.getTitle()+SystemConstant.generateRandomNumber(4);
+
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId)
             queryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId)
                     .eq(ExamCard::getCourseCode, examCardParams.getCourseCode())
                     .eq(ExamCard::getCourseCode, examCardParams.getCourseCode())
-                    .eq(ExamCard::getTitle, examCardParams.getTitle());
+                    .eq(ExamCard::getTitle, title);
             List<ExamCard> examCardList = this.list(queryWrapper);
             List<ExamCard> examCardList = this.list(queryWrapper);
             if (!examCardList.isEmpty()) {
             if (!examCardList.isEmpty()) {
                 throw ExceptionResultEnum.ERROR.exception("题卡名称已存在");
                 throw ExceptionResultEnum.ERROR.exception("题卡名称已存在");
@@ -124,20 +126,22 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
             }
             examCard.setCourseCode(examCardParams.getCourseCode());
             examCard.setCourseCode(examCardParams.getCourseCode());
             examCard.setCourseName(examCardParams.getCourseName());
             examCard.setCourseName(examCardParams.getCourseName());
-            examCard.setTitle(examCardParams.getTitle());
+            examCard.setTitle(title);
             examCard.setMakeMethod(examCardParams.getMakeMethod());
             examCard.setMakeMethod(examCardParams.getMakeMethod());
             examCard.setStatus(examCardParams.getStatus());
             examCard.setStatus(examCardParams.getStatus());
             examCard.setType(examCardParams.getType());
             examCard.setType(examCardParams.getType());
             examCard.setAttachmentId(examCardParams.getAttachmentId());
             examCard.setAttachmentId(examCardParams.getAttachmentId());
             examCard.setCardRuleId(examCardParams.getCardRuleId());
             examCard.setCardRuleId(examCardParams.getCardRuleId());
+            examCard.setPaperId(examCardParams.getPaperId());
             examCard.insertInfo(user.getId());
             examCard.insertInfo(user.getId());
         }
         }
         // 修改
         // 修改
         else {
         else {
+            String title = examCardParams.getTitle()+SystemConstant.generateRandomNumber(4);
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId)
             queryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId)
                     .eq(ExamCard::getCourseCode, examCardParams.getCourseCode())
                     .eq(ExamCard::getCourseCode, examCardParams.getCourseCode())
-                    .eq(ExamCard::getTitle, examCardParams.getTitle())
+                    .eq(ExamCard::getTitle, title)
                     .ne(ExamCard::getId, examCardParams.getId());
                     .ne(ExamCard::getId, examCardParams.getId());
             List<ExamCard> examCardList = this.list(queryWrapper);
             List<ExamCard> examCardList = this.list(queryWrapper);
             if (!examCardList.isEmpty()) {
             if (!examCardList.isEmpty()) {
@@ -145,7 +149,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
             }
 
 
             examCard = this.getById(examCardParams.getId());
             examCard = this.getById(examCardParams.getId());
-            examCard.setTitle(examCardParams.getTitle());
+            examCard.setTitle(title);
             examCard.setStatus(examCardParams.getStatus());
             examCard.setStatus(examCardParams.getStatus());
             examCard.setUpdateId(user.getId());
             examCard.setUpdateId(user.getId());
             examCard.setUpdateTime(System.currentTimeMillis());
             examCard.setUpdateTime(System.currentTimeMillis());
@@ -161,7 +165,11 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCard.setStageContent(examCardParams.getContent());
             examCard.setStageContent(examCardParams.getContent());
         }
         }
         this.saveOrUpdate(examCard);
         this.saveOrUpdate(examCard);
-        return String.valueOf(examCard.getId());
+
+        Map<String, String> map = new HashMap<>();
+        map.put("id", String.valueOf(examCard.getId()));
+        map.put("title", examCard.getTitle());
+        return map;
     }
     }
 
 
     @Override
     @Override

+ 27 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -1257,16 +1258,24 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTaskDetail.setCreateTime(System.currentTimeMillis());
             examTaskDetail.setCreateTime(System.currentTimeMillis());
             examTaskDetailService.save(examTaskDetail);
             examTaskDetailService.save(examTaskDetail);
 
 
-            // 将题卡更新为已绑定
             String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
             String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
             List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(paperAttachmentIds);
             List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(paperAttachmentIds);
-            List<String> cardIds = paperInfoVoList.stream().filter(m -> CardTypeEnum.CUSTOM.name().equals(m.getCardType())).map(m -> m.getCardId()).collect(Collectors.toList());
-            for (String cardId : cardIds) {
-                UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.lambda().set(ExamCard::getUsed, true).eq(ExamCard::getId, cardId);
-                examCardService.update(updateWrapper);
+            // 将题卡更新为已绑定
+            for (PaperInfoVo paperInfoVo : paperInfoVoList) {
+                if (CardTypeEnum.CUSTOM.name().equals(paperInfoVo.getCardType())) {
+                    UpdateWrapper<ExamCard> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(ExamCard::getUsed, true).eq(ExamCard::getId, paperInfoVo.getCardId());
+                    examCardService.update(updateWrapper);
+                }
+                // 删除临时题卡
+                if (paperInfoVo.getPaperId() != null) {
+                    QueryWrapper<ExamCard> deleteWrapper = new QueryWrapper<>();
+                    deleteWrapper.lambda().eq(ExamCard::getCreateId, sysUser.getId())
+                            .eq(ExamCard::getPaperId, paperInfoVo.getPaperId())
+                            .eq(ExamCard::getUsed, false);
+                    examCardService.remove(deleteWrapper);
+                }
             }
             }
-
             // 更新题库试卷表
             // 更新题库试卷表
             for (PaperInfoVo paperInfoVo : paperInfoVoList) {
             for (PaperInfoVo paperInfoVo : paperInfoVoList) {
                 if (StringUtils.isNotBlank(paperInfoVo.getUuid())) {
                 if (StringUtils.isNotBlank(paperInfoVo.getUuid())) {
@@ -1277,6 +1286,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                             .eq(ExamTaskPaperData::getPaperId, paperInfoVo.getPaperId())
                             .eq(ExamTaskPaperData::getPaperId, paperInfoVo.getPaperId())
                             .eq(ExamTaskPaperData::getUuid, paperInfoVo.getUuid());
                             .eq(ExamTaskPaperData::getUuid, paperInfoVo.getUuid());
                     examTaskPaperDataService.update(updateWrapper);
                     examTaskPaperDataService.update(updateWrapper);
+
+                    // 删除临时数据
+                    QueryWrapper<ExamTaskPaperData> deleteWrapper = new QueryWrapper<>();
+                    deleteWrapper.lambda().eq(ExamTaskPaperData::getExamId, examTask.getExamId())
+                            .eq(ExamTaskPaperData::getPaperNumber, paperInfoVo.getUuid())
+                            .ne(ExamTaskPaperData::getPaperId, paperInfoVo.getPaperId());
+                    examTaskPaperDataService.remove(deleteWrapper);
                 }
                 }
             }
             }
 
 
@@ -2156,12 +2172,11 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         try {
         try {
             File paperDataFile = tikuUtils.getTikuPaperData(schoolId, paperId);
             File paperDataFile = tikuUtils.getTikuPaperData(schoolId, paperId);
             ExamTaskPaperData examTaskPaperData = saveTikuPaperData(examId, paperId, uuid, paperDataFile);
             ExamTaskPaperData examTaskPaperData = saveTikuPaperData(examId, paperId, uuid, paperDataFile);
-            map.put("uuid", examTaskPaperData.getUuid());
-            map.put("answerJson", examTaskPaperData.getAnswerJson());
-            map.put("attachmentId", examTaskPaperData.getPaperPdfAttachmentId());
+            map.put("paperJson", examTaskPaperData.getPaperJson());
+            map.put("attachmentId", String.valueOf(examTaskPaperData.getPaperPdfAttachmentId()));
             return map;
             return map;
         } catch (Exception e) {
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         }
         }
     }
     }
 
 
@@ -2176,8 +2191,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             if (examTaskPaperData == null) {
             if (examTaskPaperData == null) {
                 examTaskPaperData = new ExamTaskPaperData();
                 examTaskPaperData = new ExamTaskPaperData();
                 examTaskPaperData.setExamId(examId);
                 examTaskPaperData.setExamId(examId);
-                // 系统自动生成唯一码,命题任务提交时,根据唯一码反向更新真实的试卷编号
-                uuid = SystemConstant.getNanoId();
+                // 唯一码,命题任务提交时,根据唯一码反向更新真实的试卷编号
                 examTaskPaperData.setPaperNumber(uuid);
                 examTaskPaperData.setPaperNumber(uuid);
                 examTaskPaperData.setUuid(uuid);
                 examTaskPaperData.setUuid(uuid);
                 examTaskPaperData.setPaperId(paperId);
                 examTaskPaperData.setPaperId(paperId);

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBTaskPdfServiceImpl.java

@@ -92,4 +92,13 @@ public class TBTaskPdfServiceImpl extends ServiceImpl<TBTaskPdfMapper, TBTaskPdf
         }
         }
         return this.baseMapper.pageData(page, examId, printPlanId, courseCode, paperNumber, status, result, examPlace, examRoom, examStartTime, examEndTime);
         return this.baseMapper.pageData(page, examId, printPlanId, courseCode, paperNumber, status, result, examPlace, examRoom, examStartTime, examEndTime);
     }
     }
+
+    @Override
+    public List<TBTaskPdf> listWaitingTask() {
+        QueryWrapper<TBTaskPdf> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(TBTaskPdf::getStatus, TaskStatusEnum.INIT)
+                .orderByAsc(TBTaskPdf::getSchoolId)
+                .orderByAsc(TBTaskPdf::getId);
+        return this.list(queryWrapper);
+    }
 }
 }

+ 1 - 14
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/create/AsyncCreateTaskTemplete.java

@@ -8,9 +8,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
 
 
-import java.io.IOException;
-import java.util.Map;
-
 /**
 /**
  * @Description: 异步创建pdf模版
  * @Description: 异步创建pdf模版
  * @Param:
  * @Param:
@@ -25,19 +22,9 @@ public abstract class AsyncCreateTaskTemplete extends AsyncImportTaskTemplete {
 
 
     /**
     /**
      * 创建pdf
      * 创建pdf
-     *
-     * @param map
-     * @param callbackCreatePdf
-     * @return
-     * @throws IOException
      */
      */
     @Async("taskThreadPool")
     @Async("taskThreadPool")
-    public Result createPdf(Map<String, Object> map, CallbackCreatePdf callbackCreatePdf) throws IOException {
-        return null;
-    }
-
-    @Async("taskThreadPool")
-    public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) throws IOException {
+    public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) {
         return null;
         return null;
     }
     }
 }
 }

+ 2 - 81
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCreatePdfTempleteService.java

@@ -39,65 +39,6 @@ public class AsyncCreatePdfTempleteService extends AsyncCreateTaskTemplete {
 
 
     static final String OBJ_TITLE = "pdf数据";
     static final String OBJ_TITLE = "pdf数据";
 
 
-    /**
-     * 创建pdf
-     *
-     * @param map
-     * @param callbackCreatePdf
-     * @return
-     * @throws IOException
-     */
-    @Override
-    public Result createPdf(Map<String, Object> map, CallbackCreatePdf callbackCreatePdf) throws IOException {
-        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
-        Boolean manual = (Boolean) map.get(SystemConstant.MANUAL);
-        StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
-        TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
-        TBTask dbTask = tbTaskService.getById(tbTask.getId());
-        if (Objects.isNull(manual) && (Objects.nonNull(dbTask) && dbTask.getStatus() == TaskStatusEnum.FINISH && Objects.nonNull(dbTask.getResult()))) {//无需重新生成pdf
-            return ResultUtil.ok();
-        }
-        tbTask.setStatus(TaskStatusEnum.RUNNING);
-        tbTaskService.updateById(tbTask);
-        try {
-            TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
-            taskLogicService.createPdfPrepose(map);
-            taskLogicService.executeCreatePdfLogic(map);
-            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, map.get("size"), FINISH_ERROR_SIZE));
-            tbTask.setResult(TaskResultEnum.SUCCESS);
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
-            tbTask.setResult(TaskResultEnum.ERROR);
-//            TBTask dbTask = tbTaskService.getById(tbTask.getId());
-//            if (tbTask.getVersion() == dbTask.getVersion()) {
-//                tbTask.setResetCount(new AtomicInteger(tbTask.getResetCount()).incrementAndGet());
-//            }
-            if (e instanceof ApiException) {
-                if (((ApiException) e).getCode() == ExceptionResultEnum.PAPER_ERROR.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.PAPER_TYPE_ERROR.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.ATTACHMENT_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_PRINT_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_RULE_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_DETAIL_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_CARD_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_TASK_IS_NULL.getCode()) {
-                    tbTask.setErrorMessage(e.getMessage());
-                }
-                ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
-        } finally {//生成txt文件
-            tbTask.setSummary(stringJoinerSummary.toString());
-            super.createTxt(tbTask);
-            if (Objects.nonNull(callbackCreatePdf)) {
-                callbackCreatePdf.callback(map);
-            }
-        }
-        return ResultUtil.ok(map);
-    }
-
     /**
     /**
      * 创建pdf
      * 创建pdf
      *
      *
@@ -107,12 +48,9 @@ public class AsyncCreatePdfTempleteService extends AsyncCreateTaskTemplete {
      * @throws IOException
      * @throws IOException
      */
      */
     @Override
     @Override
-    public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) throws IOException {
+    public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) {
         StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
         StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
         TBTaskPdfService tbTaskPdfService = SpringContextHolder.getBean(TBTaskPdfService.class);
         TBTaskPdfService tbTaskPdfService = SpringContextHolder.getBean(TBTaskPdfService.class);
-//        if (Objects.isNull(manual) && (Objects.nonNull(dbTask) && dbTask.getStatus() == TaskStatusEnum.FINISH && Objects.nonNull(dbTask.getResult()))) {//无需重新生成pdf
-//            return ResultUtil.ok();
-//        }
         // 任务状态为进行中,直接结束
         // 任务状态为进行中,直接结束
         if (TaskStatusEnum.RUNNING.equals(tbTaskPdf.getStatus())) {
         if (TaskStatusEnum.RUNNING.equals(tbTaskPdf.getStatus())) {
             return ResultUtil.ok();
             return ResultUtil.ok();
@@ -121,28 +59,11 @@ public class AsyncCreatePdfTempleteService extends AsyncCreateTaskTemplete {
         tbTaskPdfService.updateById(tbTaskPdf);
         tbTaskPdfService.updateById(tbTaskPdf);
         try {
         try {
             PdfTaskLogicService pdfTaskLogicService = SpringContextHolder.getBean(PdfTaskLogicService.class);
             PdfTaskLogicService pdfTaskLogicService = SpringContextHolder.getBean(PdfTaskLogicService.class);
-            pdfTaskLogicService.executeCreatePdfLogic(tbTaskPdf);
-            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, 0, FINISH_ERROR_SIZE));
+            pdfTaskLogicService.executeCreatePdfLogic(tbTaskPdf, stringJoinerSummary);
             tbTaskPdf.setResult(TaskResultEnum.SUCCESS);
             tbTaskPdf.setResult(TaskResultEnum.SUCCESS);
         } catch (Exception e) {
         } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
             tbTaskPdf.setResult(TaskResultEnum.ERROR);
             tbTaskPdf.setResult(TaskResultEnum.ERROR);
-            if (e instanceof ApiException) {
-                if (((ApiException) e).getCode() == ExceptionResultEnum.PAPER_ERROR.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.PAPER_TYPE_ERROR.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.ATTACHMENT_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_PRINT_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_RULE_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_DETAIL_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_CARD_IS_NULL.getCode()
-                        || ((ApiException) e).getCode() == ExceptionResultEnum.EXAM_TASK_IS_NULL.getCode()) {
-//                    tbTaskPdf.setErrorMessage(e.getMessage());
-                }
-                ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
         } finally {
         } finally {
             tbTaskPdf.setStatus(TaskStatusEnum.FINISH);
             tbTaskPdf.setStatus(TaskStatusEnum.FINISH);
             tbTaskPdf.setSummary(stringJoinerSummary.toString());
             tbTaskPdf.setSummary(stringJoinerSummary.toString());

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/PdfTaskLogicService.java

@@ -4,6 +4,7 @@ import com.qmth.distributed.print.business.entity.TBTaskPdf;
 
 
 import java.io.IOException;
 import java.io.IOException;
 import java.util.Map;
 import java.util.Map;
+import java.util.StringJoiner;
 
 
 /**
 /**
  * @Description: 任务处理逻辑
  * @Description: 任务处理逻辑
@@ -22,5 +23,5 @@ public interface PdfTaskLogicService {
      * @return
      * @return
      */
      */
 
 
-    void executeCreatePdfLogic(TBTaskPdf tbTaskPdf);
+    void executeCreatePdfLogic(TBTaskPdf tbTaskPdf, StringJoiner stringJoinerSummary);
 }
 }

+ 20 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PdfTaskLogicServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.business.templete.service.impl;
 package com.qmth.distributed.print.business.templete.service.impl;
 
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -41,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.File;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.text.MessageFormat;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -90,9 +92,11 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
     private FileUploadService fileUploadService;
     private FileUploadService fileUploadService;
 
 
     @Override
     @Override
-    public void executeCreatePdfLogic(TBTaskPdf tbTaskPdf) {
+    public void executeCreatePdfLogic(TBTaskPdf tbTaskPdf, StringJoiner stringJoinerSummary) {
         CreatePdfDto createPdfDto = new CreatePdfDto();
         CreatePdfDto createPdfDto = new CreatePdfDto();
         try {
         try {
+            long startTime = System.currentTimeMillis();
+            addSummary(stringJoinerSummary, "开始处理数据");
             // 更新状态(考场状态、印刷计划状态)
             // 更新状态(考场状态、印刷计划状态)
             updatePdfDataStatus(tbTaskPdf);
             updatePdfDataStatus(tbTaskPdf);
 
 
@@ -107,6 +111,7 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
             updateAssignPaperType(tbTaskPdf, createPdfDto);
             updateAssignPaperType(tbTaskPdf, createPdfDto);
             // 查询生成pdf需要文件
             // 查询生成pdf需要文件
             assemblePdfFile(tbTaskPdf, createPdfDto);
             assemblePdfFile(tbTaskPdf, createPdfDto);
+            addSummary(stringJoinerSummary, "处理数据结束,准备生成pdf");
             // 生成pdf文件并合并
             // 生成pdf文件并合并
             //合并(试卷+备用试卷)
             //合并(试卷+备用试卷)
             String dirNamePaper = createPdfNewUtil.mergeA3Pdf(createPdfDto.getPaperPdfList());
             String dirNamePaper = createPdfNewUtil.mergeA3Pdf(createPdfDto.getPaperPdfList());
@@ -116,8 +121,10 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
             createPdfNewUtil.mergePdfSaveDb(dirNamePaper, dirNameCardA3, tbTaskPdf);
             createPdfNewUtil.mergePdfSaveDb(dirNamePaper, dirNameCardA3, tbTaskPdf);
             // 生成A4文件
             // 生成A4文件
             createA4File(tbTaskPdf, examDetailCourseList);
             createA4File(tbTaskPdf, examDetailCourseList);
+            long endTime = System.currentTimeMillis();
+            addSummary(stringJoinerSummary, "pdf文件生成成功,共处理" + examDetail.getTotalSubjects() + "科次。耗时:" + (endTime - startTime) / 1000 + "秒");
         } catch (Exception e) {
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
         } finally {
         } finally {
             if (CollectionUtils.isNotEmpty(createPdfDto.getFileTempList())) {
             if (CollectionUtils.isNotEmpty(createPdfDto.getFileTempList())) {
                 for (File file : createPdfDto.getFileTempList()) {
                 for (File file : createPdfDto.getFileTempList()) {
@@ -382,4 +389,15 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
         examDetailService.updateById(examDetail);
         examDetailService.updateById(examDetail);
     }
     }
 
 
+    /**
+     * 写入概要信息
+     *
+     * @param stringJoinerSummary
+     * @param message
+     */
+    private void addSummary(StringJoiner stringJoinerSummary, String message) {
+        // 时间:事件
+        stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), "->", message));
+    }
+
 }
 }

+ 4 - 0
distributed-print/install/mysql/upgrade/3.3.1.sql

@@ -478,3 +478,7 @@ CREATE TABLE `exam_task_paper_data` (
            `uuid` VARCHAR(200) NULL COMMENT '唯一标识',
            `uuid` VARCHAR(200) NULL COMMENT '唯一标识',
            PRIMARY KEY (`exam_id`, `paper_number`, `paper_id`))
            PRIMARY KEY (`exam_id`, `paper_number`, `paper_id`))
     COMMENT = '命题任务选择题库试卷相关文件表';
     COMMENT = '命题任务选择题库试卷相关文件表';
+
+-- 2024/03/04
+ALTER TABLE `exam_card`
+    ADD COLUMN `paper_id` BIGINT(20) NULL COMMENT '题库试卷ID' AFTER `blank_card_path`;

+ 3 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

@@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.Min;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -109,8 +110,8 @@ public class ExamCardController {
     @ApiOperation(value = "新建")
     @ApiOperation(value = "新建")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     public Result save(@RequestBody ExamCardParams examCardParams) throws Exception {
     public Result save(@RequestBody ExamCardParams examCardParams) throws Exception {
-        String cardId = examCardService.saveExamCard(examCardParams);
-        return ResultUtil.ok(cardId, "");
+        Map<String, String > map = examCardService.saveExamCard(examCardParams);
+        return ResultUtil.ok(map);
     }
     }
 
 
     /**
     /**

+ 7 - 29
distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskPdfController.java

@@ -5,32 +5,29 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
-import com.qmth.distributed.print.business.entity.TBTaskPdf;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.service.ExamDetailService;
 import com.qmth.distributed.print.business.service.ExamDetailService;
-import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TBTaskPdfService;
 import com.qmth.distributed.print.business.service.TBTaskPdfService;
-import com.qmth.distributed.print.business.templete.execute.AsyncCreatePdfTempleteService;
 import com.qmth.teachcloud.common.bean.result.TaskListResult;
 import com.qmth.teachcloud.common.bean.result.TaskListResult;
 import com.qmth.teachcloud.common.bean.result.TaskPdfResult;
 import com.qmth.teachcloud.common.bean.result.TaskPdfResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.enums.*;
-import com.qmth.teachcloud.common.service.TBTaskService;
+import com.qmth.teachcloud.common.enums.CreatePdfTypeEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.Min;
-import java.io.IOException;
-import java.util.List;
-import java.util.Objects;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -50,25 +47,6 @@ public class TBTaskPdfController {
     @Resource
     @Resource
     ExamDetailService examDetailService;
     ExamDetailService examDetailService;
 
 
-    @Resource
-    AsyncCreatePdfTempleteService asyncCreatePdfTempleteService;
-
-    @Aac(auth = false)
-    @ApiOperation(value = "test")
-    @RequestMapping(value = "/{id}/{type}", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "重新生成pdf", response = EditResult.class)})
-    public Result test(@PathVariable Long id,
-                       @PathVariable CreatePdfTypeEnum type) {
-        TBTaskPdf tbTaskPdf = tbTaskPdfService.getById(id);
-        try {
-            asyncCreatePdfTempleteService.createPdf(tbTaskPdf, null);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-        return ResultUtil.ok(new EditResult());
-    }
-
-
     @Aac(auth = false)
     @Aac(auth = false)
     @ApiOperation(value = "PDF生成管理查询接口")
     @ApiOperation(value = "PDF生成管理查询接口")
     @RequestMapping(value = "/page_pdf_create", method = RequestMethod.POST)
     @RequestMapping(value = "/page_pdf_create", method = RequestMethod.POST)

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -1213,6 +1213,18 @@ public class SystemConstant {
         }
         }
     }
     }
 
 
+    public static String generateRandomNumber(int n) {
+        StringBuilder sb = new StringBuilder();
+        Random rand = new Random();
+
+        for (int i = 0; i < n; i++) {
+            char digit = (char)(rand.nextInt('9' - '0') + '0');
+            sb.append(digit);
+        }
+
+        return sb.toString();
+    }
+
 //    /**
 //    /**
 //     * 获取版本号
 //     * 获取版本号
 //     *
 //     *

+ 0 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/kit/TikuUtils.java

@@ -72,7 +72,6 @@ public class TikuUtils {
             map.put("pageSize", validParam(pageSize, 10, false, "分页参数"));
             map.put("pageSize", validParam(pageSize, 10, false, "分页参数"));
 
 
             String result = HttpUtil.post(postUrl, map, createSign(schoolId, timestamp, url), timestamp);
             String result = HttpUtil.post(postUrl, map, createSign(schoolId, timestamp, url), timestamp);
-            System.out.println(result);
             JSONObject jsonObject = JSONObject.parseObject(result);
             JSONObject jsonObject = JSONObject.parseObject(result);
             if (jsonObject.containsKey("content")) {
             if (jsonObject.containsKey("content")) {
                 Page<TikuPaperInfo> page = new Page(pageNumber, pageSize);
                 Page<TikuPaperInfo> page = new Page(pageNumber, pageSize);

+ 18 - 32
teachcloud-task/src/main/java/com/qmth/teachcloud/task/enums/JobEnum.java

@@ -11,44 +11,30 @@ import java.util.Objects;
  */
  */
 public enum JobEnum {
 public enum JobEnum {
 
 
-    RESET_CREATE_PDF_JOB("重新生成pdf定时任务"),
-
-    RESET_CREATE_PDF_JOB_GROUP("重新生成pdfjob组"),
-
-    SMS_NOTICE_TASK_EXPIRE_JOB("任务到期提醒定时任务"),
-
-    SMS_NOTICE_TASK_EXPIRE_JOB_GROUP("任务到期提醒定时任务job组"),
-
-    SMS_NOTICE_TASK_OVERDUE_JOB("任务逾期提醒定时任务"),
-
-    SMS_NOTICE_TASK_OVERDUE_JOB_GROUP("任务逾期提醒定时任务job组"),
-
-    SMS_NOTICE_TASK_RESEND_JOB("短信发送失败重发定时任务"),
-
-    SMS_NOTICE_TASK_RESEND_JOB_GROUP("短信发送失败重发定时任务job组"),
-
-    SYNC_REUNIFY_JOB("自动统分定时任务"),
-
-    SYNC_REUNIFY_JOB_GROUP("自动统分定时任务job组"),
-
-    REDIS_MQ_JOB("学校信息同步定时任务"),
-
-    REDIS_MQ_JOB_GROUP("学校信息同步定时任务组"),
-    UPDATE_MARKER_QUALITY("更新评卷员质量监控指标"),
-    UPDATE_MARKER_QUALITY_GROUP("更新评卷员质量监控指标任务组"),
-    BUILD_MARK_TASK("创建评卷任务"),
-    BUILD_MARK_TASK_GROUP("创建评卷任务任务组"),
-    INIT_MARK_DATA("初始化阅卷数据"),
-    INIT_MARK_DATA_GROUP("初始化阅卷数据任务组"),
-    CLEAR_TIMEOUT_TASK("清空过期任务"),
-    CLEAR_TIMEOUT_TASK_GROUP("清空过期任务任务组");
+    CREATE_PDF_JOB("CREATE_PDF_JOB_GROUP", "重新生成pdf定时任务"),
+    SMS_NOTICE_TASK_EXPIRE_JOB("SMS_NOTICE_TASK_EXPIRE_JOB_GROUP", "任务到期提醒定时任务"),
+    SMS_NOTICE_TASK_OVERDUE_JOB("SMS_NOTICE_TASK_OVERDUE_JOB_GROUP", "任务逾期提醒定时任务"),
+    SMS_NOTICE_TASK_RESEND_JOB("SMS_NOTICE_TASK_RESEND_JOB_GROUP", "短信发送失败重发定时任务"),
+    SYNC_REUNIFY_JOB("SYNC_REUNIFY_JOB_GROUP", "自动统分定时任务"),
+    REDIS_MQ_JOB("REDIS_MQ_JOB_GROUP", "学校信息同步定时任务"),
+    UPDATE_MARKER_QUALITY("UPDATE_MARKER_QUALITY_GROUP", "更新评卷员质量监控指标"),
+    BUILD_MARK_TASK("BUILD_MARK_TASK_GROUP", "创建评卷任务"),
+    INIT_MARK_DATA("INIT_MARK_DATA_GROUP", "初始化阅卷数据"),
+    CLEAR_TIMEOUT_TASK("CLEAR_TIMEOUT_TASK_GROUP", "清空过期任务");
+
+    private String groupName;
 
 
     private String title;
     private String title;
 
 
-    private JobEnum(String title) {
+    private JobEnum(String groupName, String title) {
+        this.groupName = groupName;
         this.title = title;
         this.title = title;
     }
     }
 
 
+    public String getGroupName() {
+        return groupName;
+    }
+
     public String getTitle() {
     public String getTitle() {
         return title;
         return title;
     }
     }

+ 29 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/CreatePdfTaskJob.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;
+
+/**
+ * pdf自动生成任务
+ */
+public class CreatePdfTaskJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(CreatePdfTaskJob.class);
+
+    @Resource
+    JobService jobService;
+
+    @Override
+    protected void executeInternal(JobExecutionContext jobExecutionContext) {
+        try {
+            jobService.createPdfTask();
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
+}

+ 1 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/SubjectCalculateJob.java

@@ -21,7 +21,7 @@ public class SubjectCalculateJob extends QuartzJobBean {
     @Override
     @Override
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
         try {
         try {
-//            jobService.updateMarkerQuality();
+            jobService.updateMarkerQuality();
         } catch (Exception e) {
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             log.error(SystemConstant.LOG_ERROR, e);
         }
         }

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

@@ -58,4 +58,6 @@ public interface JobService {
     void initMarkData();
     void initMarkData();
 
 
     void clearTimeoutTask();
     void clearTimeoutTask();
+
+    void createPdfTask();
 }
 }

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

@@ -2,9 +2,12 @@ package com.qmth.teachcloud.task.job.service.impl;
 
 
 import com.qmth.boot.redis.uid.RedisMachineService;
 import com.qmth.boot.redis.uid.RedisMachineService;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
+import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
 import com.qmth.distributed.print.business.entity.TBSyncTask;
+import com.qmth.distributed.print.business.entity.TBTaskPdf;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.templete.execute.AsyncCreatePdfTempleteService;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
@@ -13,6 +16,7 @@ import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.util.DateDisposeUtils;
 import com.qmth.teachcloud.common.util.DateDisposeUtils;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.RedisUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
 import com.qmth.teachcloud.mark.entity.MarkUserGroup;
@@ -69,6 +73,10 @@ public class JobServiceImpl implements JobService {
     RedisMachineService redisMachineService;
     RedisMachineService redisMachineService;
     @Resource
     @Resource
     TBSyncTaskService tbSyncTaskService;
     TBSyncTaskService tbSyncTaskService;
+    @Resource
+    TBTaskPdfService tbTaskPdfService;
+    @Resource
+    AsyncCreatePdfTempleteService asyncCreatePdfTempleteService;
 
 
     /**
     /**
      * 重新生成pdf失败任务
      * 重新生成pdf失败任务
@@ -179,6 +187,15 @@ public class JobServiceImpl implements JobService {
         }
         }
     }
     }
 
 
+    @Override
+    public void createPdfTask() {
+        List<TBTaskPdf> tbTaskPdfList = tbTaskPdfService.listWaitingTask();
+        for (TBTaskPdf tbTaskPdf : tbTaskPdfList) {
+            asyncCreatePdfTempleteService.createPdf(tbTaskPdf, null);
+        }
+
+    }
+
     /**
     /**
      * 组装job
      * 组装job
      *
      *

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

@@ -40,84 +40,84 @@ public class StartRunning implements CommandLineRunner {
         jobService.machineHeart();
         jobService.machineHeart();
         printCommonService.updateStatus();
         printCommonService.updateStatus();
 
 
-//        log.info("增加重新生成pdf定时任务 start");
-//        Map taskJobMap = new HashMap();
-//        schoolJobMap.computeIfAbsent("name", v -> ResetCreatePdfJob.class.getName());
-//        quartzService.deleteJob(JobEnum.RESET_CREATE_PDF_JOB.name(), JobEnum.RESET_CREATE_PDF_JOB_GROUP.name());
-//         //每天0点定时任务
-//        quartzService.addJob(ResetCreatePdfJob.class, JobEnum.RESET_CREATE_PDF_JOB.name(), JobEnum.RESET_CREATE_PDF_JOB_GROUP.name(), "0 0/1 * * * ?", taskJobMap);
-//        log.info("增加重新生成pdf定时任务 end");
-
         log.info("增加任务到期提醒定时任务 start");
         log.info("增加任务到期提醒定时任务 start");
         Map expireJobMap = new HashMap();
         Map expireJobMap = new HashMap();
         expireJobMap.computeIfAbsent("name", v -> SendSmsExpireJob.class.getName());
         expireJobMap.computeIfAbsent("name", v -> SendSmsExpireJob.class.getName());
-        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB_GROUP.name());
+        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName());
         // 每天15点定时任务
         // 每天15点定时任务
-        quartzService.addJob(SendSmsExpireJob.class, JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB_GROUP.name(), "0 0 15 * * ?", expireJobMap);
+        quartzService.addJob(SendSmsExpireJob.class, JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.name(), JobEnum.SMS_NOTICE_TASK_EXPIRE_JOB.getGroupName(), "0 0 15 * * ?", expireJobMap);
         log.info("增加任务到期提醒定时任务 end");
         log.info("增加任务到期提醒定时任务 end");
 
 
         log.info("增加任务逾期提醒定时任务 start");
         log.info("增加任务逾期提醒定时任务 start");
         Map orverdueJobMap = new HashMap();
         Map orverdueJobMap = new HashMap();
         orverdueJobMap.computeIfAbsent("name", v -> SendSmsOverdueJob.class.getName());
         orverdueJobMap.computeIfAbsent("name", v -> SendSmsOverdueJob.class.getName());
-        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB_GROUP.name());
+        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName());
         // 每天9点定时任务
         // 每天9点定时任务
-        quartzService.addJob(SendSmsOverdueJob.class, JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB_GROUP.name(), "0 0 9 * * ?", orverdueJobMap);
+        quartzService.addJob(SendSmsOverdueJob.class, JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.name(), JobEnum.SMS_NOTICE_TASK_OVERDUE_JOB.getGroupName(), "0 0 9 * * ?", orverdueJobMap);
         log.info("增加任务逾期提醒定时任务 end");
         log.info("增加任务逾期提醒定时任务 end");
 
 
         log.info("增加短信发送失败重发定时任务 start");
         log.info("增加短信发送失败重发定时任务 start");
         Map rensendJobMap = new HashMap();
         Map rensendJobMap = new HashMap();
         rensendJobMap.computeIfAbsent("name", v -> ResendSmsJob.class.getName());
         rensendJobMap.computeIfAbsent("name", v -> ResendSmsJob.class.getName());
-        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB_GROUP.name());
+        quartzService.deleteJob(JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName());
         // 每隔1小时定时任务
         // 每隔1小时定时任务
-        quartzService.addJob(ResendSmsJob.class, JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB_GROUP.name(), "0 0/30 * * * ?", rensendJobMap);
+        quartzService.addJob(ResendSmsJob.class, JobEnum.SMS_NOTICE_TASK_RESEND_JOB.name(), JobEnum.SMS_NOTICE_TASK_RESEND_JOB.getGroupName(), "0 0/30 * * * ?", rensendJobMap);
         log.info("增加短信发送失败重发定时任务 end");
         log.info("增加短信发送失败重发定时任务 end");
 
 
         log.info("增加mq信息同步定时任务 start");
         log.info("增加mq信息同步定时任务 start");
         Map redisMqJobMap = new HashMap();
         Map redisMqJobMap = new HashMap();
         redisMqJobMap.computeIfAbsent("name", v -> RedisMqSyncJob.class.getName());
         redisMqJobMap.computeIfAbsent("name", v -> RedisMqSyncJob.class.getName());
-        quartzService.deleteJob(JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB_GROUP.name());
+        quartzService.deleteJob(JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName());
         // 每分钟定时任务
         // 每分钟定时任务
-        quartzService.addJob(RedisMqSyncJob.class, JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB_GROUP.name(), "0 0/1 * * * ?", redisMqJobMap);
+        quartzService.addJob(RedisMqSyncJob.class, JobEnum.REDIS_MQ_JOB.name(), JobEnum.REDIS_MQ_JOB.getGroupName(), "0 0/1 * * * ?", redisMqJobMap);
         log.info("增加mq信息同步定时任务 end");
         log.info("增加mq信息同步定时任务 end");
 
 
         // 每天0点开始,每2小时一次
         // 每天0点开始,每2小时一次
         log.info("增加自动统分定时任务 start");
         log.info("增加自动统分定时任务 start");
         Map reunifyJobMap = new HashMap();
         Map reunifyJobMap = new HashMap();
         reunifyJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
         reunifyJobMap.computeIfAbsent("name", v -> SubjectCalculateJob.class.getName());
-        quartzService.deleteJob(JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB_GROUP.name());
-//        quartzService.addJob(SubjectCalculateJob.class, JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB_GROUP.name(), "0 0 0/2 * * ?", reunifyJobMap);
+        quartzService.deleteJob(JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName());
+        quartzService.addJob(SubjectCalculateJob.class, JobEnum.SYNC_REUNIFY_JOB.name(), JobEnum.SYNC_REUNIFY_JOB.getGroupName(), "0 0 0/2 * * ?", reunifyJobMap);
         log.info("增加自动统分定时任务 end");
         log.info("增加自动统分定时任务 end");
 
 
         // 每1分钟一次
         // 每1分钟一次
         log.info("增加更新评卷员质量监控指标定时任务 start");
         log.info("增加更新评卷员质量监控指标定时任务 start");
         Map qualityJobMap = new HashMap();
         Map qualityJobMap = new HashMap();
         qualityJobMap.computeIfAbsent("name", v -> UpdateMarkerQualityJob.class.getName());
         qualityJobMap.computeIfAbsent("name", v -> UpdateMarkerQualityJob.class.getName());
-        quartzService.deleteJob(JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY_GROUP.name());
-        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY_GROUP.name(), "0 */1 * * * ?", qualityJobMap);
+        quartzService.deleteJob(JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName());
+        quartzService.addJob(UpdateMarkerQualityJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY.getGroupName(), "0 */1 * * * ?", qualityJobMap);
         log.info("增加更新评卷员质量监控指标定时任务 end");
         log.info("增加更新评卷员质量监控指标定时任务 end");
 
 
-//        // 每1分钟一次
+        // 每1分钟一次
         log.info("增加评卷任务生成定时任务 start");
         log.info("增加评卷任务生成定时任务 start");
         Map buildMarkTaskJobMap = new HashMap();
         Map buildMarkTaskJobMap = new HashMap();
         buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
         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);
+        quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName());
+        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK.getGroupName(), "0 */1 * * * ?", buildMarkTaskJobMap);
         log.info("增加评卷任务生成定时任务 end");
         log.info("增加评卷任务生成定时任务 end");
 
 
         // 每5分钟一次
         // 每5分钟一次
         log.info("增加初始化阅卷数据定时任务 start");
         log.info("增加初始化阅卷数据定时任务 start");
         Map initMarkDataJobMap = new HashMap();
         Map initMarkDataJobMap = new HashMap();
         initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
         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 */5 * * * ?", initMarkDataJobMap);
+        quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName());
+        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */5 * * * ?", initMarkDataJobMap);
         log.info("增加初始化阅卷数据定时任务 end");
         log.info("增加初始化阅卷数据定时任务 end");
 
 
         // 每10分钟一次
         // 每10分钟一次
         log.info("增加清空过期任务定时任务 start");
         log.info("增加清空过期任务定时任务 start");
         Map clearTimeoutTaskJobMap = new HashMap();
         Map clearTimeoutTaskJobMap = new HashMap();
         clearTimeoutTaskJobMap.computeIfAbsent("name", v -> ClearTimeoutTaskJob.class.getName());
         clearTimeoutTaskJobMap.computeIfAbsent("name", v -> ClearTimeoutTaskJob.class.getName());
-        quartzService.deleteJob(JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK_GROUP.name());
-        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK_GROUP.name(), "0 0/10 6-23 * * ?", clearTimeoutTaskJobMap);
+        quartzService.deleteJob(JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName());
+        quartzService.addJob(ClearTimeoutTaskJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK.getGroupName(), "0 0/10 6-23 * * ?", clearTimeoutTaskJobMap);
+        log.info("增加清空过期任务定时任务 end");
+
+        // 每10分钟一次
+        log.info("增加PDF生成定时任务 start");
+        Map createPdfJobMap = new HashMap();
+        createPdfJobMap.computeIfAbsent("name", v -> CreatePdfTaskJob.class.getName());
+        quartzService.deleteJob(JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName());
+        quartzService.addJob(CreatePdfTaskJob.class, JobEnum.CREATE_PDF_JOB.name(), JobEnum.CREATE_PDF_JOB.getGroupName(), "0 0/10 * * * ?", createPdfJobMap);
         log.info("增加清空过期任务定时任务 end");
         log.info("增加清空过期任务定时任务 end");
 
 
         log.info("服务器启动时执行 end");
         log.info("服务器启动时执行 end");