Răsfoiți Sursa

3.2.7 优化

xiaofei 2 ani în urmă
părinte
comite
e17679ba5e
17 a modificat fișierele cu 191 adăugiri și 381 ștergeri
  1. 0 22
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExaminationImportDto.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java
  3. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicPrintConfigService.java
  4. 2 19
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java
  6. 18 39
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  7. 1 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicPrintConfigServiceImpl.java
  8. 54 137
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  9. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java
  10. 8 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  11. 13 65
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  12. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExaminationImportTemplateService.java
  13. 4 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/TaskLogicService.java
  14. 69 53
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  15. 2 7
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  16. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  17. 12 12
      distributed-print/src/main/resources/application.properties

+ 0 - 22
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExaminationImportDto.java

@@ -83,12 +83,6 @@ public class ExaminationImportDto {
     @ApiModelProperty(value = "学校id")
     private Long schoolId;
 
-    @ApiModelProperty(value = "印刷计划id")
-    private Long printPlanId;
-
-    @ApiModelProperty(value = "印刷计划名称")
-    private String printPlanName;
-
     public ExaminationImportDto() {
     }
 
@@ -220,22 +214,6 @@ public class ExaminationImportDto {
         this.schoolId = schoolId;
     }
 
-    public Long getPrintPlanId() {
-        return printPlanId;
-    }
-
-    public void setPrintPlanId(Long printPlanId) {
-        this.printPlanId = printPlanId;
-    }
-
-    public String getPrintPlanName() {
-        return printPlanName;
-    }
-
-    public void setPrintPlanName(String printPlanName) {
-        this.printPlanName = printPlanName;
-    }
-
     public String getCollegeName() {
         return collegeName;
     }

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

@@ -55,5 +55,5 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
 
     List<SyncExamStudentDto> listStudentByExamDetailCourseId(@Param("examDetailCourseId") Long examDetailCourseId, @Param("paperType") String paperType);
 
-    List<String> listTicketNumberBySemesterId(@Param("semesterId") String semesterId, @Param("examId") Long examId);
+    List<String> listTicketNumberByExamId(@Param("examId") Long examId);
 }

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

@@ -23,11 +23,11 @@ public interface BasicPrintConfigService extends IService<BasicPrintConfig> {
 
     /**
      * 根据考试ID和课程代码获取印品
+     *
      * @param examId 考试ID
-     * @param courseCode 课程代码
      * @return BasicPrintConfig
      */
-    BasicPrintConfig getByExamIdAndCourseCode(Long examId, String courseCode);
+    BasicPrintConfig getByExamId(Long examId);
 
     /**
      * 根据examId和orgId查询印品

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

@@ -157,6 +157,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
     boolean submitTask(ExamDetail examDetail) throws IOException;
 
     boolean taskCancel(Long id);
+
     boolean taskBatchCancel(Map data);
 
     boolean resubmitTask(ExamDetail examDetail) throws IOException;
@@ -165,28 +166,10 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * 根据考务数据Excel数据处理考务-场次表
      *
      * @param dataList           Excel处理后的数据
-     * @param userId             当前用户id
      * @param serialNumberParams 序列号生成参数
      * @param sysUser
      */
-    List<Long> disposeExamDetailByExaminationExcel(ExamPrintPlan examPrintPlan, List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams, SysUser sysUser);
-
-    /**
-     * 根据考务数据Excel数据处理考务-科目表
-     *
-     * @param dataList Excel处理后的数据
-     * @param userId   当前用户id
-     */
-    void disposeExamDetailCourseByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SysUser sysUser);
-
-    /**
-     * 根据考务数据Excel数据处理考务-学生表
-     *
-     * @param examId
-     * @param dataList Excel处理后的数据
-     * @param userId   当前用户id
-     */
-    void disposeExamStudentByExaminationExcel(Long examId, List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) throws IllegalAccessException;
+    List<Long> disposeExamDataByExaminationExcel(ExamPrintPlan examPrintPlan, List<ExaminationImportDto> dataList, SerialNumberParams serialNumberParams, SysUser sysUser);
 
     /**
      * 删除考务数据

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

@@ -46,7 +46,7 @@ public interface ExamStudentService extends IService<ExamStudent> {
 
     List<SyncExamStudentDto> listStudentByExamDetailCourseId(List<ExamDetailCourseDto> examDetailCourseList, String paperType);
 
-    List<String> listTicketNumberBySemesterId(String semesterId, Long examId);
+    List<String> listTicketNumberByExamId(Long examId);
 
     void removeByExamDetailCourseId(Long id);
 }

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

@@ -29,8 +29,6 @@ import java.util.Map;
 
 /**
  * @Description: 公共服务service
- * @Param:
- * @return:
  * @Author: wangliang
  * @Date: 2021/3/26
  */
@@ -48,9 +46,9 @@ public interface PrintCommonService {
      * @return
      * @throws IOException
      */
-    public BasicAttachment saveAttachmentPdf(ClassifyEnum classifyEnum, ExamDetail examDetail, BasicAttachment basicAttachment, List<PdfDto> pdfList, Integer printCount, Integer sequence, List<File> fileTempList) throws IOException, DocumentException;
+    BasicAttachment saveAttachmentPdf(ClassifyEnum classifyEnum, ExamDetail examDetail, BasicAttachment basicAttachment, List<PdfDto> pdfList, Integer printCount, Integer sequence, List<File> fileTempList) throws IOException, DocumentException;
 
-    public void saveAttachmentSignPdf(PdfSignDto pdfFillDto, ExamDetail examDetail, List<PdfDto> pdfList, Integer printCount, List<File> fileTempList, Boolean diallel);
+    void saveAttachmentSignPdf(PdfSignDto pdfFillDto, ExamDetail examDetail, List<PdfDto> pdfList, Integer printCount, List<File> fileTempList, Boolean diallel);
 
     /**
      * 保存html附件
@@ -63,7 +61,7 @@ public interface PrintCommonService {
      * @return
      * @throws IOException
      */
-    public BasicAttachment saveAttachmentHtml(String fileName, String htmlContent, Long userId, List<PdfDto> localFileList, List<File> fileTempList) throws IOException;
+    BasicAttachment saveAttachmentHtml(String fileName, String htmlContent, Long userId, List<PdfDto> localFileList, List<File> fileTempList) throws IOException;
 
     /**
      * 保存html附件和该html转成pdf的附件
@@ -73,7 +71,7 @@ public interface PrintCommonService {
      * @param userId      创建人
      * @return 附件对象
      */
-    public BasicAttachment saveAttachmentHtmlAndPdf(String fileName, String htmlContent, Long userId) throws IOException;
+    BasicAttachment saveAttachmentHtmlAndPdf(String fileName, String htmlContent, Long userId) throws IOException;
 
     /**
      * 保存附件公用
@@ -84,7 +82,7 @@ public interface PrintCommonService {
      * @param objId
      * @return
      */
-    public BasicAttachment saveAttachmentCommon(MultipartFile file, String md5, UploadFileEnum type, Long objId);
+    BasicAttachment saveAttachmentCommon(MultipartFile file, String md5, UploadFileEnum type, Long objId);
 
     /**
      * 保存附件
@@ -94,18 +92,8 @@ public interface PrintCommonService {
      * @param type
      * @return
      */
-    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type);
+    BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type);
 
