Browse Source

卷库查询批量导出试卷、题卡

xiaof 4 năm trước cách đây
mục cha
commit
3ed5ea39bb

+ 2 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/TaskTypeEnum.java

@@ -21,6 +21,8 @@ public enum TaskTypeEnum {
 
     PRINT_PDF_DOWNLOAD("批量下载pdf"),
 
+    PAPER_AND_CARD_PDF_DOWNLOAD("差为管理试卷、空白题卡批量下载pdf"),
+
     CREATE_PDF("生成pdf");
 
     private String title;

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

@@ -387,7 +387,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 List<BlurryUserDto> blurryUserDtoList;
 
                 QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
-                queryWrapper.lambda().eq(SysUser::getLoginName, examTaskTemp.getUserAccount());
+                queryWrapper.lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getLoginName, examTaskTemp.getUserAccount());
                 SysUser sysUser1 = sysUserService.getOne(queryWrapper);
                 if (sysUser1 != null) {
                     blurryUserDtoList = listUsers(examTaskTemp.getCourseCode(), String.valueOf(sysUser1.getId()));

+ 69 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncPaperReviewPdfExportService.java

@@ -0,0 +1,69 @@
+package com.qmth.distributed.print.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.TBTask;
+import com.qmth.distributed.print.business.enums.TaskResultEnum;
+import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.service.TBTaskService;
+import com.qmth.distributed.print.business.templete.export.AsyncExportTaskTemplete;
+import com.qmth.distributed.print.business.templete.service.TaskLogicService;
+import com.qmth.distributed.print.common.contant.SpringContextHolder;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import com.qmth.distributed.print.common.util.Result;
+import com.qmth.distributed.print.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * @Description: 异步任务-命题任务审核样本导出
+ * @Author: CaoZixuan
+ * @Date: 2021-04-19
+ */
+@Service
+public class AsyncPaperReviewPdfExportService extends AsyncExportTaskTemplete {
+    @Resource
+    TaskLogicService taskLogicService;
+
+    public static final String OBJ_TITLE = "试卷、题卡pdf导出";
+    private final static Logger log = LoggerFactory.getLogger(AsyncPaperReviewPdfExportService.class);
+
+    @Override
+    public Result exportTask(Map<String, Object> map) {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+
+        StringJoiner stringJoinerSummary = new StringJoiner("\n")
+                .add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
+        TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
+        tbTaskService.updateById(tbTask);
+        try {
+            TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
+            Map<String, Object> result = taskLogicService.executeExportPaperAndCardLogic(map);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, Long.valueOf(String.valueOf(result.get("count"))), FINISH_SIZE));
+            tbTask.setResult(TaskResultEnum.SUCCESS);
+        } catch (Exception e) {
+            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);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {//生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
+        }
+        return ResultUtil.ok();
+    }
+}

+ 8 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/TaskLogicService.java

@@ -54,4 +54,12 @@ public interface TaskLogicService {
      * @return
      */
     public Map<String, Object> executeExportSampleLogic(Map<String, Object> map) throws IOException;
+
+    /**
+     * 导出试卷、题卡pdf
+     *
+     * @param map
+     * @return
+     */
+    Map<String, Object> executeExportPaperAndCardLogic(Map<String, Object> map) throws IOException;
 }

+ 141 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -945,4 +945,145 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         map.put("count", count);
         return map;
     }
