فهرست منبع

新增命题申请

xiaof 3 سال پیش
والد
کامیت
51c3e47065
13فایلهای تغییر یافته به همراه406 افزوده شده و 46 حذف شده
  1. 53 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailList.java
  2. 37 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailParams.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskApplyTemp.java
  4. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskApplyTempService.java
  5. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskPrintService.java
  6. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  7. 19 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  8. 15 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskApplyTempServiceImpl.java
  9. 15 34
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  10. 162 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  11. 39 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceServiceImpl.java
  12. 50 5
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  13. 4 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

+ 53 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailList.java

@@ -0,0 +1,53 @@
+package com.qmth.distributed.print.business.bean.params;
+
+/**
+ * @Date: 2021/4/8.
+ */
+public class ExamDetailList {
+
+    String classId;
+    String className;
+    Integer studentCount;
+    Long printHouseId;
+    String extendFields;
+
+    public String getClassId() {
+        return classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public Long getPrintHouseId() {
+        return printHouseId;
+    }
+
+    public void setPrintHouseId(Long printHouseId) {
+        this.printHouseId = printHouseId;
+    }
+
+    public String getExtendFields() {
+        return extendFields;
+    }
+
+    public void setExtendFields(String extendFields) {
+        this.extendFields = extendFields;
+    }
+}

+ 37 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailParams.java

@@ -0,0 +1,37 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import java.util.List;
+
+/**
+ * @Date: 2021/4/8.
+ */
+public class ExamDetailParams {
+
+    private Long examStartTime;
+    private Long examEndTime;
+    private List<ExamDetailList> list;
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public List<ExamDetailList> getList() {
+        return list;
+    }
+
+    public void setList(List<ExamDetailList> list) {
+        this.list = list;
+    }
+}

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskApplyTemp.java

@@ -38,7 +38,7 @@ public class ExamTaskApplyTemp extends BaseEntity implements Serializable {
     private Long orgId;
 
     /**
-     * 课程代码
+     * 保存内容
      */
     @TableField("exam_task_content")
     private String examTaskContent;

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

@@ -12,4 +12,5 @@ import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
  * @since 2021-03-23
  */
 public interface ExamTaskApplyTempService extends IService<ExamTaskApplyTemp> {
+    ExamTaskApplyTemp stageTaskApply(ExamTaskApplyTemp examTaskApplyTemp);
 }

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

@@ -38,4 +38,6 @@ public interface ExamTaskPrintService extends IService<ExamTaskPrint> {
     List<TaskPrintExtendFieldsDto> listTaskPrintExtendFields();
 
     void submitTaskPrint(ExamTaskPrintParams examTaskPrintParams) throws IOException;
+
+    List<TaskPrintClassDto> listExamTaskClass(String courseCode);
 }

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

@@ -6,6 +6,7 @@ import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.params.ExamTaskApplyParam;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
@@ -203,4 +204,11 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @return
      */
     List<Long> findFlowIdToNotMySelf(Long currentUserId);
+
+    /**
+     * 新增命题申请
+     * @param examTaskApplyTemp
+     * @return
+     */
+    ExamTask submitTaskApply(ExamTaskApplyTemp examTaskApplyTemp);
 }

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

@@ -3,7 +3,9 @@ package com.qmth.distributed.print.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.itextpdf.text.DocumentException;
 import com.qmth.distributed.print.business.bean.dto.PdfDto;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.entity.ExamDetail;
+import com.qmth.distributed.print.business.entity.ExamTaskPrint;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysOrg;
@@ -217,4 +219,21 @@ public interface PrintCommonService {
      * @throws IOException
      */
     public void checkData(Long schoolId, String courseCode, String paperNumber, SysUser user) throws IOException;
+
+    /**
+     * 保存考务数据
+     * @param schoolId
+     * @param extendFields
+     * @param classIds
+     * @param examDetailCourseId
+     * @param sysUser
+     */
+    public int saveBatchStudent(Long schoolId, String extendFields, List<String> classIds, Long examDetailCourseId, SysUser sysUser);
+
+    /**
+     * 生成准考证号
+     * @param serialNumberParams
+     * @return
+     */
+    public String createTempNumber(SerialNumberParams serialNumberParams);
 }

+ 15 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskApplyTempServiceImpl.java

@@ -4,11 +4,26 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
 import com.qmth.distributed.print.business.mapper.ExamTaskApplyTempMapper;
 import com.qmth.distributed.print.business.service.ExamTaskApplyTempService;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
+import java.util.Objects;
+
 /**
  * @Date: 2021/9/6.
  */
 @Service
 public class ExamTaskApplyTempServiceImpl extends ServiceImpl<ExamTaskApplyTempMapper, ExamTaskApplyTemp> implements ExamTaskApplyTempService {
+    @Override
+    public ExamTaskApplyTemp stageTaskApply(ExamTaskApplyTemp examTaskApplyTemp) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        if (Objects.isNull(examTaskApplyTemp.getId())) {
+            examTaskApplyTemp.setSchoolId(schoolId);
+            examTaskApplyTemp.setOrgId(sysUser.getOrgId());
+        }
+        this.saveOrUpdate(examTaskApplyTemp);
+        return examTaskApplyTemp;
+    }
 }