-    /**
-     * 保存附件
-     *
-     * @param file
-     * @param md5
-     * @param type
-     * @param objId
-     * @return
-     */
-    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type, Long objId);
 
     /**
      * 科目删除
@@ -156,14 +144,14 @@ public interface PrintCommonService {
      * 更新任务状态
      */
     @Async
-    public void updateStatus() throws IOException;
+    void updateStatus() throws IOException;
 
     /**
      * 重新生成pdf失败任务
      *
      * @throws IOException
      */
-    public void resetCreatePdfTask() throws IOException;
+    void resetCreatePdfTask() throws IOException;
 
 
     /**
@@ -173,7 +161,7 @@ public interface PrintCommonService {
      * @param taskTypeEnum
      * @return
      */
-    public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum);
+    Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum);
 
     /**
      * 保存任务
@@ -183,7 +171,7 @@ public interface PrintCommonService {
      * @param taskTypeEnum
      * @return
      */
-    public Map<String, Object> saveTask(Long printPlanId, MultipartFile file, TaskTypeEnum taskTypeEnum);
+    Map<String, Object> saveTask(Long printPlanId, MultipartFile file, TaskTypeEnum taskTypeEnum);
 
     /**
      * 保存任务(导出)
@@ -191,7 +179,7 @@ public interface PrintCommonService {
      * @param taskTypeEnum
      * @return
      */
-    public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum);
+    Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum);
 
     /**
      * 保存任务
@@ -199,17 +187,8 @@ public interface PrintCommonService {
      * @param taskTypeEnum
      * @return
      */
-    public Map<String, Object> saveTask(Long printPlanId, TaskTypeEnum taskTypeEnum);
-
-    /**
-     * 保存推送
-     *
-     * @param pushTypeEnum 推送类型
-     * @return 结果
-     */
-    Map<String, Object> savePush(PushTypeEnum pushTypeEnum);
+    Map<String, Object> saveTask(Long printPlanId, TaskTypeEnum taskTypeEnum);
 
-    Map<String, Object> savePush(PushTypeEnum scorePush, Long examId);
 
     /**
      * 校验课程关联考场是否提交打印
@@ -228,7 +207,7 @@ public interface PrintCommonService {
      * @param schoolId
      * @return
      */
-    public String createPaperNumber(Long schoolId, Long examId);
+    String createPaperNumber(Long schoolId, Long examId);
 
     /**
      * 校验是否可以提交
@@ -239,7 +218,7 @@ public interface PrintCommonService {
      * @param user
      * @throws IOException
      */
-    public void checkData(Long schoolId, Long examId, String courseCode, String paperNumber, SysUser user) throws IOException;
+    void checkData(Long schoolId, Long examId, String courseCode, String paperNumber, SysUser user) throws IOException;
 
     /**
      * 保存考务数据
@@ -250,7 +229,7 @@ public interface PrintCommonService {
      * @param examDetailCourseId
      * @param sysUser
      */
-    public List<ExamStudent> createBatchStudent(Long schoolId, String extendFields, List<String> classIds, Long examDetailCourseId, SysUser sysUser);
+    List<ExamStudent> createBatchStudent(Long schoolId, String extendFields, List<String> classIds, Long examDetailCourseId, SysUser sysUser);
 
     /**
      * 根据学生集合创建考生考务数据
@@ -271,7 +250,7 @@ public interface PrintCommonService {
      * @param serialNumberParams
      * @return
      */
-    public String createTempNumber(SerialNumberParams serialNumberParams);
+    String createTempNumber(SerialNumberParams serialNumberParams);
 
     /**
      * 生成准考证号
@@ -280,7 +259,7 @@ public interface PrintCommonService {
      * @param totalDigit 考号位数
      * @return
      */
-    public String createTicketNumber(Long schoolId, Integer totalDigit);
+    String createTicketNumber(List<String> examStudentTicketNumberList, Long schoolId, Integer totalDigit);
 
     /**
      * 保存任务附件(导出)
@@ -289,7 +268,7 @@ public interface PrintCommonService {
      * @param oss
      * @return
      */
