Просмотр исходного кода

Merge remote-tracking branch 'origin/dev_v3.4.2' into dev_v3.4.2

wangliang 8 месяцев назад
Родитель
Сommit
a07966399e
32 измененных файлов с 187 добавлено и 491 удалено
  1. 4 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskDetailDto.java
  2. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/client/PrintSingleDto.java
  3. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java
  4. 12 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  6. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  7. 4 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java
  8. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  9. 1 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  10. 3 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamStudentServiceImpl.java
  11. 17 25
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java
  12. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DownloadServiceImpl.java
  13. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  14. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  15. 4 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  16. 55 306
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  17. 15 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  18. 5 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  19. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/DownloadLogicServiceImpl.java
  20. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PdfTaskLogicServiceImpl.java
  21. 7 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  22. 10 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/ExamTaskUtil.java
  23. 2 0
      distributed-print-business/src/main/resources/db/log/xf.sql
  24. 2 11
      distributed-print-business/src/main/resources/mapper/ClientMapper.xml
  25. 1 2
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  26. 0 12
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  27. 7 44
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskQueryController.java
  28. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/WorkController.java
  29. 1 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQuestionController.java
  30. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkSettingController.java
  31. 1 2
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  32. 2 3
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

+ 4 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskDetailDto.java

@@ -10,7 +10,8 @@ import io.swagger.annotations.ApiModelProperty;
  */
 public class ExamTaskDetailDto {
 
-    private String id;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
     private String examDetailId;
     private String printPlanId;
     private String printPlanName;
@@ -56,11 +57,11 @@ public class ExamTaskDetailDto {
     @ApiModelProperty(value = "命题任务试卷附件")
     private String paperAttachmentIds;
 
-    public String getId() {
+    public Long getId() {
         return id;
     }
 
-    public void setId(String id) {
+    public void setId(Long id) {
         this.id = id;
     }
 

+ 5 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/client/PrintSingleDto.java

@@ -12,7 +12,7 @@ public class PrintSingleDto {
     private String courseCode;
     private String courseName;
     private String paperNumber;
-    private String paperType;
+    private Integer serialNumber;
     private String examDetailIds;
     private List<UrlMd5Dto> paper;
     private List<UrlMd5Dto> card;
@@ -84,12 +84,12 @@ public class PrintSingleDto {
         this.paperNumber = paperNumber;
     }
 
-    public String getPaperType() {
-        return paperType;
+    public Integer getSerialNumber() {
+        return serialNumber;
     }
 
-    public void setPaperType(String paperType) {
-        this.paperType = paperType;
+    public void setSerialNumber(Integer serialNumber) {
+        this.serialNumber = serialNumber;
     }
 
     public String getExamDetailIds() {

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

@@ -118,6 +118,10 @@ public class ExamTask extends BaseEntity implements Serializable {
      * 0-禁用,1-启用
      */
     private Boolean enable;
+    /**
+     * 卷库启用/禁用状态
+     */
+    private Boolean examTaskDetailEnable;
 
     @TableField("batch_no")
     private String batchNo;
@@ -451,4 +455,12 @@ public class ExamTask extends BaseEntity implements Serializable {
     public void setRemark(String remark) {
         this.remark = remark;
     }
+
+    public Boolean getExamTaskDetailEnable() {
+        return examTaskDetailEnable;
+    }
+
+    public void setExamTaskDetailEnable(Boolean examTaskDetailEnable) {
+        this.examTaskDetailEnable = examTaskDetailEnable;
+    }
 }

+ 12 - 18
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskDetail.java

@@ -55,7 +55,7 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
      * 曝光的考试ID
      */
     @JsonSerialize(using = ToStringSerializer.class)
-    @TableField("exposed_exam_id")
+    @TableField(value = "exposed_exam_id", updateStrategy = FieldStrategy.IGNORED)
     private Long exposedExamId;
     /**
      * [
@@ -86,7 +86,7 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
     @TableField("unexposed_paper_type")
     private String unexposedPaperType;
 
-    private Boolean enable;
+//    private Boolean enable;
 
     @ApiModelProperty(value = "流程审批人列表")
     @JsonSerialize(using = ToStringSerializer.class)
@@ -187,13 +187,13 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
         this.unexposedPaperType = unexposedPaperType;
     }
 
-    public Boolean getEnable() {
-        return enable;
-    }
-
-    public void setEnable(Boolean enable) {
-        this.enable = enable;
-    }
+//    public Boolean getEnable() {
+//        return enable;
+//    }
+//
+//    public void setEnable(Boolean enable) {
+//        this.enable = enable;
+//    }
 
     public String getExamTaskContent() {
         return examTaskContent;
@@ -203,17 +203,11 @@ public class ExamTaskDetail extends BaseEntity implements Serializable {
         this.examTaskContent = examTaskContent;
     }
 
-    public List<PaperInfoVo> getPaperInfoVoList(String paperTypes) {
+    public List<PaperInfoVo> getPaperInfoVoList() {
         List<PaperInfoVo> paperInfoVos = new ArrayList<>();
-        if(StringUtils.isNotBlank(paperAttachmentIds)){
+        if (StringUtils.isNotBlank(paperAttachmentIds)) {
             if (StringUtils.isNotBlank(paperAttachmentIds)) {
-                paperInfoVos = JSON.parseArray(paperAttachmentIds, PaperInfoVo.class);
-                if (StringUtils.isBlank(paperTypes)) {
-                    return paperInfoVos;
-                } else {
-                    List<String> paperTypeList = Arrays.asList(paperTypes.split(","));
-                    paperInfoVos = paperInfoVos.stream().filter(m -> paperTypeList.contains(m.getName())).collect(Collectors.toList());
-                }
+                return JSON.parseArray(paperAttachmentIds, PaperInfoVo.class);
             }
         }
         return paperInfoVos;

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

@@ -30,7 +30,7 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("courseId") Long courseId, @Param("paperNumber") String paperNumber);
 
-    List<ExamDetailCourse> listExamDetailByExamIdAndPaperNumber(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("paperNumber") String paperNumber);
+    List<ExamDetailCourse> listByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 
     TbTaskDetailResult getByExamDetailId(Long examDetailId);
 

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

@@ -30,7 +30,7 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<ExamDetailCourse> listByPrintPlanIdAndCourseIdAndPaperNumber(Long schoolId, Long printPlanId, Long courseId, String paperNumber);
 
-    List<ExamDetailCourse> listExamDetailByExamIdAndPaperNumber(Long schoolId, Long examId, String paperNumber);
+    List<ExamDetailCourse> listByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     TbTaskDetailResult getByExamDetailId(Long examDetailId);
 

+ 4 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java

@@ -5,6 +5,7 @@ import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailPdfDownloadDto;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
+import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 
 import java.io.IOException;
@@ -21,7 +22,7 @@ import java.util.Map;
  */
 public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
 
-    boolean enable(ExamTaskDetail examTaskDetail) throws IOException;
+    boolean enable(ExamTask examTask) throws IOException;
 
     boolean updatePaper(RelatePaperParam paperParam) throws IOException;
 
@@ -31,8 +32,6 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
 
     void resetCardId(Long id);
 
-    Map<String, Object> paperUpdate(ExamTaskDetail examTaskDetail);
-
     /**
      * 重启流程
      *
@@ -42,8 +41,6 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
     Map<String, Object> taskRestart(ExamTaskDetail examTaskDetail);
 
     ExamTaskDetail getByExamTaskIdNotValid(Long examTaskId);
-    ExamTaskDetail getByExamTaskId(Long examTaskId);
-
     /**
      * 根据examTaskId下载pdf
      *
@@ -54,15 +51,13 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
 
     List<String> listRelateCommonTypes(Long semesterId, Long examId, String relateType, List<Long> idList, Long courseId, String paperNumber, String userName);
 
-    ExamTaskDetail findByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String number);
-
     boolean cancel(Long id, String cancelRemark);
 
-    ExamTaskDetail getByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String paperNumber);
+    ExamTaskDetail getByExamTaskIdAndSerialNumber(Long examTaskId, Integer serialNumber);
     ExamTaskDetail getByExamIdAndPaperNumberAndSerialNumber(Long examId, String paperNumber, Integer serialNumber);
 
     void updateExposePaperType(Long examId, List<ExamDetailCourse> listByExamDetailId);
-    void updateUnexposePaperType(Long examId, String paperNumber, String exposePaperType);
+    void updateUnexposePaperType(Long examId, String paperNumber, Integer serialNumber);
 
     int countByCardId(Long cardId);
 

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

@@ -188,7 +188,7 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     Map<String, Object> getTikuPaperData(Long examId, Long paperId, String uuid);
 
-    List<ExamDetail> matchBasicExamStudent(BasicExam basicExam, ExamTask examTask, ExamTaskDetail examTaskDetail, SysUser user);
+    List<ExamDetail> matchBasicExamStudent(BasicExam basicExam, ExamTask examTask, SysUser user);
 
     List<TaskPrintHouseDto> listPrintHouse();
 

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

@@ -32,7 +32,7 @@ public interface PrintCommonService {
 
     void saveAttachmentSignPdf(PdfSignDto pdfFillDto, ExamDetail examDetail, Integer printCount, BasicTemplate basicTemplate);
 
-    BasicAttachment saveAttachmentPdfFromHtml(String fileName, String htmlContent, Long userId, List<PdfDto> localFileList, List<File> fileTempList) throws IOException;
+    BasicAttachment saveAttachmentPdfFromHtml(String fileName, String htmlContent, Long userId, List<PdfDto> localFileList, List<File> fileTempList, String pageSize) throws IOException;
 
     BasicAttachment saveAttachmentPdfFromHtml(String fileName, File file, Long userId, List<PdfDto> localFileList, List<File> fileTempList, PageSizeEnum pageSizeEnum) throws IOException;
 
@@ -189,7 +189,6 @@ public interface PrintCommonService {
      * @param describe
      * @param sheetName
      * @param fileName
-     * @param excelFieldRowSet
      * @throws IOException
      */
     public void scoreDownLoadExaminationTemplate(String describe, String sheetName, String fileName, List<Set<ExcelField>> excelFieldRowList) throws IOException;

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

@@ -189,7 +189,7 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
 
                     // 考务数据全删除时,将卷型更新为未曝光
                     if (examStudentService.countByExamIdAndPaperNumber(examId, paperNumber) == 0) {
-                        examTaskDetailService.updateUnexposePaperType(examId, paperNumber, markPaper.getPaperType());
+                        examTaskDetailService.updateUnexposePaperType(examId, paperNumber, markPaper.getSerialNumber());
                     }
                 }
             }
@@ -250,8 +250,8 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
 
         // 校验试卷编号和卷型
         if (!ExamModelEnum.MODEL4.equals(basicExam.getExamModel()) && StringUtils.isNoneBlank(basicExamStudentParam.getPaperNumber(), basicExamStudentParam.getPaperType())) {
-            // 不传课程ID
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndCourseIdAndPaperNumber(basicExamStudentParam.getExamId(), null, basicExamStudentParam.getPaperNumber());
+            // 默认取备用卷1的卷型(所有备用卷的卷型一样,A或者AB)
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(basicExamStudentParam.getExamId(), basicExamStudentParam.getPaperNumber(), 1);
             if (examTaskDetail != null) {
                 if (!examTaskDetail.getPaperType().contains(basicExamStudentParam.getPaperType())) {
                     throw ExceptionResultEnum.ERROR.exception("试卷编号[" + basicExamStudentParam.getPaperNumber() + "]的命题任务卷型为[" + examTaskDetail.getPaperType() + "]");

+ 17 - 25
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ClientServiceImpl.java

@@ -25,7 +25,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.OutputFileTypeEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
@@ -548,7 +548,7 @@ public class ClientServiceImpl implements ClientService {
         if (CollectionUtils.isNotEmpty(outputFileTypeList)) {
             List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamDetailId(examDetail.getId());
             for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
-                ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndCourseIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
+                ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber(), examDetailCourse.getSerialNumber());
                 List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), examDetailCourse.getPaperType());
                 for (PaperInfoVo paperInfoVo : paperInfoVoList) {
                     if ((outputFileTypeList.contains(OutputFileTypeEnum.GENERIC_CARD) && CardTypeEnum.GENERIC.equals(CardTypeEnum.valueOf(paperInfoVo.getCardType())))
@@ -821,8 +821,8 @@ public class ClientServiceImpl implements ClientService {
         String[] examDetailStatus = {ExamDetailStatusEnum.NEW.name(), ExamDetailStatusEnum.READY.name(), ExamDetailStatusEnum.CANCEL.name()};
         IPage<PrintSingleDto> clientExamTaskDtoList = clientMapper.pagePrintSingleData(page, semesterId, examId, printPlanId, courseId, paperNumber, examDetailStatus);
         for (PrintSingleDto record : clientExamTaskDtoList.getRecords()) {
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndCourseIdAndPaperNumber(record.getExamId(), record.getCourseId(), record.getPaperNumber());
-            List<PaperInfoVo> paperInfoVoList = examTaskDetail.getPaperInfoVoList(record.getPaperType());
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(record.getExamId(), record.getPaperNumber(), record.getSerialNumber());
+            List<PaperInfoVo> paperInfoVoList = examTaskDetail.getPaperInfoVoList();
             // 试卷
             List<UrlMd5Dto> paperList = new ArrayList<>();
             // 题卡
@@ -1004,32 +1004,24 @@ public class ClientServiceImpl implements ClientService {
         ExamTask examTask = examTaskService.getById(examTaskId);
         List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByPrintPlanIdAndCourseIdAndPaperNumber(schoolId, printPlanId, examTask.getCourseId(), examTask.getPaperNumber());
         if (CollectionUtils.isNotEmpty(examDetailCourses)) {
-            Set<String> relatePaperTypes = examDetailCourses.stream().filter(m -> StringUtils.isNotBlank(m.getPaperType())).map(m -> m.getPaperType()).collect(Collectors.toSet());
             List<Map<String, String>> paperList = new ArrayList<>();
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTaskId);
-            if (CollectionUtils.isEmpty(relatePaperTypes)) {
-                throw ExceptionResultEnum.ERROR.exception("未找到关联的试卷卷型");
-            }
-            List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
-            if (CollectionUtils.isEmpty(paperInfoVoList)) {
-                throw ExceptionResultEnum.ERROR.exception("未找到关联的试卷文件");
-            }
+            for (ExamDetailCourse examDetailCourse : examDetailCourses) {
+                ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(examTask.getExamId(), examDetailCourse.getPaperNumber(), examDetailCourse.getSerialNumber());
+                if (examTaskDetail == null) {
+                    throw ExceptionResultEnum.ERROR.exception("未找到关联的备用卷");
+                }
+                List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
+                if (CollectionUtils.isEmpty(paperInfoVoList)) {
+                    throw ExceptionResultEnum.ERROR.exception("未找到关联的试卷文件");
+                }
 
-            Map<String, String> paperMap = paperInfoVoList.stream().collect(Collectors.toMap(m -> m.getName(), m -> String.valueOf(m.getAttachmentId())));
-            for (String relatePaperType : relatePaperTypes) {
-                String[] paperTypes = relatePaperType.split(",");
-                for (String paperType : paperTypes) {
-                    if (!paperMap.containsKey(paperType)) {
-                        continue;
-                    }
-                    String attachmentId = paperMap.get(paperType);
-                    if (StringUtils.isNotBlank(attachmentId)) {
-                        paperList.add(teachcloudCommonService.filePreviewByAttachmentId(Long.valueOf(attachmentId), false));
+                for (PaperInfoVo paperInfoVo : paperInfoVoList) {
+                    if (StringUtils.isNotBlank(paperInfoVo.getAttachmentId())) {
+                        paperList.add(teachcloudCommonService.filePreviewByAttachmentId(Long.valueOf(paperInfoVo.getAttachmentId()), false));
                     }
                 }
             }
-            paperList = paperList.stream().distinct().collect(Collectors.toList());
-            return paperList;
+            return paperList.stream().distinct().collect(Collectors.toList());
         }
         return null;
     }

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

@@ -24,7 +24,7 @@ import com.qmth.teachcloud.common.mapper.BasicAttachmentMapper;
 import com.qmth.teachcloud.common.service.AttachmentCommonService;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.util.ConvertUtil;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;

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

@@ -35,7 +35,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.FileUtil;
 import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;

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

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

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

@@ -21,6 +21,7 @@ import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.mapper.ExamDetailMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncExamStudentImportService;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.examRule.CodeNameEnableValue;
 import com.qmth.teachcloud.common.bean.examRule.FieldsDto;
@@ -386,8 +387,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             for (String id : examinationResult.getExamDetailCourseIds().split(",")) {
                 ExamDetailCourse examDetailCourse = examDetailCourseService.getById(id);
                 if (StringUtils.isNotBlank(examDetailCourse.getPaperType())) {
-                    ExamTask examTask = examTaskService.getByExamIdAndCourseIdAndPaperNumber(examinationResult.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
-                    ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
+                    ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(examinationResult.getExamId(), examDetailCourse.getPaperNumber(), examDetailCourse.getSerialNumber());
                     String paperType = examDetailCourse.getPaperType();
                     List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), paperType);
                     for (PaperInfoVo paperInfoVo : paperInfoVoList) {
@@ -771,7 +771,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                             markStudentService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                         }
                         // 考生数据全部删除时,还原已曝光卷型
-                        examTaskDetailService.updateUnexposePaperType(examDetail.getExamId(), examDetailCourse.getPaperNumber(), examDetailCourse.getPaperType());
+                        examTaskDetailService.updateUnexposePaperType(examDetail.getExamId(), examDetailCourse.getPaperNumber(), examDetailCourse.getSerialNumber());
                     }
                     if (markStudentService.countByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber()) == 0) {
                         markPaperService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
@@ -843,7 +843,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);
+        List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamIdAndPaperNumber(examId, paperNumber);
         if (CollectionUtils.isNotEmpty(examDetailCourseList)) {
             for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
                 // 删除考场

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

@@ -12,23 +12,24 @@ import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.mapper.ExamTaskDetailMapper;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.*;
+import com.qmth.teachcloud.common.enums.CreatePdfTypeEnum;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FlowApprovePassEnum;
+import com.qmth.teachcloud.common.enums.TFCustomTypeEnum;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.CommonCacheService;
 import com.qmth.teachcloud.common.service.SysUserService;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.ScanPaperService;
 import org.activiti.engine.TaskService;
-import org.activiti.engine.task.Task;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -89,9 +90,9 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
 
     @Transactional
     @Override
-    public boolean enable(ExamTaskDetail examTaskDetail) {
-        ExamTask examTask = examTaskService.getById(examTaskDetail.getId());
-        List<ExamDetail> examDetails = examDetailService.listExamDetailByExamIdAndCourseIdAndPaperNumber(examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
+    public boolean enable(ExamTask examTask) {
+        ExamTask examTaskById = examTaskService.getById(examTask.getId());
+        List<ExamDetail> examDetails = examDetailService.listExamDetailByExamIdAndCourseIdAndPaperNumber(examTaskById.getExamId(), examTaskById.getCourseId(), examTaskById.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();
@@ -108,7 +109,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
             }
         }
         // 禁用,解决试卷关联关系,并且解除生成pdf绑定
-        if (!examTaskDetail.getEnable()) {
+        if (!examTask.getEnable()) {
             // 正在生成pdf不能禁用
             if (examDetails != null && examDetails.size() > 0) {
                 Map<Long, List<Long>> map = examDetails.stream().collect(Collectors.groupingBy(ExamDetail::getPrintPlanId, Collectors.mapping(ExamDetail::getId, Collectors.toList())));
@@ -143,9 +144,9 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
                 }
             }
         }
-        UpdateWrapper<ExamTaskDetail> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ExamTaskDetail::getEnable, examTaskDetail.getEnable()).eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getId());
-        this.update(updateWrapper);
+        UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamTask::getEnable, examTask.getEnable()).eq(ExamTask::getId, examTask.getId());
+        examTaskService.update(updateWrapper);
 
         return true;
     }
@@ -265,107 +266,6 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         }
     }
 
-    @Override
-    @Transactional
-    public Map<String, Object> paperUpdate(ExamTaskDetail examTaskDetail) {
-        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-
-        validPaperUpdate(examTaskDetail);
-        SysOrg sysOrg = commonCacheService.orgCache(requestUser.getOrgId());
-
-        Map<String, Object> mapVar = new HashMap<>();
-        ExamTaskDetail examTaskDetail1 = this.getByExamTaskId(examTaskDetail.getExamTaskId());
-        String unexposedPaperType = examTaskDetail.getPaperType();
-        if (StringUtils.isNotBlank(examTaskDetail1.getExposedPaperType())) {
-            List<String> paperTypeAll = new ArrayList<>(Arrays.asList(examTaskDetail.getPaperType().split(",")));
-            List<String> exposePaperTypes = Arrays.asList(examTaskDetail1.getExposedPaperType().split(","));
-            for (String exposePaperType : exposePaperTypes) {
-                if (paperTypeAll.contains(exposePaperType)) {
-                    paperTypeAll.remove(exposePaperType);
-                }
-            }
-            unexposedPaperType = String.join(",", paperTypeAll);
-        }
-
-        UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
-        examTaskDetailUpdateWrapper.lambda().set(ExamTaskDetail::getPaperType, examTaskDetail.getPaperType())
-                .set(ExamTaskDetail::getPaperAttachmentIds, examTaskDetail.getPaperAttachmentIds())
-                .set(ExamTaskDetail::getUnexposedPaperType, unexposedPaperType)
-                .set(ExamTaskDetail::getRelatePaperType, null)
-                .eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getExamTaskId());
-        this.update(examTaskDetailUpdateWrapper);
-
-
-        QueryWrapper<ExamTaskDetail> examTaskDetailQueryWrapper = new QueryWrapper<>();
-        examTaskDetailQueryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getExamTaskId());
-        List<ExamTaskDetail> examTaskDetailList = this.list(examTaskDetailQueryWrapper);
-        if (CollectionUtils.isNotEmpty(examTaskDetailList)) {
-            for (ExamTaskDetail e : examTaskDetailList) {
-                e.setPaperType(examTaskDetail.getPaperType());
-                e.setPaperAttachmentIds(examTaskDetail.getPaperAttachmentIds());
-                e.setUnexposedPaperType(unexposedPaperType);
-            }
-        }
-
-        ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
-        List<ExamDetail> examDetails = examDetailService.listExamDetailByExamIdAndCourseIdAndPaperNumber(examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
-        if (CollectionUtils.isNotEmpty(examDetails)) {
-            StringJoiner stringJoiner = new StringJoiner("_");
-            stringJoiner.add(String.valueOf(examDetails.get(0).getSchoolId()))
-                    .add(String.valueOf(examDetails.get(0).getExamStartTime()))
-                    .add(String.valueOf(examDetails.get(0).getExamEndTime()))
-                    .add(String.valueOf(examTask.getCourseId()))
-                    .add(examTask.getPaperNumber());
-            String key = stringJoiner.toString();
-            CreatePdfCacheUtil.deletePaperType(key);
-
-            List<ExamDetail> examDetailList = examDetails.stream().filter(m -> m.getStatus().equals(ExamDetailStatusEnum.WAITING)).collect(Collectors.toList());
-            for (ExamDetail examDetail : examDetailList) {
-                examDetail.setStatus(ExamDetailStatusEnum.NEW);
-                examDetailService.updateById(examDetail);
-            }
-        }
-
-        // 不需要审核,直接更新,否则加入待审核列表(状态为不需要审核的或者为管理员身份的都不重新走审核流程)
-        if ((Objects.nonNull(examTask.getReview()) && examTask.getReview()) || !sysUserService.isAdminDataAuth(requestUser.getId())) {
-            // 发起新流程
-            Map<String, Object> map = SystemConstant.buildFlowVar(examTask.getId(),
-                    examTask,
-                    TFCustomTypeEnum.ELECTRON_FLOW,
-                    examTask.getUserId(),
-                    false);
-            map.computeIfAbsent(SystemConstant.OLD_FLOW_ID, v -> examTask.getFlowId());
-            map.computeIfAbsent(SystemConstant.FLOW_JOIN_TYPE, v -> FlowJoinTypeEnum.RESTART);
-            map = activitiService.customFlowStart(map);
-            Long flowId = SystemConstant.convertIdToLong((String) map.get(SystemConstant.FLOW_ID));
-            UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.lambda().set(ExamTask::getFlowId, flowId).eq(ExamTask::getId, examTaskDetail.getExamTaskId());
-            examTaskService.update(updateWrapper);
-            mapVar.putAll(map);
-            mapVar.put(SystemConstant.SEND_FLOW_START_MQ, true);
-
-            tfFlowJoinService.saveOrUpdate(map);
-            if (Objects.nonNull(flowId)) {
-                // 审核一级
-                Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(flowId)).singleResult();
-                if (Objects.nonNull(task)) {
-                    Map<String, Object> approverMap = new HashMap<>();
-                    approverMap.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
-                    approverMap.computeIfAbsent(SystemConstant.PAPAER_ATTACHMENT_IDS, v -> examTaskDetail.getPaperAttachmentIds());
-                    approverMap.computeIfAbsent(SystemConstant.APPROVE_OPERATION, v -> FlowApprovePassEnum.PASS);
-                    String remark = Objects.nonNull(sysOrg) ? sysOrg.getName() : "无机构";
-                    approverMap.computeIfAbsent(SystemConstant.APPROVE_REMARK, v -> requestUser.getRealName() + "(" + remark + ")" + FlowApprovePassEnum.RESTART.getTitle());
-                    activitiService.taskApprove(approverMap);
-                    mapVar.putAll(approverMap);
-                    mapVar.remove(SystemConstant.SEND_FLOW_START_MQ);
-                    mapVar.put(SystemConstant.SEND_FLOW_MQ, true);
-                }
-            }
-        }
-        mapVar.put(SystemConstant.SUCCESS, true);
-        return mapVar;
-    }
-
     /**
      * 重启流程
      *
@@ -381,7 +281,6 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
         List<ExamDetail> examDetailList = examDetailService.listExamDetailByExamIdAndCourseIdAndPaperNumber(examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
         if (CollectionUtils.isNotEmpty(examDetailList)) {
-            ExamTaskDetail taskDetail = this.getByExamTaskId(examTaskDetail.getExamTaskId());
             List<Long> examDetailIds = examDetailList.stream().map(ExamDetail::getId).collect(Collectors.toList());
             QueryWrapper<ExamDetailCourse> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().in(ExamDetailCourse::getExamDetailId, examDetailIds);
@@ -404,21 +303,13 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
                 throw ExceptionResultEnum.ERROR.exception("印刷任务有已打印或待印刷数据,不允许打回");
             }
 
-            // 修改已曝光和未曝光类型
-            List<String> exposedPaperTypeList = StringUtils.isNotBlank(taskDetail.getExposedPaperType()) ? new ArrayList<>(Arrays.asList(taskDetail.getExposedPaperType().split(","))) : new ArrayList<>();
-            List<String> unexposedPaperTypeList = StringUtils.isNotBlank(taskDetail.getUnexposedPaperType()) ? new ArrayList<>(Arrays.asList(taskDetail.getUnexposedPaperType().split(","))) : new ArrayList<>();
-            for (String exposePaperType : paperTypeSet) {
-                if (exposedPaperTypeList.contains(exposePaperType)) {
-                    exposedPaperTypeList.remove(exposePaperType);
-                    unexposedPaperTypeList.add(exposePaperType);
-                }
-            }
-            exposedPaperTypeList.sort(Comparator.comparing(String::toString));
-            unexposedPaperTypeList.sort(Comparator.comparing(String::toString));
-            taskDetail.setExposedPaperType(CollectionUtils.isEmpty(exposedPaperTypeList) ? null : String.join(",", exposedPaperTypeList));
-            taskDetail.setUnexposedPaperType(String.join(",", unexposedPaperTypeList));
-            taskDetail.setRelatePaperType(null);
-            this.updateById(taskDetail);
+            // 修改已曝光
+            UpdateWrapper<ExamTaskDetail> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(ExamTaskDetail::getExposed, false)
+                    .set(ExamTaskDetail::getExposedExamId, null)
+                    .eq(ExamTaskDetail::getExamTaskId, examTask.getId())
+                    .eq(ExamTaskDetail::getExposedExamId, examTask.getExamId());
+            this.update(updateWrapper);
 
             StringJoiner stringJoiner = new StringJoiner("_");
             stringJoiner.add(String.valueOf(examTask.getExamId())).add(examTask.getPaperNumber()).add(String.valueOf(examDetailList.get(0).getExamStartTime())).add(String.valueOf(examDetailList.get(0).getExamEndTime()));
@@ -505,23 +396,6 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return this.getOne(queryWrapper);
     }
 
-    @Override
-    public ExamTaskDetail getByExamTaskId(Long examTaskId) {
-        ExamTask examTask = examTaskService.getByIdIncludeCourse(examTaskId);
-        if (examTask == null) {
-            throw ExceptionResultEnum.ERROR.exception("命题任务不存在");
-        }
-        QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTaskId);
-        ExamTaskDetail examTaskDetail = this.getOne(queryWrapper);
-        if (examTaskDetail == null) {
-            throw ExceptionResultEnum.ERROR.exception(String.format("课程[%s(%s)],试卷编号[%s]的命题任务未找到命题详情", examTask.getCourseName(), examTask.getCourseCode(), examTask.getPaperNumber()));
-        } else if (!examTaskDetail.getEnable()) {
-            throw ExceptionResultEnum.ERROR.exception(String.format("课程[%s(%s)],试卷编号[%s]的命题任务卷库已禁用", examTask.getCourseName(), examTask.getCourseCode(), examTask.getPaperNumber()));
-        }
-        return examTaskDetail;
-    }
-
     /**
      * 根据examTaskId下载pdf
      *
@@ -561,50 +435,34 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return commonPaperTypes;
     }
 
-    @Override
-    public ExamTaskDetail findByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String number) {
-        ExamTask examTask = examTaskService.getByExamIdAndCourseIdAndPaperNumber(examId, courseId, number);
-        if (examTask == null) {
-            return null;
-        }
-        return this.getByExamTaskId(examTask.getId());
-    }
-
     @Transactional
     @Override
     public boolean cancel(Long id, String cancelRemark) {
         ExamTask examTask = examTaskService.getById(id);
         String paperNumber = examTask.getPaperNumber();
 
-        List<ExamDetail> examDetailList = examDetailService.listExamDetailByExamIdAndCourseIdAndPaperNumber(examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
-        if (CollectionUtils.isNotEmpty(examDetailList)) {
-            ExamTaskDetail taskDetail = this.getByExamTaskId(id);
-            if (StringUtils.isNotBlank(taskDetail.getExposedPaperType())) {
-                List<Long> examDetailIds = examDetailList.stream().map(ExamDetail::getId).collect(Collectors.toList());
-                QueryWrapper<ExamDetailCourse> queryWrapper = new QueryWrapper<>();
-                queryWrapper.lambda().in(ExamDetailCourse::getExamDetailId, examDetailIds);
-                List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.list(queryWrapper);
-                for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
-                    // 考场内任一课程有扫描数据,不允许打回
-                    boolean isScanPaper = scanPaperService.isScanByExamIdAndPaperNumber(examTask.getExamId(), examDetailCourse.getPaperNumber());
-                    if (isScanPaper) {
-                        throw ExceptionResultEnum.ERROR.exception("课程已开始扫描,不允许作废");
-                    }
+        List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamIdAndPaperNumber(examTask.getExamId(), examTask.getPaperNumber());
+        if (CollectionUtils.isNotEmpty(examDetailCourseList)) {
+            for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
+                // 考场内任一课程有扫描数据,不允许打回
+                if (scanPaperService.isScanByExamIdAndPaperNumber(examTask.getExamId(), examDetailCourse.getPaperNumber())) {
+                    throw ExceptionResultEnum.ERROR.exception("课程已开始扫描,不允许作废");
                 }
+            }
 
-                // 已打印任务,必须先作废,未打印任务,必须先撤回。才允许打回
-                long count = examDetailList.stream().filter(m -> (ExamDetailStatusEnum.FINISH.equals(m.getStatus()) && m.getNormal()) || ExamDetailStatusEnum.WAITING.equals(m.getStatus())).count();
-                if (count > 0) {
-                    throw ExceptionResultEnum.ERROR.exception("印刷任务有已打印且未作废或者未撤回数据,不允许作废");
-                }
+            // 已打印任务,必须先作废,未打印任务,必须先撤回。才允许打回
+            List<Long> examDetailList = examDetailCourseList.stream().map(ExamDetailCourse::getExamDetailId).collect(Collectors.toList());
+            long count = examDetailService.listByIds(examDetailList).stream().filter(m -> (ExamDetailStatusEnum.FINISH.equals(m.getStatus()) && m.getNormal()) || ExamDetailStatusEnum.WAITING.equals(m.getStatus())).count();
+            if (count > 0) {
+                throw ExceptionResultEnum.ERROR.exception("印刷任务有已打印且未作废或者未撤回数据,不允许作废");
             }
 
-            StringJoiner stringJoiner = new StringJoiner("_");
-            stringJoiner.add(String.valueOf(examTask.getExamId())).add(examTask.getPaperNumber()).add(String.valueOf(examDetailList.get(0).getExamStartTime())).add(String.valueOf(examDetailList.get(0).getExamEndTime()));
-            String key = stringJoiner.toString();
-            CreatePdfCacheUtil.deletePaperType(key);
-            for (ExamDetail examDetail : examDetailList) {
-                examDetailService.resetExamDetail(examDetail.getId(), CreatePdfTypeEnum.ALL, ExamDetailStatusEnum.REJECT, true);
+//            StringJoiner stringJoiner = new StringJoiner("_");
+//            stringJoiner.add(String.valueOf(examTask.getExamId())).add(examTask.getPaperNumber()).add(String.valueOf(examDetailList.get(0).getExamStartTime())).add(String.valueOf(examDetailList.get(0).getExamEndTime()));
+//            String key = stringJoiner.toString();
+//            CreatePdfCacheUtil.deletePaperType(key);
+            for (Long examDetailId : examDetailList) {
+                examDetailService.resetExamDetail(examDetailId, CreatePdfTypeEnum.ALL, ExamDetailStatusEnum.REJECT, true);
             }
         }
 
@@ -614,8 +472,6 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         examTask.setCancelRemark(cancelRemark);
         examTaskService.updateById(examTask);
 
-        // 作废后,考场状态改为作废,考务数据保留
-        List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listExamDetailByExamIdAndPaperNumber(examTask.getSchoolId(), examTask.getExamId(), paperNumber);
         // 考场状态改为作废
         if (CollectionUtils.isNotEmpty(examDetailCourseList)) {
             for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
@@ -663,17 +519,17 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     }
 
     @Override
-    public ExamTaskDetail getByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String paperNumber) {
-        ExamTask examTask = examTaskService.getByExamIdAndCourseIdAndPaperNumber(examId, courseId, paperNumber);
-        if (examTask == null) {
-            throw ExceptionResultEnum.ERROR.exception("未查询到试卷信息");
+    public ExamTaskDetail getByExamIdAndPaperNumberAndSerialNumber(Long examId, String paperNumber, Integer serialNumber) {
+        List<ExamTaskDetail> examTaskDetailList = this.listByExamIdAndPaperNumber(examId, paperNumber);
+        if (CollectionUtils.isEmpty(examTaskDetailList)) {
+            return null;
         }
-        return this.getByExamTaskId(examTask.getId());
+        return examTaskDetailList.stream().filter(m -> m.getSerialNumber().equals(serialNumber)).findFirst().orElse(null);
     }
 
     @Override
-    public ExamTaskDetail getByExamIdAndPaperNumberAndSerialNumber(Long examId, String paperNumber, Integer serialNumber) {
-        List<ExamTaskDetail> examTaskDetailList = this.listByExamIdAndPaperNumber(examId, paperNumber);
+    public ExamTaskDetail getByExamTaskIdAndSerialNumber(Long examTaskId, Integer serialNumber) {
+        List<ExamTaskDetail> examTaskDetailList = this.listByExamTaskId(examTaskId);
         if (CollectionUtils.isEmpty(examTaskDetailList)) {
             return null;
         }
@@ -684,48 +540,30 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     public void updateExposePaperType(Long examId, List<ExamDetailCourse> examDetailCourses) {
         // 更新曝光卷型、未曝光卷型
         for (ExamDetailCourse examDetailCourse : examDetailCourses) {
-            ExamTaskDetail examTaskDetail = this.getByExamIdAndCourseIdAndPaperNumber(examId, examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
-            // 考生使用卷型
-            List<String> studentPaperTypes = examStudentService.listPaperTypeByExamDetailCourseId(String.valueOf(examDetailCourse.getId()));
-            List<String> paperTypeList = Objects.isNull(examTaskDetail.getPaperType()) ? new ArrayList<>() : Arrays.asList(examTaskDetail.getPaperType().split(","));
-            List<String> exposedPaperTypeList = Objects.isNull(examTaskDetail.getExposedPaperType()) ? new ArrayList<>() : Arrays.asList(examTaskDetail.getExposedPaperType().split(","));
-            // 曝光卷型
-            List<String> unionList = (List<String>) CollectionUtils.union(exposedPaperTypeList, studentPaperTypes);
-            // 未曝光卷型
-            List<String> subtractList = (List<String>) CollectionUtils.subtract(paperTypeList, unionList);
+            ExamTaskDetail examTaskDetail = this.getByExamIdAndPaperNumberAndSerialNumber(examId, examDetailCourse.getPaperNumber(), examDetailCourse.getSerialNumber());
+            // 更新曝光卷型
             UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
-            String exposedPaper = String.join(",", unionList);
-            String unexposedPaper = String.join(",", subtractList);
             examTaskDetailUpdateWrapper.lambda()
-                    .set(ExamTaskDetail::getExposedPaperType, StringUtils.isBlank(exposedPaper) ? null : exposedPaper)
-                    .set(ExamTaskDetail::getUnexposedPaperType, StringUtils.isBlank(unexposedPaper) ? null : unexposedPaper)
-                    .eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getExamTaskId());
+                    .set(ExamTaskDetail::getExposed, true)
+                    .set(ExamTaskDetail::getExposedExamId, examId)
+                    .eq(ExamTaskDetail::getId, examTaskDetail.getId());
             this.update(examTaskDetailUpdateWrapper);
+
         }
     }
 
     @Override
-    public void updateUnexposePaperType(Long examId, String paperNumber, String exposePaperType) {
+    public void updateUnexposePaperType(Long examId, String paperNumber, Integer serialNumber) {
         if (examTaskService.getByExamIdAndPaperNumber(examId, paperNumber) == null) {
             return;
         }
         // 更新曝光卷型、未曝光卷型
-        ExamTaskDetail examTaskDetail = this.getByExamIdAndCourseIdAndPaperNumber(examId, null, paperNumber);
-        // 考生使用卷型
-        List<String> studentPaperTypes = StringUtils.isBlank(exposePaperType) ? Arrays.asList(ArrayUtils.EMPTY_STRING_ARRAY) : Arrays.asList(exposePaperType.split(","));
-        List<String> paperTypeList = Objects.isNull(examTaskDetail.getPaperType()) ? new ArrayList<>() : Arrays.asList(examTaskDetail.getPaperType().split(","));
-        List<String> exposedPaperTypeList = Objects.isNull(examTaskDetail.getExposedPaperType()) ? new ArrayList<>() : Arrays.asList(examTaskDetail.getExposedPaperType().split(","));
-
-        List<String> exposedList = (List<String>) CollectionUtils.subtract(exposedPaperTypeList, studentPaperTypes);
-        // 未曝光卷型
-        List<String> subtractList = (List<String>) CollectionUtils.subtract(paperTypeList, exposedList);
+        ExamTaskDetail examTaskDetail = this.getByExamIdAndPaperNumberAndSerialNumber(examId, paperNumber, serialNumber);
         UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
-        String exposedPaper = String.join(",", exposedList);
-        String unexposedPaper = String.join(",", subtractList);
         examTaskDetailUpdateWrapper.lambda()
-                .set(ExamTaskDetail::getExposedPaperType, StringUtils.isBlank(exposedPaper) ? null : exposedPaper)
-                .set(ExamTaskDetail::getUnexposedPaperType, StringUtils.isBlank(unexposedPaper) ? null : unexposedPaper)
-                .eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getExamTaskId());
+                .set(ExamTaskDetail::getExposed, false)
+                .set(ExamTaskDetail::getExposedExamId, null)
+                .eq(ExamTaskDetail::getId, examTaskDetail.getId());
         this.update(examTaskDetailUpdateWrapper);
     }
 
@@ -764,93 +602,4 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         List<ExamTaskDetail> examTaskDetailList = this.listByExamIdAndPaperNumber(examId, paperNumber);
         return examTaskDetailList.stream().filter(m -> m.getSerialNumber() != null && m.getSerialNumber().equals(serialNumber)).findFirst().orElse(null);
     }
-
-    /**
-     * 卷库校验
-     *
-     * @param examTaskDetail
-     */
-    void validPaperUpdate(ExamTaskDetail examTaskDetail) {
-        // 旧记录
-        ExamTaskDetail examTaskDetailTemp = this.getByExamTaskId(examTaskDetail.getExamTaskId());
-        if (examTaskDetailTemp == null) {
-            throw ExceptionResultEnum.ERROR.exception("命题任务数据异常");
-        }
-
-        List<PaperInfoVo> oldPaperAttachmentIdsList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetailTemp.getPaperAttachmentIds());
-        List<PaperInfoVo> newPaperAttachmentIdsList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
-        // 卷型、题卡没有变动,直接return
-        if (oldPaperAttachmentIdsList.size() == newPaperAttachmentIdsList.size()) {
-            String oldString = oldPaperAttachmentIdsList.stream().sorted(Comparator.comparing(m -> m.getName())).map(m -> m.getName() + m.getAttachmentId()).collect(Collectors.joining());
-            String newString = newPaperAttachmentIdsList.stream().sorted(Comparator.comparing(m -> m.getName())).map(m -> m.getName() + m.getAttachmentId()).collect(Collectors.joining());
-            if (oldString.equals(newString) && examTaskDetailTemp.getPaperAttachmentIds().equals(examTaskDetail.getPaperAttachmentIds())) {
-                return;
-            }
-        }
-
-        ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
-        // 是否审核中
-        TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(examTask.getFlowId());
-        if (!tfFlowApprove.getStatus().equals(FlowStatusEnum.FINISH)) {
-            throw ExceptionResultEnum.ERROR.exception("命题任务没有审核完成,不能修改卷库");
-        }
-
-        // 提交印刷的考场,不允许修改关联试卷
-        List<ExamDetail> examDetails = examDetailService.listExamDetailByExamIdAndCourseIdAndPaperNumber(examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
-        if (CollectionUtils.isNotEmpty(examDetails)) {
-            List<ExamDetail> examDetails1 = examDetails.stream().filter(m -> !ExamDetailStatusEnum.NEW.equals(m.getStatus())
-                    && !ExamDetailStatusEnum.READY.equals(m.getStatus())
-                    && !ExamDetailStatusEnum.WAITING.equals(m.getStatus())).collect(Collectors.toList());
-            if (!examDetails1.isEmpty()) {
-                throw ExceptionResultEnum.ERROR.exception("印刷任务已开始打印,不能修改卷库");
-            }
-            Map<Long, List<Long>> map = examDetails.stream().collect(Collectors.groupingBy(ExamDetail::getPrintPlanId, Collectors.mapping(ExamDetail::getId, Collectors.toList())));
-            for (Map.Entry<Long, List<Long>> listEntry : map.entrySet()) {
-                int countRunning = tbTaskPdfService.countRunningByExamDetailIds(listEntry.getValue());
-                if (countRunning > 0) {
-                    throw ExceptionResultEnum.ERROR.exception("关联命题任务的考场正在生成打印文件,不能修改卷库");
-                }
-            }
-        }
-
-        // 已曝光试卷不能修改
-        String exposedPaperType = examTaskDetailTemp.getExposedPaperType();
-        if (StringUtils.isNotBlank(exposedPaperType)) {
-            Map<String, String> oldPaperAttachmentIdMap = oldPaperAttachmentIdsList.stream().collect(Collectors.toMap(m -> m.getName(), m -> String.valueOf(m.getAttachmentId())));
-            String[] exposedPaperTypes = exposedPaperType.split(",");
-            String newPaperAttachmentIds = examTaskDetail.getPaperAttachmentIds();
-            if (StringUtils.isBlank(newPaperAttachmentIds)) {
-                throw ExceptionResultEnum.ERROR.exception("已曝光试卷不能删除");
-            } else {
-                Map<String, String> newPaperAttachmentIdMap = newPaperAttachmentIdsList.stream().collect(Collectors.toMap(m -> m.getName(), m -> String.valueOf(m.getAttachmentId())));
-                for (String paperType : exposedPaperTypes) {
-                    if (!oldPaperAttachmentIdMap.containsKey(paperType)) {
-                        throw ExceptionResultEnum.ERROR.exception("原试卷卷型[" + paperType + "]不存在");
-                    }
-                    if (!newPaperAttachmentIdMap.containsKey(paperType)) {
-                        throw ExceptionResultEnum.ERROR.exception("已曝光卷型[" + paperType + "]不能删除");
-                    }
-
-                    String newAttachmentId = newPaperAttachmentIdMap.get(paperType);
-                    String oldAttachmentId = oldPaperAttachmentIdMap.get(paperType);
-                    if (!newAttachmentId.equals(oldAttachmentId)) {
-                        throw ExceptionResultEnum.ERROR.exception("已曝光卷型[" + paperType + "]不能修改试卷文件");
-                    }
-                }
-            }
-
-            // 已有曝光卷型时,题卡不能修改
-            if (!examTaskDetailTemp.getPaperAttachmentIds().equals(examTaskDetail.getPaperAttachmentIds())) {
-                throw ExceptionResultEnum.ERROR.exception("已有试卷曝光,不能修改题卡");
-            }
-        }
-
-        // 将旧题卡更新为未绑定
-        List<PaperInfoVo> oldPaperAttachmentIdsJson = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetailTemp.getPaperAttachmentIds());
-        examCardService.updateUsedById(oldPaperAttachmentIdsJson.stream().filter(m -> StringUtils.isNotBlank(m.getCardId())).map(m -> Long.parseLong(m.getCardId())).collect(Collectors.toList()));
-
-        // 将新题卡更新为已绑定
-        List<PaperInfoVo> newPaperAttachmentIdsJson = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
-        examCardService.updateUsedById(newPaperAttachmentIdsJson.stream().filter(m -> StringUtils.isNotBlank(m.getCardId())).map(m -> Long.valueOf(m.getCardId())).collect(Collectors.toList()));
-    }
 }

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

@@ -27,6 +27,7 @@ import com.qmth.distributed.print.business.mapper.ExamTaskMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncPaperReviewPdfExportService;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.distributed.print.business.util.HtmlToJpgUtil;
 import com.qmth.distributed.print.business.util.PdfUtil;
 import com.qmth.teachcloud.common.bean.dto.AssignTeacherDto;
@@ -680,8 +681,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(),
                 ServletUtil.getRequest().getServletPath());
         Page<ExamTaskDetailDto> page = new Page<>(pageNumber, pageSize);
-        return this.baseMapper.listTaskPaper(page, schoolId, semesterId, examId, openCollegeId, courseId, paperNumber,
+        IPage<ExamTaskDetailDto> examTaskDetailDtoIPage = this.baseMapper.listTaskPaper(page, schoolId, semesterId, examId, openCollegeId, courseId, paperNumber,
                 startTime, endTime, dpr, containsQuestionTeacher, sysUser.getId());
+        for (ExamTaskDetailDto record : examTaskDetailDtoIPage.getRecords()) {
+            List<ExamTaskDetail> examTaskDetailList = examTaskDetailService.listByExamTaskId(record.getId());
+            record.setPaperType(examTaskDetailList.stream().map(m->m.getSerialNumber().toString()).collect(Collectors.joining(",")));
+            record.setExposedPaperType(examTaskDetailList.stream().filter(ExamTaskDetail::getExposed).map(m->m.getSerialNumber().toString()).collect(Collectors.joining(",")));
+//            record.setRelatePaperType(examTaskDetailList.stream().filter(m->m.getExposedExamId() != null).map(m->m.getSerialNumber().toString()).collect(Collectors.joining(",")));
+            record.setUnexposedPaperType(examTaskDetailList.stream().filter(m->!m.getExposed()).map(m->m.getSerialNumber().toString()).collect(Collectors.joining(",")));
+        }
+        return examTaskDetailDtoIPage;
     }
 
     @Override
@@ -767,7 +776,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         examTaskDetail.setUpdateId(sysUser.getId());
         examTaskDetail.setUpdateTime(System.currentTimeMillis());
 
-        List<PaperInfoVo> filePathVoList = examTaskDetail.getPaperInfoVoList(null);
+        List<PaperInfoVo> filePathVoList = examTaskDetail.getPaperInfoVoList();
         for (PaperInfoVo paperInfoVo : filePathVoList) {
             BasicAttachment basicAttachment = basicAttachmentService.getById(paperInfoVo.getAttachmentId());
             FilePathVo filePathVo = JSON.parseObject(basicAttachment.getPath(), FilePathVo.class);
@@ -788,7 +797,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
         ExamTaskSubmitContent examTaskSubmitContent = JSON.parseObject(examTaskDetail.getExamTaskContent(), ExamTaskSubmitContent.class);
         if (examTaskSubmitContent != null) {
-            List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listExamDetailByExamIdAndPaperNumber(sysUser.getSchoolId(), examTask.getExamId(), examTask.getPaperNumber());
+            List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamIdAndPaperNumber(examTask.getExamId(), examTask.getPaperNumber());
             if (CollectionUtils.isNotEmpty(examDetailCourseList)) {
                 Set<Long> examDetailIds = examDetailCourseList.stream().map(ExamDetailCourse::getExamDetailId).collect(Collectors.toSet());
                 List<ExamDetail> examDetailList = examDetailService.listByIds(examDetailIds);
@@ -1135,7 +1144,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 examTaskDetail.setUnexposedPaperType(examTaskDetail.getPaperType());
                 examTaskDetail.setExamTaskId(examTask.getId());
                 examTaskDetail.insertInfo(sysUser.getId());
-                List<PaperInfoVo> filePathVoList = examTaskDetail.getPaperInfoVoList(null);
+                List<PaperInfoVo> filePathVoList = examTaskDetail.getPaperInfoVoList();
                 for (PaperInfoVo paperInfoVo : filePathVoList) {
                     BasicAttachment basicAttachment = basicAttachmentService.getById(paperInfoVo.getAttachmentId());
                     FilePathVo filePathVo = JSON.parseObject(basicAttachment.getPath(), FilePathVo.class);
@@ -1861,7 +1870,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
     @Transactional
     @Override
-    public List<ExamDetail> matchBasicExamStudent(BasicExam basicExam, ExamTask examTask, ExamTaskDetail examTaskDetail, SysUser sysUser) {
+    public List<ExamDetail> matchBasicExamStudent(BasicExam basicExam, ExamTask examTask, SysUser sysUser) {
         List<BasicExamStudent> basicExamStudentList = basicExamStudentService.listByExamIdAndCourseIdAndPaperNumber(examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
         if (CollectionUtils.isEmpty(basicExamStudentList)) {
             return null;
@@ -1884,7 +1893,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(basicExam.getId());
         List<String> stringList = JSONObject.parseArray(basicPrintConfig.getPrintContent(), String.class);
         if (!stringList.contains("PAPER")) {
-            List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
+            List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetailService.listByExamTaskId(examTask.getId()));
             long count = paperInfoVoList.stream().filter(m -> Objects.isNull(m.getAttachmentId())).count();
             if (count == 0) {
                 stringList.add("PAPER");

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

@@ -357,14 +357,14 @@ public class PrintCommonServiceImpl implements PrintCommonService {
      */
     @Override
     @Transactional
-    public BasicAttachment saveAttachmentPdfFromHtml(String fileName, String htmlContent, Long userId, List<PdfDto> localFileList, List<File> fileTempList) {
+    public BasicAttachment saveAttachmentPdfFromHtml(String fileName, String htmlContent, Long userId, List<PdfDto> localFileList, List<File> fileTempList, String pageSize) {
         BasicAttachment basicAttachment = null;
         File htmlFileTemp = null;
         try {
             htmlFileTemp = SystemConstant.getFileTempVar(SystemConstant.HTML_PREFIX);
             FileCopyUtils.copy(htmlContent.getBytes(StandardCharsets.UTF_8), htmlFileTemp);
 
-            return saveAttachmentPdfFromHtml(fileName, htmlFileTemp, userId, localFileList, fileTempList, PageSizeEnum.A3);
+            return saveAttachmentPdfFromHtml(fileName, htmlFileTemp, userId, localFileList, fileTempList, "8K".equals(pageSize) ? PageSizeEnum.K8 : PageSizeEnum.valueOf(pageSize));
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
             basicAttachmentService.deleteAttachment(basicAttachment);
@@ -849,8 +849,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             log.info("命题任务已禁用");
             return;
         }
-        ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
-        if (!examTaskDetail.getEnable()) {
+        if (!examTask.getExamTaskDetailEnable()) {
             log.info("卷库已禁用");
             return;
         }
@@ -886,7 +885,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
                 // 指派命题老师方式,自动关联考生管理数据
                 if (ExamTaskSourceEnum.ASSIGN.equals(examTask.getSource())) {
                     // 自动关联考生表中数据,并生成考场信息
-                    List<ExamDetail> examDetailList1 = examTaskService.matchBasicExamStudent(basicExam, examTask, examTaskDetail, user);
+                    List<ExamDetail> examDetailList1 = examTaskService.matchBasicExamStudent(basicExam, examTask, user);
                     if (CollectionUtils.isNotEmpty(examDetailList1)) {
                         for (ExamDetail examDetail : examDetailList1) {
                             // 更新考场状态为初始新建状态
@@ -925,8 +924,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             log.info("命题任务已禁用");
             return;
         }
-        ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
-        if (!examTaskDetail.getEnable()) {
+        if (!examTask.getExamTaskDetailEnable()) {
             log.info("卷库已禁用");
             return;
         }

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

@@ -23,6 +23,7 @@ import com.qmth.distributed.print.business.enums.PaperFileDownloadExposureStatus
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.service.DownloadLogicService;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.params.ArraysParams;
 import com.qmth.teachcloud.common.bean.result.DictionaryResult;

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

@@ -237,7 +237,7 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
 
             //查询命题任务绑定的试卷和题卡
             ExamTask examTask = examTaskService.validExamTaskAuditPass(tbTaskPdf.getSchoolId(), tbTaskPdf.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskIdAndSerialNumber(examTask.getId(), examDetailCourse.getSerialNumber());
 
             CreatePdfTypeEnum createPdfType = tbTaskPdf.getCreateType();
             String printContent = examPrintPlan.getPrintContent();
@@ -250,7 +250,7 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
             List<ExamStudentInfo> examStudentInfoList = examStudentService.listStudentByExamDetailCourseId(examDetailCourse.getId());
             // 试卷数据组装
             if ((CreatePdfTypeEnum.ALL.equals(createPdfType) || CreatePdfTypeEnum.PAPER.equals(createPdfType)) && printContent.contains("PAPER")) {
-                List<PaperPdfDto> paperPdfDtoList = createPdfUtil.getPaperPdfFile(examDetailCourse.getPaperType(), examTaskDetail.getPaperInfoVoList(null), createPdfDto);
+                List<PaperPdfDto> paperPdfDtoList = createPdfUtil.getPaperPdfFile(examDetailCourse.getPaperType(), examTaskDetail.getPaperInfoVoList(), createPdfDto);
                 // 生成考生试卷
                 if (CollectionUtils.isNotEmpty(examStudentInfoList)) {
                     for (ExamStudentInfo t : examStudentInfoList) {
@@ -283,7 +283,7 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
                 BasicCardRule basicCardRule = basicCardRuleService.getById(examTask.getCardRuleId());
                 Map<String, ExamCard> examCardMap = new HashMap<>();
                 ExamCard examCard;
-                for (PaperInfoVo paperInfoVo : examTaskDetail.getPaperInfoVoList(null)) {
+                for (PaperInfoVo paperInfoVo : examTaskDetail.getPaperInfoVoList()) {
                     if (StringUtils.isNotBlank(paperInfoVo.getCardId())) {
                         examCard = examCardService.getById(paperInfoVo.getCardId());
                         if (Objects.isNull(examCard)) {
@@ -297,7 +297,7 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
                 if (CollectionUtils.isNotEmpty(examStudentInfoList)) {
                     for (ExamStudentInfo t : examStudentInfoList) {
                         // 用带条码的模板
-                        createPdfUtil.examStudentHtml(examCardMap.get(t.getPaperType()).getHtmlContent(), t, t.getPaperType(), examDetail, tbTaskPdf.getCreateId(), createPdfDto.getCardPdfList(), createPdfDto.getFileTempList(), basicCardRule);
+                        createPdfUtil.examStudentHtml(examCardMap.get(t.getPaperType()), t, t.getPaperType(), examDetail, tbTaskPdf.getCreateId(), createPdfDto.getCardPdfList(), createPdfDto.getFileTempList(), basicCardRule);
                         examStudentService.updateAttachmentIdById(t);
                     }
                 } else if (examDetailCourse.getTotalSubjects() != null) {
@@ -311,7 +311,7 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
                         int seq = atomicInteger.getAndIncrement();
                         int mod = seq % drawCount;
                         String tempPaperType = paperTypes[mod];
-                        BasicAttachment basicAttachment = createPdfUtil.examStudentHtml(examCardMap.get(tempPaperType).getHtmlContent(), examStudentInfo, tempPaperType, examDetail, tbTaskPdf.getCreateId(), createPdfDto.getCardPdfList(), createPdfDto.getFileTempList(), basicCardRule);
+                        BasicAttachment basicAttachment = createPdfUtil.examStudentHtml(examCardMap.get(tempPaperType), examStudentInfo, tempPaperType, examDetail, tbTaskPdf.getCreateId(), createPdfDto.getCardPdfList(), createPdfDto.getFileTempList(), basicCardRule);
 
                         if (!stringBasicAttachmentMap.containsKey(tempPaperType)) {
                             stringBasicAttachmentMap.put(tempPaperType, basicAttachment);

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

@@ -30,7 +30,6 @@ import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.service.FileUploadService;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.FileUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -41,7 +40,6 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import javax.websocket.RemoteEndpoint;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -135,9 +133,7 @@ public class CreatePdfUtil {
 
         boolean isTag;
         for (ExamDetailCourse detailCourse : examDetailCourseList) {
-            ExamTask examTask = examTaskService.getByExamIdAndCourseIdAndPaperNumber(examId, detailCourse.getCourseId(), detailCourse.getPaperNumber());
-            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
-            List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
+            List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetailService.listByExamIdAndPaperNumber(examId, detailCourse.getPaperNumber()));
             for (PaperInfoVo paperInfoVo : paperInfoVoList) {
                 int pages = paperInfoVo.getPages();
                 isTag = pages > 2;
@@ -544,7 +540,7 @@ public class CreatePdfUtil {
     /**
      * 考生题卡html
      *
-     * @param studentHtml        题卡html内容
+     * @param examCard           题卡内容
      * @param examStudent        考生对象
      * @param examDetail         考场对象
      * @param userId             当前用户ID
@@ -552,8 +548,9 @@ public class CreatePdfUtil {
      * @param fileTempList
      * @param basicCardRule      题卡规则
      */
-    public BasicAttachment examStudentHtml(String studentHtml, ExamStudentInfo examStudent, String paperType, ExamDetail examDetail,
+    public BasicAttachment examStudentHtml(ExamCard examCard, ExamStudentInfo examStudent, String paperType, ExamDetail examDetail,
                                            Long userId, List<PdfDto> examStudentPdfList, List<File> fileTempList, BasicCardRule basicCardRule) throws IOException {
+        String studentHtml = examCard.getHtmlContent();
         if (basicCardRule != null) {
             if (ExamNumberStyleEnum.PRINT.equals(basicCardRule.getExamNumberStyle())) {
                 if (examStudent == null || StringUtils.isBlank(examStudent.getStudentCode())) {
@@ -568,8 +565,8 @@ public class CreatePdfUtil {
                 studentHtml = studentHtml.replaceAll("\\$\\{examNumberStr\\}", examStudent != null && examStudent.getStudentCode() != null ? examStudent.getStudentCode() : "");
                 studentHtml = studentHtml.replaceAll("\\$\\{courseCodeBarcodeSrc\\}", examStudent != null && examStudent.getCourseCode() != null ? "data:image/png;base64," + GoogleBarCodeUtil.createBarCode(examStudent.getCourseCode(), false) : "");
                 studentHtml = studentHtml.replaceAll("\\$\\{courseCodeBarcodeName\\}", examStudent != null && examStudent.getCourseCode() != null ? examStudent.getCourseCode() : "");
-                // 随机生成学生试卷条码并将图片转成base64
-                studentHtml = studentHtml.replaceAll("\\$\\{paperType\\}", examStudent != null && examStudent.getPaperType() != null ? GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(examStudent.getPaperType()), false) : StringUtils.isNotBlank(paperType) ? GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(paperType), false) : "");
+//                 随机生成学生试卷条码并将图片转成base64
+//                studentHtml = studentHtml.replaceAll("\\$\\{paperType\\}", examStudent != null && examStudent.getPaperType() != null ? GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(examStudent.getPaperType()), false) : StringUtils.isNotBlank(paperType) ? GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(paperType), false) : "");
                 // 替换考生卷型
                 studentHtml = studentHtml.replaceAll("\\$\\{paperTypeName\\}", examStudent != null && examStudent.getPaperType() != null ? examStudent.getPaperType() : StringUtils.isNotBlank(paperType) ? paperType : "");
 
@@ -620,7 +617,7 @@ public class CreatePdfUtil {
         // 将其它未匹配到值的参数,填入空值
         studentHtml = studentHtml.replaceAll("\\$\\{[A-Za-z0-9]+\\}", "");
         //学生题卡
-        BasicAttachment examStudentAttachment = printCommonService.saveAttachmentPdfFromHtml(examStudent != null ? examStudent.getExamStudentId() + "|" + examStudent.getStudentCode() : SystemConstant.getNanoId(), studentHtml, userId, examStudentPdfList, fileTempList);
+        BasicAttachment examStudentAttachment = printCommonService.saveAttachmentPdfFromHtml(examStudent != null ? examStudent.getExamStudentId() + "|" + examStudent.getStudentCode() : SystemConstant.getNanoId(), studentHtml, userId, examStudentPdfList, fileTempList, examCard.getPageSize());
         if (examStudent != null) {
             examStudent.setAttachmentId(examStudentAttachment.getId());
         }

+ 10 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ExamTaskUtil.java → distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/ExamTaskUtil.java

@@ -1,6 +1,7 @@
-package com.qmth.teachcloud.common.util;
+package com.qmth.distributed.print.business.util;
 
 import com.alibaba.fastjson.JSON;
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -44,4 +45,12 @@ public class ExamTaskUtil {
         return parsePaperAttachmentPath(path, null);
     }
 
+    public static List<PaperInfoVo> parsePaperAttachmentPath(List<ExamTaskDetail> examTaskDetailList) {
+        List<PaperInfoVo> paperInfoVoList = new ArrayList<>();
+        for (ExamTaskDetail examTaskDetail : examTaskDetailList) {
+            paperInfoVoList.addAll(parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds()));
+        }
+        return paperInfoVoList;
+    }
+
 }

+ 2 - 0
distributed-print-business/src/main/resources/db/log/xf.sql

@@ -55,3 +55,5 @@ CREATE TABLE `mark_question_answer` (
        PRIMARY KEY (`id`))
     COMMENT = '客观题信息';
 
+-- 2024-10-21
+ALTER TABLE `exam_task` ADD COLUMN `exam_task_detail_enable` TINYINT(1) NULL COMMENT '卷库启用禁用状态。是否启用,false:停用,true:启用' AFTER `enable`;

+ 2 - 11
distributed-print-business/src/main/resources/mapper/ClientMapper.xml

@@ -367,7 +367,7 @@
     </select>
     <select id="pagePrintSingleData" resultType="com.qmth.distributed.print.business.bean.dto.client.PrintSingleDto">
         SELECT
-            b.exam_id examId,
+           distinct b.exam_id examId,
             be.name examName,
             epp.id printPlanId,
             epp.name printPlanName,
@@ -375,8 +375,7 @@
             bc.code courseCode,
             bc.name courseName,
             c.paper_number paperNumber,
-            group_concat(c.paper_type) paperType,
-            group_concat(b.id) examDetailIds
+            c.serial_number serialNumber
         FROM
             exam_detail b
                 JOIN
@@ -408,13 +407,5 @@
                 #{item}
             </foreach>
         </where>
-        group by b.exam_id,
-            be.name,
-            epp.id,
-            epp.name,
-            c.course_id,
-            bc.code,
-            bc.name,
-            c.paper_number
     </select>
 </mapper>

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

@@ -107,7 +107,7 @@
                 AND a.course_id = #{courseId}
                 AND a.paper_number = #{paperNumber}
     </select>
-    <select id="listExamDetailByExamIdAndPaperNumber" resultMap="BaseResultMap">
+    <select id="listByExamIdAndPaperNumber" resultMap="BaseResultMap">
         SELECT
             *
         FROM
@@ -121,7 +121,6 @@
                       WHERE
                           edc.school_id = ed.school_id
                         AND edc.exam_detail_id = ed.id
-                        AND ed.school_id = #{schoolId}
                         AND ed.exam_id = #{examId})
     </select>
     <select id="getByExamDetailId" resultType="com.qmth.teachcloud.common.bean.result.TbTaskDetailResult">

+ 0 - 12
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -504,10 +504,6 @@
         a.end_time endTime,
         a.create_id createId,
         IFNULL(g.update_time, a.update_time) createTime,
-        b.enable,
-        b.paper_type paperType,
-        b.exposed_paper_type exposedPaperType,
-        b.unexposed_paper_type unexposedPaperType,
         CASE a.card_rule_id
         WHEN - 1 THEN '全部通卡'
         ELSE e.name
@@ -518,8 +514,6 @@
         LEFT JOIN
         basic_course bc ON a.course_id = bc.id
         LEFT JOIN
-        exam_task_detail b ON a.id = b.exam_task_id
-        LEFT JOIN
         t_f_flow_approve g ON g.flow_id = a.flow_id
         LEFT JOIN
         sys_user c ON a.user_id = c.id
@@ -722,8 +716,6 @@
                 et.user_id= d.id
             LEFT JOIN
                 sys_org so ON et.teaching_room_id = so.id
-            LEFT JOIN exam_task_detail det ON
-                det.exam_task_id = et.id
             LEFT JOIN
                 basic_exam be ON et.exam_id = be.id
             LEFT JOIN
@@ -788,8 +780,6 @@
                     et.user_id= d.id
             LEFT JOIN
                 sys_org so ON et.teaching_room_id = so.id
-            LEFT JOIN exam_task_detail det ON
-                    det.exam_task_id = et.id
             LEFT JOIN
                 basic_exam be ON et.exam_id = be.id
             LEFT JOIN
@@ -845,8 +835,6 @@
                   et.user_id= d.id
                   LEFT JOIN
                   sys_org so ON et.teaching_room_id = so.id
-                  LEFT JOIN exam_task_detail det ON
-                  det.exam_task_id = et.id
                   LEFT JOIN
                  basic_exam be ON et.exam_id = be.id
                   LEFT JOIN

+ 7 - 44
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskQueryController.java

@@ -90,60 +90,23 @@ public class ExamTaskQueryController {
     /**
      * 卷库查询-启用/禁用
      *
-     * @param examTaskDetail 命题任务详情对象
+     * @param examTask 命题任务详情对象
      * @return Result
      */
     @ApiOperation(value = "卷库查询-启用/禁用")
     @RequestMapping(value = "/paper_enable", method = RequestMethod.POST)
     @OperationLogDetail(operationType = OperationTypeEnum.ENABLE, detail = "启用/禁用操作,命题任务ID:{{examTaskDetail.examTaskId}}")
-    public Result taskPaperEnable(@RequestBody ExamTaskDetail examTaskDetail) throws IOException {
-        boolean isSuccess = examTaskDetailService.enable(examTaskDetail);
+    public Result taskPaperEnable(@RequestBody ExamTask examTask) throws IOException {
+        boolean isSuccess = examTaskDetailService.enable(examTask);
         // 启用,触发考场生成pdf
-        if (examTaskDetail.getEnable()) {
+        if (examTask.getExamTaskDetailEnable()) {
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            ExamTask examTask = examTaskService.getById(examTaskDetail.getId());
+            ExamTask examTaskById = examTaskService.getById(examTask.getId());
             // 校验课程关联考场,是否已经提交打印
-            Boolean isCreate = printCommonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber());
+            Boolean isCreate = printCommonService.checkExamDetailStatus(examTaskById.getSchoolId(), null, examTaskById.getExamId(), examTaskById.getCourseId(), examTaskById.getPaperNumber());
             // 校验是否可以提交打印状态
             if (isCreate) {
-                printCommonService.checkExamDataAndCreatePdfTask(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseId(), examTask.getPaperNumber(), sysUser);
-            }
-        }
-        return ResultUtil.ok(isSuccess);
-    }
-
-    /**
-     * 卷库查询-卷库修改
-     *
-     * @param examTaskDetail 命题任务详情对象
-     * @return Result
-     */
-    @ApiOperation(value = "卷库查询-卷库修改")
-    @RequestMapping(value = "/paper_update", method = RequestMethod.POST)
-    @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "卷库修改操作,命题任务ID:{{examTaskDetail.examTaskId}}")
-    public Result taskPaperUpdate(@RequestBody ExamTaskDetail examTaskDetail) {
-        Map<String, Object> map = examTaskDetailService.paperUpdate(examTaskDetail);
-        Boolean isSuccess = (Boolean) map.get(SystemConstant.SUCCESS);
-        if (isSuccess) {
-            ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
-            if (Objects.nonNull(examTask.getReview()) && examTask.getReview()) {
-                // 发送短信
-                basicMessageService.sendNoticeTaskAuditCreateOrReview(examTask, MessageEnum.NOTICE_OF_AUDIT_REVIEW);
-            } else {
-               /* SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-                // 校验课程关联考场,是否已经提交打印
-                Boolean isCreate = printCommonService.checkExamDetailStatus(examTask.getSchoolId(), null, examTask.getCourseCode(), examTask.getPaperNumber());
-                // 校验是否可以提交打印状态
-                if (isCreate) {
-                    printCommonService.checkData(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
-                }*/
-            }
-            Boolean sendFlowStartMq = (Boolean) map.get(SystemConstant.SEND_FLOW_START_MQ);
-            Boolean sendFlowMq = (Boolean) map.get(SystemConstant.SEND_FLOW_MQ);
-            if (Objects.nonNull(sendFlowStartMq) && sendFlowStartMq) {
-                activitiService.sendFlowStartMsg(examTask.getFlowId());
-            } else if (Objects.nonNull(sendFlowMq) && sendFlowMq) {
-                activitiService.sendFlowTaskApproveMsg(map);
+                printCommonService.checkExamDataAndCreatePdfTask(examTaskById.getSchoolId(), examTaskById.getExamId(), examTaskById.getCourseId(), examTaskById.getPaperNumber(), sysUser);
             }
         }
         return ResultUtil.ok(isSuccess);

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

@@ -14,7 +14,7 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -91,7 +91,7 @@ public class WorkController {
         IPage<MarkSettingDto> markSettingDtoIPage = markPaperService.listPaperSetting(null, null, null, null, false,
                 pageNumber, pageSize);
         for (MarkSettingDto record : markSettingDtoIPage.getRecords()) {
-            ExamTaskDetail examTaskDetail = examTaskDetailService.findByExamIdAndCourseIdAndPaperNumber(record.getExamId(), record.getCourseId(), record.getPaperNumber());
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(record.getExamId(), record.getPaperNumber(), record.getSerialNumber());
             if (examTaskDetail != null) {
                 List<PaperInfoVo> paperInfoVos = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), record.getPaperType());
                 if (CollectionUtils.isNotEmpty(paperInfoVos)) {

+ 1 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkQuestionController.java

@@ -8,11 +8,10 @@ import com.qmth.distributed.print.business.service.ExamTaskDetailService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkSettingController.java

@@ -18,7 +18,7 @@ import com.qmth.teachcloud.common.enums.ExamModelEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkManageDto;
@@ -89,7 +89,7 @@ public class MarkSettingController {
         IPage<MarkSettingDto> markSettingDtoIPage = markPaperService.listPaperSetting(examId, openCollegeId, courseId, paperNumber,
                 groupStatus, pageNumber, pageSize);
         for (MarkSettingDto record : markSettingDtoIPage.getRecords()) {
-            ExamTaskDetail examTaskDetail = examTaskDetailService.findByExamIdAndCourseIdAndPaperNumber(record.getExamId(), record.getCourseId(), record.getPaperNumber());
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(record.getExamId(), record.getPaperNumber(), record.getSerialNumber());
             if (examTaskDetail != null) {
                 List<PaperInfoVo> paperInfoVos = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds(), record.getPaperType());
                 if (CollectionUtils.isNotEmpty(paperInfoVos)) {

+ 1 - 2
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -11,7 +11,6 @@ import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
-import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.TSAuth;
 import com.qmth.teachcloud.common.enums.AuthEnum;
 import com.qmth.teachcloud.common.enums.PushTypeEnum;
@@ -22,7 +21,7 @@ import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.TSAuthService;
 import com.qmth.teachcloud.common.threadPool.DynamicMyThreadPool;
 import com.qmth.teachcloud.common.util.DateDisposeUtils;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkPaper;

+ 2 - 3
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -18,7 +18,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ObjectivePolicy;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
-import com.qmth.teachcloud.common.util.ExamTaskUtil;
+import com.qmth.distributed.print.business.util.ExamTaskUtil;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.Struct;
 import com.qmth.teachcloud.mark.entity.*;
@@ -45,7 +45,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 @Service
@@ -146,7 +145,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
 
     @Override
     public void insertScanAnswerCardAndMarkQuestion(ExamDetailCourseInitMarkDto dto) {
-        ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndCourseIdAndPaperNumber(dto.getExamId(), dto.getCourseId(), dto.getPaperNumber());
+        ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamIdAndPaperNumberAndSerialNumber(dto.getExamId(), dto.getPaperNumber(), dto.getSerialNumber());
         List<PaperInfoVo> paperInfoVoList = ExamTaskUtil.parsePaperAttachmentPath(examTaskDetail.getPaperAttachmentIds());
         List<String> cardIds = paperInfoVoList.stream().map(PaperInfoVo::getCardId).distinct().collect(Collectors.toList());
         for (String cardId : cardIds) {