+
+    @Override
+    public Map<String, Object> executeExportPaperAndCardLogic(Map<String, Object> map) throws IOException {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        LocalDateTime nowTime = LocalDateTime.now();
+        StringJoiner zipJoiner = new StringJoiner("")
+                .add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
+        StringJoiner dirName = new StringJoiner("")
+                .add(UploadFileEnum.FILE.getTitle()).add(File.separator)
+                .add(String.valueOf(nowTime.getYear())).add(File.separator)
+                .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                .add(String.format("%02d", nowTime.getDayOfMonth()))
+                .add(File.separator).add(SystemConstant.getUuid()).add(SystemConstant.ZIP_PREFIX);
+        String dirNameTmp = dirName.toString().replaceAll("\\\\", "/");
+
+        // 根文件路径
+        String zipLocalRootPath = SystemConstant.TEMP_FILES_DIR + File.separator + System.currentTimeMillis();
+
+        List<ExamTask> examTasks = (List<ExamTask>) map.get("examTasks");
+        for (ExamTask examTask : examTasks) {
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
+
+            // 试卷
+            String paperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
+
+            // 题卡
+        }
+
+        Long[] ids = (Long[]) map.get("ids");
+        for (Long id : ids) {
+            ExamTask examTask = examTaskService.getById(id);
+            if (Objects.isNull(examTask)) {
+                throw ExceptionResultEnum.ERROR.exception("未找到命题任务");
+            }
+            String examTaskSign = examTask.getCourseName() + "-" + examTask.getPaperNumber();
+            String firstPath = zipLocalRootPath + File.separator + examTaskSign;
+            ReviewSampleDto reviewSampleDto = examTaskService.findReviewSampleInfoByExamTaskId(id);
+
+
+            // 处理试卷样品
+            List<Map> paperInfo = JSONObject.parseArray(reviewSampleDto.getPaperAttachmentIds(), Map.class);
+            if (Objects.isNull(paperInfo)) {
+                throw ExceptionResultEnum.ERROR.exception("试卷信息不存在");
+            }
+            Set<Long> attPaperIds = new HashSet<>();
+            for (Map paperMap : paperInfo) {
+                if (Objects.nonNull(paperMap.get("attachmentId")) && String.valueOf(paperMap.get("attachmentId")).length() > 0 && !String.valueOf(paperMap.get("attachmentId")).equals("null")) {
+                    Long attachmentId = Long.valueOf(String.valueOf(paperMap.get("attachmentId")));
+                    attPaperIds.add(attachmentId);
+                }
+            }
+            if (attPaperIds.size() > 0) {
+                List<BasicAttachment> paperAttachmentList = basicAttachmentService.listByIds(attPaperIds);
+                for (BasicAttachment paperAttachment : paperAttachmentList) {
+                    JSONObject jsonObject = JSONObject.parseObject(paperAttachment.getPath());
+                    String paperPath = firstPath + File.separator + "试卷" + File.separator + paperAttachment.getName() + paperAttachment.getType();
+                    ossUtil.ossDownload((String) jsonObject.get(SystemConstant.PATH), paperPath);
+                }
+            }
+
+            // 处理审核样品
+            List<Map> confirmInfo = JSONObject.parseArray(reviewSampleDto.getPaperConfirmAttachmentIds(), Map.class);
+            System.out.println("confirmInfo = " + JSON.toJSONString(confirmInfo));
+            Set<Long> attConfirmIds = new HashSet<>();
+            for (Map confirmMap : confirmInfo) {
+                if (Objects.isNull(confirmMap.get("attachmentId"))) {
+                    throw ExceptionResultEnum.ERROR.exception("未找到附件id");
+                }
+                Long attachmentId = Long.valueOf(String.valueOf(confirmMap.get("attachmentId")));
+                attConfirmIds.add(attachmentId);
+            }
+            if (attConfirmIds.size() > 0) {
+                List<BasicAttachment> confirmAttachmentList = basicAttachmentService.listByIds(attConfirmIds);
+                for (BasicAttachment confirmAttachment : confirmAttachmentList) {
+                    JSONObject jsonObject = JSONObject.parseObject(confirmAttachment.getPath());
+                    String confirmPath = firstPath + File.separator + "审核样本" + File.separator + confirmAttachment.getName() + confirmAttachment.getType();
+                    ossUtil.ossDownload((String) jsonObject.get(SystemConstant.PATH), confirmPath);
+                }
+            }
+
+            // 处理题卡
+            Long cardId = reviewSampleDto.getCardId();
+            ExamCard examCard = examCardService.getById(cardId);
+            if (Objects.isNull(examCard)) {
+                throw ExceptionResultEnum.ERROR.exception("找不到答题卡");
+            }
+            MakeMethodEnum makeMethodEnum = examCard.getMakeMethod();
+            if (MakeMethodEnum.SELECT.equals(makeMethodEnum)) {
+                Long templateId = examCard.getTemplateId();
+                if (templateId == null || templateId == 0) {
+                    throw ExceptionResultEnum.ERROR.exception("找不到题卡对应的模板");
+                }
+                BasicTemplate basicTemplate = basicTemplateService.getById(templateId);
+                if (Objects.isNull(basicTemplate)) {
+                    throw ExceptionResultEnum.ERROR.exception("找不到模板信息");
+                }
+                Long attachmentId = basicTemplate.getAttachmentId();
+                if (attachmentId == null || attachmentId == 0) {
+                    throw ExceptionResultEnum.ERROR.exception("找不到模板对应的附件");
+                }
+                BasicAttachment cardAttachment = basicAttachmentService.getById(attachmentId);
+                if (Objects.isNull(cardAttachment)) {
+                    throw ExceptionResultEnum.ERROR.exception("找不到附件");
+                }
+                JSONObject jsonObject = JSONObject.parseObject(cardAttachment.getPath());
+                String cardPath = firstPath + File.separator + "题卡" + File.separator + cardAttachment.getName() + cardAttachment.getType();
+                ossUtil.ossDownload((String) jsonObject.get(SystemConstant.PATH), cardPath);
+            } else {
+                List<ExamCardDetail> examCardDetailList = examCardDetailService.list(new QueryWrapper<ExamCardDetail>().lambda().eq(ExamCardDetail::getCardId, cardId));
+                if (examCardDetailList.size() != 1) {
+                    throw ExceptionResultEnum.ERROR.exception("题卡明细信息异常");
+                }
+                ExamCardDetail examCardDetail = examCardDetailService.getByCardId(cardId);
+                String htmlContent = examCardDetail.getHtmlContent();
+                byte[] bytes = htmlContent.getBytes();
+                String cardPath = firstPath + File.separator + "题卡" + File.separator + examCard.getTitle() + SystemConstant.HTML_PREFIX;
+                File localFile = new File(cardPath);
+                if (!localFile.getParentFile().exists()) {
+                    localFile.getParentFile().mkdirs();
+                }
+                FileCopyUtils.copy(bytes, localFile);
+            }
+        }
+
+        File zipFile = new File(zipJoiner.toString() + dirNameTmp);
+        if (!zipFile.getParentFile().exists()) {
+            zipFile.getParentFile().mkdirs();
+            zipFile.createNewFile();
+        }
+
+        ZipUtil.zip(zipLocalRootPath, zipFile.getPath(), false);
+        ossUtil.ossUpload(dirNameTmp, zipFile, BinaryUtil.toBase64String(HexUtils.decodeHex(DigestUtils.md5Hex(new FileInputStream(zipFile)))));
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put(SystemConstant.PATH, dirNameTmp);
+        jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+        jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
+        tbTask.setResultFilePath(jsonObject.toJSONString());
+        ConvertUtil.delFolder(zipLocalRootPath);
+        zipFile.delete();
+        return map;
+    }
 }