-    public String saveTaskAttachment(ByteArrayOutputStream fos, boolean oss) throws IOException;
+    String saveTaskAttachment(ByteArrayOutputStream fos, boolean oss) throws IOException;
 
     /**
      * 生成任务序号

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

@@ -94,9 +94,8 @@ public class BasicPrintConfigServiceImpl extends ServiceImpl<BasicPrintConfigMap
     }
 
     @Override
-    public BasicPrintConfig getByExamIdAndCourseCode(Long examId, String courseCode1) {
+    public BasicPrintConfig getByExamId(Long examId) {
         BasicExam basicExam = basicExamService.getById(examId);
-
         BasicPrintConfig printConfig = this.baseMapper.getBySchoolIdAndExamId(basicExam.getSchoolId(), examId);
         if (printConfig == null) {
             throw ExceptionResultEnum.ERROR.exception("考试[" + basicExam.getName() + "]未配置印品");

+ 54 - 137
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -555,13 +555,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public List<Long> disposeExamDetailByExaminationExcel(ExamPrintPlan examPrintPlan, List<ExaminationImportDto> dataList, Long userId, SerialNumberParams serialNumberParams, SysUser sysUser) {
+    public List<Long> disposeExamDataByExaminationExcel(ExamPrintPlan examPrintPlan, List<ExaminationImportDto> dataList, SerialNumberParams serialNumberParams, SysUser sysUser) {
         List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
             Long schoolIdId = e.getSchoolId();
             Map<String, Object> map = new HashMap<>();
             map.put("schoolId", schoolIdId);
-            map.put("printPlanId", e.getPrintPlanId());
-            map.put("printPlanName", e.getPrintPlanName());
             map.put("examPlace", e.getExamPlace());
             map.put("examRoom", e.getExamRoom());
             map.put("examStartTime", e.getExamStartTime());
@@ -577,186 +575,129 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             String examStartTime = String.valueOf(map.get("examStartTime"));
             String examEndTime = String.valueOf(map.get("examEndTime"));
 
-            long totalSubjects = dataList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
-                            e.getExamRoom().equals(examRoom) &&
-                            e.getExamStartTime().equals(examStartTime) &&
-                            e.getExamEndTime().equals(examEndTime)).count();
+            List<ExaminationImportDto> examDetailStudentList = dataList.stream().filter(e -> e.getExamPlace().equals(examPlace) &&
+                            e.getExamRoom().equals(examRoom) && e.getExamStartTime().equals(examStartTime) && e.getExamEndTime().equals(examEndTime))
+                    .collect(Collectors.toList());
 
             ExamDetail examDetail = new ExamDetail();
             examDetail.setId(SystemConstant.getDbUuid());
             examDetail.setPackageCode(convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit()));
             examDetail.setSchoolId(schoolId);
             examDetail.setOrgId(sysUser.getOrgId());
-            examDetail.setPrintPlanId(Long.valueOf(String.valueOf(map.get("printPlanId"))));
-            examDetail.setPrintPlanName(String.valueOf(map.get("printPlanName")));
+            examDetail.setPrintPlanId(examPrintPlan.getId());
+            examDetail.setPrintPlanName(examPrintPlan.getName());
             examDetail.setExamId(examPrintPlan.getExamId());
             examDetail.setExamPlace(examPlace);
             examDetail.setExamRoom(examRoom);
             examDetail.setStatus(ExamDetailStatusEnum.NEW);
-            examDetail.setTotalSubjects(Math.toIntExact(totalSubjects));
+            examDetail.setTotalSubjects(examDetailStudentList.size());
             examDetail.setExamStartTime(SystemConstant.convertIdToLong(examStartTime));
             examDetail.setExamEndTime(SystemConstant.convertIdToLong(examEndTime));
             examDetail.setExamDataSource(ExamDataSourceEnum.FILE_IMPORT);
             examDetail.setNormal(true);
-            examDetail.setCreateId(userId);
-            examDetail.setUpdateId(userId);
+            examDetail.setCreateId(sysUser.getId());
             examDetail.setBackupCount(examPrintPlan.getBackupCount());
-            examDetailList.add(examDetail);
+            this.save(examDetail);
+
+            //组装exam_detail_course数据
+            disposeExamDetailCourseData(examPrintPlan.getExamId(), examDetail.getId(), examDetailStudentList, sysUser);
         }
         this.saveBatch(examDetailList);
         return examDetailList.stream().map(ExamDetail::getId).distinct().collect(Collectors.toList());
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void disposeExamDetailCourseByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) {
-        List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
+    /**
+     * 生成考场科目数据
+     *
+     * @param examId                考试ID
+     * @param examDetailId          考场ID
+     * @param examDetailStudentList 考场下学生集合(excel中读取)
+     * @param sysUser               用户
+     */
+    private void disposeExamDetailCourseData(Long examId, Long examDetailId, List<ExaminationImportDto> examDetailStudentList, SysUser sysUser) {
+        List<Map<String, Object>> examDetailKeyList = examDetailStudentList.stream().flatMap(e -> {
             Map<String, Object> map = new HashMap<>();
-            map.put("schoolId", e.getSchoolId());
-            map.put("printPlanId", e.getPrintPlanId());
-            map.put("examPlace", e.getExamPlace());
-            map.put("examRoom", e.getExamRoom());
-            map.put("examStartTime", e.getExamStartTime());
-            map.put("examEndTime", e.getExamEndTime());
             map.put("courseCode", e.getCourseCode());
             map.put("courseName", e.getCourseName());
             map.put("paperNumber", e.getPaperNumber());
             return Stream.of(map);
         }).distinct().collect(Collectors.toList());
 
-        List<ExamDetailCourse> examDetailCourseList = new ArrayList<>();
+        Long schoolId = sysUser.getSchoolId();
+
         for (Map<String, Object> map : examDetailKeyList) {
-            Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
-            Long printPlanId = Long.valueOf(String.valueOf(map.get("printPlanId")));
-            String examPlace = String.valueOf(map.get("examPlace"));
-            String examRoom = String.valueOf(map.get("examRoom"));
-            Long examStartTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examStartTime")));
-            Long examEndTime = SystemConstant.convertIdToLong(String.valueOf(map.get("examEndTime")));
             String courseCode = String.valueOf(map.get("courseCode"));
             String courseName = String.valueOf(map.get("courseName"));
             String paperNumber = String.valueOf(map.get("paperNumber"));
 
             // 获取该科目下的考生人数
-            List<ExaminationImportDto> sameCourseList = dataList.stream().filter(e -> e.getSchoolId().equals(schoolId) &&
-                    e.getPrintPlanId().equals(printPlanId) &&
-                    e.getExamPlace().equals(examPlace) &&
-                    e.getExamRoom().equals(examRoom) &&
-                    Long.valueOf(e.getExamStartTime()).equals(examStartTime) &&
-                    Long.valueOf(e.getExamEndTime()).equals(examEndTime) &&
-                    e.getCourseCode().equals(courseCode) &&
-                    e.getCourseName().equals(courseName) &&
-                    e.getPaperNumber().equals(paperNumber)).collect(Collectors.toList());
-
-            int totalSubjects = sameCourseList.size();
-
-            List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
-                    .eq(ExamDetail::getPrintPlanId, printPlanId)
-                    .eq(ExamDetail::getExamPlace, examPlace)
-                    .eq(ExamDetail::getExamRoom, examRoom)
-                    .eq(ExamDetail::getExamStartTime, examStartTime)
-                    .eq(ExamDetail::getExamEndTime, examEndTime));
-            if (examDetailList.size() != 1) {
-                throw ExceptionResultEnum.ERROR.exception("无法找到新增的考务场次数据");
-            }
-            Long examDetailId = examDetailList.get(0).getId();
+            List<ExaminationImportDto> examDetailCourseStudentList = examDetailStudentList.stream().filter(e -> e.getCourseCode().equals(courseCode) &&
+                    e.getCourseName().equals(courseName) && e.getPaperNumber().equals(paperNumber)).collect(Collectors.toList());
+
             ExamDetailCourse examDetailCourse = new ExamDetailCourse();
             examDetailCourse.setId(SystemConstant.getDbUuid());
             examDetailCourse.setSchoolId(schoolId);
-            examDetailCourse.setOrgId(sysUser.getOrgId());
             examDetailCourse.setExamDetailId(examDetailId);
             examDetailCourse.setCourseCode(courseCode);
             examDetailCourse.setCourseName(courseName);
             examDetailCourse.setPaperNumber(paperNumber);
-            examDetailCourse.setTotalSubjects(totalSubjects);
-            examDetailCourse.setCreateId(userId);
-            examDetailCourse.setUpdateId(userId);
-            examDetailCourseList.add(examDetailCourse);
-        }
-        examDetailCourseService.saveBatch(examDetailCourseList);
-    }
+            examDetailCourse.setTotalSubjects(examDetailCourseStudentList.size());
+            examDetailCourse.setCreateId(sysUser.getId());
+            examDetailCourseService.save(examDetailCourse);
 
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void disposeExamStudentByExaminationExcel(Long examId, List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) throws IllegalAccessException {
-        BasicExam basicExam = basicExamService.getById(examId);
-
-        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examId, null);
-        if (basicPrintConfig == null) {
-            throw ExceptionResultEnum.ERROR.exception("印品配置未设置");
+            //组装exam_student数据
+            disposeExamStudentData(examId, examDetailCourse.getId(), examDetailCourseStudentList, sysUser);
         }
+    }
 
