Răsfoiți Sursa

Merge branch 'dev_v3.2.3' into dev_v3.2.4
merge

wangliang 2 ani în urmă
părinte
comite
2e50640c78
37 a modificat fișierele cu 253 adăugiri și 154 ștergeri
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/listener/ProcessEventListener.java
  2. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java
  3. 15 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskSync.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  5. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  6. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  7. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  8. 3 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  9. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPaperStructureService.java
  10. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  11. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  12. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  13. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  14. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  15. 6 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  16. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java
  17. 8 8
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  18. 4 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  19. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  20. 68 47
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  21. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java
  22. 7 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  23. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExaminationImportTemplateService.java
  24. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  25. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  26. 10 2
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  27. 24 6
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  28. 1 1
      distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml
  29. 1 0
      distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml
  30. 4 0
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  31. 3 0
      distributed-print-business/src/main/resources/mapper/ExamTaskDetailMapper.xml
  32. 7 2
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  33. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPaperStructureController.java
  34. 32 30
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  35. 9 8
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  36. 1 1
      distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java
  37. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/activiti/custom/listener/ProcessEventListener.java

@@ -93,7 +93,7 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                             //取命题老师ID
                             SysUser sysUser = sysUserService.getById(((ExamTask) object).getUserId());
                             try {
-                                printCommonService.checkData(((ExamTask) object).getSchoolId(), ((ExamTask) object).getCourseCode(), ((ExamTask) object).getPaperNumber(), sysUser);
+                                printCommonService.checkData(((ExamTask) object).getSchoolId(), ((ExamTask) object).getExamId(), ((ExamTask) object).getCourseCode(), ((ExamTask) object).getPaperNumber(), sysUser);
                             } catch (IOException e) {
                                 throw ExceptionResultEnum.ERROR.exception("生成pdf失败");
                             }

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

@@ -42,6 +42,10 @@ public class ExamDetail extends BaseEntity implements Serializable {
     @TableField("print_plan_id")
     private Long printPlanId;
 
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("exam_id")
+    private Long examId;
+
     @TableField("print_plan_name")
     private String printPlanName;
     /**
@@ -171,6 +175,14 @@ public class ExamDetail extends BaseEntity implements Serializable {
         this.printPlanId = printPlanId;
     }
 
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
     public String getPrintPlanName() {
         return printPlanName;
     }

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

@@ -39,6 +39,11 @@ public class ExamTaskSync implements Serializable {
     @TableField("school_id")
     private Long schoolId;
 
+    @ApiModelProperty(value = "考试ID")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("exam_id")
+    private Long examId;
+
     /**
      * 课程代码
      */
@@ -88,9 +93,10 @@ public class ExamTaskSync implements Serializable {
     public ExamTaskSync() {
     }
 
-    public ExamTaskSync(Long schoolId, String courseCode, String paperNumber, String orgCode, Integer thirdRelateId, ExamTaskSyncStatusEnum syncStatus, Long syncUserId, Long syncStartTime, Long syncEndTime) {
+    public ExamTaskSync(Long schoolId, Long examId, String courseCode, String paperNumber, String orgCode, Integer thirdRelateId, ExamTaskSyncStatusEnum syncStatus, Long syncUserId, Long syncStartTime, Long syncEndTime) {
         this.id = SystemConstant.getDbUuid();
         this.schoolId = schoolId;
+        this.examId = examId;
         this.courseCode = courseCode;
         this.paperNumber = paperNumber;
         this.orgCode = orgCode;
@@ -117,6 +123,14 @@ public class ExamTaskSync implements Serializable {
         this.schoolId = schoolId;
     }
 
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
     public String getCourseCode() {
         return courseCode;
     }

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java

@@ -36,7 +36,7 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
-    List<ExamDetailCourse> listByAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId,@Param("courseCode") String courseCode,@Param("paperNumber") String paperNumber);
+    List<ExamDetailCourse> listByAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId,@Param("examId") Long examId,@Param("courseCode") String courseCode,@Param("paperNumber") String paperNumber);
 
     List<ExamDetailCourseDto> listByPrintPlanIdAndExamTaskId(@Param("printPlanIds") List<Long> printPlanIds, @Param("examTaskId") Long examTaskId);
 

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

@@ -77,6 +77,8 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
                                                       @Param("examDetailId") Long examDetailId);
 
     PrintTaskTotalDto taskTotalData(@Param("schoolId") Long schoolId,
+                                    @Param("semesterId") Long semesterId,
+                                    @Param("examId") Long examId,
                                     @Param("printPlanId") Long printPlanId,
                                     @Param("status") String status,
                                     @Param("courseCode") String courseCode,

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java

@@ -80,7 +80,7 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
      * @param flowStatus
      * @return
      */
-    List<ExamTask> findByFlowStatus(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("courseName") String courseName, @Param("paperNumber") String paperNumber, @Param("flowStatus") String flowStatus);
+    List<ExamTask> findByFlowStatus(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("courseName") String courseName, @Param("paperNumber") String paperNumber, @Param("flowStatus") String flowStatus);
 
     /**
      * 根据试卷编号查询考场详细数据集(印刷计划状态为‘PRINTING’、‘PRINTING_FINISH‘的)

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

@@ -35,7 +35,7 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber);
 
-    List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
+    List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber);
 
     IPage<SyncExamTaskDto> listSyncCourseByPrintPlanId(Long semesterId, Long examId, Long orgId, SyncCardTypeEnum cardType, ExamTaskSyncStatusEnum syncStatus, String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize);
 

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

@@ -47,7 +47,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     IPage<PrintTaskDto> listPrintTask(Long semesterId, Long examId, Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId, Integer pageNumber, Integer pageSize);
 
-    PrintTaskTotalDto taskTotalData(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId);
+    PrintTaskTotalDto taskTotalData(Long semesterId, Long examId, Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId);
 
     List<JSONObject> taskViewPDF(Long examDetailId);
 
@@ -166,7 +166,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * @param serialNumberParams 序列号生成参数
      * @param sysUser
      */
-    List<Long> disposeExamDetailByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams, SysUser sysUser);
+    List<Long> disposeExamDetailByExaminationExcel(Long examId, List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams, SysUser sysUser);
 
     /**
      * 根据考务数据Excel数据处理考务-科目表
@@ -209,7 +209,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     List<Map> listStudentByExamDetailCourseId(Long schoolId, Long examDetailCourseId, String ticketNumber, String type);
 
-    List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
+    List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber);
 
     List<ExamDetailCourse> listSyncPaperNumberByPrintPlanId(Long printPlanId);
 

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

@@ -88,5 +88,5 @@ public interface ExamPaperStructureService extends IService<ExamPaperStructure>
      * @param paperNumber 试卷编号
      * @param transferId  转办对象ID
      */
-    boolean transfer(String courseCode, String paperNumber, Long transferId);
+    boolean transfer(Long examId, String courseCode, String paperNumber, Long transferId);
 }

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