+ 60 - 18
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -1,24 +1,27 @@
 package com.qmth.distributed.print.api;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.params.ArraysParams;
+import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.templete.execute.AsyncPaperReviewPdfExportService;
 import com.qmth.distributed.print.business.templete.execute.AsyncTaskReviewSampleExportService;
 import com.qmth.distributed.print.business.util.ServletUtil;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
 import com.qmth.distributed.print.common.util.Result;
 import com.qmth.distributed.print.common.util.ResultUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -66,6 +69,10 @@ public class ExamTaskController {
 
     @Resource
     private BasicMessageService basicMessageService;
+
+    @Resource
+    AsyncPaperReviewPdfExportService asyncPaperReviewPdfExportService;
+
     /**
      * 查询
      *
@@ -159,7 +166,7 @@ public class ExamTaskController {
     public Result save(@RequestBody ExamTask examTask) {
         ExamTask task = examTaskService.saveExamTask(examTask);
         //发送短信
-        if(task.getId() != null){
+        if (task.getId() != null) {
             basicMessageService.sendNoticeTaskCreate(task);
         }
         return ResultUtil.ok(true);
@@ -206,7 +213,7 @@ public class ExamTaskController {
     @RequestMapping(value = "/save_batch", method = RequestMethod.POST)
     public Result saveBatch(@RequestBody ExamTask task) {
         List<ExamTask> examTasks = examTaskService.saveBatch(task);
-        if(examTasks != null && examTasks.size() > 0){
+        if (examTasks != null && examTasks.size() > 0) {
             // 发送短信
             ExamTask[] tasks = examTasks.toArray(new ExamTask[examTasks.size()]);
             basicMessageService.sendNoticeTaskCreate(tasks);
@@ -291,7 +298,7 @@ public class ExamTaskController {
             commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
         //待审核状态,发送短信
-        if(ExamStatusEnum.SUBMIT.equals(examTask.getStatus())){
+        if (ExamStatusEnum.SUBMIT.equals(examTask.getStatus())) {
             basicMessageService.sendNoticeTaskAuditCreateOrReview(examTask, MessageEnum.NOTICE_OF_AUDIT_CREATED);
         }
 
@@ -384,10 +391,10 @@ public class ExamTaskController {
             // 校验是否可以提交打印状态
             commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
             // 发送审核通过短信通知
-            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_PASS,sysUser);
-        }else if (isSuccess && taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.NOT_PASS.name())){
+            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_PASS, sysUser);
+        } else if (isSuccess && taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.NOT_PASS.name())) {
             // 发送审核不通过短信通知
-            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_NOT_PASS,sysUser);
+            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_NOT_PASS, sysUser);
         }
         return ResultUtil.ok(isSuccess);
     }
@@ -406,10 +413,10 @@ public class ExamTaskController {
         boolean isSuccess = examTaskService.taskReviewSaveBatch(taskReviewLog);
         if (isSuccess && taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.PASS.name())) {
             // 发送审核通过短信通知
-            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_PASS,sysUser);
-        }else if (isSuccess && taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.NOT_PASS.name())){
+            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_PASS, sysUser);
+        } else if (isSuccess && taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.NOT_PASS.name())) {
             // 发送审核不通过短信通知
-            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_NOT_PASS,sysUser);
+            basicMessageService.noticeOfExamTaskAudit(examTaskIdList, MessageEnum.NOTICE_OF_AUDIT_NOT_PASS, sysUser);
         }
         return ResultUtil.ok(isSuccess);
     }
@@ -422,7 +429,7 @@ public class ExamTaskController {
         }
         Long[] ids = arraysParams.getIds();
         Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.SAMPLE_EXPORT);
-        map.put("ids",ids);
+        map.put("ids", ids);
         asyncTaskReviewSampleExportService.exportTask(map);
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
@@ -454,6 +461,7 @@ public class ExamTaskController {
 
     /**
      * 下载
+     *
      * @param response
      * @param examTaskId
      */
@@ -474,13 +482,13 @@ public class ExamTaskController {
     public Result taskPaperEnable(@RequestBody ExamTaskDetail examTaskDetail) throws IOException {
         boolean isSuccess = examTaskDetailService.enable(examTaskDetail);
         // 启用,触发考场生成pdf
-        if(examTaskDetail.getEnable()){
+        if (examTaskDetail.getEnable()) {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             ExamTask examTask = examTaskService.getById(examTaskDetail.getId());
             // 校验课程关联考场,是否已经提交打印
             Boolean isCreate = commonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getCourseCode(), examTask.getPaperNumber());
             // 校验是否可以提交打印状态
-            if(isCreate) {
+            if (isCreate) {
                 commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
             }
         }
@@ -489,6 +497,7 @@ public class ExamTaskController {
 
     /**
      * 卷库查询-卷库修改
+     *
      * @param examTaskDetail
      * @return
      */
@@ -496,9 +505,9 @@ public class ExamTaskController {
     @RequestMapping(value = "/paper_update", method = RequestMethod.POST)
     public Result taskPaperUpdate(@RequestBody ExamTaskDetail examTaskDetail) throws IOException {
         boolean isSuccess = examTaskDetailService.paperUpdate(examTaskDetail);
-        if(isSuccess){
+        if (isSuccess) {
             ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
-            if(examTask.getReview()){
+            if (examTask.getReview()) {
                 // 发送短信
                 basicMessageService.sendNoticeTaskAuditCreateOrReview(examTask, MessageEnum.NOTICE_OF_AUDIT_REVIEW);
             } else {
@@ -506,12 +515,45 @@ public class ExamTaskController {
                 // 校验课程关联考场,是否已经提交打印
                 Boolean isCreate = commonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getCourseCode(), examTask.getPaperNumber());
                 // 校验是否可以提交打印状态
-                if(isCreate) {
+                if (isCreate) {
                     commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
                 }
             }
         }
         return ResultUtil.ok(isSuccess);
     }
+
+    @ApiOperation(value = "卷库查询-批量下载试卷PDF、题卡")
+    @RequestMapping(value = "/task_download_pdf", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result taskDownloadPdf(@RequestParam(value = "courseCode", required = false) String courseCode,
+                                  @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                  @RequestParam(value = "startTime", required = false) Long startTime,
+                                  @RequestParam(value = "endTime", required = false) Long endTime) throws Exception {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getStatus, ExamStatusEnum.FINISH);
+        if(StringUtils.isNotBlank(courseCode)){
+            queryWrapper.lambda().eq(ExamTask::getCourseCode, courseCode);
+        }
+        if(StringUtils.isNotBlank(paperNumber)){
+            queryWrapper.lambda().eq(ExamTask::getPaperNumber, paperNumber);
+        }
+        if(startTime != null){
+            queryWrapper.lambda().ge(ExamTask::getCreateTime, startTime);
+        }
+        if(endTime != null){
+            queryWrapper.lambda().le(ExamTask::getCreateTime, endTime);
+        }
+        List<ExamTask> examTasks = examTaskService.list(queryWrapper);
+        if (CollectionUtils.isEmpty(examTasks)) {
+            throw ExceptionResultEnum.ERROR.exception("没有可导出数据");
+        }
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PAPER_AND_CARD_PDF_DOWNLOAD, null, (SysUser) ServletUtil.getRequestUser());
+        map.put("examTasks", examTasks);
+        asyncPaperReviewPdfExportService.exportTask(map);
+        TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
+        return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
+    }
 }
 

+ 1 - 0
distributed-print/src/main/java/com/qmth/distributed/print/start/StartRunning.java

@@ -6,6 +6,7 @@ import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.task.enums.JobEnum;
 import com.qmth.distributed.print.task.job.ResendSmsJob;
 import com.qmth.distributed.print.task.job.ResetCreatePdfJob;
+import com.qmth.distributed.print.task.job.SendSmsExpireJob;
 import com.qmth.distributed.print.task.job.TimedSyncSchoolJob;
 import com.qmth.distributed.print.task.service.QuartzService;
 import org.slf4j.Logger;

+ 1 - 1
distributed-print/src/main/resources/application.properties

@@ -130,7 +130,7 @@ sms.config.aliyunSMSAllocationOverdueCode=SMS_217406308
 sms.config.aliyunSMSAuditCreatedCode=SMS_217436298
 #审核待办修改申请通知
 sms.config.aliyunSMSAuditReviewCode=SMS_217416269
-#审核待办到期预警通知(未通过)
+#审核待办到期预警通知
 sms.config.aliyunSMSAuditWillExpireCode=SMS_217436302
 #审核待办逾期通知
 sms.config.aliyunSMSAuditOverdueCode=SMS_217416271