+    /**
+     * @param examId                      考试ID
+     * @param examDetailCourseId          考场科目
+     * @param examDetailCourseStudentList 考场科目下学生集合(excel读取)
+     * @param sysUser                     用户
+     */
+    private void disposeExamStudentData(Long examId, Long examDetailCourseId, List<ExaminationImportDto> examDetailCourseStudentList, SysUser sysUser) {
+        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examId);
         BasicCardRule basicCardRule = basicCardRuleService.getById(basicPrintConfig.getCardRuleId());
 
         // 查询学期下所有考务数据的准考证号集合
-        List<String> examStudentTicketNumberList = examStudentService.listTicketNumberBySemesterId(basicExam.getSemesterId(), examId);
+        List<String> examStudentTicketNumberList = examStudentService.listTicketNumberByExamId(examId);
 
         List<ExamStudent> examStudentList = new ArrayList<>();
-        List<BasicStudentExtrasParam> basicStudentExtrasParamList = new ArrayList<>();
-        Map<String, Integer> ticketNumberCodeMap = new HashMap<>();
         Set<String> ticketNumberRepeatList = new HashSet<>();
         StringJoiner stringJoiner = new StringJoiner(",");
-        for (ExaminationImportDto examinationImportDto : dataList) {
-            Long schoolId = examinationImportDto.getSchoolId();
-            Long printPlanId = examinationImportDto.getPrintPlanId();
-            String examPlace = examinationImportDto.getExamPlace();
-            String examRoom = examinationImportDto.getExamRoom();
-            Long examStartTime = SystemConstant.convertIdToLong(examinationImportDto.getExamStartTime());
-            Long examEndTime = SystemConstant.convertIdToLong(examinationImportDto.getExamEndTime());
-            String courseCode = examinationImportDto.getCourseCode();
-            String courseName = examinationImportDto.getCourseName();
+        Long schoolId = sysUser.getSchoolId();
+        for (ExaminationImportDto examinationImportDto : examDetailCourseStudentList) {
             String paperNumber = examinationImportDto.getPaperNumber();
             String studentName = examinationImportDto.getStudentName();
             String studentCode = examinationImportDto.getStudentCode();
-            String ticketNumber = null;
-            if (Objects.isNull(examinationImportDto.getTicketNumber()) || Objects.equals(examinationImportDto.getTicketNumber().trim(), "")) {//如果为空
-                ticketNumber = printCommonService.createTicketNumber(schoolId, basicCardRule == null ? null : basicCardRule.getExamNumberDigit());
+            String ticketNumber;
+            //如果为空,系统自动生成准考证号
+            if (StringUtils.isBlank(examinationImportDto.getTicketNumber()) || Objects.equals(examinationImportDto.getTicketNumber().trim(), "")) {
+                ticketNumber = printCommonService.createTicketNumber(examStudentTicketNumberList, schoolId, basicCardRule == null ? null : basicCardRule.getExamNumberDigit());
             } else {
-                ticketNumber = examinationImportDto.getTicketNumber();
+                ticketNumber = examinationImportDto.getTicketNumber().trim();
             }
             String siteNumber = examinationImportDto.getSiteNumber();
             String collegeName = examinationImportDto.getCollegeName();
             String majorName = examinationImportDto.getMajorName();
             String clazzName = examinationImportDto.getClazzName();
 
-            if (ticketNumberCodeMap.containsKey(ticketNumber)) {
-                ticketNumberCodeMap.put(ticketNumber, ticketNumberCodeMap.get(ticketNumber) + 1);
-            } else {
-                ticketNumberCodeMap.put(ticketNumber, 1);
-            }
-
             if (!examStudentTicketNumberList.isEmpty() && examStudentTicketNumberList.contains(ticketNumber)) {
                 ticketNumberRepeatList.add(ticketNumber);
             }
 
             List<FieldsDto> fieldsDtoList = examinationImportDto.getSecondaryFieldList();
             List<ExtendFieldsDto> extendFieldsDtoList = this.getExtendFieldsByFields(fieldsDtoList);
-            List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
-                    .eq(ExamDetail::getPrintPlanId, printPlanId)
-                    .eq(ExamDetail::getExamPlace, examPlace)
-                    .eq(ExamDetail::getExamRoom, examRoom)
-                    .eq(ExamDetail::getExamStartTime, examStartTime)
-                    .eq(ExamDetail::getExamEndTime, examEndTime));
-            if (examDetailList.size() != 1) {
-                throw ExceptionResultEnum.ERROR.exception("无法找到新增的考务场次数据");
-            }
-            Long examDetailId = examDetailList.get(0).getId();
-            List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.list(new QueryWrapper<ExamDetailCourse>().lambda()
-                    .eq(ExamDetailCourse::getExamDetailId, examDetailId)
-                    .eq(ExamDetailCourse::getCourseCode, courseCode)
-                    .eq(ExamDetailCourse::getCourseName, courseName)
-                    .eq(ExamDetailCourse::getPaperNumber, paperNumber));
-            if (examDetailCourseList.size() != 1) {
-                throw ExceptionResultEnum.ERROR.exception("无法找到新增的考务科目数据");
-            }
-            Long examDetailCourseId = examDetailCourseList.get(0).getId();
 
             ExamStudent examStudent = new ExamStudent();
             examStudent.setId(SystemConstant.getDbUuid());
             examStudent.setSchoolId(schoolId);
-            examStudent.setOrgId(sysUser.getOrgId());
+            examStudent.setExamId(examId);
             examStudent.setExamDetailCourseId(examDetailCourseId);
-            examStudent.setStudentName(studentName);
+            examStudent.setPaperNumber(paperNumber);
             examStudent.setStudentCode(studentCode);
+            examStudent.setStudentName(studentName);
             examStudent.setTicketNumber(ticketNumber);
             examStudent.setExtendFields(JSON.toJSONString(extendFieldsDtoList));
             examStudent.setSiteNumber(siteNumber);
@@ -764,42 +705,18 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             examStudent.setMajorName(majorName);
             examStudent.setClazzName(clazzName);
             examStudent.setStudentClazzType(StudentClazzEnum.BASIC_CLAZZ);
-            examStudent.setCreateId(userId);
-            examStudent.setUpdateId(userId);
-            examStudent.setExamId(examId);
-            examStudent.setPaperNumber(paperNumber);
+            examStudent.setCreateId(sysUser.getId());
             examStudentList.add(examStudent);
 
-            BasicStudentExtrasParam basicStudentExtrasParam = new BasicStudentExtrasParam();
-
-            basicStudentExtrasParam.setStudentName(studentName);
-            basicStudentExtrasParam.setStudentCode(studentCode);
-            basicStudentExtrasParam.setCollegeName(collegeName);
-            basicStudentExtrasParam.setMajorName(majorName);
-            basicStudentExtrasParam.setClazzName(clazzName);
-            basicStudentExtrasParamList.add(basicStudentExtrasParam);
         }
 
         // 校验准考证号是否重复
-        List<String> stringList = ticketNumberCodeMap.entrySet().stream().filter(m -> m.getValue().intValue() > 1).map(m -> String.format("考号[%s]有%d条重复数据", m.getKey(), m.getValue().intValue())).collect(Collectors.toList());
-        if (!stringList.isEmpty()) {
-            stringJoiner.add(String.join(",", stringList));
-        }
         if (!ticketNumberRepeatList.isEmpty()) {
             stringJoiner.add("考号[" + String.join(",", ticketNumberRepeatList) + "]在当前考试下已存在");
         }
         if (stringJoiner.toString().length() > 1) {
             throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
         }
-
-        // 更新基础学生表和附加数据
-//        basicStudentService.saveBasicStudentWithExtrasList(basicStudentExtrasParamList, sysUser, false);
-//        for (ExamStudent examStudent : examStudentList) {
-//            examStudent.setClazzId(String.valueOf(basicClazzService.getOne(new QueryWrapper<BasicClazz>()
-//                    .lambda()
-//                    .eq(BasicClazz::getClazzName, examStudent.getClazzName())
-//                    .eq(BasicClazz::getSchoolId, examStudent.getSchoolId())).getId()));
-//        }
         try {
             examStudentService.saveBatch(examStudentList);
         } catch (Exception e) {
@@ -1127,7 +1044,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Override
     public void deleteByExamIdAndPaperNumber(Long schoolId, Long examId, String paperNumber) {
         List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listExamDetailByExamIdAndPaperNumber(schoolId, examId, paperNumber);
-        if(!CollectionUtils.isEmpty(examDetailCourseList)){
+        if (!CollectionUtils.isEmpty(examDetailCourseList)) {
             for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
                 // 删除考场
                 this.removeById(examDetailCourse.getExamDetailId());

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

@@ -120,8 +120,8 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     }
 
     @Override
-    public List<String> listTicketNumberBySemesterId(String semesterId, Long examId) {
-        return this.baseMapper.listTicketNumberBySemesterId(semesterId, examId);
+    public List<String> listTicketNumberByExamId(Long examId) {
+        return this.baseMapper.listTicketNumberByExamId(examId);
     }
 
     @Override

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

@@ -401,7 +401,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
             Long examId = examTask.getExamId();
             String courseCode = examTask.getCourseCode();
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examId, courseCode);
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examId);
             examTask.setExamId(examId);
             examTask.setCardRuleId(basicPrintConfig.getCardRuleId());
             examTask.setSchoolId(schoolId);
@@ -716,7 +716,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         for (Map<String, String> userMap : userList) {
             String courseCode = userMap.get("courseCode");
             // 配置信息
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examId, courseCode);
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examId);
             Long cardRuleId = basicPrintConfig.getCardRuleId();
 
             ExamTask examTask = new ExamTask();
@@ -910,7 +910,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         ExamTask examTask = this.getById(examTaskDetail.getExamTaskId());
         // 提交时,校验
         if (ExamStatusEnum.SUBMIT.name().equals(examTaskDetail.getOperateType())) {
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examTask.getExamId(), examTask.getCourseCode());
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
             if (basicPrintConfig == null) {
                 throw ExceptionResultEnum.ERROR.exception("印品配置未设置");
             }
@@ -1036,7 +1036,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         ExamTaskDetailCardDto detailCardDto = this.baseMapper.applyGetOne(examTaskId, source);
         if (detailCardDto != null) {
             ExamTask examTask = examTaskService.getById(examTaskId);
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examTask.getExamId(), examTask.getCourseCode());
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
             if (basicPrintConfig != null) {
                 detailCardDto.setPrintContent(basicPrintConfig.getPrintContent());
             }
@@ -1474,16 +1474,14 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 examTask.setFlowId(task.getFlowId());
             }
 
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examId);
+
             examTask.setId(Objects.isNull(examTask.getId()) ? SystemConstant.getDbUuid() : examTask.getId());