+ 15 - 34
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java

@@ -76,11 +76,8 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
     @Resource
     TBTaskService tbTaskService;
 
-    @Resource
-    AsyncCreatePdfTempleteService asyncCreatePdfTempleteService;
-
-    @Resource
-    ConvertUtil convertUtil;
+    @Autowired
+    PrintCommonService printCommonService;
 
     @Resource
     RedisUtil redisUtil;
@@ -194,7 +191,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
             ExamDetail examDetail = new ExamDetail();
             examDetail.setId(SystemConstant.getDbUuid());
-            examDetail.setPackageCode(createTempNumber(serialNumberParams));
+            examDetail.setPackageCode(printCommonService.createTempNumber(serialNumberParams));
             examDetail.setSchoolId(schoolId);
             examDetail.setOrgId(sysUser.getOrgId());
             examDetail.setPrintPlanId(examTaskPrint.getPrintPlanId());
@@ -228,7 +225,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             examDetailCourse.setCreateId(examTaskPrint.getCreateId());
             examDetailCourseService.save(examDetailCourse);
 
-            saveBatchStudent(examTaskPrint, classIds, examDetailCourse.getId(), sysUser);
+            printCommonService.saveBatchStudent(examTaskPrint.getSchoolId(), examTaskPrint.getExtendFields(), classIds, examDetailCourse.getId(), sysUser);
 
             // 更改印刷计划状态
             examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
@@ -275,7 +272,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             examStudentUpdateWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourse.getId());
             examStudentService.remove(examStudentUpdateWrapper);
 
-            saveBatchStudent(taskPrint, classIds, examDetailCourse.getId(), sysUser);
+            printCommonService.saveBatchStudent(taskPrint.getSchoolId(), taskPrint.getExtendFields(), classIds, examDetailCourse.getId(), sysUser);
 
             return examDetail;
         }
@@ -364,30 +361,17 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
         }
     }
 
