ソースを参照

卷库查询-生成考务数据

xiaof 3 年 前
コミット
fe18eb44b2
16 ファイル変更389 行追加15 行削除
  1. 34 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TaskPrintParams.java
  2. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java
  3. 33 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskPrint.java
  4. 20 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamDataSourceEnum.java
  5. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  6. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskPrintService.java
  7. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  8. 4 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  9. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  10. 24 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  11. 20 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceServiceImpl.java
  12. 84 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExamTaskPrintService.java
  13. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/TaskLogicService.java
  14. 122 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  15. 11 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  16. 3 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java

+ 34 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TaskPrintParams.java

@@ -15,13 +15,19 @@ import java.util.List;
 public class TaskPrintParams implements Serializable {
 
     @JsonSerialize(using = ToStringSerializer.class)
-    Long printPlanId;
+    private Long printPlanId;
 
-    Long examStartTime;
+    private String courseCode;
 
-    Long examEndTime;
+    private String courseName;
 
-    List<ExamTaskPrint> list;
+    private String paperNumber;
+
+    private Long examStartTime;
+
+    private Long examEndTime;
+
+    private List<ExamTaskPrint> list;
 
     public Long getPrintPlanId() {
         return printPlanId;
@@ -31,6 +37,30 @@ public class TaskPrintParams implements Serializable {
         this.printPlanId = printPlanId;
     }
 
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
     public Long getExamStartTime() {
         return examStartTime;
     }

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

@@ -4,6 +4,7 @@ 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.enums.ExamDataSourceEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
@@ -99,6 +100,8 @@ public class ExamDetail extends BaseEntity implements Serializable {
     @TableField("attachment_path")
     private String attachmentPath;
 
+    private ExamDataSourceEnum examDataSource;
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -262,4 +265,12 @@ public class ExamDetail extends BaseEntity implements Serializable {
     public void setPrintEndTime(Long printEndTime) {
         this.printEndTime = printEndTime;
     }
+
+    public ExamDataSourceEnum getExamDataSource() {
+        return examDataSource;
+    }
+
+    public void setExamDataSource(ExamDataSourceEnum examDataSource) {
+        this.examDataSource = examDataSource;
+    }
 }

+ 33 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskPrint.java

@@ -34,6 +34,15 @@ public class ExamTaskPrint extends BaseEntity implements Serializable {
     @TableField("print_plan_id")
     private Long printPlanId;
 
+    @TableField("course_code")
+    private String courseCode;
+
+    @TableField("course_name")
+    private String courseName;
+
+    @TableField("paper_number")
+    private String paperNumber;
+
     @TableField("exam_start_time")
     private Long examStartTime;
 
@@ -92,6 +101,30 @@ public class ExamTaskPrint extends BaseEntity implements Serializable {
         this.printPlanId = printPlanId;
     }
 
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
     public Long getExamStartTime() {
         return examStartTime;
     }

+ 20 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamDataSourceEnum.java

@@ -0,0 +1,20 @@
+package com.qmth.distributed.print.business.enums;
+
+/**
+ * @Date: 2021/3/29.
+ */
+public enum ExamDataSourceEnum {
+
+    EXAM_TASK("卷库查询生成"),
+    FILE_IMPORT("考务文件导入");
+
+    ExamDataSourceEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+}

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

@@ -9,6 +9,7 @@ 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.distributed.print.business.enums.ExamDataSourceEnum;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -157,8 +158,9 @@ public interface ExamDetailService extends IService<ExamDetail> {
     /**
      * 删除考务数据
      * @param printPlanId 印刷计划id
+     * @param source
      */
-    void deleteExaminationData(Long printPlanId);
+    void deleteExaminationData(Long printPlanId, ExamDataSourceEnum source);
 
 
 

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

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.params.TaskPrintParams;
 import com.qmth.distributed.print.business.entity.ExamTaskPrint;
 
+import java.util.List;
+
 /**
  * <p>
  * 以试卷作为起点生成考务数据 服务类
@@ -13,5 +15,5 @@ import com.qmth.distributed.print.business.entity.ExamTaskPrint;
  * @since 2021-08-02
  */
 public interface ExamTaskPrintService extends IService<ExamTaskPrint> {
-    void createTaskPrint(TaskPrintParams taskPrintParams);
+    List<ExamTaskPrint> createTaskPrint(TaskPrintParams taskPrintParams);
 }

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

@@ -179,6 +179,14 @@ public interface PrintCommonService {
      */
     public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum);
 
+    /**
+     * 保存任务
+     *
+     * @param taskTypeEnum
+     * @return
+     */
+    public Map<String, Object> saveTask(Long printPlanId, TaskTypeEnum taskTypeEnum);
+
     /**
      * 校验课程关联考场是否提交打印
      *

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

@@ -13,6 +13,7 @@ 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.*;
+import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamDetailMapper;
@@ -453,6 +454,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examDetail.setTotalSubjects(Math.toIntExact(totalSubjects));
             examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
             examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
+            examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
             examDetail.setCreateId(userId);
             examDetail.setUpdateId(userId);
             examDetailList.add(examDetail);
@@ -763,7 +765,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void deleteExaminationData(Long printPlanId) {
+    public void deleteExaminationData(Long printPlanId, ExamDataSourceEnum source) {
         ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
         if (examPrintPlan.getId() == null || examPrintPlan.getId() <= 0) {
             throw ExceptionResultEnum.ERROR.exception("未找到印刷计划信息");
@@ -773,7 +775,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             throw ExceptionResultEnum.ERROR.exception(status + "状态下的印刷计划不能删除考务数据");
         }
         // 准备删除的考务-场次表id
-        List<Long> examDetailIds = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId, printPlanId))
+        List<Long> examDetailIds = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId, printPlanId).eq(ExamDetail::getExamDataSource, source))
                 .stream().map(ExamDetail::getId).collect(Collectors.toList());
         if (examDetailIds.size() == 0) {
             return;

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

@@ -18,6 +18,7 @@ import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.ClientPrintData;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
+import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.TemplateTypeEnum;
@@ -280,7 +281,7 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         if (!tbTaskService.countByPrintPlanIdAndEntityId(examPrintPlan.getSchoolId(), id, null)) {
             throw ExceptionResultEnum.ERROR.exception("要删除的印刷计划正在生成pdf中,无法删除");
         }
-        examDetailService.deleteExaminationData(id);
+        examDetailService.deleteExaminationData(id, ExamDataSourceEnum.FILE_IMPORT);
         return this.removeById(id);
     }
 

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

@@ -5,15 +5,38 @@ import com.qmth.distributed.print.business.bean.params.TaskPrintParams;
 import com.qmth.distributed.print.business.entity.ExamTaskPrint;
 import com.qmth.distributed.print.business.mapper.ExamTaskPrintMapper;
 import com.qmth.distributed.print.business.service.ExamTaskPrintService;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * @Date: 2021/8/2.
  */
 @Service
 public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, ExamTaskPrint> implements ExamTaskPrintService {
+
     @Override
-    public void createTaskPrint(TaskPrintParams taskPrintParams) {
+    public List<ExamTaskPrint> createTaskPrint(TaskPrintParams taskPrintParams) {
+        Long schoolId = (Long) ServletUtil.getRequestHeaderSchoolId();
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        List<ExamTaskPrint> list = taskPrintParams.getList();
+        list = list.stream().map(m -> {
+            m.setPrintPlanId(taskPrintParams.getPrintPlanId());
+            m.setCourseCode(taskPrintParams.getCourseCode());
+            m.setCourseName(taskPrintParams.getCourseName());
+            m.setPaperNumber(taskPrintParams.getPaperNumber());
+            m.setExamStartTime(taskPrintParams.getExamStartTime());
+            m.setExamEndTime(taskPrintParams.getExamEndTime());
+            m.setSchoolId(schoolId);
+            m.setOrgId(sysUser.getOrgId());
+            m.setCreateId(sysUser.getId());
+            return m;
+        }).collect(Collectors.toList());
 
+        this.saveBatch(list);
+        return list;
     }
 }

+ 20 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceServiceImpl.java

@@ -747,6 +747,26 @@ public class PrintCommonServiceServiceImpl implements PrintCommonService {
         return map;
     }
 
+    @Override
+    @Transactional
+    public Map<String, Object> saveTask(Long printPlanId, TaskTypeEnum taskTypeEnum) {
+        Map<String, Object> map = null;
+        try {
+            map = new HashMap<>();
+            TBTask tbTask = tbTaskService.saveTaskCommon(null, taskTypeEnum, map, null);
+            tbTask.setPrintPlanId(printPlanId);
+            tbTaskService.save(tbTask);
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return map;
+    }
+
     /**
      * 校验课程关联考场是否提交打印
      *

+ 84 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExamTaskPrintService.java

@@ -0,0 +1,84 @@
+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.service.ExamTaskService;
+import com.qmth.distributed.print.business.templete.importData.AsyncImportTaskTemplete;
+import com.qmth.distributed.print.business.templete.service.TaskLogicService;
+import com.qmth.teachcloud.common.contant.SpringContextHolder;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.common.service.TBTaskService;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.text.MessageFormat;
+import java.util.*;
+
+/**
+ * @Description: 考务数据导入模板
+ * @Author: CaoZixuan
+ * @Date: 2021-04-07
+ */
+@Service
+public class AsyncExamTaskPrintService extends AsyncImportTaskTemplete {
+    @Resource
+    private ExamTaskService examTaskService;
+
+    private final static Logger log = LoggerFactory.getLogger(AsyncExamTaskPrintService.class);
+
+    public static final String OBJ_TITLE = "卷库查询-考务数据";
+
+    @Override
+    public Result importTask(Map<String, Object> map) throws Exception {
+        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.executeGenerateExamLogic(map);
+
+            // 检测是否去生成pdf
+            if (Objects.isNull(map.get("examDetailIdList"))) {
+                throw ExceptionResultEnum.ERROR.exception("不能获取考务-场次id集合");
+            }
+            List<Long> examDetailIdList = (List<Long>) map.get("examDetailIdList");
+            // 按照考场检验命题任务是否全部完成,完成生成pdf
+            SysUser user = (SysUser) map.get(SystemConstant.USER);
+            for (Long examDetailId : examDetailIdList) {
+                examTaskService.checkDataByExamination(examDetailId, user);
+            }
+
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, Long.valueOf(String.valueOf(result.get("dataCount"))), 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(map);
+    }
+}

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

@@ -62,4 +62,11 @@ public interface TaskLogicService {
      * @return
      */
     Map<String, Object> executeExportPaperAndCardLogic(Map<String, Object> map) throws IOException;
+
+    /**
+     * 根据班级生成考务数据
+     * @param map
+     * @return
+     */
+    Map<String, Object> executeGenerateExamLogic(Map<String, Object> map);
 }

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

@@ -41,6 +41,7 @@ import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.support.atomic.RedisAtomicLong;
 import org.springframework.stereotype.Service;
@@ -53,6 +54,7 @@ import java.io.*;
 import java.lang.reflect.Field;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -127,6 +129,15 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Resource
+    ConvertUtil convertUtil;
+
+    @Autowired
+    ExamDetailCourseService examDetailCourseService;
+
+    @Autowired
+    BasicStudentService basicStudentService;
+
     /**
      * 创建pdf前置条件
      *
@@ -708,7 +719,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         }
 
         // 删除印刷计划下的考务数据
-        examDetailService.deleteExaminationData(printPlanId);
+        examDetailService.deleteExaminationData(printPlanId, ExamDataSourceEnum.FILE_IMPORT);
 
         // 卷袋号生成规则
         SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
@@ -1049,4 +1060,114 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         map.put("count", 1);
         return map;
     }
+
+    @Transactional
+    @Override
+    public Map<String, Object> executeGenerateExamLogic(Map<String, Object> map) {
+        List<ExamTaskPrint> list = (List<ExamTaskPrint>) map.get("list");
+        if (CollectionUtils.isEmpty(list)) {
+            return null;
+        }
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        Long printPlanId = list.stream().map(m -> m.getPrintPlanId()).findFirst().get();
+        Long schoolId = (Long) ServletUtil.getRequestHeaderSchoolId();
+        if (!tbTaskService.countByPrintPlanIdAndEntityId(schoolId, printPlanId, null)) {
+            throw ExceptionResultEnum.ERROR.exception("当前印刷计划正在生成pdf,无法导入考务数据");
+        }
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
+        if (examPrintPlan == null) {
+            throw ExceptionResultEnum.ERROR.exception("印刷计划不存在");
+        }
+        PrintPlanStatusEnum printPlanStatus = examPrintPlan.getStatus();
+        if (PrintPlanStatusEnum.NEW != printPlanStatus && PrintPlanStatusEnum.READY != printPlanStatus) {
+            throw ExceptionResultEnum.ERROR.exception(printPlanStatus + "状态下的印刷计划不允许重新提交");
+        }
+
+        String printPlanName = examPrintPlan.getName();
+        // 该学校有效考务数据
+        List<FieldsDto> fieldsDtoList = examDetailService.findExaminationFields(schoolId);
+        if (fieldsDtoList.size() == 0) {
+            throw ExceptionResultEnum.ERROR.exception("该学校没有设置考务数据");
+        }
+
+        // 删除印刷计划下的考务数据
+        examDetailService.deleteExaminationData(printPlanId, ExamDataSourceEnum.EXAM_TASK);
+
+        List<Long> examDetailIdList = new ArrayList<>();
+        for (ExamTaskPrint examTaskPrint : list) {
+            // 卷袋号生成规则
+            SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
+            String key = serialNumberParams.getModel() + serialNumberParams.getPrefix();
+            RedisAtomicLong counter = new RedisAtomicLong(key, Objects.requireNonNull(redisTemplate.getConnectionFactory()));
+            Long value = counter.get();
+            try {
+                ExamDetail examDetail = new ExamDetail();
+                examDetail.setId(SystemConstant.getDbUuid());
+                examDetail.setPackageCode(createTempNumber(serialNumberParams));
+                examDetail.setSchoolId(schoolId);
+                examDetail.setPrintPlanId(printPlanId);
+                examDetail.setPrintPlanName(examPrintPlan.getName());
+                examDetail.setExamPlace(examTaskPrint.getExamPlace());
+                examDetail.setExamRoom(examTaskPrint.getExamRoom());
+                examDetail.setStatus(ExamDetailStatusEnum.NEW);
+                examDetail.setTotalSubjects(examTaskPrint.getStudentCount());
+                examDetail.setExamStartTime(examTaskPrint.getExamStartTime());
+                examDetail.setExamEndTime(examTaskPrint.getExamEndTime());
+                examDetail.setExamDataSource(ExamDataSourceEnum.EXAM_TASK);
+                examDetail.setCreateId(examTaskPrint.getCreateId());
+                examDetailService.save(examDetail);
+                examDetailIdList.add(examDetail.getId());
+
+                ExamDetailCourse examDetailCourse = new ExamDetailCourse();
+                examDetailCourse.setId(SystemConstant.getDbUuid());
+                examDetailCourse.setSchoolId(schoolId);
+                examDetailCourse.setExamDetailId(examDetail.getId());
+                examDetailCourse.setCourseCode(examTaskPrint.getCourseCode());
+                examDetailCourse.setCourseName(examTaskPrint.getCourseName());
+                examDetailCourse.setPaperNumber(examTaskPrint.getPaperNumber());
+                examDetailCourse.setTotalSubjects(examTaskPrint.getStudentCount());
+                examDetailCourse.setCreateId(examTaskPrint.getCreateId());
+                examDetailCourseService.save(examDetailCourse);
+
+                List<String> classIds = Arrays.asList(examTaskPrint.getClassId().split(","));
+                QueryWrapper<BasicStudent> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(BasicStudent::getSchoolId, schoolId).in(BasicStudent::getClazz, classIds);
+                List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper);
+                AtomicInteger atomicInteger = new AtomicInteger(1);
+                List<ExamStudent> examStudents = new ArrayList<>();
+                SerialNumberParams ticketNumberParams = new SerialNumberParams("ticketNumber-" + schoolId, DateUtil.format(new Date(), "yyyyMM"), 6);
+                for (BasicStudent basicStudent : basicStudents) {
+                    ExamStudent examStudent = new ExamStudent();
+                    examStudent.setId(SystemConstant.getDbUuid());
+                    examStudent.setSchoolId(schoolId);
+                    examStudent.setExamDetailCourseId(examDetailCourse.getId());
+                    examStudent.setStudentName(basicStudent.getStudentName());
+                    examStudent.setStudentCode(basicStudent.getStudentCode());
+                    // 准考证号(年月+000001)
+                    examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
+//                    examStudent.setExtendFields(JSON.toJSONString(extendFieldsDtoList));
+                    examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
+                    examStudent.setCreateId(examTaskPrint.getCreateId());
+                    examStudent.setUpdateId(examTaskPrint.getCreateId());
+                    examStudents.add(examStudent);
+                }
+                examStudentService.saveBatch(examStudents);
+            } catch (Exception e) {
+                redisTemplate.opsForValue().set(key, value);
+                throw new RuntimeException(e);
+            }
+
+        }
+
+        // 更改印刷计划状态
+        examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+        examPrintPlanService.updateById(examPrintPlan);
+
+        map.put("examDetailIdList", examDetailIdList);
+        return map;
+    }
+
+    public String createTempNumber(SerialNumberParams serialNumberParams){
+        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
+    }
 }

+ 11 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -9,6 +9,7 @@ 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.AsyncExamTaskPrintService;
 import com.qmth.distributed.print.business.templete.execute.AsyncTaskReviewSampleExportService;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
@@ -72,6 +73,9 @@ public class ExamTaskController {
     @Autowired
     private PrintCommonService printCommonService;
 
+    @Autowired
+    private AsyncExamTaskPrintService asyncExamTaskPrintService;
+
     @Resource
     private BasicMessageService basicMessageService;
 
@@ -549,9 +553,13 @@ public class ExamTaskController {
      */
     @ApiOperation(value = "卷库查询-发布印刷任务")
     @RequestMapping(value = "/create_task_print", method = RequestMethod.POST)
-    public Result createTaskPrint(@RequestBody TaskPrintParams taskPrintParams) {
-        examTaskPrintService.createTaskPrint(taskPrintParams);
-        return ResultUtil.ok(true);
+    public Result createTaskPrint(@RequestBody TaskPrintParams taskPrintParams) throws Exception {
+        List<ExamTaskPrint> list = examTaskPrintService.createTaskPrint(taskPrintParams);
+        Map<String, Object> map = printCommonService.saveTask(taskPrintParams.getPrintPlanId(), TaskTypeEnum.CREATE_TASK_PRINT);
+        map.put("list", list);
+        asyncExamTaskPrintService.importTask(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("创建任务失败");
     }
 
 }

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java

@@ -29,7 +29,9 @@ public enum TaskTypeEnum {
 
     CREATE_PDF("生成pdf"),
 
-    DATA_CALCULATE("数据计算");
+    DATA_CALCULATE("数据计算"),
+
+    CREATE_TASK_PRINT("发布印刷任务");
 
     private String title;