-            examTask.setCardRuleId(basicPrintConfigService.getByExamIdAndCourseCode(examId, courseCode).getCardRuleId());
+            examTask.setCardRuleId(basicPrintConfig.getCardRuleId());
             examTask.setPaperNumberId(SystemConstant.getDbUuid());
             examTask.setSchoolId(schoolId);
             examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
             examTask.setCreateId(sysUser.getId());
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examId, courseCode);
-            if (basicPrintConfig == null) {
-                throw ExceptionResultEnum.ERROR.exception("印品配置未设置");
-            }
             examTask.setReview(basicPrintConfig.getReview());
             examTask.setUserId(sysUser.getId());
             examTask.updateInfo(sysUser.getId());
@@ -1644,10 +1642,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setSchoolId(schoolId);
             examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
 
-            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(examTask.getExamId(), examTask.getCourseCode());
-            if (basicPrintConfig == null) {
-                throw ExceptionResultEnum.ERROR.exception("印品配置未设置");
-            }
+            BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examTask.getExamId());
             examTask.setReview(basicPrintConfig.getReview());
             examTask.setUserId(sysUser.getId());
             examTask.setStatus(ExamStatusEnum.SUBMIT);

+ 13 - 65
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -592,21 +592,6 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         return saveAttachmentCommon(file, md5, type, null);
     }
 