-    private void saveBatchStudent(ExamTaskPrint examTaskPrint, List<String> classIds, Long examDetailCourseId, SysUser sysUser) {
-        QueryWrapper<BasicStudent> queryWrapper1 = new QueryWrapper<>();
-        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, examTaskPrint.getSchoolId()).in(BasicStudent::getClazzId, classIds);
-        List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper1);
-        AtomicInteger atomicInteger = new AtomicInteger(1);
-        List<ExamStudent> examStudents = new ArrayList<>();
-        SerialNumberParams ticketNumberParams = new SerialNumberParams("ticketNumber-" + examTaskPrint.getSchoolId(), DateUtil.format(new Date(), "yyyyMM"), 6);
-        for (BasicStudent basicStudent : basicStudents) {
-            ExamStudent examStudent = new ExamStudent();
-            examStudent.setId(SystemConstant.getDbUuid());
-            examStudent.setSchoolId(examTaskPrint.getSchoolId());
-            examStudent.setOrgId(sysUser.getOrgId());
-            examStudent.setExamDetailCourseId(examDetailCourseId);
-            examStudent.setStudentName(basicStudent.getStudentName());
-            examStudent.setStudentCode(basicStudent.getStudentCode());
-            // 准考证号(年月+000001)
-            examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
-            examStudent.setExtendFields(examTaskPrint.getExtendFields());
-            examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
-            examStudent.setClazzId(String.valueOf(basicStudent.getClazzId()));
-            examStudent.setCreateId(examTaskPrint.getCreateId());
-            examStudents.add(examStudent);
+    @Override
+    public List<TaskPrintClassDto> listExamTaskClass(String courseCode) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        List<BasicUserCourse> courseList = basicUserCourseService.listBySchoolIdAndCourseCode(schoolId, courseCode);
+        Set<String> stringList = courseList.stream().map(m -> String.valueOf(m.getClazzId())).collect(Collectors.toSet());
+
+        if (!CollectionUtils.isEmpty(stringList)) {
+            List<TaskPrintClassDto> taskPrintClassDtos = basicStudentService.listByClass(schoolId, stringList);
+            return taskPrintClassDtos;
         }
-        examStudentService.saveBatch(examStudents);
+        return null;
     }
 
     private void validateClass(List<ExamTaskPrint> examTaskPrints, List<String> classIds) {
@@ -403,7 +387,4 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
         }
     }
 
-    public String createTempNumber(SerialNumberParams serialNumberParams) {
-        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
-    }
 }

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

@@ -9,7 +9,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.params.ExamDetailList;
+import com.qmth.distributed.print.business.bean.params.ExamDetailParams;
 import com.qmth.distributed.print.business.bean.params.ExamTaskApplyParam;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.*;
@@ -18,7 +21,6 @@ import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncCreatePdfTempleteService;
 import com.qmth.distributed.print.business.templete.execute.AsyncPaperReviewPdfExportService;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
-import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
@@ -29,7 +31,6 @@ import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.excel.ExcelError;
-import javafx.beans.binding.ObjectExpression;
 import org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.runtime.ProcessInstance;
@@ -140,6 +141,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     BasicCardRuleService basicCardRuleService;
 
+    @Autowired
+    ExamPrintPlanService examPrintPlanService;
+
     @Resource
     RedisUtil redisUtil;
 
@@ -1500,6 +1504,162 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTaskMapper.findFlowIdToNotMySelf(currentUserId);
     }
 