@@ -101,7 +101,7 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
      */
     ExamPrintPlan findByExamDetailId(Long examDetailId);
 
-    void sendNoticeUploadStructure(Long id, SysUser sysUser);
+//    void sendNoticeUploadStructure(Long id, SysUser sysUser);
 
     /**
      * 根据学校id和试卷编号查询印刷计划

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

@@ -81,7 +81,7 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     void paperDownload(HttpServletResponse response, Long examTaskId) throws Exception;
 
-    ExamTask getByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
+    ExamTask getByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber);
 
     IPage<ClientExamTaskDto> listTryTask(Long schoolId, String machineCode, Long orgId, Long printPlanId, String courseCode, String paperNumber, Boolean isTry, Boolean isPass, Integer pageNumber, Integer pageSize);
 
@@ -94,7 +94,7 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @param paperNumber 考务数据导入的试卷编号
      * @param courseCode  考务数据导入的课程代码
      */
-    void verifyCourseCodeByPaperNumber(Long schoolId, String paperNumber, String courseCode);
+    void verifyCourseCodeByPaperNumber(Long schoolId, Long examId, String paperNumber, String courseCode);
 
     /**
      * 根据考务-考场检验该考场下的所有命题任务是否已经完成,全部完成则生成pdf
@@ -102,7 +102,7 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @param examDetailId 考务考场id
      * @param user         用户id
      */
-    void checkDataByExamination(Long examDetailId, SysUser user) throws IOException;
+    void checkDataByExamination(Long printPlanId, Long examDetailId, SysUser user) throws IOException;
 
     List<ExamTask> listExamTaskByCardId(Long cardId);
 
@@ -151,7 +151,7 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @param flowStatus
      * @return
      */
-    List<ExamTask> findByFlowStatus(Long schoolId, String courseCode, String courseName, String paperNumber, FlowStatusEnum flowStatus);
+    List<ExamTask> findByFlowStatus(Long schoolId, Long examId, String courseCode, String courseName, String paperNumber, FlowStatusEnum flowStatus);
 
     void removeByExamTaskId(Long examTaskId);
 
@@ -190,7 +190,7 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @param paperNumber 试卷编号
      * @return 考试对象
      */
-    ExamObjectDto findExamObjectDtoByPaperNumber(String paperNumber);
+    ExamObjectDto findExamObjectDtoByPaperNumber(Long examId, String paperNumber);
 
     /**
      * 根据流程id查找examtask

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

@@ -228,7 +228,7 @@ public interface PrintCommonService {
      * @param schoolId
      * @return
      */
-    public String createPaperNumber(Long schoolId);
+    public String createPaperNumber(Long schoolId, Long examId);
 
     /**
      * 校验是否可以提交
@@ -239,7 +239,7 @@ public interface PrintCommonService {
      * @param user
      * @throws IOException
      */