-    /**
-     * 保存附件
-     *
-     * @param file
-     * @param md5
-     * @param type
-     * @param objId
-     * @return
-     */
-    @Override
-    @Transactional
-    public BasicAttachment saveAttachment(MultipartFile file, String md5, UploadFileEnum type, Long objId) {
-        return saveAttachmentCommon(file, md5, type, objId);
-    }
-
     /**
      * 科目删除
      *
@@ -914,51 +899,6 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         return map;
     }
 
-    @Transactional
-    @Override
-    public Map<String, Object> savePush(PushTypeEnum pushTypeEnum) {
-        Map<String, Object> map = null;
-        try {
-            map = new HashMap<>();
-            TBSyncTask tbSyncTask = tbSyncTaskService.savePushCommon(pushTypeEnum, map, null);
-            tbSyncTaskService.save(tbSyncTask);
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-            if (e instanceof ApiException) {
-                ResultUtil.error((ApiException) e, e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
-        }
-        return map;
-    }
-
-    @Transactional
-    @Override
-    public Map<String, Object> savePush(PushTypeEnum pushTypeEnum, Long objectId) {
-        Map<String, Object> map = null;
-        try {
-            // 校验任务是否进行中
-            QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(TBSyncTask::getType, pushTypeEnum).eq(TBSyncTask::getObjectId, objectId).ne(TBSyncTask::getStatus, TaskStatusEnum.FINISH);
-            List<TBSyncTask> list = tbSyncTaskService.list(queryWrapper);
-            if (!list.isEmpty()) {
-                throw ExceptionResultEnum.ERROR.exception("当前同步条件下有任务正在进行中");
-            }
-            map = new HashMap<>();
-            TBSyncTask tbSyncTask = tbSyncTaskService.savePushCommon(pushTypeEnum, map, null, objectId);
-            tbSyncTaskService.save(tbSyncTask);
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-            if (e instanceof ApiException) {
-                ResultUtil.error((ApiException) e, e.getMessage());
-            } else {
-                ResultUtil.error(e.getMessage());
-            }
-        }
-        return map;
-    }
-
     /**
      * 校验课程关联考场是否提交打印
      *
@@ -1105,9 +1045,11 @@ public class PrintCommonServiceImpl implements PrintCommonService {
     @Override
     public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, Long examId, String semesterId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, Long cardRuleId, SysUser sysUser) {
         AtomicInteger atomicInteger = new AtomicInteger(1);
-
         BasicCardRule basicCardRule = basicCardRuleService.getById(cardRuleId);
 
+        // 查询学期下所有考务数据的准考证号集合
+        List<String> examStudentTicketNumberList = examStudentService.listTicketNumberByExamId(examId);
+
         Map<String, String> map = new HashMap<>();
         List<ExamStudent> examStudentList = new ArrayList<>();
         for (ExamTaskStudentObjectParam student : examTaskStudentObjectParamList) {
@@ -1151,7 +1093,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             examStudent.setPaperNumber(paperNumber);
             examStudent.setCollegeName(basicStudentResult.getCollegeName());
             examStudent.setMajorName(basicStudentResult.getMajorName());
-            examStudent.setTicketNumber(createTicketNumber(schoolId, basicCardRule == null ? null : basicCardRule.getExamNumberDigit()));
+            examStudent.setTicketNumber(createTicketNumber(examStudentTicketNumberList, schoolId, basicCardRule == null ? null : basicCardRule.getExamNumberDigit()));
             examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
             examStudent.setExtendFields(extendFields);
             examStudent.setCreateId(sysUser.getId());
@@ -1185,10 +1127,12 @@ public class PrintCommonServiceImpl implements PrintCommonService {
      * @return
      */
     @Override
