ソースを参照

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

wangliang 11 ヶ月 前
コミット
3ceb4b5003
34 ファイル変更245 行追加164 行削除
  1. 0 27
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java
  2. 18 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/InitExamDetailDto.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  4. 2 48
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  5. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  6. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TeachCourseService.java
  7. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamRuleServiceImpl.java
  8. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DownloadServiceImpl.java
  9. 4 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  10. 13 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  11. 10 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  12. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskWholeServiceImpl.java
  13. 4 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TeachCourseServiceImpl.java
  14. 4 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/ImportLogicServiceImpl.java
  15. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  16. 9 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  17. 3 8
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  18. 2 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java
  19. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskApplyController.java
  20. 10 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/BaseController.java
  21. 2 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkInspectedController.java
  22. 44 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ConvertUtil.java
  23. 22 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/DateDisposeUtils.java
  24. 36 26
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/Task.java
  25. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java
  26. 1 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanOmrTaskMapper.java
  27. 13 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java
  28. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  29. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanBatchServiceImpl.java
  30. 1 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java
  31. 19 1
      teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml
  32. 6 4
      teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml
  33. 1 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  34. 1 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

+ 0 - 27
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/ExamDetailCourseInitMarkDto.java

@@ -14,9 +14,6 @@ public class ExamDetailCourseInitMarkDto {
     private String paperType;
     private Long createId;
     private String packageCode;
-    private String examDetailCourseIds;
-    private Long examStartTime;
-    private Long examEndTime;
 
     public Long getSchoolId() {
         return schoolId;
@@ -89,28 +86,4 @@ public class ExamDetailCourseInitMarkDto {
     public void setPackageCode(String packageCode) {
         this.packageCode = packageCode;
     }
-
-    public String getExamDetailCourseIds() {
-        return examDetailCourseIds;
-    }
-
-    public void setExamDetailCourseIds(String examDetailCourseIds) {
-        this.examDetailCourseIds = examDetailCourseIds;
-    }
-
-    public Long getExamStartTime() {
-        return examStartTime;
-    }
-
-    public void setExamStartTime(Long examStartTime) {
-        this.examStartTime = examStartTime;
-    }
-
-    public Long getExamEndTime() {
-        return examEndTime;
-    }
-
-    public void setExamEndTime(Long examEndTime) {
-        this.examEndTime = examEndTime;
-    }
 }

+ 18 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/initMarkData/InitExamDetailDto.java

@@ -9,6 +9,8 @@ public class InitExamDetailDto {
     private String examPlace;
     private String examRoom;
     private String packageCode;
+    private Long examStartTime;
+    private Long examEndTime;
 
     public Long getExamDetailCourseId() {
         return examDetailCourseId;
@@ -41,4 +43,20 @@ public class InitExamDetailDto {
     public void setPackageCode(String packageCode) {
         this.packageCode = packageCode;
     }
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
 }

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

@@ -122,7 +122,7 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
 
     List<ExamDetailCourseDto> listByExamIdAndCourseId(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseId") Long courseId);
 
-    List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(@Param("printStatus") String printStatus, @Param("startTime") long startTime, @Param("markStatus") String markStatus);
+    List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(@Param("printStatus") String printStatus, @Param("startTime") long startTime);
 
     int countMakeupUsedByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 

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

@@ -76,42 +76,12 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     /**
      * 查询考务数据-简略
-     *
-     * @param schoolId        学校id
-     * @param semesterId      学期id
-     * @param examId          考试id
-     * @param printPlanIdList 印刷计划id集合
-     * @param courseCode      课程代码
-     * @param paperNumber     试卷编号
-     * @param examPlace       考点
-     * @param examRoom        考场
-     * @param packageCode     卷袋编号
-     * @param pageNumber      分页页码
-     * @param startDate       考试开始日期
-     * @param endDate         考试结束日期
-     * @param pageSize        分页数量
-     * @param dpr             权限控制参数
-     * @return 查询结果
      */
     IPage<ExaminationResult> findExaminationBriefPage(Long schoolId, Long semesterId, Long examId, List<Long> printPlanIdList, Long courseId, String paperNumber,
                                                       String examPlace, String examRoom, String packageCode, Long startDate, Long endDate, int pageNumber, int pageSize, DataPermissionRule dpr);
 
     /**
      * 查询考务数据-汇总数据查询
-     *
-     * @param schoolId        学校id
-     * @param semesterId      学期id
-     * @param examId          考试id
-     * @param printPlanIdList 印刷计划id集合
-     * @param courseCode      课程代码
-     * @param paperNumber     试卷编号
-     * @param examPlace       考点
-     * @param examRoom        考场
-     * @param packageCode     卷袋编号
-     * @param startDate       考试日期-起始
-     * @param endDate         考试日期-终止
-     * @param dpr             权限控制参数
-     * @return 查询结果
      */
     SummarizedDataResult findSummarizedData(Long schoolId, Long semesterId, Long examId, List<Long> printPlanIdList, Long courseId, String paperNumber,
                                             String examPlace, String examRoom, String packageCode, Long startDate, Long endDate, DataPermissionRule dpr);
@@ -119,21 +89,6 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     /**
      * 查询考务数据-明细
-     *
-     * @param schoolId        学校id
-     * @param semesterId      学期id
-     * @param examId          考试id
-     * @param printPlanIdList 印刷计划id集合
-     * @param courseCode      课程代码
-     * @param paperNumber     试卷编号
-     * @param examPlace       考点
-     * @param examRoom        考场
-     * @param studentParams   学生查询参数
-     * @param startDate       考试日期-起始
-     * @param endDate         考试日期-终止
-     * @param pageNumber      分页页码
-     * @param pageSize        分页数量
-     * @return 查询结果
      */
     IPage<ExaminationDetailResult> findExaminationDetail(Long schoolId, Long semesterId, Long examId, List<Long> printPlanIdList, Long courseId, String paperNumber, String examPlace,
                                                          String examRoom, String studentParams, Long startDate, Long endDate, int pageNumber, int pageSize);
@@ -227,9 +182,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     void resetExamDetail(Long entityId, CreatePdfTypeEnum type, ExamDetailStatusEnum reject, boolean clearPaperType);
 
-    List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(String printStatus, long startTime, String markStatus);
-
-    ExamDetail getByExamDetailCourseId(Long examDetailId);
+    List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(String printStatus, long startTime);
 
     int countMakeupUsedByExamIdAndPaperNumber(Long examId, String paperNumber);
 
@@ -239,6 +192,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     List<InitExamDetailDto> listPrintFinishExamDetailCourseIds(Long examId, String paperNumber, String paperType);
 
+    boolean allExamDetailIsExist(Long examId, Long courseId, String paperNumber);
     boolean allExamDetailIsFinish(Long examId, Long courseId, String paperNumber);
 
     List<ExamDetail> listExamDetailByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String paperNumber);

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

@@ -180,7 +180,7 @@ public interface ExamTaskService extends IService<ExamTask> {
 
     void saveMakeupTask(MakeupExamTaskTotalParam makeupExamTaskTotalParam);
 
-    IPage<TikuPaperInfo> pageTikuPaper(String courseCode, String paperName, String account, Integer pageNumber, Integer pageSize);
+    IPage<TikuPaperInfo> pageTikuPaper(Long courseId, String paperName, String account, Integer pageNumber, Integer pageSize);
 
     Map<String, Object> getTikuPaperData(Long examId, Long paperId, String uuid);
 

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

@@ -71,9 +71,9 @@ public interface TeachCourseService extends IService<TeachCourse> {
      */
     List<DictionaryResult> findTeacherCourseInfo(Long userId);
 
-    CourseResult listUserCourse(String param, Long teachingRoomId);
+    CourseResult listUserCourse(String param, Long examId, Long teachingRoomId);
 
-    List<BasicCourse> listByUserId(Long userId);
+    List<BasicCourse> listByUserId(Long examId, Long userId);
 
     void batchCreateTeachCourse(Long schoolId, Long examId, List<BasicExamStudent> basicExamStudentList);
 }

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

@@ -61,7 +61,7 @@ public class BasicExamRuleServiceImpl extends ServiceImpl<BasicExamRuleMapper, B
             for (EnumResult enumResult : enumResultList) {
                 Optional<EnumResult> resultOptional = requiredFields.stream().filter(t -> enumResult.getCode().equals(t.getCode())).findFirst();
                 if (resultOptional.isPresent()) {
-                    enumResult.setEnable(enumResult.getEnable() ? enumResult.getEnable() : resultOptional.get().getEnable());
+                    enumResult.setEnable(resultOptional.get().getEnable());
                 }
 //                else {
 //                    enumResult.setEnable(false);

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

@@ -136,7 +136,7 @@ public class DownloadServiceImpl implements DownloadService {
                         htmlFile.getParentFile().mkdirs();
                         htmlFile.createNewFile();
                     }
-                    String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent());
+                    String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent(), examCard.getCourseId());
                     // 生成html文件
                     FileCopyUtils.copy(htmlContent.getBytes(StandardCharsets.UTF_8), htmlFile);
                     fileList.add(htmlFile);

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

@@ -25,6 +25,7 @@ import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
+import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicPrintConfig;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
@@ -416,7 +417,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
 
             // 通用模板
-            String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent());
+            String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent(), examCard.getCourseId());
             // html文件
             File htmlFile = new File(downloadFilePath, examCard.getTitle() + SystemConstant.HTML_PREFIX);
             if (!htmlFile.exists()) {
@@ -457,7 +458,6 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
 
             String zipFileName = examCard.getTitle() + SystemConstant.ZIP_PREFIX;
-//            teachcloudCommonService.downloadFileAndZip(response, rootPath, rootPath, zipFileName);
             FileUtil.downloadEncryptZip(response, downloadPathFile, zipFileName);
         } catch (Exception e) {
             e.printStackTrace();
@@ -576,7 +576,8 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Override
     public ExamCard createJpgImage(ExamCard examCard) {
         BasicCardRule basicCardRule = basicCardRuleService.getById(examCard.getCardRuleId());
-        String replaceBackupCardHtmlContent = createPdfUtil.replaceBackupCardHtmlParam(null,examCard, null, basicCardRule, null);
+        BasicCourse basicCourse = examCard.getCourseId() != null ? basicCourseService.getById(examCard.getCourseId()) : null;
+        String replaceBackupCardHtmlContent = createPdfUtil.replaceBackupCardHtmlParam(basicCourse != null ? basicCourse.getCode() : null, examCard, null, basicCardRule, null);
         File pdfFile = PdfUtil.htmlToPdf(replaceBackupCardHtmlContent);
         try {
             String fileName = PdfUtil.md5FileName("BLANK" + examCard.getId()) + SystemConstant.PDF_PREFIX;

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

@@ -925,14 +925,15 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                     } else {
                         // 删除扫描数据
                         markStudentService.removeByIds(examStudentIds);
-                        if(markPaperService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber(), true)){
+                        if (markPaperService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber(), true)) {
                             markPaperPackageService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                             markQuestionService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                             scanAnswerCardService.deleteByExamIdAndPaperNumber(examDetail.getExamId(), examDetailCourse.getPaperNumber());
                             for (String paperType : examDetailCourse.getPaperNumber().split(",")) {
                                 markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(examDetail.getExamId(), examDetailCourse.getPaperNumber(), paperType);
                             }
-                        };
+                        }
+                        ;
                     }
 
                     examStudentService.removeByIds(examStudentIds);
@@ -1099,8 +1100,9 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(String printStatus, long startTime, String markStatus) {
-        return this.baseMapper.listPrintFinishExamDetailCourse(printStatus, startTime, markStatus);
+    public List<ExamDetailCourseInitMarkDto> listPrintFinishExamDetailCourse(String printStatus, long startTime) {
+        List<ExamDetailCourseInitMarkDto> examDetailCourseInitMarkDtoList = this.baseMapper.listPrintFinishExamDetailCourse(printStatus, startTime);
+        return examDetailCourseInitMarkDtoList.stream().filter(t -> this.allExamDetailIsFinish(t.getExamId(), t.getCourseId(), t.getPaperNumber())).collect(Collectors.toList());
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -1172,12 +1174,6 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         return new ArrayList<>(clazzNameSet);
     }
 
-    @Override
-    public ExamDetail getByExamDetailCourseId(Long examDetailCourseId) {
-        ExamDetailCourse examDetailCourse = examDetailCourseService.getById(examDetailCourseId);
-        return this.getById(examDetailCourse.getExamDetailId());
-    }
-
     @Override
     public int countMakeupUsedByExamIdAndPaperNumber(Long examId, String paperNumber) {
         return this.baseMapper.countMakeupUsedByExamIdAndPaperNumber(examId, paperNumber);
@@ -1202,12 +1198,18 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public boolean allExamDetailIsFinish(Long examId, Long courseId, String paperNumber) {
+    public boolean allExamDetailIsExist(Long examId, Long courseId, String paperNumber) {
         List<ExamDetailStatusEnum> examDetailStatusList = Arrays.asList(ExamDetailStatusEnum.READY, ExamDetailStatusEnum.WAITING, ExamDetailStatusEnum.PRINTING, ExamDetailStatusEnum.FINISH);
         List<ExamDetail> examDetailList = this.listExamDetailByExamIdAndCourseIdAndPaperNumber(examId, courseId, paperNumber);
         return examDetailList.stream().filter(m -> !examDetailStatusList.contains(m.getStatus())).count() == 0;
     }
 
+    @Override
+    public boolean allExamDetailIsFinish(Long examId, Long courseId, String paperNumber) {
+        List<ExamDetail> examDetailList = this.listExamDetailByExamIdAndCourseIdAndPaperNumber(examId, courseId, paperNumber);
+        return examDetailList.stream().filter(m -> !ExamDetailStatusEnum.FINISH.equals(m.getStatus())).count() == 0;
+    }
+
     @Override
     public List<ExamDetail> listExamDetailByExamIdAndCourseIdAndPaperNumber(Long examId, Long courseId, String paperNumber) {
         return this.baseMapper.listExamDetailByExamIdAndCourseIdAndPaperNumber(examId, courseId, paperNumber);

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

@@ -860,7 +860,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     String cardHtmlPath = dirPath + "题卡" + SystemConstant.HYPHEN + name + SystemConstant.HTML_PREFIX;
                     String cardPdfPath = dirPath + "题卡" + SystemConstant.HYPHEN + name + SystemConstant.PDF_PREFIX;
 
-                    String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent());
+                    String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent(), examCard.getCourseId());
                     // html
                     File htmlFile = new File(cardHtmlPath);
                     if (!htmlFile.exists()) {
@@ -1589,7 +1589,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             basicOperationLog.setSchoolId(sysUser.getSchoolId());
             BasicExam basicExam = basicExamService.getById(examTask.getExamId());
             String examName = basicExam == null ? "-" : basicExam.getName();
-            String courseName = examTask.getCourseName() + "(" + examTask.getCourseCode() + ")";
+            BasicCourse basicCourse = basicCourseService.getById(examTask.getCourseId());
+            String courseName = basicCourse != null ? basicCourse.getName() + "(" + basicCourse.getCode() + ")" : "";
             basicOperationLog.setDetail(String.format("考试[%s],课程[%s],试卷编号[%s],题卡/试卷[%s],卷型[%s]", examName, courseName, examTask.getPaperNumber(), type.equals("paper") ? "试卷" : "题卡", paperType));
             basicOperationLog.setOperationType(OperationTypeEnum.PREVIEW);
             basicOperationLog.setPrivilegeId(ServletUtil.getCurrentPrivilegeId());
@@ -1744,12 +1745,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     }
 
     @Override
-    public IPage<TikuPaperInfo> pageTikuPaper(String courseCode, String paperName, String account, Integer pageNumber, Integer pageSize) {
-        if (StringUtils.isBlank(courseCode)) {
+    public IPage<TikuPaperInfo> pageTikuPaper(Long courseId, String paperName, String account, Integer pageNumber, Integer pageSize) {
+        if (courseId == null) {
             throw ExceptionResultEnum.ERROR.exception("请选择课程");
         }
+        BasicCourse basicCourse = basicCourseService.getById(courseId);
+        if (basicCourse == null) {
+            throw ExceptionResultEnum.ERROR.exception("课程不存在");
+        }
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        return tikuUtils.pagePaperInfo(schoolId, courseCode, paperName, account, pageNumber, pageSize);
+        return tikuUtils.pagePaperInfo(schoolId, basicCourse.getCode(), paperName, account, pageNumber, pageSize);
     }
 
     @Override

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

@@ -56,7 +56,7 @@ public class ExamTaskWholeServiceImpl extends ServiceImpl<ExamTaskWholeMapper, E
 
     @Override
     public void checkAndCreateTask(Long examId, Long courseId, String paperNumber) {
-        boolean isAllPrintFinish = examDetailService.allExamDetailIsFinish(examId, courseId, paperNumber);
+        boolean isAllPrintFinish = examDetailService.allExamDetailIsExist(examId, courseId, paperNumber);
         ExamTaskWhole examTaskWhole = this.getByExamIdAndCourseIdAndPaperNumber(examId, courseId, paperNumber);
         if (isAllPrintFinish) {
             String key = examId + valueOf(courseId) + paperNumber;

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

@@ -169,11 +169,11 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     }
 
     @Override
-    public CourseResult listUserCourse(String param, Long teachingRoomId) {
+    public CourseResult listUserCourse(String param, Long examId, Long teachingRoomId) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         CourseResult courseResult = new CourseResult();
         // 教学课程
-        List<BasicCourse> teachCourseList = this.listByUserId(sysUser.getId());
+        List<BasicCourse> teachCourseList = this.listByUserId(examId, sysUser.getId());
         courseResult.setTeachCourseList(teachCourseList);
 
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(teachingRoomId);
@@ -190,8 +190,9 @@ public class TeachCourseServiceImpl extends ServiceImpl<TeachCourseMapper, Teach
     }
 
     @Override
-    public List<BasicCourse> listByUserId(Long userId) {
+    public List<BasicCourse> listByUserId(Long examId, Long userId) {
         QueryWrapper<TeachCourse> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(TeachCourse::getExamId, examId);
         queryWrapper.lambda().eq(TeachCourse::getUserId, userId);
         List<TeachCourse> list = this.list(queryWrapper);
         return list.stream().map(m -> basicCourseService.getById(m.getCourseId())).collect(Collectors.toList());

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

@@ -166,11 +166,11 @@ public class ImportLogicServiceImpl implements ImportLogicService {
             }
 
             try {
-                Map<String, Object> timeMap = ConvertUtil.analyzeStartAndEndTime(basicExamStudentImport.getExamDate(), basicExamStudentImport.getExamTime());
+                Map<String, Object> timeMap = ConvertUtil.analyzeExamTime(basicExamStudentImport.getExamDate(), basicExamStudentImport.getExamTime());
                 basicExamStudent.setExamStartTime(Long.valueOf(String.valueOf(timeMap.get("startTime"))));
                 basicExamStudent.setExamEndTime(Long.valueOf(String.valueOf(timeMap.get("endTime"))));
             } catch (Exception e) {
-                stringJoiner.add("考试日期或考试时间格式错误");
+                stringJoiner.add(e.getMessage());
             }
 
             // 校验课程
@@ -612,8 +612,7 @@ public class ImportLogicServiceImpl implements ImportLogicService {
         Map<String, String> courseCheckMap = basicCourseService.list(
                         new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId)).stream()
                 .collect(Collectors.toMap(BasicCourse::getCode, BasicCourse::getName));
-        List<MarkPaper> markPaperList = markPaperService.list(
-                new QueryWrapper<MarkPaper>().lambda().eq(MarkPaper::getExamId, examId));
+        List<MarkPaper> markPaperList = markPaperService.findMarkPaperListByExamId(examId);
         // 题号重复校验
         // 导入的客观题题号集合
         Set<String> questionNumberCheckSet = new HashSet<>();
@@ -800,8 +799,7 @@ public class ImportLogicServiceImpl implements ImportLogicService {
         Map<String, String> courseCheckMap = basicCourseService.list(
                         new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId, schoolId)).stream()
                 .collect(Collectors.toMap(BasicCourse::getCode, BasicCourse::getName));
-        List<MarkPaper> markPaperList = markPaperService.list(
-                new QueryWrapper<MarkPaper>().lambda().eq(MarkPaper::getExamId, examId));
+        List<MarkPaper> markPaperList = markPaperService.findMarkPaperListByExamId(examId);
         // 题号重复校验
         // 导入的客观题题号集合
         Set<String> questionNumberCheckSet = new HashSet<>();

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

@@ -638,7 +638,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                         String cardHtmlPath = dirPath + "题卡" + SystemConstant.HYPHEN + name + SystemConstant.HTML_PREFIX;
                         String cardPdfPath = dirPath + "题卡" + SystemConstant.HYPHEN + name + SystemConstant.PDF_PREFIX;
                         // 通用题卡
-                        String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent());
+                        String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent(), examCard.getCourseId());
                         // html
                         File localFile = new File(cardHtmlPath);
                         if (!localFile.exists()) {
@@ -1132,7 +1132,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                             localFile.createNewFile();
                         }
                         // 通用题卡
-                        String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent());
+                        String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCard.getHtmlContent(), examCard.getCourseId());
                         // 生成html文件
                         FileCopyUtils.copy(htmlContent.getBytes(StandardCharsets.UTF_8), localFile);
                         // 转pdf文件

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

@@ -26,6 +26,7 @@ import com.qmth.teachcloud.common.entity.BasicPrintConfig;
 import com.qmth.teachcloud.common.entity.BasicSemester;
 import com.qmth.teachcloud.common.enums.*;
 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;
@@ -39,6 +40,7 @@ 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;
@@ -60,6 +62,8 @@ public class CreatePdfUtil {
     @Resource
     private BasicAttachmentService basicAttachmentService;
     @Resource
+    private BasicCourseService basicCourseService;
+    @Resource
     @Lazy
     private PrintCommonService printCommonService;
     @Resource
@@ -334,10 +338,12 @@ public class CreatePdfUtil {
      * @param htmlContent
      * @return
      */
-    public String replaceBlankHtmlContent(String htmlContent) {
+    public String replaceBlankHtmlContent(String htmlContent, Long courseId) {
+        BasicCourse basicCourse = courseId != null ? basicCourseService.getById(courseId) : null;
         // 替换条码参数
         htmlContent = htmlContent.replaceAll("<img src=\"data:image/png;base64,\\$\\{examNumber\\}\">", "");
-        htmlContent = htmlContent.replaceAll("<img src=\"data:image/png;base64,\\$\\{courseCodeBarcodeSrc\\}\">", "");
+        htmlContent = htmlContent.replaceAll("\\$\\{courseCodeBarcodeSrc\\}", basicCourse != null ? "data:image/png;base64," + GoogleBarCodeUtil.createBarCode(basicCourse.getCode(), false) : "");
+        htmlContent = htmlContent.replaceAll("\\$\\{courseCodeBarcodeName\\}", basicCourse != null ? basicCourse.getCode() : "");
         // 正则匹配所有参数,填入空值
         htmlContent = htmlContent.replaceAll("\\$\\{[A-Za-z0-9]+\\}", "");
         return htmlContent;
@@ -550,7 +556,7 @@ public class CreatePdfUtil {
                 studentHtml = studentHtml.replaceAll("\\$\\{ticketNumberBarcode\\}", "");
                 studentHtml = studentHtml.replaceAll("\\$\\{examNumber\\}", examStudent != null && examStudent.getStudentCode() != null ? GoogleBarCodeUtil.createBarCode(examStudent.getStudentCode(), false) : "");
                 studentHtml = studentHtml.replaceAll("\\$\\{examNumberStr\\}", examStudent != null && examStudent.getStudentCode() != null ? examStudent.getStudentCode() : "");
-                studentHtml = studentHtml.replaceAll("\\$\\{courseCodeBarcodeSrc\\}", examStudent != null && examStudent.getCourseCode() != null ? GoogleBarCodeUtil.createBarCode(examStudent.getCourseCode(), false) : "");
+                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) : "");

+ 3 - 8
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -771,11 +771,7 @@
             edc.paper_number paperNumber,
             et.id coursePaperId,
             edc.paper_type paperType,
-            et.user_id createId,
-            ed.exam_start_time examStartTime,
-            ed.exam_end_time examEndTime,
-            group_concat(ed.package_code) packageCodes,
-            group_concat(edc.id) examDetailCourseIds
+            et.user_id createId
         FROM
             exam_detail ed
                 LEFT JOIN
@@ -793,9 +789,8 @@
                               mark_paper mp
                           WHERE
                               ed.exam_id = mp.exam_id
-                            AND edc.paper_number = mp.paper_number
-                            AND mp.status = #{markStatus})
-        GROUP BY ed.school_id , be.semester_id, ed.exam_id , edc.course_id , edc.paper_number , et.id , edc.paper_type , et.user_id, ed.exam_start_time, ed.exam_end_time
+                            AND edc.paper_number = mp.paper_number)
+        GROUP BY ed.school_id , be.semester_id, ed.exam_id , edc.course_id , edc.paper_number , et.id , edc.paper_type , et.user_id
     </select>
     <select id="countMakeupUsedByExamIdAndPaperNumber" resultType="java.lang.Integer">
         SELECT

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

@@ -55,8 +55,9 @@ public class BasicCourseController {
     @ApiOperation(value = "课程查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
     public Result query(@RequestParam(value = "param", required = false) String param,
+                        @RequestParam(value = "examId", required = false) Long examId,
                         @RequestParam(value = "teachingRoomId", required = false) Long teachingRoomId) {
-        CourseResult courseResult = teachCourseService.listUserCourse(param, teachingRoomId);
+        CourseResult courseResult = teachCourseService.listUserCourse(param, examId, teachingRoomId);
         return ResultUtil.ok(courseResult);
     }
 

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

@@ -236,12 +236,12 @@ public class ExamTaskApplyController {
     @Transactional(rollbackFor = Exception.class)
     @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
     @OperationLogDetail(operationType = OperationTypeEnum.SELECT, detail = "查询题库试卷列表,课程代码:{{courseCode}}、试卷名称:{{paperName}}、教师工号:{{account}}")
-    public Result pageTikuPaper(@ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+    public Result pageTikuPaper(@ApiParam(value = "课程代码") @RequestParam(required = false) Long courseId,
                                 @ApiParam(value = "试卷名称") @RequestParam(value = "paperName", required = false) String paperName,
                                 @ApiParam(value = "教师工号") @RequestParam(value = "account", required = false) String account,
                                 @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                 @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(examTaskService.pageTikuPaper(courseCode, paperName, account, pageNumber, pageSize));
+        return ResultUtil.ok(examTaskService.pageTikuPaper(courseId, paperName, account, pageNumber, pageSize));
     }
 
     @ApiOperation(value = "入库申请-题库试卷包")

+ 10 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/BaseController.java

@@ -30,6 +30,16 @@ public class BaseController {
         validMarkPaperMarkTime(markPaper);
     }
 
+    public void validMarkPaperForInspect(Long examId, String paperNumber) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        if (markPaper == null) {
+            throw ExceptionResultEnum.DATA_ERROR.exception();
+        }
+        if (MarkPaperStatus.FINISH.equals(markPaper.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("已经结束阅卷无法复核,如果需要复核请评卷设置里点击开始评卷后再进行复核");
+        }
+    }
+
     public void validMarkPaperForScan(Long examId, String coursePaperId) {
         MarkPaper markPaper = markPaperService.getByExamIdAndCoursePaperId(examId, coursePaperId);
         if (markPaper == null) {

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

@@ -33,7 +33,7 @@ import javax.annotation.Resource;
 @Api(tags = "评卷-评卷任务检查")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/inspected")
-public class MarkInspectedController {
+public class MarkInspectedController extends BaseController{
 
     @Resource
     private MarkStudentService markStudentService;
@@ -80,6 +80,7 @@ public class MarkInspectedController {
     @RequestMapping(value = "/subjective/getTask", method = RequestMethod.POST)
     public Result getSubjectiveInspectedTask(@ApiParam(value = "考生ID", required = true) @RequestParam Long studentId) {
         Task task = markStudentService.getSubjectiveInspectedTask(studentId);
+        validMarkPaperForInspect(task.getExamId(), task.getPaperNumber());
         return ResultUtil.ok(task);
     }
 

+ 44 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ConvertUtil.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.common.util;
 
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.tools.excel.ExcelReader;
 import com.qmth.boot.tools.excel.annotation.ExcelColumn;
 import com.qmth.boot.tools.excel.enums.ExcelType;
@@ -10,6 +11,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPageTree;
 import org.apache.pdfbox.rendering.PDFRenderer;
@@ -24,6 +26,7 @@ import java.io.*;
 import java.lang.reflect.Field;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -81,6 +84,47 @@ public class ConvertUtil {
         return timeMap;
     }
 
+    public static Map<String, Object> analyzeExamTime(String date, String time) {
+        // 去掉所有空格
+        date = StringUtils.deleteWhitespace(date);
+        time = StringUtils.deleteWhitespace(time);
+        String[] arr = time.split(SystemConstant.HYPHEN);
+        if (arr.length != 2) {
+            // 不能使用'-'拆分成两个时间的报错
+            throw ExceptionResultEnum.ERROR.exception("考试时间正确格式为[08:00-10:00]");
+        }
+        String startTimeStr = date + " " + arr[0];
+        String endTimeStr = date + " " + arr[1];
+        if (Objects.isNull(DateDisposeUtils.parseExamDateTime(startTimeStr)) || Objects.isNull(DateDisposeUtils.parseDate(endTimeStr))) {
+            throw ExceptionResultEnum.ERROR.exception("考试日期正确格式为[2023-01-01或2023/09/01]");
+        }
+        Date startDate = DateDisposeUtils.parseExamDateTime(startTimeStr);
+        Date endDate = DateDisposeUtils.parseExamDateTime(endTimeStr);
+        if(!DateUtils.isSameDay(startDate, endDate)){
+            throw ExceptionResultEnum.ERROR.exception("考试日期正确格式为[2023-01-01或2023/09/01],考试时间正确格式为[08:00-10:00]");
+        }
+
+        long startTime, endTime;
+        try {
+            startTime = startDate.getTime();
+            endTime = endDate.getTime();
+        } catch (ApiException e) {
+            throw ExceptionResultEnum.ERROR.exception("考试日期正确格式为[2023-01-01或2023/09/01],考试时间正确格式为[08:00-10:00]");
+        }
+        if (startTime < 0 || endTime < 0) {
+            throw ExceptionResultEnum.ERROR.exception("考试日期正确格式为[2023-01-01或2023/09/01],考试时间正确格式为[08:00-10:00]");
+        }
+        if (startTime >= endTime) {
+            throw ExceptionResultEnum.ERROR.exception("开始时间不能大于结束时间");
+        }
+
+        Map<String, Object> timeMap = new HashMap<>();
+        timeMap.put("startTime", startTime);
+        timeMap.put("endTime", endTime);
+        return timeMap;
+
+    }
+
     /**
      * 根据开始时间和结束时间解析日期和时间
      *

+ 22 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/DateDisposeUtils.java

@@ -35,6 +35,9 @@ public class DateDisposeUtils extends DateUtils {
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
+    private static String[] parseExamDateTimePatterns = {
+             "yyyy-MM-dd HH:mm", "yyyy/MM/dd HH:mm", "yyyy.MM.dd HH:mm"};
+
     /**
      * 获取当前Date型日期
      *
@@ -129,6 +132,25 @@ public class DateDisposeUtils extends DateUtils {
         }
     }
 
+    /**
+     * 日期型字符串转化为日期 格式
+     */
+    public static Date parseExamDateTime(Object str)
+    {
+        if (str == null)
+        {
+            return null;
+        }
+        try
+        {
+            return parseDate(str.toString(), parseExamDateTimePatterns);
+        }
+        catch (ParseException e)
+        {
+            return null;
+        }
+    }
+
     public static void main(String[] args) {
         String d1 = "2020-01-01";
         String d2 = "2020/01/01";

+ 36 - 26
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/Task.java

@@ -11,18 +11,20 @@ import java.util.List;
 
 public class Task implements Serializable {
 
-	private static final long serialVersionUID = 3309698238297224617L;
+    private static final long serialVersionUID = 3309698238297224617L;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
 
-	/**
+    /**
      * 评卷任务编号
      */
-	@JsonSerialize(using = ToStringSerializer.class)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long taskId;
 
     /**
      * 考生编号
      */
-	@JsonSerialize(using = ToStringSerializer.class)
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long studentId;
 
     /**
@@ -42,7 +44,7 @@ public class Task implements Serializable {
 
     private String courseCode;
     private String courseName;
-  
+
     private String paperNumber;
     private Integer groupNumber;
 
@@ -132,17 +134,25 @@ public class Task implements Serializable {
     private String message;
 
     public Task() {
-  	}
-    
-	public Long getTaskId() {
-		return taskId;
-	}
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
 
-	public void setTaskId(Long taskId) {
-		this.taskId = taskId;
-	}
+    public Long getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(Long taskId) {
+        this.taskId = taskId;
+    }
 
-	public Long getStudentId() {
+    public Long getStudentId() {
         return studentId;
     }
 
@@ -326,20 +336,20 @@ public class Task implements Serializable {
         this.headerTagList = headerTagList;
     }
 
-	public String getPaperNumber() {
-		return paperNumber;
-	}
+    public String getPaperNumber() {
+        return paperNumber;
+    }
 
-	public void setPaperNumber(String paperNumber) {
-		this.paperNumber = paperNumber;
-	}
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
 
-	public Integer getGroupNumber() {
-		return groupNumber;
-	}
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
 
-	public void setGroupNumber(Integer groupNumber) {
-		this.groupNumber = groupNumber;
-	}
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
 
 }

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java

@@ -46,4 +46,6 @@ public interface MarkPaperMapper extends BaseMapper<MarkPaper> {
     List<MarkPaper> listByExamId(@Param("examId") Long examId, @Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
     IPage<ArchivePaperVo> documentList(Page<ArchiveScoreVo> page, @Param("req") ArchivePaperQuery query, @Param("dpr") DataPermissionRule dpr);
+
+    List<MarkPaper> findMarkPaperListByExamId(@Param("examId") Long examId);
 }

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/ScanOmrTaskMapper.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import org.apache.ibatis.annotations.Param;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.mark.dto.ScanStudentDto;
 import com.qmth.teachcloud.mark.entity.ScanOmrTask;
 import com.qmth.teachcloud.mark.enums.OmrTaskStatus;

+ 13 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java

@@ -34,6 +34,7 @@ public interface MarkPaperService extends IService<MarkPaper> {
     MarkPaper getByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType);
 
     void savePaperSetting(MarkPaper markPaper);
+
     void saveBatchPaperSetting(MarkPaperSettingParam markPaperSettingParam);
 
     Boolean finishPaper(Long examId, List<String> paperNumbers, MarkPaperStatus status);
@@ -44,13 +45,15 @@ public interface MarkPaperService extends IService<MarkPaper> {
 
     int getPaperNumberCount(Long id, Long courseId, String coursePaperId, MarkPaperStatus status, DataPermissionRule dpr);
 
-    IPage<CheckScoreListDto> listStudentScoreList(Long examId, Long courseId, String paperNumber, Integer pageNumber, Integer pageSize);
+    IPage<CheckScoreListDto> listStudentScoreList(Long examId, Long courseId, String paperNumber, Integer pageNumber,
+            Integer pageSize);
 
     void updateStatus(Long examId, String paperNumber, MarkPaperStatus newStatus, MarkPaperStatus currentStatus);
 
     void updateUploadCount(Long examId, String paperNumber, int countUploaded);
 
-    IPage<MarkPaperPackageDto> listPackage(Long examId, String paperNumber, String packageCode, Integer pageNumber, Integer pageSize);
+    IPage<MarkPaperPackageDto> listPackage(Long examId, String paperNumber, String packageCode, Integer pageNumber,
+            Integer pageSize);
 
     MarkPaper getByExamIdAndCoursePaperId(Long examId, String coursePaperId);
 
@@ -71,4 +74,12 @@ public interface MarkPaperService extends IService<MarkPaper> {
     void updateAbsentCount(Long examId, String paperNumber, int absentCount);
 
     IPage<ArchivePaperVo> documentList(ArchivePaperQuery query);
+
+    /**
+     * 根据考试id查询markPaper信息(只查课程信息和试卷编号)
+     *
+     * @param examId 考试id
+     * @return List<MarkPaper>
+     */
+    List<MarkPaper> findMarkPaperListByExamId(Long examId);
 }

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -417,4 +417,9 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         IPage<ArchivePaperVo> ret = this.baseMapper.documentList(page, query, dpr);
         return ret;
     }
+
+    @Override
+    public List<MarkPaper> findMarkPaperListByExamId(Long examId) {
+        return this.baseMapper.findMarkPaperListByExamId(examId);
+    }
 }

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanBatchServiceImpl.java

@@ -172,8 +172,8 @@ public class ScanBatchServiceImpl extends ServiceImpl<ScanBatchMapper, ScanBatch
             studentPaperList.add(new ScanStudentPaper(student.getId(), paperNumber, paper.getId()));
         }
         // 更新批次统计数量
-        updateAssignedCount(scanBatch.getId());
-        updateScanCount(scanBatch.getId());
+//        updateAssignedCount(scanBatch.getId());
+//        updateScanCount(scanBatch.getId());
         //直接更新考生扫描状态
         concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
         try {

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/TaskServiceImpl.java

@@ -82,6 +82,7 @@ public class TaskServiceImpl implements TaskService {
         MarkStudentVo markStudent = markStudentService.getMarkStudentVoByStudentId(studentId);
         Task task = new Task();
         if (markStudent != null) {
+            task.setExamId(markStudent.getExamId());
             task.setStudentId(markStudent.getId());
             task.setSecretNumber(markStudent.getSecretNumber());
             task.setStudentCode(markStudent.getStudentCode());

+ 19 - 1
teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml

@@ -177,7 +177,7 @@
         ORDER BY t.id desc
     </select>
     <select id="getCourseCount" resultType="java.lang.Integer">
-        select count(distinct mp.course_code) from mark_paper mp left join sys_user su on mp.user_id = su.id
+        select count(distinct mp.course_id) from mark_paper mp left join sys_user su on mp.user_id = su.id
         <where>
             and mp.exam_id = #{examId} AND mp.status = #{status}
             <if test="courseId != null">
@@ -270,4 +270,22 @@
         </if>
         ORDER BY t.id desc
     </select>
+    <select id="findMarkPaperListByExamId" resultType="com.qmth.teachcloud.mark.entity.MarkPaper">
+        SELECT
+            mp.id,
+            mp.exam_id AS examId,
+            mp.course_id AS courseId,
+            bc.code AS courseCode,
+            bc.name AS courseName,
+            mp.paper_number AS paperNumber
+        FROM
+            mark_paper mp
+                LEFT JOIN
+            basic_course bc ON mp.course_id = bc.id
+        <where>
+            <if test="examId != ''">
+                AND mp.exam_id = #{examId}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 6 - 4
teachcloud-mark/src/main/resources/mapper/ScanOmrTaskMapper.xml

@@ -33,7 +33,7 @@
 	</select>
 	
 	<select id="listByExamIdAndStatusAndUserId" resultType="com.qmth.teachcloud.mark.dto.ScanStudentDto">
-		select 
+		select
 			s.id studentId,
 			bes.student_name,
 			s.student_code
@@ -56,9 +56,10 @@
 					and exists (select 1 from mark_paper mp where s.exam_id = mp.exam_id and s.course_paper_id = mp.course_paper_id and s.paper_type = mp.paper_type and mp.status = #{markPaperStatus})
 					and exists(select 1
 						from scan_omr_task t
-						where s.id = t.student_id
+						where t.exam_id = #{examId}
 						and t.status=#{status}
-						<if test="dpr != null">
+						and s.id = t.student_id
+				<if test="dpr != null">
 							<if test="dpr.requestUserId != null">
 								AND s.create_id = #{dpr.requestUserId}
 							</if>
@@ -90,8 +91,9 @@
 			and exists (select 1 from mark_paper mp where s.exam_id = mp.exam_id and s.course_paper_id = mp.course_paper_id and s.paper_type = mp.paper_type and mp.status = #{markPaperStatus})
 			and exists(select 1
 			from scan_omr_task t
-			where s.id = t.student_id
+			where t.exam_id = #{examId}
 			and t.status=#{status}
+			and s.id = t.student_id
 			<if test="dpr != null">
 				<if test="dpr.requestUserId != null">
 					AND s.create_id = #{dpr.requestUserId}

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

@@ -154,7 +154,7 @@ public class JobServiceImpl implements JobService {
         log.info("开始同步数据:" + DateDisposeUtils.dateTimeNow(DateDisposeUtils.YYYY_MM_DD_HH_MM_SS));
         // 结束阅卷的课程,不同步,3.3.0版本更新前的历史数据,统一不同步
         long startTime = DateDisposeUtils.parseDate("2024-04-22 00:00:00").getTime();
-        List<ExamDetailCourseInitMarkDto> examDetailCourseInitMarkDtoList = examDetailService.listPrintFinishExamDetailCourse(ExamDetailStatusEnum.FINISH.name(), startTime, MarkPaperStatus.FINISH.name());
+        List<ExamDetailCourseInitMarkDto> examDetailCourseInitMarkDtoList = examDetailService.listPrintFinishExamDetailCourse(ExamDetailStatusEnum.FINISH.name(), startTime);
         for (ExamDetailCourseInitMarkDto dto : examDetailCourseInitMarkDtoList) {
             for (String paperType : dto.getPaperType().split(",")) {
                 try {

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

@@ -117,7 +117,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     if (markStudent != null) {
                         continue;
                     }
-                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), paperType, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), dto.getExamStartTime(), dto.getExamEndTime(), dto.getCreateId());
+                    MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), examStudent.getBasicStudentId(), dto.getCourseId(), dto.getPaperNumber(), dto.getCoursePaperId(), paperType, examStudent.getStudentCode(), initExamDetailDto.getPackageCode(), initExamDetailDto.getExamPlace(), initExamDetailDto.getExamRoom(), initExamDetailDto.getExamStartTime(), initExamDetailDto.getExamEndTime(), dto.getCreateId());
                     if (student.getSecretNumber() == null) {
                         student.randomSecretNumber();
                         while (secretNumberSet.contains(student.getSecretNumber())