-    public void checkData(Long schoolId, String courseCode, String paperNumber, SysUser user) throws IOException;
+    public void checkData(Long schoolId, Long examId, String courseCode, String paperNumber, SysUser user) throws IOException;
 
     /**
      * 保存考务数据

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

@@ -141,7 +141,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                 ExamTaskSyncStatusEnum syncStatus = ExamTaskSyncStatusEnum.STARTING;
 
                 if (examTaskSync == null) {
-                    examTaskSync = new ExamTaskSync(schoolId, examTask.getCourseCode(), examTask.getPaperNumber(), orgCode, Math.toIntExact(thirdRelateId), syncStatus, sysUser.getId(), System.currentTimeMillis(), null);
+                    examTaskSync = new ExamTaskSync(schoolId, examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), orgCode, Math.toIntExact(thirdRelateId), syncStatus, sysUser.getId(), System.currentTimeMillis(), null);
                 } else {
                     examTaskSync.setSyncStatus(syncStatus);
                     examTaskSync.setSyncStartTime(System.currentTimeMillis());

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

@@ -86,8 +86,8 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
     }
 
     @Override
-    public List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
-        return this.baseMapper.listByAndCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+    public List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber) {
+        return this.baseMapper.listByAndCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
     }
 
     @Override

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

@@ -151,11 +151,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public PrintTaskTotalDto taskTotalData(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId) {
+    public PrintTaskTotalDto taskTotalData(Long semesterId, Long examId, Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Long printStartTime, Long printEndTime, Long printHouseId) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
-        PrintTaskTotalDto printTaskTotalDto = this.baseMapper.taskTotalData(schoolId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, printHouseId, dpr);
+        PrintTaskTotalDto printTaskTotalDto = this.baseMapper.taskTotalData(schoolId, semesterId, examId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, printHouseId, dpr);
 
         if (printTaskTotalDto != null) {
             // 试卷总计
@@ -515,7 +515,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public List<Long> disposeExamDetailByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams, SysUser sysUser) {
+    public List<Long> disposeExamDetailByExaminationExcel(Long examId, List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams, SysUser sysUser) {
         List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
             Long schoolIdId = e.getSchoolId();
             Map<String, Object> map = new HashMap<>();
@@ -559,6 +559,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examDetail.setOrgId(sysUser.getOrgId());
             examDetail.setPrintPlanId(Long.valueOf(String.valueOf(map.get("printPlanId"))));
             examDetail.setPrintPlanName(String.valueOf(map.get("printPlanName")));
+            examDetail.setExamId(examId);
             examDetail.setExamPlace(examPlace);
             examDetail.setExamRoom(examRoom);
             examDetail.setStatus(ExamDetailStatusEnum.NEW);
@@ -915,8 +916,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
-        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+    public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber) {
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
         if (examDetailCourses != null && examDetailCourses.size() > 0) {
             Set<Long> examDetailIds = examDetailCourses.stream().map(m -> m.getExamDetailId()).collect(Collectors.toSet());
             List<ExamDetail> examDetails = this.listByIds(examDetailIds);

+ 5 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java

@@ -216,7 +216,7 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         // 上传成功
         this.updateById(examPaperStructureTemp);
 
-        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructureTemp.getSchoolId(), examPaperStructureTemp.getCourseCode(), examPaperStructureTemp.getPaperNumber());
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructureTemp.getSchoolId(), examPaperStructureTemp.getExamId(), examPaperStructureTemp.getCourseCode(), examPaperStructureTemp.getPaperNumber());
         examPaperStructureTemp.setPaperNumberId(String.valueOf(examTask.getPaperNumberId()));
         return examPaperStructureTemp;
     }
@@ -275,7 +275,7 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         if (!ExamPaperStructureStatusEnum.FINISH.equals(examPaperStructure.getStatus())) {
             throw ExceptionResultEnum.ERROR.exception("试卷结构没有同步成功");
         }
-        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructure.getSchoolId(), examPaperStructure.getCourseCode(), examPaperStructure.getPaperNumber());
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructure.getSchoolId(), examPaperStructure.getExamId(), examPaperStructure.getCourseCode(), examPaperStructure.getPaperNumber());
         String paperType = examPaperStructure.getPaperType();
         List<Map> list = new ArrayList<>();
         for (String str : paperType.split(",")) {
@@ -452,9 +452,9 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
     }
 
     @Override
-    public boolean transfer(String courseCode, String paperNumber, Long transferId) {
+    public boolean transfer(Long examId, String courseCode, String paperNumber, Long transferId) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
         // transferId为空时,则为打回给命题老师
         UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(ExamTask::getTransferId, transferId)
@@ -530,7 +530,7 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
 
 
     private Map<String, String> createExamTaskAttachmentIds(ExamPaperStructure examPaperStructure) {
-        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructure.getSchoolId(), examPaperStructure.getCourseCode(), examPaperStructure.getPaperNumber());
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructure.getSchoolId(), examPaperStructure.getExamId(), examPaperStructure.getCourseCode(), examPaperStructure.getPaperNumber());
 
         QueryWrapper<ExamTaskDetail> examTaskDetailQueryWrapper = new QueryWrapper<>();
         examTaskDetailQueryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTask.getId());

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

@@ -472,14 +472,14 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         return examPrintPlan;
     }
 
-    @Override
-    public void sendNoticeUploadStructure(Long id, SysUser sysUser) {
-        List<ExamDetailCourse> examDetailCourses = examDetailService.listSyncPaperNumberByPrintPlanId(id);
-        for (ExamDetailCourse examDetailCours : examDetailCourses) {
-            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examDetailCours.getSchoolId(), examDetailCours.getCourseCode(), examDetailCours.getPaperNumber());
-            basicMessageService.sendNoticeUploadStructure(examTask.getPaperNumber(), examTask.getCourseCode(), examTask.getCourseName(), examTask.getUserId(), MessageEnum.NOTICE_OF_UPLOAD_STRUCTURE, sysUser);
-        }
-    }
+//    @Override
+//    public void sendNoticeUploadStructure(Long id, SysUser sysUser) {
+//        List<ExamDetailCourse> examDetailCourses = examDetailService.listSyncPaperNumberByPrintPlanId(id);
+//        for (ExamDetailCourse examDetailCours : examDetailCourses) {
+//            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examDetailCours.getSchoolId(), examDetailCours.getCourseCode(), examDetailCours.getPaperNumber());
+//            basicMessageService.sendNoticeUploadStructure(examTask.getPaperNumber(), examTask.getCourseCode(), examTask.getCourseName(), examTask.getUserId(), MessageEnum.NOTICE_OF_UPLOAD_STRUCTURE, sysUser);
+//        }
+//    }
 
     @Override
     public List<ExamPrintPlan> findByPaperNumber(Long schoolId, String paperNumber) {

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

@@ -108,7 +108,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     @Override
     public boolean enable(ExamTaskDetail examTaskDetail) {
         ExamTask examTask = examTaskService.getById(examTaskDetail.getId());
-        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber());
+        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber());
         if (examDetails != null && examDetails.size() > 0) {
             // 有考场提交打印,不能禁用启用
             long count = examDetails.stream().filter(m -> !ExamDetailStatusEnum.NEW.name().equals(m.getStatus().name()) && !ExamDetailStatusEnum.READY.name().equals(m.getStatus().name())).count();
@@ -207,7 +207,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
             }
 
             // 更新关联卷型
-            ExamTask newExamTask = examTaskService.getByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), paperParam.getPaperNumber());
+            ExamTask newExamTask = examTaskService.getByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), paperParam.getPaperNumber());
             UpdateWrapper<ExamTaskDetail> updateWrapper = new UpdateWrapper<>();
             updateWrapper.lambda().set(ExamTaskDetail::getRelatePaperType, paperParam.getRelatePaperType()).eq(ExamTaskDetail::getExamTaskId, newExamTask.getId());
             this.update(updateWrapper);
@@ -434,7 +434,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         }
 
         ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
-        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber());
+        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber());
         if (!CollectionUtils.isEmpty(examDetails)) {
             StringJoiner stringJoiner = new StringJoiner("_");
             stringJoiner.add(String.valueOf(examDetails.get(0).getSchoolId()))
@@ -574,7 +574,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         }
 
         // 提交印刷的考场,不允许修改关联试卷
-        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber());
+        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber());
         if (!CollectionUtils.isEmpty(examDetails)) {
             List<ExamDetail> examDetails1 = examDetails.stream().filter(m -> !ExamDetailStatusEnum.NEW.equals(m.getStatus())
                     && !ExamDetailStatusEnum.READY.equals(m.getStatus())

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

@@ -198,6 +198,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             examDetail.setOrgId(sysUser.getOrgId());
             examDetail.setPrintPlanId(examTaskPrint.getPrintPlanId());
             examDetail.setPrintPlanName(examPrintPlan.getName());
+            examDetail.setExamId(examPrintPlan.getExamId());
             examDetail.setExamPlace(examTaskPrint.getExamPlace());
             examDetail.setExamRoom(examTaskPrint.getExamRoom());
             examDetail.setStatus(ExamDetailStatusEnum.NEW);

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

@@ -413,14 +413,14 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             if (StringUtils.isNotBlank(examTask.getPaperNumber())) {
                 QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
-                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTask.getPaperNumber());
+                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, examTask.getPaperNumber());
                 ExamTask task = this.getOne(taskQueryWrapper);
                 if (task != null) {
-                    throw ExceptionResultEnum.ERROR.exception("试卷编号已存在");
+                    throw ExceptionResultEnum.ERROR.exception("试卷编号在当前考试下已存在");
                 }
             } else {
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
-                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                String paperNumber = printCommonService.createPaperNumber(schoolId, examId);
                 examTask.setPaperNumber(paperNumber);
             }
             examTask.setPaperNumberId(SystemConstant.getDbUuid());
@@ -500,7 +500,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     if (courseCodePaperNumberMap.containsKey(userImportDto.getCourseCode())) {
                         String paperNumber = courseCodePaperNumberMap.get(userImportDto.getCourseCode());
                         if (paperNumber != null && paperNumber.equals(userImportDto.getPaperNumber())) {
-                            excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]与[试卷编号]不唯一"));
+                            excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]与[试卷编号]有相同数据"));
                         }
                     } else {
                         courseCodePaperNumberMap.put(userImportDto.getCourseCode(), userImportDto.getPaperNumber());
@@ -597,15 +597,15 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                         stringJoiner.add(error);
                         continue;
                     }
-                    QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
-                    taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTaskTemp.getPaperNumber());
-                    ExamTask task1 = this.getOne(taskQueryWrapper);
-                    if (task1 != null) {
-                        // 试卷编号已存在,直接跳过
-                        String error = examTaskTemp.getPaperNumber() + "已存在";
-                        stringJoiner.add(error);
-                        continue;
-                    }
+//                    QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
+//                    taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTaskTemp.getPaperNumber());
+//                    ExamTask task1 = this.getOne(taskQueryWrapper);
+//                    if (task1 != null) {
+//                        // 试卷编号已存在,直接跳过
+//                        String error = examTaskTemp.getPaperNumber() + "已存在";
+//                        stringJoiner.add(error);
+//                        continue;
+//                    }
                     paperNumbers.add(examTaskTemp.getPaperNumber());
                 }
 
@@ -717,6 +717,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         Set<String> paperNumbers = new HashSet<>();
         List<Map<String, String>> userList = task.getUsers();
 
+        StringJoiner stringJoiner = new StringJoiner(",");
         for (Map<String, String> userMap : userList) {
             String courseCode = userMap.get("courseCode");
             // 配置信息
@@ -737,21 +738,23 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
             if (StringUtils.isNotBlank(userMap.get("paperNumber"))) {
                 if (paperNumbers.contains(userMap.get("paperNumber"))) {
+                    stringJoiner.add(String.format("试卷编号[%s]在文件内重复", userMap.get("paperNumber")));
                     // 试卷编号在文件内重复,跳过
                     continue;
                 }
                 QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
-                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, userMap.get("paperNumber"));
+                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, userMap.get("paperNumber"));
                 ExamTask task1 = this.getOne(taskQueryWrapper);
                 if (task1 != null) {
-//                    throw ExceptionResultEnum.ERROR.exception("试卷编号已存在");
-                    // 试卷编号已存在,直接跳过
+//                    throw ExceptionResultEnum.ERROR.exception("试卷编号在当前考试下已存在");
+                    stringJoiner.add(String.format("试卷编号[%s]在当前考试下已存在", userMap.get("paperNumber")));
+//                    // 试卷编号已存在,直接跳过
                     continue;
                 }
                 paperNumbers.add(userMap.get("paperNumber"));
             } else {
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
-                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                String paperNumber = printCommonService.createPaperNumber(schoolId, examId);
                 userMap.put("paperNumber", paperNumber);
             }
             examTask.setPaperNumber(userMap.get("paperNumber"));
@@ -783,6 +786,11 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setReview(basicPrintConfig.getReview());
             list.add(examTask);
         }
+
+        // 有异常,抛出
+        if (stringJoiner.toString().length() > 0) {
+            throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
+        }
         this.saveBatch(list);
         for (ExamTask examTask : list) {
             if (Objects.nonNull(examTask.getReview()) && examTask.getReview() && Objects.nonNull(examTask.getUserId()) && Objects.isNull(examTask.getFlowId())) {
@@ -1140,9 +1148,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public ExamTask getByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
+    public ExamTask getByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber) {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId)
+                .eq(ExamTask::getExamId, examId)
                 .eq(ExamTask::getCourseCode, courseCode)
                 .eq(ExamTask::getPaperNumber, paperNumber);
         return this.getOne(queryWrapper);
@@ -1167,9 +1176,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
     @Transactional
     @Override
-    public void verifyCourseCodeByPaperNumber(Long schoolId, String paperNumber, String courseCode) {
+    public void verifyCourseCodeByPaperNumber(Long schoolId, Long examId, String paperNumber, String courseCode) {
         List<ExamTask> examTaskList = this.list(new QueryWrapper<ExamTask>().lambda()
-                .eq(ExamTask::getPaperNumber, paperNumber).eq(ExamTask::getSchoolId, schoolId));
+                .eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, paperNumber));
         if (examTaskList.size() > 1) {
             throw ExceptionResultEnum.ERROR.exception("异常 :[试卷编号]" + paperNumber + "有多条命题任务记录");
         } else if (examTaskList.size() == 1) {
@@ -1183,8 +1192,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public void checkDataByExamination(Long examDetailId, SysUser user) throws IOException {
+    public void checkDataByExamination(Long printPlanId, Long examDetailId, SysUser user) throws IOException {
         boolean judge = true;
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
         ExamDetail examDetail = examDetailService.getById(examDetailId);
         if (Objects.isNull(examDetail)) {
             throw ExceptionResultEnum.ERROR.exception("考务-考场不存在");
@@ -1201,6 +1211,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             Long schoolId = examDetailCourse.getSchoolId();
             ExamTask examTask = this.getOne(new QueryWrapper<ExamTask>().lambda()
                     .eq(ExamTask::getSchoolId, schoolId)
+                    .eq(ExamTask::getExamId, examPrintPlan.getExamId())
                     .eq(ExamTask::getCourseCode, courseCode)
                     .eq(ExamTask::getPaperNumber, paperNumber));
             if (examTask == null) {
@@ -1426,8 +1437,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
      * @return
      */
     @Override
-    public List<ExamTask> findByFlowStatus(Long schoolId, String courseCode, String courseName, String paperNumber, FlowStatusEnum flowStatus) {
-        return examTaskMapper.findByFlowStatus(schoolId, courseCode, courseName, paperNumber, Objects.nonNull(flowStatus) ? flowStatus.name() : null);
+    public List<ExamTask> findByFlowStatus(Long schoolId, Long examId, String courseCode, String courseName, String paperNumber, FlowStatusEnum flowStatus) {
+        return examTaskMapper.findByFlowStatus(schoolId, examId, courseCode, courseName, paperNumber, Objects.nonNull(flowStatus) ? flowStatus.name() : null);
     }
 
     @Transactional
@@ -1465,18 +1476,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             }
 
             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("试卷编号已存在");
-                }
+                validPaperNumberExists(schoolId, examTask);
             } else {
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
-                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                String paperNumber = printCommonService.createPaperNumber(schoolId, examId);
                 examTask.setPaperNumber(paperNumber);
             }
             if (Objects.nonNull(examTask.getId())) {
@@ -1561,6 +1564,32 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTask;
     }
 
+    /**
+     * 校验输入的试卷编号是否存在
+     *
+     * @param schoolId
+     * @param examTask
+     */
+    public void validPaperNumberExists(Long schoolId, ExamTask examTask) {
+        boolean lock = redisUtil.lock(SystemConstant.REDIS_LOCK_PAPER_NUMBER_PREFIX + schoolId + examTask.getPaperNumber(), SystemConstant.REDIS_LOCK_PAPER_NUMBER_TIME_OUT);
+        if (!lock) {
+            throw ExceptionResultEnum.ERROR.exception("正在校验试卷编号中,请稍候再试!");
+        }
+        try {
+            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("试卷编号已存在");
+            }
+        } finally {
+            redisUtil.releaseLock(SystemConstant.REDIS_LOCK_PAPER_NUMBER_PREFIX + schoolId + examTask.getPaperNumber());
+        }
+    }
+
     @Override
     public String findCardTitle(Long cardRuleId) {
         String title = "通用题卡";
@@ -1606,18 +1635,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             }
 
             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("试卷编号已存在");
-                }
+                validPaperNumberExists(schoolId, examTask);
             } else {
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
-                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                String paperNumber = printCommonService.createPaperNumber(schoolId, examTask.getExamId());
                 examTask.setPaperNumber(paperNumber);
             }
 
@@ -1732,14 +1753,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                         examDetail.setSchoolId(schoolId);
                         examDetail.setOrgId(sysUser.getOrgId());
                         examDetail.setPrintPlanId(examPrintPlan.getId());
+                        examDetail.setExamId(examPrintPlan.getExamId());
                         examDetail.setPrintPlanName(examPrintPlan.getName());
                         examDetail.setExamPlace(examDetailList.getExamPlace()); // 无默认值
                         examDetail.setExamRoom(examDetailList.getExamRoom()); // 无默认值
                         examDetail.setStatus(ExamDetailStatusEnum.NEW);
                         examDetail.setExamStartTime(examDetailParams.getExamStartTime());
                         examDetail.setExamEndTime(examDetailParams.getExamEndTime());
-
-
                         examDetail.setTotalSubjects(count);
                         examDetail.setExamDataSource(ExamDataSourceEnum.EXAM_TASK);
                         examDetail.setNormal(true);
@@ -1791,6 +1811,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     examDetail.setOrgId(sysUser.getOrgId());
                     examDetail.setPrintPlanId(examPrintPlan.getId());
                     examDetail.setPrintPlanName(examPrintPlan.getName());
+                    examDetail.setExamId(examPrintPlan.getExamId());
                     examDetail.setExamPlace("考点1"); // 默认填充班级所在校区
                     examDetail.setExamRoom("考场1"); // 默认填充班级
                     examDetail.setStatus(ExamDetailStatusEnum.NEW);
@@ -1946,9 +1967,9 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
     @Transactional
     @Override
-    public ExamObjectDto findExamObjectDtoByPaperNumber(String paperNumber) {
+    public ExamObjectDto findExamObjectDtoByPaperNumber(Long examId, String paperNumber) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        ExamTask examTask = examTaskService.getOne(new QueryWrapper<ExamTask>().lambda().eq(ExamTask::getPaperNumber, paperNumber).eq(ExamTask::getSchoolId, schoolId));
+        ExamTask examTask = examTaskService.getOne(new QueryWrapper<ExamTask>().lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, paperNumber));
         if (Objects.isNull(examTask)) {
             throw ExceptionResultEnum.ERROR.exception("未找到命题任务");
         }

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

@@ -425,7 +425,8 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
 
             List<Long> orgIds = dtoList.stream().map(m -> m.getCourseCode() + "##" + m.getPaperNumber()).distinct().map(m -> {
                 String[] strings = m.split("##");
-                ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, strings[0], strings[1]);
+                // todo xf 20230413
+                ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, null, strings[0], strings[1]);
                 SysOrg sysOrg = sysOrgService.findCollegeLevelOrgByOrgId(examTask.getTeachingRoomId());
                 return sysOrg.getId();
             }).distinct().collect(Collectors.toList());

+ 7 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -975,10 +975,11 @@ public class PrintCommonServiceImpl implements PrintCommonService {
     @Override
     public Boolean checkExamDetailStatus(Long schoolId, Long printPlanId, String courseCode, String paperNumber) {
         List<ExamDetail> examDetails;
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(printPlanId);
         if (printPlanId != null) {
             examDetails = examDetailService.listByPrintPlanIdAndCourseCodeAndPaperNumber(schoolId, printPlanId, courseCode, paperNumber);
         } else {
-            examDetails = examDetailService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+            examDetails = examDetailService.listByCourseCodeAndPaperNumber(schoolId, examPrintPlan.getExamId(), courseCode, paperNumber);
         }
         if (examDetails != null && examDetails.size() > 0) {
             long count = examDetails.stream().filter(m -> !ExamDetailStatusEnum.NEW.name().equals(m.getStatus().name()) && !ExamDetailStatusEnum.READY.name().equals(m.getStatus().name())).count();
@@ -996,14 +997,14 @@ public class PrintCommonServiceImpl implements PrintCommonService {
      * @return
      */
     @Override
-    public String createPaperNumber(Long schoolId) {
+    public String createPaperNumber(Long schoolId, Long examId) {
         String date = DateUtil.today().replace(SystemConstant.HYPHEN, "");
         String paperNumber = convertUtil.getIncre(date, "paperNumber" + schoolId, 5);
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, paperNumber);
         ExamTask examTask = examTaskService.getOne(queryWrapper);
         if (examTask != null) {
-            return createPaperNumber(schoolId);
+            return createPaperNumber(schoolId, examId);
         } else {
             return paperNumber;
         }
@@ -1019,9 +1020,9 @@ public class PrintCommonServiceImpl implements PrintCommonService {
      * @throws IOException
      */
     @Override
-    public void checkData(Long schoolId, String courseCode, String paperNumber, SysUser user) throws IOException {
+    public void checkData(Long schoolId, Long examId, String courseCode, String paperNumber, SysUser user) throws IOException {
         // 校验命题任务是否提交
-        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
         BasicExam basicExam = basicExamService.getById(examTask.getExamId());
         if (basicExam != null && ExamModelEnum.MODEL3.equals(basicExam.getExamModel())) {
             log.info("考试模式为模式3,不生成pdf");
@@ -1041,7 +1042,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         // 1.命题任务已完成
         if (tfFlowApprove != null && tfFlowApprove.getStatus() == FlowStatusEnum.FINISH) {
             // 2.校验考务数据是否导入
-            List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+            List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(schoolId, examId, courseCode, paperNumber);
             if (examDetails != null && examDetails.size() > 0) {
 
                 // 3.检查examDetailId下有无其它课程

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExaminationImportTemplateService.java

@@ -63,7 +63,7 @@ public class AsyncExaminationImportTemplateService extends AsyncImportTaskTemple
             // 按照考场检验命题任务是否全部完成,完成生成pdf
             SysUser user = (SysUser) map.get(SystemConstant.USER);
             for (Long examDetailId : examDetailIdList) {
-                examTaskService.checkDataByExamination(examDetailId, user);
+                examTaskService.checkDataByExamination(tbTask.getPrintPlanId(), 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_ERROR_SIZE));

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

@@ -266,7 +266,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     return null;
                 }
                 //查询试卷
-                List<ExamTask> examTaskList = examTaskService.findByFlowStatus(sysUser.getSchoolId(), examDetailCourse.getCourseCode(), examDetailCourse.getCourseName(), examDetailCourse.getPaperNumber(), FlowStatusEnum.FINISH);
+                List<ExamTask> examTaskList = examTaskService.findByFlowStatus(sysUser.getSchoolId(), examPrintPlan.getExamId(), examDetailCourse.getCourseCode(), examDetailCourse.getCourseName(), examDetailCourse.getPaperNumber(), FlowStatusEnum.FINISH);
                 if (Objects.isNull(examTaskList) || examTaskList.size() == 0) {
                     throw ExceptionResultEnum.EXAM_TASK_IS_NULL.exception();
                 }
@@ -315,6 +315,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     //拼装key
                     StringJoiner stringJoiner = new StringJoiner("_");
                     stringJoiner.add(String.valueOf(examDetail.getSchoolId()))
+                            .add(String.valueOf(examPrintPlan.getExamId()))
                             .add(String.valueOf(examDetail.getExamStartTime()))
                             .add(String.valueOf(examDetail.getExamEndTime()))
                             .add(examDetailCourse.getCourseCode())
@@ -832,7 +833,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 }
             }
             // 校验试卷编号
-            examTaskService.verifyCourseCodeByPaperNumber(schoolId, examinationImportDto.getPaperNumber(), examinationImportDto.getCourseCode());
+            examTaskService.verifyCourseCodeByPaperNumber(schoolId, examPrintPlan.getExamId(), examinationImportDto.getPaperNumber(), examinationImportDto.getCourseCode());
 
             // 校验课程信息
             basicCourseService.verifyCourseInfo(schoolId, examinationImportDto.getCourseCode(), examinationImportDto.getCourseName(), userId);
@@ -873,13 +874,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         examDetailService.deleteExaminationData(printPlanId, null);
 
         // 卷袋号生成规则
-        SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
+        SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId + "-" + examPrintPlan.getExamId(), "1", 6);
         String key = serialNumberParams.getModel() + serialNumberParams.getPrefix();
         RedisAtomicLong counter = new RedisAtomicLong(key, Objects.requireNonNull(redisTemplate.getConnectionFactory()));
         Long value = counter.get();
         try {
             // 组装exam_detail数据
-            List<Long> examDetailIdList = examDetailService.disposeExamDetailByExaminationExcel(examinationImportDtoList, userId, serialNumberParams, sysUser);
+            List<Long> examDetailIdList = examDetailService.disposeExamDetailByExaminationExcel(examPrintPlan.getExamId(), examinationImportDtoList, userId, serialNumberParams, sysUser);
             // 组装exam_detail_course数据
             examDetailService.disposeExamDetailCourseByExaminationExcel(examinationImportDtoList, userId, sysUser);
             // 组装exam_student数据

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -307,7 +307,7 @@ public class CreatePdfUtil {
 
         boolean isTag = false;
         for (ExamDetailCourse detailCourse : examDetailCourseList) {
-            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examDetail.getSchoolId(), detailCourse.getCourseCode(), detailCourse.getPaperNumber());
+            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examDetail.getSchoolId(),examId, detailCourse.getCourseCode(), detailCourse.getPaperNumber());
             ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
             List<JSONObject> objectList = JSON.parseArray(examTaskDetail.getPaperAttachmentIds(), JSONObject.class);
             for (JSONObject jsonObject : objectList) {

+ 10 - 2
distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml

@@ -40,6 +40,7 @@
             exam_detail_course a ON ed.id = a.exam_detail_id
                 LEFT JOIN
             exam_task b ON a.school_id = b.school_id
+                AND ed.exam_id = b.exam_id
                 AND a.course_code = b.course_code
                 AND a.paper_number = b.paper_number
                 LEFT JOIN
@@ -56,7 +57,10 @@
         FROM
             exam_detail_course a
                 LEFT JOIN
+            exam_detail ed ON a.exam_detail_id = ed.id
+                LEFT JOIN
             exam_task b ON a.school_id = b.school_id
+                AND ed.exam_id = b.exam_id
                 AND a.course_code = b.course_code
                 AND a.paper_number = b.paper_number
                 LEFT JOIN
@@ -138,6 +142,7 @@
             exam_print_plan c ON b.print_plan_id = c.id
         WHERE
             a.school_id = #{schoolId}
+                AND c.exam_id = #{examId}
                 AND a.course_code = #{courseCode}
                 AND a.paper_number = #{paperNumber}
                 AND c.status != 'END'
@@ -164,6 +169,7 @@
                  JOIN
                 (SELECT
                  b.school_id,
+                 c.exam_id,
                  b.paper_number,
                  b.paper_type,
                  SUM(b.total_subjects) total_subjects,
@@ -174,7 +180,7 @@
                      LEFT JOIN exam_print_plan epp ON c.print_plan_id = epp.id
                      LEFT JOIN basic_exam be ON epp.exam_id = be.id
             <where>
-                and c.status = 'FINISH'
+                and c.status = 'FINISH' and be.enable = true
                 <if test="semesterId != null">
                     and be.semester_id = #{semesterId}
                 </if>
@@ -188,11 +194,13 @@
                     and b.paper_number = #{paperNumber}
                 </if>
             </where>
-             GROUP BY b.school_id , b.paper_number , b.paper_type) t
+             GROUP BY b.school_id , c.exam_id,  b.paper_number , b.paper_type) t
                 ON t.school_id = et.school_id
+                AND t.exam_id = et.exam_id
                 AND t.paper_number = et.paper_number
                 LEFT JOIN
             exam_task_sync ets ON et.school_id = ets.school_id
+                AND et.exam_id = ets.exam_id
                 AND et.paper_number = ets.paper_number
                 LEFT JOIN
             sys_user su ON ets.sync_user_id = su.id

+ 24 - 6
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -84,6 +84,7 @@
                 LEFT JOIN
             basic_semester bs ON bs.id = be.semester_id
             <where>
+                and be.enable = true
                 <if test="schoolId != null and schoolId != ''">
                     and a.school_id = #{schoolId}
                 </if>
@@ -169,6 +170,7 @@
         LEFT JOIN
         basic_semester bs on bs.id = be.semester_id
         <where>
+            and be.enable = true
             <if test="schoolId != null and schoolId > 0">
                 AND det.school_id = #{schoolId}
             </if>
@@ -256,7 +258,10 @@
                 INNER JOIN
             exam_detail det ON cou.exam_detail_id = det.id
                 LEFT JOIN
+            exam_print_plan epp ON det.print_plan_id = epp.id
+                LEFT JOIN
             exam_task et on cou.school_id = et.school_id
+                AND et.exam_id = epp.exam_id
                 AND cou.paper_number = et.paper_number
                 LEFT JOIN
             sys_user b on det.create_id = b.id
@@ -265,9 +270,16 @@
                 LEFT JOIN
             basic_semester bs ON bs.id = be.semester_id
         <where>
+            and be.enable = true
             <if test="schoolId != null and schoolId > 0">
                 AND det.school_id = #{schoolId}
             </if>
+            <if test="semesterId != null">
+                and bs.id = #{semesterId}
+            </if>
+            <if test="examId != null">
+                and be.id = #{examId}
+            </if>
             <if test="printPlanIdList != null and printPlanIdList != '' and printPlanIdList.size() > 0">
                 AND det.print_plan_id IN
                 <foreach collection="printPlanIdList" item="item" index="index" open="(" separator="," close=")">
@@ -295,12 +307,6 @@
             <if test="endDate != null and endDate > 0">
                 AND #{endDate} >= det.exam_end_time
             </if>
-            <if test="semesterId != null and semesterId!= ''">
-                AND bs.id = #{semesterId}
-            </if>
-            <if test="examId != null and examId!= ''">
-                AND be.id = #{examId}
-            </if>
             <if test="dpr != null">
                 <if test="dpr.requestUserId != null">
                     AND b.id = #{dpr.requestUserId}
@@ -375,10 +381,21 @@
             exam_detail b ON a.id = b.print_plan_id
         JOIN
             sys_user d on a.create_id = d.id
+        LEFT JOIN
+            basic_exam be ON be.id = a.exam_id
+        LEFT JOIN
+            basic_semester bs ON bs.id = be.semester_id
         <where>
+            and be.enable = true
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>
+            <if test="semesterId != null">
+                and bs.id = #{semesterId}
+            </if>
+            <if test="examId != null">
+                and be.id = #{examId}
+            </if>
             <if test="printPlanId != null and printPlanId != ''">
                 and a.id = #{printPlanId}
             </if>
@@ -587,6 +604,7 @@
         LEFT JOIN
         basic_semester bs on bs.id = be.semester_id
         <where>
+            and be.enable = true
             <if test="schoolId != null and schoolId > 0">
                 AND det.school_id = #{schoolId}
             </if>

+ 1 - 1
distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml

@@ -42,7 +42,7 @@
              FROM
                  exam_detail ed
                      LEFT JOIN exam_detail_course edc ON ed.id = edc.exam_detail_id
-                     LEFT JOIN exam_task_sync ets ON edc.school_id = ets.school_id and edc.paper_number = ets.paper_number
+                     LEFT JOIN exam_task_sync ets ON edc.school_id = ets.school_id and ed.exam_id = ets.exam_id and edc.paper_number = ets.paper_number
                      LEFT JOIN t_sync_stmms_exam tsse ON edc.school_id = tsse.school_id and ets.third_relate_id = tsse.exam_id
             WHERE ets.sync_status = #{syncStatus}) ep ON epp.id = ep.print_plan_id
                 LEFT JOIN

+ 1 - 0
distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml

@@ -69,6 +69,7 @@
                 LEFT JOIN
             basic_semester c on d.semester_id = c.id
         <where>
+            and d.enable = true
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>

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

@@ -131,6 +131,7 @@
              exam_detail c ON b.exam_detail_id = c.id
                  LEFT JOIN
              exam_task et ON b.school_id = et.school_id
+                 c.exam_id = et.exam_id
                  and b.course_code = et.course_code
                  and b.paper_number = et.paper_number
         WHERE b.id = #{examDetailCourseId}
@@ -233,7 +234,10 @@
                 JOIN
             exam_detail_course b ON a.exam_detail_course_id = b.id
                 JOIN
+            exam_detail ed ON b.exam_detail_id = ed.id
+                JOIN
             exam_task d ON b.school_id = d.school_id
+                AND ed.exam_id = d.exam_id
                 AND b.course_code = d.course_code
                 AND b.paper_number = d.paper_number
         WHERE

+ 3 - 0
distributed-print-business/src/main/resources/mapper/ExamTaskDetailMapper.xml

@@ -47,6 +47,7 @@
         FROM
         (SELECT
             a.school_id,
+            a.exam_id,
             a.print_plan_id,
             a.print_plan_name,
             b.paper_number,
@@ -60,6 +61,7 @@
         GROUP BY a.school_id , a.print_plan_id , a.print_plan_name , b.paper_number , b.course_code , b.course_name , b.paper_type) a
             LEFT JOIN
         exam_task c ON a.school_id = c.school_id
+            AND a.exam_id = c.exam_id
             AND a.paper_number = c.paper_number
             LEFT JOIN
         exam_task_detail d ON c.id = d.exam_task_id
@@ -132,6 +134,7 @@
             LEFT JOIN exam_detail_course b ON a.id = b.exam_detail_id
             LEFT JOIN
             exam_task c ON a.school_id = c.school_id
+                AND a.exam_id = c.exam_id
                 AND b.course_code = c.course_code
                 AND b.paper_number = c.paper_number
             LEFT JOIN

+ 7 - 2
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -88,6 +88,7 @@
         LEFT JOIN
         basic_semester g ON f.semester_id = g.id
         <where>
+            and f.enable = true
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>
@@ -226,6 +227,7 @@
         LEFT JOIN t_f_flow_join tffj on tffj.flow_id = e.flow_id
         <where>
             a.enable = true
+            and f.enable = true
             <if test="userId != null and userId != ''">
                 and a.user_id = #{userId}
             </if>
@@ -416,7 +418,7 @@
         LEFT JOIN
             basic_semester bs on be.school_id = bs.school_id and be.semester_id = bs.id
         <where>
-            a.enable = true and a.review = true
+            a.enable = true and a.review = true and be.enable = true
             and (f.status = 'AUDITING' or f.status = 'REJECT' or f.status = 'FINISH')
             and EXISTS (
             select * from(select
@@ -541,7 +543,7 @@
         LEFT JOIN
         basic_semester bs ON be.semester_id = bs.id
         <where>
-            (a.status = 'SUBMIT' and (a.flow_id is null or (a.flow_id is not null and g.status = 'FINISH')))
+            and be.enable = true and (a.status = 'SUBMIT' and (a.flow_id is null or (a.flow_id is not null and g.status = 'FINISH')))
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>
@@ -949,6 +951,9 @@
             <if test="schoolId != null and schoolId != ''">
                 and et.school_id = #{schoolId}
             </if>
+            <if test="examId != null">
+                and et.exam_id = #{examId}
+            </if>
             <if test="courseCode != null and courseCode != ''">
                 and et.course_code = #{courseCode}
             </if>

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

@@ -204,10 +204,11 @@ public class ExamPaperStructureController {
     @ApiOperation(value = "转办/打回")
     @RequestMapping(value = "/transfer", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
-    public Result transfer(@ApiParam(value = "课程代码", required = true) @RequestParam String courseCode,
+    public Result transfer(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                           @ApiParam(value = "课程代码", required = true) @RequestParam String courseCode,
                            @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
                            @ApiParam(value = "用户ID", required = false) @RequestParam(required = false) Long transferId) {
-        return ResultUtil.ok(examPaperStructureService.transfer(courseCode, paperNumber, transferId));
+        return ResultUtil.ok(examPaperStructureService.transfer(examId, courseCode, paperNumber, transferId));
     }
 }
 

+ 32 - 30
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -318,6 +318,38 @@ public class ExamPrintPlanController {
         return ResultUtil.ok(examTasks);
     }
 
+    /**
+     * 印刷任务管理-汇总数据查询
+     *
+     * @param printPlanId
+     * @param status
+     * @param courseCode
+     * @param paperNumber
+     * @param examPlace
+     * @param examRoom
+     * @param examStartTime
+     * @param examEndTime
+     * @return
+     */
+    @ApiOperation(value = "印刷任务管理-汇总数据查询")
+    @RequestMapping(value = "/task_total_data", method = RequestMethod.POST)
+    public Result taskTotalData(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                                @ApiParam(value = "考试id") @RequestParam(required = false) Long examId,
+                                @RequestParam(value = "printPlanId", required = false) Long printPlanId,
+                                @RequestParam(value = "status", required = false) String status,
+                                @RequestParam(value = "courseCode", required = false) String courseCode,
+                                @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                @RequestParam(value = "examPlace", required = false) String examPlace,
+                                @RequestParam(value = "examRoom", required = false) String examRoom,
+                                @RequestParam(value = "examStartTime", required = false) Long examStartTime,
+                                @RequestParam(value = "examEndTime", required = false) Long examEndTime,
+                                @RequestParam(value = "printStartTime", required = false) Long printStartTime,
+                                @RequestParam(value = "printEndTime", required = false) Long printEndTime,
+                                @RequestParam(value = "printHouseId", required = false) String printHouseId) {
+        PrintTaskTotalDto printTaskTotalDto = examDetailService.taskTotalData(semesterId, examId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, SystemConstant.convertIdToLong(printHouseId));
+        return ResultUtil.ok(printTaskTotalDto);
+    }
+
     /**
      * 提交印刷
      *
@@ -361,36 +393,6 @@ public class ExamPrintPlanController {
         return ResultUtil.ok(isSuccess);
     }
 
-    /**
-     * 印刷任务管理-汇总数据查询
-     *
-     * @param printPlanId
-     * @param status
-     * @param courseCode
-     * @param paperNumber
-     * @param examPlace
-     * @param examRoom
-     * @param examStartTime
-     * @param examEndTime
-     * @return
-     */
-    @ApiOperation(value = "印刷任务管理-汇总数据查询")
-    @RequestMapping(value = "/task_total_data", method = RequestMethod.POST)
-    public Result taskTotalData(@RequestParam(value = "printPlanId", required = false) Long printPlanId,
-                                @RequestParam(value = "status", required = false) String status,
-                                @RequestParam(value = "courseCode", required = false) String courseCode,
-                                @RequestParam(value = "paperNumber", required = false) String paperNumber,
-                                @RequestParam(value = "examPlace", required = false) String examPlace,
-                                @RequestParam(value = "examRoom", required = false) String examRoom,
-                                @RequestParam(value = "examStartTime", required = false) Long examStartTime,
-                                @RequestParam(value = "examEndTime", required = false) Long examEndTime,
-                                @RequestParam(value = "printStartTime", required = false) Long printStartTime,
-                                @RequestParam(value = "printEndTime", required = false) Long printEndTime,
-                                @RequestParam(value = "printHouseId", required = false) String printHouseId) {
-        PrintTaskTotalDto printTaskTotalDto = examDetailService.taskTotalData(printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime, printStartTime, printEndTime, SystemConstant.convertIdToLong(printHouseId));
-        return ResultUtil.ok(printTaskTotalDto);
-    }
-
     /**
      * 印刷任务管理-查看印品
      *

+ 9 - 8
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -364,7 +364,7 @@ public class ExamTaskController {
         ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
         if (examTaskDetail.getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && (Objects.nonNull(examTask.getReview()) && !examTask.getReview())) {
             // 校验是否可以提交打印状态
-            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
 
         return ResultUtil.ok(isSuccess);
@@ -497,7 +497,7 @@ public class ExamTaskController {
         if (isSuccess && taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.PASS.name())) {
             ExamTask examTask = examTaskService.getById(taskReviewLog.getExamTaskId());
             // 校验是否可以提交打印状态
-            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), 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())) {
@@ -620,7 +620,7 @@ public class ExamTaskController {
             Boolean isCreate = printCommonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getCourseCode(), examTask.getPaperNumber());
             // 校验是否可以提交打印状态
             if (isCreate) {
-                printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
+                printCommonService.checkData(examTask.getSchoolId(),examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
             }
         }
         return ResultUtil.ok(isSuccess);
@@ -648,7 +648,7 @@ public class ExamTaskController {
                 Boolean isCreate = printCommonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getCourseCode(), examTask.getPaperNumber());
                 // 校验是否可以提交打印状态
                 if (isCreate) {
-                    printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
+                    printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
                 }
             }
         }
@@ -709,7 +709,7 @@ public class ExamTaskController {
         ExamTask examTask = examTaskService.submitTaskApply(examTaskApplyTemp);
         if (Objects.nonNull(examTask.getReview()) && !examTask.getReview()) {
             // 校验是否可以提交打印状态
-            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
         return ResultUtil.ok();
     }
@@ -727,7 +727,7 @@ public class ExamTaskController {
         ExamTask examTask = examTaskService.saveExamTaskAndExamTaskDetail(examTaskApplyParam);
         if (examTaskApplyParam.getExamTaskDetail().getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && (Objects.nonNull(examTask.getReview()) && !examTask.getReview())) {
             // 校验是否可以提交打印状态
-            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
 
         return ResultUtil.ok(examTask);
@@ -900,8 +900,9 @@ public class ExamTaskController {
     @ApiOperation(value = "命题任务-考试对象查询")
     @RequestMapping(value = "/find_exam_object", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
-    public Result findExamObject(@ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
-        return ResultUtil.ok((Object) examTaskService.findExamObjectDtoByPaperNumber(paperNumber));
+    public Result findExamObject(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                                 @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
+        return ResultUtil.ok((Object) examTaskService.findExamObjectDtoByPaperNumber(examId, paperNumber));
     }
 
     @ApiOperation(value = "入库申请-考生对象查询")

+ 1 - 1
distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java

@@ -158,7 +158,7 @@ public class ServiceTest {
     @Test
     public void findExamObject() {
         String paperNumber = "cn004-0906-001";
-        ExamObjectDto examObjectDto = examTaskService.findExamObjectDtoByPaperNumber(paperNumber);
+        ExamObjectDto examObjectDto = examTaskService.findExamObjectDtoByPaperNumber(null, paperNumber);
         System.out.println(JSON.toJSONString(examObjectDto));
     }
 

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

@@ -439,6 +439,7 @@ public class SystemConstant {
     public static final String PAPAER_ATTACHMENT_IDS = "paperAttachmentIds";//命题附件ids
     public static final String REDIS_LOCK_FLOW_TASK_PREFIX = "redis:lock:flow:task:";//流程节点锁
     public static final String REDIS_LOCK_EXAM_TASK_FLOW_PREFIX = "redis:lock:exam:task:flow:";//考试任务流程节点锁
+    public static final String REDIS_LOCK_PAPER_NUMBER_PREFIX = "redis:lock:paper:number:";//试卷编号锁
     public static final long REDIS_LOCK_FLOW_TASK_TIME_OUT = 60L * 2;
     public static final long REDIS_LOCK_EXAM_TASK_FLOW_TIME_OUT = 60L * 2;
     public static final String REDIS_LOCK_FLOW_PREFIX = "redis:lock:flow:";//流程锁
@@ -447,6 +448,7 @@ public class SystemConstant {
     public static final long REDIS_LOCK_CUSTOM_FLOW_TIME_OUT = 60L * 2;
     public static final String REDIS_LOCK_CALCULATE_PREFIX = "redis:lock:calculate:";//计算锁
     public static final long REDIS_LOCK_CALCULATE_TIME_OUT = 60L * 60;
+    public static final long REDIS_LOCK_PAPER_NUMBER_TIME_OUT = 60L * 2;
 
     /**
      * 机器心跳