+    @Override
+    public ExamTask submitTaskApply(ExamTaskApplyTemp examTaskApplyTemp) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        JSONObject jsonObject = JSONObject.parseObject(examTaskApplyTemp.getExamTaskContent());
+
+        // 新建命题任务
+        ExamTask examTask = JSONObject.parseObject(String.valueOf(jsonObject.get("examTask")), ExamTask.class);
+        try {
+            BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId();
+            if (basicExamRule == null) {
+                throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
+            }
+
+            if (StringUtils.isNotBlank(examTask.getPaperNumber())) {
+                QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
+                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTask.getPaperNumber());
+                if (Objects.nonNull(examTask.getId())) {
+                    taskQueryWrapper.lambda().ne(ExamTask::getId, examTask.getId());
+                }
+                ExamTask task = this.getOne(taskQueryWrapper);
+                if (task != null) {
+                    throw ExceptionResultEnum.ERROR.exception("试卷编号已存在");
+                }
+            } else {
+                // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
+                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                examTask.setPaperNumber(paperNumber);
+            }
+
+            examTask.setId(SystemConstant.getDbUuid());
+            examTask.setSchoolId(schoolId);
+            examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
+            examTask.setReview(basicExamRule.getReview());
+            examTask.setUserId(sysUser.getId());
+            examTask.setStatus(ExamStatusEnum.SUBMIT);
+            examTask.setCreateId(sysUser.getId());
+            examTask.setCreateTime(System.currentTimeMillis());
+
+            if (Objects.isNull(examTask.getFlowId())) {
+                //TODO 这里以后要判断学校code来取流程key
+                if (basicExamRule.getReview()) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                    ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+                    examTask.setFlowId(Long.parseLong(processInstance.getId()));
+                }
+            }
+            this.save(examTask);
+
+            // 新建试卷
+            ExamTaskDetail examTaskDetail = JSONObject.parseObject(String.valueOf(jsonObject.get("examTaskDetail")), ExamTaskDetail.class);
+            validSubmitParam(examTaskDetail);
+            // 已曝光试卷和未曝光试卷赋值(新增时,已曝光试卷为null,未曝光试卷为paper_type)
+            examTaskDetail.setId(SystemConstant.getDbUuid());
+            examTaskDetail.setUnexposedPaperType(examTaskDetail.getPaperType());
+            examTaskDetail.setExamTaskId(examTask.getId());
+            examTaskDetail.setCreateId(sysUser.getId());
+            examTaskDetail.setCreateTime(System.currentTimeMillis());
+
+            examTaskDetailService.save(examTaskDetail);
+
+            ExamPrintPlan examPrintPlan = JSONObject.parseObject(String.valueOf(jsonObject.get("examPrintPlan")), ExamPrintPlan.class);
+
+            ExamDetailParams examDetailParams = JSONObject.parseObject(String.valueOf(jsonObject.get("examDetail")), ExamDetailParams.class);
+            List<String> printContentList = JSONObject.parseArray(examPrintPlan.getPrintContent(), String.class);
+            examPrintPlan.setId(SystemConstant.getDbUuid());
+            examPrintPlan.setSchoolId(schoolId);
+            examPrintPlan.setOrgId(sysUser.getOrgId());
+            examPrintPlan.setPrintContent(String.join(",", printContentList));
+            examPrintPlan.setExamStartTime(Long.valueOf(examDetailParams.getExamStartTime()));
+            examPrintPlan.setExamEndTime(Long.valueOf(examDetailParams.getExamEndTime()));
+            // 课程+试卷编号
+            examPrintPlan.setName(examTask.getCourseName() + examTask.getPaperNumber());
+            examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+            examPrintPlan.setCreateId(sysUser.getId());
+            examPrintPlanService.save(examPrintPlan);
+
+            List<ExamDetailList> examDetailLists = JSONObject.parseArray(String.valueOf(examDetailParams.getList()), ExamDetailList.class);
+
+            int i = 1;
+            for (ExamDetailList examDetailList : examDetailLists) {
+                SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
+                ExamDetail examDetail = new ExamDetail();
+                examDetail.setId(SystemConstant.getDbUuid());
+                examDetail.setPackageCode(printCommonService.createTempNumber(serialNumberParams));
+                examDetail.setSchoolId(schoolId);
+                examDetail.setOrgId(sysUser.getOrgId());
+                examDetail.setPrintPlanId(examPrintPlan.getId());
+                examDetail.setPrintPlanName(examPrintPlan.getName());
+                examDetail.setExamPlace("考场" + i);
+                examDetail.setExamRoom("考点" + i);
+                examDetail.setStatus(ExamDetailStatusEnum.NEW);
+                examDetail.setExamStartTime(examDetailParams.getExamStartTime());
+                examDetail.setExamEndTime(examDetailParams.getExamEndTime());
+                examDetail.setTotalSubjects(examDetailList.getStudentCount());
+                examDetail.setExamDataSource(ExamDataSourceEnum.EXAM_TASK);
+                examDetail.setNormal(true);
+                examDetail.setPrintHouseId(Long.valueOf(examDetailList.getPrintHouseId()));
+                examDetail.setCreateId(sysUser.getId());
+                examDetail.setCreateTime(System.currentTimeMillis());
+                examDetailService.save(examDetail);
+
+                List<String> classIds = Arrays.asList(examDetailList.getClassId().split(","));
+                ExamDetailCourse examDetailCourse = new ExamDetailCourse();
+                examDetailCourse.setId(SystemConstant.getDbUuid());
+                examDetailCourse.setSchoolId(schoolId);
+                examDetailCourse.setOrgId(sysUser.getOrgId());
+                examDetailCourse.setExamDetailId(examDetail.getId());
+                examDetailCourse.setCourseCode(examTask.getCourseCode());
+                examDetailCourse.setCourseName(examTask.getCourseName());
+                examDetailCourse.setPaperNumber(examTask.getPaperNumber());
+                examDetailCourse.setClazzId(examDetailList.getClassId());
+                examDetailCourse.setTotalSubjects(examDetailList.getStudentCount());
+                examDetailCourse.setCreateId(sysUser.getId());
+                examDetailCourseService.save(examDetailCourse);
+
+                // 更新实际考生数量
+                int studentCount = printCommonService.saveBatchStudent(schoolId, examDetailList.getExtendFields(), classIds, examDetailCourse.getId(), sysUser);
+                if (studentCount - examDetail.getTotalSubjects().intValue() != 0) {
+                    UpdateWrapper<ExamDetail> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(ExamDetail::getTotalSubjects, studentCount).eq(ExamDetail::getId, examDetail.getId());
+                    examDetailService.update(updateWrapper);
+                }
+                if (studentCount - examDetailCourse.getTotalSubjects().intValue() != 0) {
+                    UpdateWrapper<ExamDetailCourse> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(ExamDetailCourse::getTotalSubjects, studentCount).eq(ExamDetailCourse::getId, examDetailCourse.getId());
+                    examDetailCourseService.update(updateWrapper);
+                }
+                i++;
+            }
+
+            if (Objects.nonNull(examTask.getFlowId())) {
+                // 审核一级
+                Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
+                if (Objects.nonNull(task)) {
+                    Map<String, Object> map1 = new HashMap<>();
+                    map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
+                    activitiService.taskApprove(map1);
+                }
+            }
+
+            return examTask;
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (e instanceof ActivitiObjectNotFoundException) {
+                ResultUtil.error("流程不存在");
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     /**
      * 简单校验提交参数
      *

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

@@ -12,6 +12,7 @@ import com.itextpdf.text.DocumentException;
 import com.itextpdf.text.pdf.PdfReader;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.PdfDto;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
@@ -48,6 +49,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * @Description: 公共服务service impl
@@ -119,6 +121,12 @@ public class PrintCommonServiceServiceImpl implements PrintCommonService {
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Resource
+    BasicStudentService basicStudentService;
+
+    @Resource
+    ExamStudentService examStudentService;
+
     @Resource
     RedisUtil redisUtil;
 
@@ -897,4 +905,35 @@ public class PrintCommonServiceServiceImpl implements PrintCommonService {
             }
         }
     }
+
+    public int saveBatchStudent(Long schoolId, String extendFields, List<String> classIds, Long examDetailCourseId, SysUser sysUser) {
+        QueryWrapper<BasicStudent> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, schoolId).in(BasicStudent::getClazzId, classIds);
+        List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper1);
+        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.setOrgId(sysUser.getOrgId());
+            examStudent.setExamDetailCourseId(examDetailCourseId);
+            examStudent.setStudentName(basicStudent.getStudentName());
+            examStudent.setStudentCode(basicStudent.getStudentCode());
+            // 准考证号(年月+000001)
+            examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
+            examStudent.setExtendFields(extendFields);
+            examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
+            examStudent.setClazzId(String.valueOf(basicStudent.getClazzId()));
+            examStudent.setCreateId(sysUser.getId());
+            examStudents.add(examStudent);
+        }
+        examStudentService.saveBatch(examStudents);
+        return examStudents.size();
+    }
+
+    public String createTempNumber(SerialNumberParams serialNumberParams) {
+        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
+    }
 }

+ 50 - 5
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -91,6 +91,9 @@ public class ExamTaskController {
     @Resource
     ActivitiService activitiService;
 
+    @Autowired
+    ExamTaskApplyTempService examTaskApplyTempService;
+
 
     /**
      * 命题任务管理-查询
@@ -592,6 +595,48 @@ public class ExamTaskController {
         return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
     }
 
+    /**
+     * 班级列表
+     *
+     * @param courseCode
+     * @return
+     */
+    @ApiOperation(value = "命题任务管理-命题申请-班级列表")
+    @RequestMapping(value = "/list_task_apply_class", method = RequestMethod.POST)
+    public Result listTaskApplyClass(@RequestParam(value = "courseCode") String courseCode) {
+        return ResultUtil.ok(examTaskPrintService.listExamTaskClass(courseCode));
+    }
+
+    /**
+     * 命题任务管理-命题申请-暂存
+     *
+     * @param examTaskApplyTemp
+     * @return
+     */
+    @ApiOperation(value = "命题任务管理-命题申请-暂存")
+    @RequestMapping(value = "/stage_task_apply", method = RequestMethod.POST)
+    public Result stageTaskApply(@RequestBody ExamTaskApplyTemp examTaskApplyTemp) {
+        ExamTaskApplyTemp task = examTaskApplyTempService.stageTaskApply(examTaskApplyTemp);
+        return ResultUtil.ok(task);
+    }
+
+    /**
+     * 命题任务管理-命题申请-提交
+     *
+     * @param examTaskApplyTemp
+     * @return
+     */
+    @ApiOperation(value = "命题任务管理-命题申请-提交")
+    @RequestMapping(value = "/submit_task_apply", method = RequestMethod.POST)
+    public Result submitTaskApply(@RequestBody ExamTaskApplyTemp examTaskApplyTemp) throws IOException {
+        ExamTask examTask = examTaskService.submitTaskApply(examTaskApplyTemp);
+        if (!examTask.getReview()) {
+            // 校验是否可以提交打印状态
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+        }
+        return ResultUtil.ok();
+    }
+
     /**
      * 入库申请-新建命题任务
      *
@@ -601,17 +646,17 @@ public class ExamTaskController {
     @ApiOperation(value = "入库申请-新建命题任务-暂存/提交")
     @RequestMapping(value = "/save_task_apply", method = RequestMethod.POST)
     public Result saveTaskApply(@RequestBody ExamTaskApplyParam examTaskApplyParam) throws IOException {
-        ExamTask task = examTaskService.saveExamTaskAndExamTaskDetail(examTaskApplyParam);
-        if (examTaskApplyParam.getExamTaskDetail().getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && !task.getReview()) {
+        ExamTask examTask = examTaskService.saveExamTaskAndExamTaskDetail(examTaskApplyParam);
+        if (examTaskApplyParam.getExamTaskDetail().getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && !examTask.getReview()) {
             // 校验是否可以提交打印状态
-            printCommonService.checkData(task.getSchoolId(), task.getCourseCode(), task.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
 
-        return ResultUtil.ok(task);
+        return ResultUtil.ok(examTask);
     }
 
     /**
-     * 入库申请-新建命题任务
+     * 入库申请-新建命题任务-取消/删除
      *
      * @param examTaskId
      * @return

+ 4 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -301,9 +301,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
 
     @Override
     public List<SysOrg> findDeepByOrgIdAndType(OrgTypeEnum orgTypeEnum) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-
-        return this.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getType, orgTypeEnum).eq(SysOrg::getEnable, true)
-                .in(SysOrg::getSchoolId, schoolId));
+        Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
+        return this.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getType, orgTypeEnum)
+                .eq(SysOrg::getEnable, true)
+                .in(SysOrg::getId, orgIds));
     }
 }