-    public String createTicketNumber(Long schoolId, Integer totalDigit) {
+    public String createTicketNumber(List<String> usedTicketNumberList, Long schoolId, Integer totalDigit) {
+        // 考号位数为空时,默认生成10位
         if (totalDigit == null) {
             totalDigit = 10;
         }
+        String ticketNumber = null;
         try {
             try {
                 lock.tryLock(30, TimeUnit.SECONDS);
@@ -1200,13 +1144,17 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             if (totalDigit < 10) {
                 prefix = date.substring(2, 4);
             } else {
-                prefix = date.substring(2);
+                prefix = date.substring(2, 6);
+            }
+            ticketNumber = convertUtil.getIncre(prefix, SystemConstant.NUMBER_CACHE + "ticketNumber" + schoolId, totalDigit - prefix.length());
+            if (!CollectionUtils.isEmpty(usedTicketNumberList) && usedTicketNumberList.contains(ticketNumber)) {
+                createTicketNumber(usedTicketNumberList, schoolId, totalDigit);
             }
-            return convertUtil.getIncre(prefix, SystemConstant.NUMBER_CACHE + "ticketNumber" + schoolId, totalDigit - prefix.length());
 
         } finally {
             lock.unlock();
         }
+        return ticketNumber;
     }
 
     /**

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

@@ -57,7 +57,7 @@ public class AsyncExaminationImportTemplateService extends AsyncImportTaskTemple
 
             // 检测是否去生成pdf
             if (Objects.isNull(map.get("examDetailIdList"))) {
-                throw ExceptionResultEnum.ERROR.exception("不能获取考务-场次id集合");
+                throw ExceptionResultEnum.ERROR.exception("导入考务数据失败,数据未正确保存");
             }
             List<Long> examDetailIdList = (List<Long>) map.get("examDetailIdList");
             // 按照考场检验命题任务是否全部完成,完成生成pdf

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

@@ -34,9 +34,9 @@ public interface TaskLogicService {
      * @param map 参数
      * @return 要导出的考务数据
      */
-    public Map<String, Object> executeExaminationLogic(Map<String, Object> map) throws Exception;
+    Map<String, Object> executeExaminationLogic(Map<String, Object> map) throws Exception;
 
-    public Map<String, Object> executeImportExaminationLogic(Map<String, Object> map) throws Exception;
+    Map<String, Object> executeImportExaminationLogic(Map<String, Object> map) throws Exception;
 
     /**
      * 下载pdf
@@ -45,7 +45,7 @@ public interface TaskLogicService {
      * @return
      * @throws IOException
      */
-    public Map<String, Object> executeDownloadPdfLogic(Map<String, Object> map) throws Exception;
+    Map<String, Object> executeDownloadPdfLogic(Map<String, Object> map) throws Exception;
 
     /**
      * 处理导出命题任务审核文件
@@ -53,7 +53,7 @@ public interface TaskLogicService {
      * @param map
      * @return
      */
-    public Map<String, Object> executeExportSampleLogic(Map<String, Object> map) throws Exception;
+    Map<String, Object> executeExportSampleLogic(Map<String, Object> map) throws Exception;
 
     /**
      * 导出试卷、题卡pdf

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

@@ -717,13 +717,10 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         if (!tbTaskService.countByPrintPlanIdAndEntityId(schoolId, printPlanId, null)) {
             throw ExceptionResultEnum.ERROR.exception("印刷计划[" + printPlanName + "]正在生成pdf文件,无法导入考务数据");
         }
-        Long userId = tbTask.getCreateId();
-
         PrintPlanStatusEnum printPlanStatus = examPrintPlan.getStatus();
         if (PrintPlanStatusEnum.NEW != printPlanStatus && PrintPlanStatusEnum.READY != printPlanStatus) {
             throw ExceptionResultEnum.ERROR.exception("印刷计划状态为[" + PrintPlanStatusEnum.NEW.getDesc() + "、" + PrintPlanStatusEnum.READY.getDesc() + "]时才可导入,当前状态[" + printPlanStatus.getDesc() + "]");
         }
-
         // 该学校有效考务规则字段
         List<FieldsDto> fieldsDtoList = examDetailService.findExaminationFields(schoolId);
 
@@ -771,7 +768,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 throw ExceptionResultEnum.ERROR.exception("考务数据必填字段[" + fieldsDto.getName() + "]在表头中不存在");
             }
         }
+        Long examId = examPrintPlan.getExamId();
+        BasicExam basicExam = basicExamService.getById(examId);
+
         List<ExaminationImportDto> examinationImportDtoList = new ArrayList<>();
+
+        // 错误信息字符串
+        StringJoiner errorString = new StringJoiner(";\r\n");
         for (int r = 1; r < totalRows; r++) {
             Row row = sheet.getRow(r);
             if (ExcelUtil.isRowAllCellEmpty(row, head)) {
@@ -794,11 +797,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 if (Objects.nonNull(row)) {
                     Cell cell = row.getCell(index);
                     if (cell == null) {
-                        throw ExceptionResultEnum.ERROR.exception("第[" + (r + 1) + "]行,第[" + (index + 1) + "]列,字段[" + name + "]必填");
+                        errorString.add("第" + (r + 1) + "行,第" + (index + 1) + "列,字段[" + name + "]必填");
                     }
                     String cellValue = String.valueOf(ExcelUtil.convert(cell));
                     if (cellValue == null || cellValue.length() < 1 || cellValue.equals("null")) {
-                        throw ExceptionResultEnum.ERROR.exception("第[" + (r + 1) + "]行,第[" + (index + 1) + "]列,字段[" + name + "]必填");
+                        errorString.add("第" + (r + 1) + "行,第" + (index + 1) + "列,字段[" + name + "]必填");
                     }
 
                     for (Field examinationImportDtoField : examinationImportDtoFields) {
@@ -831,33 +834,6 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     }
                 }
             }
-            // 校验试卷编号
-            Long examId = examPrintPlan.getExamId();
-            String paperNumber = examinationImportDto.getPaperNumber();
-            String courseCode = examinationImportDto.getCourseCode();
-            List<ExamTask> examTaskList = examTaskService.list(new QueryWrapper<ExamTask>().lambda()
-                    .eq(ExamTask::getSchoolId, schoolId)
-                    .eq(ExamTask::getExamId, examPrintPlan.getExamId())
-                    .eq(ExamTask::getPaperNumber, paperNumber));
-            if (examTaskList.size() > 1) {
-                BasicExam basicExam = basicExamService.getById(examId);
-                throw ExceptionResultEnum.ERROR.exception(String.format("试卷编号[%s]在考试[%s]下有多条命题任务", paperNumber, basicExam.getName()));
-            } else if (examTaskList.size() == 1) {
-                ExamTask examTask = examTaskList.get(0);
-                if (!courseCode.equals(examTask.getCourseCode())) {
-                    throw ExceptionResultEnum.ERROR.exception(String.format("文件中试卷编号[%s]对应课程代码为[%s],命题任务中对应课程代码为[%s]", paperNumber, courseCode, examTask.getCourseCode()));
-                }
-            }
-
-            // 校验课程信息
-            String courseName = examinationImportDto.getCourseName();
-            QueryWrapper<BasicCourse> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode);
-            BasicCourse tmp = basicCourseService.getOne(queryWrapper);
-            if (tmp != null && !courseName.equals(tmp.getName())) {
-                throw ExceptionResultEnum.ERROR.exception(String.format("文件中课程代码[%s]对应课程名称为[%s],课程管理中对应课程名称为[%s]", courseCode, courseName, tmp.getName()));
-            }
-
             // 解析时间
             Map<String, Object> timeMap = ConvertUtil.analyzeStartAndEndTime(examinationImportDto.getExamDate(), examinationImportDto.getExamTime());
             String examStartTime = String.valueOf(timeMap.get("startTime"));
@@ -867,28 +843,73 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             examinationImportDto.setExamStartTime(examStartTime);
             examinationImportDto.setExamEndTime(examEndTime);
             examinationImportDto.setSchoolId(schoolId);
-            examinationImportDto.setPrintPlanId(printPlanId);
-            examinationImportDto.setPrintPlanName(printPlanName);
             examinationImportDtoList.add(examinationImportDto);
         }
 
-        // 按考点+开始时间+课程代码+考场排序
-        examinationImportDtoList.sort(Comparator.comparing(ExaminationImportDto::getExamPlace)
-                        .thenComparing(ExaminationImportDto::getExamStartTime)
-                        .thenComparing(ExaminationImportDto::getCourseCode)
-                        .thenComparing(ExaminationImportDto::getExamRoom)
-        );
+        // 课程代码map(同一课程代码,有不同课程名称)
+        Map<String, Set<String>> courseCodeMap = examinationImportDtoList.stream().collect(Collectors.groupingBy(ExaminationImportDto::getCourseCode, Collectors.mapping(ExaminationImportDto::getCourseName, Collectors.toSet())));
+        for (Map.Entry<String, Set<String>> entry : courseCodeMap.entrySet()) {
+            String courseCode = entry.getKey();
+            List<String> courseNames = new ArrayList<>(entry.getValue());
+            if (courseNames.size() > 1) {
+                errorString.add(String.format("文件中课程代码[%s]对应多个不同的课程名称[%s]", courseCode, String.join(",", courseNames)));
+            } else {
+                QueryWrapper<BasicCourse> queryWrapper = new QueryWrapper<>();
+                queryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, courseCode);
+                BasicCourse basicCourse = basicCourseService.getOne(queryWrapper);
+                String courseName = courseNames.get(0);
+                if (basicCourse != null && !basicCourse.getName().equals(courseName)) {
+                    errorString.add(String.format("文件中课程代码[%s]对应课程名称为[%s],课程管理中对应课程名称为[%s]", courseCode, courseName, basicCourse.getName()));
+                }
+            }
+        }
+
+        // 准考证号map(同一准考证号,多次出现)
+        Map<String, Long> ticketNumberMap = examinationImportDtoList.stream().filter(m -> StringUtils.isNotBlank(m.getTicketNumber())).collect(Collectors.groupingBy(ExaminationImportDto::getTicketNumber, Collectors.counting()));
+        for (Map.Entry<String, Long> entry : ticketNumberMap.entrySet()) {
+            String ticketNumber = entry.getKey();
+            Long count = entry.getValue();
+            if (count > 1) {
+                errorString.add(String.format("文件中考号[%s]有[%s]条重复数据", ticketNumber, count));
+            }
+        }
 
-        // 校验课程代码和试卷编号在印刷计划下是1对1的关系
-        List<String> paperNumberList = examinationImportDtoList.stream().map(ExaminationImportDto::getPaperNumber).distinct().collect(Collectors.toList());
-        for (String paperNumber : paperNumberList) {
-            List<String> tmp = examinationImportDtoList.stream().filter(e -> paperNumber.equals(e.getPaperNumber()))
-                    .map(ExaminationImportDto::getCourseCode).distinct().collect(Collectors.toList());
-            if (tmp.size() != 1) {
-                throw ExceptionResultEnum.ERROR.exception(String.format("试卷编号[%s]对应多个课程代码[%s]", paperNumber, String.join(",", tmp)));
+        // 试卷编号map(同一试卷编号,有不同课程代码)
+        Map<String, Set<String>> paperNumberMap = examinationImportDtoList.stream().collect(Collectors.groupingBy(ExaminationImportDto::getPaperNumber, Collectors.mapping(ExaminationImportDto::getCourseCode, Collectors.toSet())));
+        for (Map.Entry<String, Set<String>> entry : courseCodeMap.entrySet()) {
+            String paperNumber = entry.getKey();
+            List<String> courseCodes = new ArrayList<>(entry.getValue());
+            if (courseCodes.size() > 1) {
+                errorString.add(String.format("文件中试卷编号[%s]对应多个不同的课程代码[%s]", paperNumber, String.join(",", courseCodes)));
+            } else {
+                List<ExamTask> examTaskList = examTaskService.list(new QueryWrapper<ExamTask>().lambda()
+                        .eq(ExamTask::getSchoolId, schoolId)
+                        .eq(ExamTask::getExamId, examId)
+                        .eq(ExamTask::getPaperNumber, paperNumber));
+                if (examTaskList.size() > 1) {
+                    errorString.add(String.format("试卷编号[%s]在考试[%s]下有多条命题任务,请联系管理员处理", paperNumber, basicExam.getName()));
+                } else if (examTaskList.size() == 1) {
+                    ExamTask examTask = examTaskList.get(0);
+                    String courseCode = courseCodes.get(0);
+                    if (!examTask.getCourseCode().equals(courseCode)) {
+                        errorString.add(String.format("文件中试卷编号[%s]对应课程代码为[%s],命题任务中对应课程代码为[%s]", paperNumber, courseCode, examTask.getCourseCode()));
+                    }
+                }
             }
         }
 
+        // 错误异常抛出去
+        if (errorString.length() > 0) {
+            throw ExceptionResultEnum.ERROR.exception(errorString.toString());
+        }
+
+        // 按考点+开始时间+课程代码+考场排序
+        examinationImportDtoList.sort(Comparator.comparing(ExaminationImportDto::getExamPlace)
+                .thenComparing(ExaminationImportDto::getExamStartTime)
+                .thenComparing(ExaminationImportDto::getCourseCode)
+                .thenComparing(ExaminationImportDto::getExamRoom)
+        );
+
         // 删除印刷计划下的考务数据
         examDetailService.deleteExaminationData(printPlanId, null);
 
@@ -903,12 +924,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         Long valueStudent = counterStudent.get();
         try {
             // 组装exam_detail数据
-            List<Long> examDetailIdList = examDetailService.disposeExamDetailByExaminationExcel(examPrintPlan, examinationImportDtoList, userId, serialNumberParams, sysUser);
-            // 组装exam_detail_course数据
-            examDetailService.disposeExamDetailCourseByExaminationExcel(examinationImportDtoList, userId, sysUser);
-            // 组装exam_student数据
-            examDetailService.disposeExamStudentByExaminationExcel(examPrintPlan.getExamId(), examinationImportDtoList, userId, sysUser);
-
+            List<Long> examDetailIdList = examDetailService.disposeExamDataByExaminationExcel(examPrintPlan, examinationImportDtoList, serialNumberParams, sysUser);
             // 更改印刷计划状态
             examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
             examPrintPlanService.updateById(examPrintPlan);

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

@@ -288,7 +288,7 @@
                 AND a.paper_type = b.paper_type
                 AND a.clazz_id = b.clazz_id
     </select>
-    <select id="listTicketNumberBySemesterId" resultType="java.lang.String">
+    <select id="listTicketNumberByExamId" resultType="java.lang.String">
         SELECT
             es.ticket_number
         FROM
@@ -300,13 +300,8 @@
                         exam_detail_course edc
                             JOIN
                         exam_detail ed ON edc.exam_detail_id = ed.id
-                            JOIN
-                        exam_print_plan epp ON ed.print_plan_id = epp.id
-                            JOIN
-                        basic_exam be ON epp.exam_id = be.id
                     WHERE
                         es.exam_detail_course_id = edc.id
-                      AND be.semester_id = #{semesterId}
-                        AND be.id = #{examId})
+                        AND ed.exam_id = #{examId})
     </select>
 </mapper>

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

@@ -139,7 +139,7 @@ public class ExamCardController {
     @ApiOperation(value = "选择已有题卡列表")
     @RequestMapping(value = "/select_card_list", method = RequestMethod.POST)
     public Result selectCardList(@RequestParam String examId, @RequestParam String courseCode, @RequestParam(required = false) String paperNumber) {
-        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamIdAndCourseCode(SystemConstant.convertIdToLong(examId), courseCode);
+        BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(SystemConstant.convertIdToLong(examId));
         List<ExamCard> list = examCardService.listSelectCard(courseCode, basicPrintConfig.getCardRuleId(), paperNumber);
         return ResultUtil.ok(list);
     }

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

@@ -12,14 +12,14 @@ spring.application.name=distributed-print
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.port=3306
-db.name=distributed-v3.2.3
-db.username=ENC(HR5javPBrhlAf4sy/hbT5w==)
-db.password=ENC(YgWN6qax08Zi5Fz83jyNbvfac3Xkg1cI)
+db.name=distributed-print-3.2.7
+db.username=ENC(/Tvgn1JSwu3+8T3qR1CiBA==)
+db.password=ENC(Susfsu9bmA+vOmJOs/BCZv9514+7waIp)
 
 #redis\u6570\u636E\u6E90\u914D\u7F6E
 com.qmth.redis.host=${db.host}
 com.qmth.redis.port=6379
-com.qmth.redis.db=1
+com.qmth.redis.db=5
 #com.qmth.redis.password=
 
 #mysql\u914D\u7F6E
@@ -63,10 +63,10 @@ spring.activiti.history-level=audit
 #com.qmth.fss.private.config=oss://LTAI4Fi8jVRYT49QBXU9x5QX:97aBLBfkQR5mzCiQa82yWLAH57eUd8@teachcloud-test.oss-cn-shenzhen.aliyuncs.com
 #com.qmth.fss.private.server=https://oss-cn-shenzhen.aliyuncs.com
 
-com.qmth.fss.public.config=../static/
-com.qmth.fss.public.server=/static/
-com.qmth.fss.private.config=../static/
-com.qmth.fss.private.server=/static/
+com.qmth.fss.public.config=/Users/xiaofei/qmth/temporary/zxzk/file-temp
+com.qmth.fss.public.server=http://192.168.10.140:7001
+com.qmth.fss.private.config=/Users/xiaofei/qmth/temporary/zxzk/pdf-temp
+com.qmth.fss.private.server=http://192.168.10.140:7001
 
 #com.qmth.fss.public.config=/Users/king/git/static
 #com.qmth.fss.public.server=http://127.0.0.1:7001
@@ -79,10 +79,10 @@ com.qmth.fss.private.server=/static/
 #com.qmth.fss.private.server=/pdf-temp/
 
 #\u7CFB\u7EDF\u914D\u7F6E
-sys.config.oss=true
+sys.config.oss=false
 sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
-#sys.config.serverUpload=
-#spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
+sys.config.serverUpload=
+spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 #com.qmth.api.uri-prefix=/aaa
 #\u7EDF\u8BA1\u9875\u9762\u914D\u7F6E
@@ -104,7 +104,7 @@ spring.jackson.time-zone=GMT+8
 
 #\u65E5\u5FD7\u914D\u7F6E
 com.qmth.logging.root-level=info
-com.qmth.logging.file-path=/Users/king/Downloads/distributed-print.log
+com.qmth.logging.file-path=/Users/xiaofei/qmth/temporary/zxzk/log/distributed-print.log
 
 #com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
 #com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr