Browse Source

3.3.0 fix

xiaofei 1 year ago
parent
commit
a26a8e9504
20 changed files with 323 additions and 119 deletions
  1. 6 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  2. 7 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  3. 1 0
      distributed-print-business/src/main/resources/db/delete-data.sql
  4. 14 1
      distributed-print/install/mysql/init/teachcloud_db.sql
  5. 1 13
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkPaper.java
  6. 130 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkPaperPackage.java
  7. 1 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java
  8. 19 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperPackageMapper.java
  9. 22 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperPackageService.java
  10. 2 7
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java
  11. 28 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperPackageServiceImpl.java
  12. 12 26
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  13. 3 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  14. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanConditionServiceImpl.java
  15. 8 8
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanPackageServiceImpl.java
  16. 1 29
      teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml
  17. 41 0
      teachcloud-mark/src/main/resources/mapper/MarkPaperPackageMapper.xml
  18. 7 3
      teachcloud-mark/src/main/resources/mapper/ScanPackageMapper.xml
  19. 2 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/TeachcloudTaskApplication.java
  20. 17 12
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

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

@@ -221,7 +221,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
      * @param examPrintPlan        印刷计划
      * @param examPrintPlan        印刷计划
      * @param examDetail           考场对象
      * @param examDetail           考场对象
      * @param sysUser              当前用户
      * @param sysUser              当前用户
-     * @param paperTypeParam       试卷类型
+     * @param specifyPaperType       试卷类型
      * @param basicAttachmentList  附件集合
      * @param basicAttachmentList  附件集合
      * @param attachmentIds
      * @param attachmentIds
      * @param fileTempList
      * @param fileTempList
@@ -232,11 +232,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                                                     ExamPrintPlan examPrintPlan,
                                                     ExamPrintPlan examPrintPlan,
                                                     ExamDetail examDetail,
                                                     ExamDetail examDetail,
                                                     SysUser sysUser,
                                                     SysUser sysUser,
-                                                    String paperTypeParam,
+                                                    String specifyPaperType,
                                                     List<BasicAttachment> basicAttachmentList,
                                                     List<BasicAttachment> basicAttachmentList,
                                                     Set<Long> attachmentIds,
                                                     Set<Long> attachmentIds,
                                                     List<File> fileTempList,
                                                     List<File> fileTempList,
-                                                    List<PdfDto>... list
+                                                    List<PdfDto> ...list
     ) throws Exception {
     ) throws Exception {
         for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
         for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
             List<PdfDto> studentPaperPdfList = new ArrayList<>();//所有试卷
             List<PdfDto> studentPaperPdfList = new ArrayList<>();//所有试卷
@@ -287,15 +287,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
 
             //试卷编号本考场使用卷型key
             //试卷编号本考场使用卷型key
             String key = getPaperTypeKey(examDetail.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime());
             String key = getPaperTypeKey(examDetail.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime());
-
             //抽取卷型
             //抽取卷型
-            String paperType;
-            if (Objects.nonNull(paperTypeParam)) {
-                paperType = paperTypeParam;
-                CreatePdfCacheUtil.setPaperType(key, paperType);
-            } else {
-                paperType = createPdfUtil.getPaperType(examPrintPlan.getDrawRule(), examTaskDetail, key);
-            }
+            String paperType = createPdfUtil.getPaperType(examPrintPlan.getDrawRule(), examTaskDetail, key, specifyPaperType);
             //查询考生
             //查询考生
             QueryWrapper<ExamStudent> examStudentQueryWrapper = new QueryWrapper<>();
             QueryWrapper<ExamStudent> examStudentQueryWrapper = new QueryWrapper<>();
             examStudentQueryWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourse.getId());
             examStudentQueryWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourse.getId());
@@ -520,7 +513,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         SysUser sysUser = (SysUser) map.get(SystemConstant.USER);
         SysUser sysUser = (SysUser) map.get(SystemConstant.USER);
         Long examDetailId = tbTask.getEntityId();
         Long examDetailId = tbTask.getEntityId();
         try {
         try {
-            String paperTypeParam = Objects.nonNull(map.get("paperType")) ? (String) map.get("paperType") : null;
+            String specifyPaperType = Objects.nonNull(map.get("paperType")) ? (String) map.get("paperType") : null;
 
 
             //查询printPlan
             //查询printPlan
             ExamPrintPlan examPrintPlan = examPrintPlanService.getById(tbTask.getPrintPlanId());
             ExamPrintPlan examPrintPlan = examPrintPlanService.getById(tbTask.getPrintPlanId());
@@ -564,7 +557,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     examPrintPlan,
                     examPrintPlan,
                     examDetail,
                     examDetail,
                     sysUser,
                     sysUser,
-                    paperTypeParam,
+                    specifyPaperType,
                     basicAttachmentList,
                     basicAttachmentList,
                     attachmentIds,
                     attachmentIds,
                     fileTempList,
                     fileTempList,

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

@@ -1092,7 +1092,12 @@ public class CreatePdfUtil {
      * @param key
      * @param key
      * @return
      * @return
      */
      */
-    public String getPaperType(DrawRuleEnum drawRule, ExamTaskDetail examTaskDetail, String key) {
+    public String getPaperType(DrawRuleEnum drawRule, ExamTaskDetail examTaskDetail, String key, String specifyPaperType) {
+        String paperType = null;
+        if (Objects.nonNull(specifyPaperType)) {
+            CreatePdfCacheUtil.setPaperType(key, paperType);
+            return specifyPaperType;
+        }
         //抽取卷型
         //抽取卷型
         drawRule = Objects.nonNull(drawRule) ? drawRule : DrawRuleEnum.ONE;
         drawRule = Objects.nonNull(drawRule) ? drawRule : DrawRuleEnum.ONE;
         //未曝光卷型
         //未曝光卷型
@@ -1113,7 +1118,7 @@ public class CreatePdfUtil {
         }
         }
         // 单次抽取套数
         // 单次抽取套数
         int drawCount = examTaskDetail.getDrawCount().intValue();
         int drawCount = examTaskDetail.getDrawCount().intValue();
-        String paperType = null;
+
         String[] paperTypes;
         String[] paperTypes;
         boolean lock = true;
         boolean lock = true;
         for (int i = 0; i < SystemConstant.MAX_RETRY_COUNT; i++) {
         for (int i = 0; i < SystemConstant.MAX_RETRY_COUNT; i++) {

+ 1 - 0
distributed-print-business/src/main/resources/db/delete-data.sql

@@ -15,6 +15,7 @@ delete from mark_header_subjective_score where exam_id in (select id from basic_
 delete from mark_header_tag where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_header_tag where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_header_track where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_header_track where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_paper where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_paper where exam_id in (select id from basic_exam where school_id = #{schoolId});
+delete from mark_paper_package where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_problem_history where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_problem_history where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_question where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_question where exam_id in (select id from basic_exam where school_id = #{schoolId});
 delete from mark_special_tag where task_id in (select id from mark_task where exam_id in (select id from basic_exam where school_id = #{schoolId}));
 delete from mark_special_tag where task_id in (select id from mark_task where exam_id in (select id from basic_exam where school_id = #{schoolId}));

+ 14 - 1
distributed-print/install/mysql/init/teachcloud_db.sql

@@ -1407,12 +1407,25 @@ CREATE TABLE IF NOT EXISTS `mark_paper` (
         `group_status` tinyint DEFAULT '0' COMMENT '评卷分组是否提交',
         `group_status` tinyint DEFAULT '0' COMMENT '评卷分组是否提交',
         `open_mark_class` tinyint DEFAULT '0' COMMENT '是否开启分班阅',
         `open_mark_class` tinyint DEFAULT '0' COMMENT '是否开启分班阅',
         `status` varchar(10) DEFAULT NULL COMMENT '评卷状态',
         `status` varchar(10) DEFAULT NULL COMMENT '评卷状态',
-        `package_code` mediumtext COMMENT '签到表编号',
         `user_id` bigint DEFAULT NULL COMMENT '命题老师ID',
         `user_id` bigint DEFAULT NULL COMMENT '命题老师ID',
         `paper_type` varchar(10) DEFAULT NULL COMMENT '试卷类型',
         `paper_type` varchar(10) DEFAULT NULL COMMENT '试卷类型',
         PRIMARY KEY (`id`) USING BTREE
         PRIMARY KEY (`id`) USING BTREE
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试科目表';
         ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试科目表';
 
 
+-- ----------------------------
+-- Table structure for mark_paper_package
+-- ----------------------------
+CREATE TABLE `mark_paper_package` (
+        `exam_id` BIGINT(20) NOT NULL COMMENT '考试ID',
+        `course_code` varchar(32) NOT NULL COMMENT '课程代码',
+        `course_name` varchar(100) NOT NULL COMMENT '科目名称',
+        `paper_number` VARCHAR(50) NULL COMMENT '试卷编号',
+        `course_paper_id` VARCHAR(50) NOT NULL COMMENT '课程试卷号',
+        `paper_type` varchar(10) NOT NULL COMMENT '试卷类型',
+        `package_code` VARCHAR(10) NOT NULL COMMENT '卷袋号',
+        PRIMARY KEY (`exam_id`, `course_paper_id`, `paper_type`, `package_code`));
+
+
 -- ----------------------------
 -- ----------------------------
 -- Table structure for mark_problem_history
 -- Table structure for mark_problem_history
 -- ----------------------------
 -- ----------------------------

+ 1 - 13
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkPaper.java

@@ -47,9 +47,6 @@ public class MarkPaper implements Serializable {
     @ApiModelProperty(value = "试卷编号(交互)")
     @ApiModelProperty(value = "试卷编号(交互)")
     private String coursePaperId;
     private String coursePaperId;
 
 
-    @ApiModelProperty(value = "签到表编号")
-    private String packageCode;
-
     @ApiModelProperty(value = "客观题满分")
     @ApiModelProperty(value = "客观题满分")
     private Double objectiveScore;
     private Double objectiveScore;
 
 
@@ -125,14 +122,13 @@ public class MarkPaper implements Serializable {
     public MarkPaper() {
     public MarkPaper() {
     }
     }
 
 
-    public MarkPaper(Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String packageCode, Long userId, String paperType) {
+    public MarkPaper(Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, Long userId, String paperType) {
         this.id = SystemConstant.getDbUuid();
         this.id = SystemConstant.getDbUuid();
         this.examId = examId;
         this.examId = examId;
         this.courseCode = courseCode;
         this.courseCode = courseCode;
         this.courseName = courseName;
         this.courseName = courseName;
         this.paperNumber = paperNumber;
         this.paperNumber = paperNumber;
         this.coursePaperId = coursePaperId;
         this.coursePaperId = coursePaperId;
-        this.packageCode = packageCode;
         this.userId = userId;
         this.userId = userId;
         this.paperType = paperType;
         this.paperType = paperType;
         this.markMode = MarkMode.TRACK;
         this.markMode = MarkMode.TRACK;
@@ -199,14 +195,6 @@ public class MarkPaper implements Serializable {
         this.coursePaperId = coursePaperId;
         this.coursePaperId = coursePaperId;
     }
     }
 
 
-    public String getPackageCode() {
-        return packageCode;
-    }
-
-    public void setPackageCode(String packageCode) {
-        this.packageCode = packageCode;
-    }
-
     public Double getObjectiveScore() {
     public Double getObjectiveScore() {
         return objectiveScore;
         return objectiveScore;
     }
     }

+ 130 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkPaperPackage.java

@@ -0,0 +1,130 @@
+package com.qmth.teachcloud.mark.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 考试科目卷袋表
+ * </p>
+ *
+ * @author xf
+ * @since 2023-11-30
+ */
+@TableName("mark_paper_package")
+@ApiModel(value = "MarkPaperPackage对象", description = "考试科目卷袋表")
+public class MarkPaperPackage implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "考试ID")
+    @MppMultiId(value = "exam_id")
+    private Long examId;
+
+    @ApiModelProperty(value = "课程代码")
+    private String courseCode;
+
+    @ApiModelProperty(value = "科目名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "试卷编号(显示)")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "试卷编号(交互)")
+    @MppMultiId(value = "course_paper_id")
+    private String coursePaperId;
+
+    @ApiModelProperty(value = "试卷类型")
+    @MppMultiId(value = "paper_type")
+    private String paperType;
+
+    @ApiModelProperty(value = "签到表编号")
+    @MppMultiId(value = "package_code")
+    private String packageCode;
+
+    public MarkPaperPackage() {
+    }
+
+    public MarkPaperPackage(Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String paperType, String packageCode) {
+        this.examId = examId;
+        this.courseCode = courseCode;
+        this.courseName = courseName;
+        this.paperNumber = paperNumber;
+        this.coursePaperId = coursePaperId;
+        this.paperType = paperType;
+        this.packageCode = packageCode;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getCoursePaperId() {
+        return coursePaperId;
+    }
+
+    public void setCoursePaperId(String coursePaperId) {
+        this.coursePaperId = coursePaperId;
+    }
+
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+
+    @Override
+    public String toString() {
+        return "MarkPaper{" +
+                "examId=" + examId +
+                ", courseCode=" + courseCode +
+                ", courseName=" + courseName +
+                ", paperNumber=" + paperNumber +
+                "}";
+    }
+}

+ 1 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java

@@ -39,7 +39,5 @@ public interface MarkPaperMapper extends BaseMapper<MarkPaper> {
     int getCourseCount(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("dpr") DataPermissionRule dpr);
     int getCourseCount(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("dpr") DataPermissionRule dpr);
     int getPaperNumberCount(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("dpr") DataPermissionRule dpr);
     int getPaperNumberCount(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("dpr") DataPermissionRule dpr);
 
 
-    List<MarkPaper> listMarkPaper(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("dpr") DataPermissionRule dpr);
-
-    List<MarkPaper> listByExamAndPackageCode(@Param("examId") Long examId, @Param("packageCode") String packageCode, @Param("dpr") DataPermissionRule dpr);
+    List<MarkPaper> listByExamId(@Param("examId") Long examId, @Param("dpr") DataPermissionRule dpr);
 }
 }

+ 19 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperPackageMapper.java

@@ -0,0 +1,19 @@
+package com.qmth.teachcloud.mark.mapper;
+
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.mark.entity.MarkPaperPackage;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 考试科目卷袋表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2023-11-30
+ */
+public interface MarkPaperPackageMapper extends MppBaseMapper<MarkPaperPackage> {
+
+    int getPackageCountByExamId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("dpr") DataPermissionRule dpr);
+}

+ 22 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperPackageService.java

@@ -0,0 +1,22 @@
+package com.qmth.teachcloud.mark.service;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.mark.entity.MarkPaperPackage;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 考试科目卷袋表 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2023-11-30
+ */
+public interface MarkPaperPackageService extends IMppService<MarkPaperPackage> {
+
+    List<MarkPaperPackage> listByExamIdAndPackageCode(Long examId, String packageCode);
+
+    int getPackageCountByExamId(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr);
+}

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

@@ -27,6 +27,7 @@ public interface MarkPaperService extends IService<MarkPaper> {
     IPage<MarkSettingDto> listPaperSetting(Long examId, String courseCode, String paperNumber, Boolean groupStatus, Integer pageNumber, Integer pageSize);
     IPage<MarkSettingDto> listPaperSetting(Long examId, String courseCode, String paperNumber, Boolean groupStatus, Integer pageNumber, Integer pageSize);
 
 
     MarkPaper getByExamIdAndPaperNumber(Long examId, String paperNumber);
     MarkPaper getByExamIdAndPaperNumber(Long examId, String paperNumber);
+    MarkPaper getByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType);
 
 
     void savePaperSetting(MarkPaper markPaper);
     void savePaperSetting(MarkPaper markPaper);
 
 
@@ -47,7 +48,7 @@ public interface MarkPaperService extends IService<MarkPaper> {
 
 
 	MarkPaper getByExamIdAndCoursePaperId(Long examId, String coursePaperId);
 	MarkPaper getByExamIdAndCoursePaperId(Long examId, String coursePaperId);
 
 
-	List<MarkPaper> listByExamAndPackage(Long examId, String packageCode, DataPermissionRule dpr);
+	List<MarkPaper> listByExamId(Long examId, DataPermissionRule dpr);
 
 
     void updateGroupStatusByExamIdAndPaperNumber(boolean groupStatus, Long examId, String paperNumber);
     void updateGroupStatusByExamIdAndPaperNumber(boolean groupStatus, Long examId, String paperNumber);
 
 
@@ -59,11 +60,5 @@ public interface MarkPaperService extends IService<MarkPaper> {
 
 
 	IPage<ArchiveScoreVo> scoreList(ArchiveScoreQuery query);
 	IPage<ArchiveScoreVo> scoreList(ArchiveScoreQuery query);
 
 
-    int getPackageCountByExamId(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr);
-
-    List<MarkPaper> listByExamId(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr);
-
-    List<MarkPaper> listMarkPaper(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr);
-
     void deleteByExamIdAndPaperNumber(Long examId, String paperNumber);
     void deleteByExamIdAndPaperNumber(Long examId, String paperNumber);
 }
 }

+ 28 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperPackageServiceImpl.java

@@ -0,0 +1,28 @@
+package com.qmth.teachcloud.mark.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
+import com.qmth.teachcloud.mark.entity.MarkPaperPackage;
+import com.qmth.teachcloud.mark.mapper.MarkPaperPackageMapper;
+import com.qmth.teachcloud.mark.service.MarkPaperPackageService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class MarkPaperPackageServiceImpl extends MppServiceImpl<MarkPaperPackageMapper, MarkPaperPackage> implements MarkPaperPackageService {
+    @Override
+    public List<MarkPaperPackage> listByExamIdAndPackageCode(Long examId, String packageCode) {
+        QueryWrapper<MarkPaperPackage> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkPaperPackage::getExamId, examId)
+                .eq(MarkPaperPackage::getPackageCode, packageCode);
+        return this.list(queryWrapper);
+    }
+
+    @Override
+    public int getPackageCountByExamId(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr) {
+        return this.baseMapper.getPackageCountByExamId(examId, courseCode, coursePaperId, dpr);
+    }
+}

+ 12 - 26
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -34,10 +34,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -87,6 +84,15 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         return this.getOne(queryWrapper);
         return this.getOne(queryWrapper);
     }
     }
 
 
+    @Override
+    public MarkPaper getByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType) {
+        QueryWrapper<MarkPaper> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkPaper::getExamId, examId)
+                .eq(MarkPaper::getPaperNumber, paperNumber)
+                .eq(MarkPaper::getPaperType, paperType);
+        return this.getOne(queryWrapper);
+    }
+
     @Transactional
     @Transactional
     @Override
     @Override
     public void savePaperSetting(MarkPaper markPaper) {
     public void savePaperSetting(MarkPaper markPaper) {
@@ -227,8 +233,8 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
     }
     }
 
 
     @Override
     @Override
-    public List<MarkPaper> listByExamAndPackage(Long examId, String packageCode, DataPermissionRule dpr) {
-        return this.baseMapper.listByExamAndPackageCode(examId, packageCode, dpr);
+    public List<MarkPaper> listByExamId(Long examId, DataPermissionRule dpr) {
+        return this.baseMapper.listByExamId(examId, dpr);
     }
     }
 
 
     @Override
     @Override
@@ -297,26 +303,6 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         return ret;
         return ret;
     }
     }
 
 
-    @Override
-    public int getPackageCountByExamId(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr) {
-        List<MarkPaper> markPaperList = this.listByExamId(examId, courseCode, coursePaperId, dpr);
-        List<String> packageCodes = new ArrayList<>();
-        for (MarkPaper markPaper : markPaperList) {
-            packageCodes.addAll(Arrays.asList(markPaper.getPackageCode().split(",")));
-        }
-        return packageCodes.size();
-    }
-
-    @Override
-    public List<MarkPaper> listByExamId(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr) {
-        return this.listMarkPaper(examId, courseCode, coursePaperId, dpr);
-    }
-
-    @Override
-    public List<MarkPaper> listMarkPaper(Long examId, String courseCode, String coursePaperId, DataPermissionRule dpr) {
-        return this.baseMapper.listMarkPaper(examId, courseCode, coursePaperId, dpr);
-    }
-
     @Override
     @Override
     public void deleteByExamIdAndPaperNumber(Long examId, String paperNumber) {
     public void deleteByExamIdAndPaperNumber(Long examId, String paperNumber) {
         UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
         UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();

+ 3 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -80,6 +80,8 @@ import java.util.stream.Collectors;
 public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkStudent> implements MarkStudentService {
 public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkStudent> implements MarkStudentService {
     @Autowired
     @Autowired
     private MarkPaperService markPaperService;
     private MarkPaperService markPaperService;
+    @Resource
+    private MarkPaperPackageService markPaperPackageService;
     @Autowired
     @Autowired
     private ScanPackageService scanPackageService;
     private ScanPackageService scanPackageService;
     @Autowired
     @Autowired
@@ -157,7 +159,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         vo.getAnswerScan().setPaperNumberCount(markPaperService.getPaperNumberCount(exam.getId(), courseCode, coursePaperId, dpr));
         vo.getAnswerScan().setPaperNumberCount(markPaperService.getPaperNumberCount(exam.getId(), courseCode, coursePaperId, dpr));
         vo.getAnswerScan().setTotalCount(getCount(exam.getId(), null, courseCode, coursePaperId, dpr));
         vo.getAnswerScan().setTotalCount(getCount(exam.getId(), null, courseCode, coursePaperId, dpr));
         vo.getAnswerScan().setScannedCount(getCount(exam.getId(), ScanStatus.SCANNED, courseCode, coursePaperId, dpr));
         vo.getAnswerScan().setScannedCount(getCount(exam.getId(), ScanStatus.SCANNED, courseCode, coursePaperId, dpr));
-        vo.getPackageScan().setTotalCount(markPaperService.getPackageCountByExamId(exam.getId(), courseCode, coursePaperId, dpr));
+        vo.getPackageScan().setTotalCount(markPaperPackageService.getPackageCountByExamId(exam.getId(), courseCode, coursePaperId, dpr));
         vo.getPackageScan().setScannedCount(scanPackageService.getCount(exam.getId(), courseCode, coursePaperId, dpr));
         vo.getPackageScan().setScannedCount(scanPackageService.getCount(exam.getId(), courseCode, coursePaperId, dpr));
         return vo;
         return vo;
     }
     }

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

@@ -74,7 +74,7 @@ public class ScanConditionServiceImpl implements ScanConditionService {
     public List<CoursePaperNumberDto> scanCourseList(Long examId) {
     public List<CoursePaperNumberDto> scanCourseList(Long examId) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
-        List<MarkPaper> markPaperList = markPaperService.listByExamAndPackage(examId, null, dpr);
+        List<MarkPaper> markPaperList = markPaperService.listByExamId(examId, dpr);
         Map<String, List<MarkPaper>> map = markPaperList.stream().collect(Collectors.groupingBy(m -> m.getCourseCode()));
         Map<String, List<MarkPaper>> map = markPaperList.stream().collect(Collectors.groupingBy(m -> m.getCourseCode()));
         List<CoursePaperNumberDto> coursePaperNumberDtoList = new ArrayList<>();
         List<CoursePaperNumberDto> coursePaperNumberDtoList = new ArrayList<>();
         for (Map.Entry<String, List<MarkPaper>> entry : map.entrySet()) {
         for (Map.Entry<String, List<MarkPaper>> entry : map.entrySet()) {

+ 8 - 8
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanPackageServiceImpl.java

@@ -17,12 +17,10 @@ import com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageFindVo;
 import com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageQuery;
 import com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageQuery;
 import com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageVo;
 import com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageVo;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.qmth.teachcloud.mark.entity.MarkPaperPackage;
 import com.qmth.teachcloud.mark.entity.ScanPackage;
 import com.qmth.teachcloud.mark.entity.ScanPackage;
 import com.qmth.teachcloud.mark.mapper.ScanPackageMapper;
 import com.qmth.teachcloud.mark.mapper.ScanPackageMapper;
-import com.qmth.teachcloud.mark.service.MarkFileService;
-import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.ScanFilePropertyService;
-import com.qmth.teachcloud.mark.service.ScanPackageService;
+import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,6 +52,8 @@ public class ScanPackageServiceImpl extends ServiceImpl<ScanPackageMapper, ScanP
     @Autowired
     @Autowired
     private MarkPaperService markPaperService;
     private MarkPaperService markPaperService;
     @Resource
     @Resource
+    private MarkPaperPackageService markPaperPackageService;
+    @Resource
     private TeachcloudCommonService teachcloudCommonService;
     private TeachcloudCommonService teachcloudCommonService;
     @Resource
     @Resource
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
@@ -81,11 +81,11 @@ public class ScanPackageServiceImpl extends ServiceImpl<ScanPackageMapper, ScanP
     public SheetUploadVo imageUpload(Long examId, String packageCode, Integer packageNo, MultipartFile file,
     public SheetUploadVo imageUpload(Long examId, String packageCode, Integer packageNo, MultipartFile file,
                                      String md5) {
                                      String md5) {
         SheetUploadVo vo = null;
         SheetUploadVo vo = null;
-        List<MarkPaper> mps = markPaperService.listByExamAndPackage(examId, packageCode, null);
+        List<MarkPaperPackage> mps = markPaperPackageService.listByExamIdAndPackageCode(examId, packageCode);
         if (CollectionUtils.isEmpty(mps)) {
         if (CollectionUtils.isEmpty(mps)) {
             throw new ParameterException("未找到科目信息");
             throw new ParameterException("未找到科目信息");
         }
         }
-        for (MarkPaper mp : mps) {
+        for (MarkPaperPackage mp : mps) {
             String coursePaperId = mp.getCoursePaperId();
             String coursePaperId = mp.getCoursePaperId();
             try {
             try {
                 String path = markFileService.uploadPackage(file.getInputStream(), md5, examId, coursePaperId, packageCode,
                 String path = markFileService.uploadPackage(file.getInputStream(), md5, examId, coursePaperId, packageCode,
@@ -176,9 +176,9 @@ public class ScanPackageServiceImpl extends ServiceImpl<ScanPackageMapper, ScanP
 
 
     @Override
     @Override
     public ScanPackageFindVo find(Long examId, String packageCode) {
     public ScanPackageFindVo find(Long examId, String packageCode) {
-        List<MarkPaper> markPaperList = markPaperService.listByExamAndPackage(examId, packageCode, null);
+        List<MarkPaperPackage> markPaperPackageList = markPaperPackageService.listByExamIdAndPackageCode(examId, packageCode);
         ScanPackageFindVo scanPackageFindVo = new ScanPackageFindVo();
         ScanPackageFindVo scanPackageFindVo = new ScanPackageFindVo();
-        if (CollectionUtils.isNotEmpty(markPaperList)) {
+        if (CollectionUtils.isNotEmpty(markPaperPackageList)) {
             scanPackageFindVo.setExamId(examId);
             scanPackageFindVo.setExamId(examId);
             scanPackageFindVo.setPackageCode(packageCode);
             scanPackageFindVo.setPackageCode(packageCode);
         }
         }

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

@@ -27,7 +27,6 @@
         <result column="show_object_score" property="showObjectScore" />
         <result column="show_object_score" property="showObjectScore" />
         <result column="open_mark_class" property="openMarkClass" />
         <result column="open_mark_class" property="openMarkClass" />
         <result column="status" property="status" />
         <result column="status" property="status" />
-        <result column="package_code" property="packageCode"/>
     </resultMap>
     </resultMap>
     <select id="listPaperSetting" resultType="com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto">
     <select id="listPaperSetting" resultType="com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto">
         SELECT
         SELECT
@@ -208,39 +207,12 @@
             </if>
             </if>
         </where>
         </where>
     </select>
     </select>
-    <select id="listMarkPaper" resultType="com.qmth.teachcloud.mark.entity.MarkPaper">
-        select * from mark_paper mp
-            left join sys_user su on mp.user_id = su.id
-        <where>
-            mp.exam_id = #{examId}
-            <if test="courseCode != null and courseCode != ''">
-                AND mp.course_code = #{courseCode}
-            </if>
-            <if test="coursePaperId != null and coursePaperId != ''">
-                AND mp.course_paper_id = #{coursePaperId}
-            </if>
-            <if test="dpr != null">
-                <if test="dpr.requestUserId != null">
-                    AND mp.user_id = #{dpr.requestUserId}
-                </if>
-                <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
-                    AND su.org_id IN
-                    <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
-                        #{item}
-                    </foreach>
-                </if>
-            </if>
-        </where>
-    </select>
-    <select id="listByExamAndPackageCode" resultType="com.qmth.teachcloud.mark.entity.MarkPaper">
+    <select id="listByExamId" resultType="com.qmth.teachcloud.mark.entity.MarkPaper">
         select mp.*
         select mp.*
             from mark_paper mp
             from mark_paper mp
                 left join sys_user su on mp.user_id = su.id
                 left join sys_user su on mp.user_id = su.id
             <where>
             <where>
                 mp.exam_id = #{examId}
                 mp.exam_id = #{examId}
-                <if test="packageCode != null and packageCode != ''">
-                    AND mp.package_code like concat('%', #{packageCode}, '%')
-                </if>
                 <if test="dpr != null">
                 <if test="dpr != null">
                     <if test="dpr.requestUserId != null">
                     <if test="dpr.requestUserId != null">
                         AND mp.user_id = #{dpr.requestUserId}
                         AND mp.user_id = #{dpr.requestUserId}

+ 41 - 0
teachcloud-mark/src/main/resources/mapper/MarkPaperPackageMapper.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.qmth.teachcloud.mark.mapper.MarkPaperPackageMapper">
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.qmth.teachcloud.mark.entity.MarkPaperPackage">
+        <id column="exam_id" property="examId" />
+        <id column="course_paper_id" property="coursePaperId" />
+        <id column="paper_type" property="paperType" />
+        <id column="package_code" property="packageCode" />
+        <result column="course_code" property="courseCode" />
+        <result column="course_name" property="courseName" />
+        <result column="paper_number" property="paperNumber" />
+    </resultMap>
+
+    <select id="getPackageCountByExamId" resultType="java.lang.Integer">
+        select count(1)
+        FROM mark_paper_package t
+        where t.exam_id=#{examId}
+        <if test="courseCode != null and courseCode != ''">
+            and t.course_code = #{courseCode}
+        </if>
+        <if test="coursePaperId != null and coursePaperId != ''">
+            and t.course_paper_id= #{coursePaperId}
+        </if>
+        <if test="dpr != null">
+            and exists (select 1 from mark_paper mp left join sys_user su on mp.user_id = su.id where t.exam_id = mp.exam_id
+            and t.course_paper_id = mp.course_paper_id
+            and t.paper_type = mp.paper_type
+            <if test="dpr.requestUserId != null">
+                AND mp.user_id = #{dpr.requestUserId}
+            </if>
+            <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                AND su.org_id IN
+                <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            )
+        </if>
+    </select>
+</mapper>

+ 7 - 3
teachcloud-mark/src/main/resources/mapper/ScanPackageMapper.xml

@@ -22,7 +22,7 @@
 	<select id="page"
 	<select id="page"
 		resultType="com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageVo">
 		resultType="com.qmth.teachcloud.mark.bean.scanpackage.ScanPackageVo">
 		select t.*,t.paper_number coursePaperNumber
 		select t.*,t.paper_number coursePaperNumber
-		FROM mark_paper t left join sys_user su on t.user_id = su.id
+		FROM mark_paper_package t
         where t.exam_id=#{req.examId}
         where t.exam_id=#{req.examId}
         <if test="req.courseCode != null and req.courseCode != ''">
         <if test="req.courseCode != null and req.courseCode != ''">
 			and t.course_code = #{req.courseCode}
 			and t.course_code = #{req.courseCode}
@@ -43,8 +43,11 @@
 			</if>
 			</if>
 		</if>
 		</if>
 		<if test="dpr != null">
 		<if test="dpr != null">
+          	and exists (select 1 from mark_paper mp left join sys_user su on mp.user_id = su.id where t.exam_id = mp.exam_id
+          	    and t.course_paper_id = mp.course_paper_id
+          	    and t.paper_type = mp.paper_type
 			<if test="dpr.requestUserId != null">
 			<if test="dpr.requestUserId != null">
-				AND t.user_id = #{dpr.requestUserId}
+				AND mp.user_id = #{dpr.requestUserId}
 			</if>
 			</if>
 			<if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
 			<if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
 				AND su.org_id IN
 				AND su.org_id IN
@@ -52,8 +55,9 @@
 					#{item}
 					#{item}
 				</foreach>
 				</foreach>
 			</if>
 			</if>
+			)
 		</if>
 		</if>
-		ORDER BY t.id
+		ORDER BY t.package_code
 	</select>
 	</select>
     <select id="countPackageCode" resultType="java.lang.Integer">
     <select id="countPackageCode" resultType="java.lang.Integer">
 		SELECT
 		SELECT

+ 2 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/TeachcloudTaskApplication.java

@@ -1,5 +1,6 @@
 package com.qmth.teachcloud.task;
 package com.qmth.teachcloud.task;
 
 
+import com.github.jeffreyning.mybatisplus.conf.EnableMPP;
 import com.qmth.teachcloud.common.threadPool.MyThreadPool;
 import com.qmth.teachcloud.common.threadPool.MyThreadPool;
 import org.activiti.spring.boot.SecurityAutoConfiguration;
 import org.activiti.spring.boot.SecurityAutoConfiguration;
 import org.mybatis.spring.annotation.MapperScan;
 import org.mybatis.spring.annotation.MapperScan;
@@ -13,6 +14,7 @@ import org.springframework.core.task.TaskExecutor;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
+@EnableMPP
 @SpringBootApplication(scanBasePackages = "com.qmth.*", exclude = {SecurityAutoConfiguration.class})
 @SpringBootApplication(scanBasePackages = "com.qmth.*", exclude = {SecurityAutoConfiguration.class})
 @MapperScan({"com.qmth.distributed.print.business.mapper","com.qmth.teachcloud.report.business.mapper","com.qmth.teachcloud.common.mapper", "com.qmth.teachcloud.mark.mapper"})
 @MapperScan({"com.qmth.distributed.print.business.mapper","com.qmth.teachcloud.report.business.mapper","com.qmth.teachcloud.common.mapper", "com.qmth.teachcloud.mark.mapper"})
 //主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中
 //主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中,做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中

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

@@ -1,13 +1,15 @@
 package com.qmth.teachcloud.task.service.impl;
 package com.qmth.teachcloud.task.service.impl;
 
 
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
-import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.service.ExamCardService;
+import com.qmth.distributed.print.business.service.ExamDetailService;
+import com.qmth.distributed.print.business.service.ExamStudentService;
+import com.qmth.distributed.print.business.service.ExamTaskDetailService;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
@@ -17,6 +19,7 @@ import com.qmth.teachcloud.common.util.ExamTaskUtil;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.Struct;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.Struct;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.qmth.teachcloud.mark.entity.MarkPaperPackage;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
 import com.qmth.teachcloud.mark.entity.ScanAnswerCard;
 import com.qmth.teachcloud.mark.enums.CardSource;
 import com.qmth.teachcloud.mark.enums.CardSource;
@@ -38,7 +41,10 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 
 @Service
 @Service
 public class PrintFinishServiceImpl implements PrintFinishService {
 public class PrintFinishServiceImpl implements PrintFinishService {
@@ -54,7 +60,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
     @Resource
     @Resource
     private ScanAnswerCardService scanAnswerCardService;
     private ScanAnswerCardService scanAnswerCardService;
     @Resource
     @Resource
-    private ExamDetailCourseService examDetailCourseService;
+    private MarkPaperPackageService markPaperPackageService;
     @Resource
     @Resource
     private ExamDetailService examDetailService;
     private ExamDetailService examDetailService;
     @Resource
     @Resource
@@ -77,20 +83,19 @@ public class PrintFinishServiceImpl implements PrintFinishService {
      * @param paperNumber
      * @param paperNumber
      * @param packageCode
      * @param packageCode
      */
      */
+    @Transactional
     @Override
     @Override
     public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String packageCode, Long userId, String paperType) {
     public void insertMarkPaper(Long examId, String courseCode, String courseName, String paperNumber, String coursePaperId, String packageCode, Long userId, String paperType) {
         try {
         try {
-            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
             if (markPaper != null) {
             if (markPaper != null) {
-                if (packageCode.equals(markPaper.getPackageCode())) {
-                    return;
+                List<MarkPaperPackage> markPaperPackages = new ArrayList<>();
+                for (String code : packageCode.split(",")) {
+                    markPaperPackages.add(new MarkPaperPackage(examId, courseCode, courseName, paperNumber, coursePaperId, paperType, code));
                 }
                 }
-                UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.lambda().set(MarkPaper::getPackageCode, packageCode)
-                        .eq(MarkPaper::getId, markPaper.getId());
-                markPaperService.update(updateWrapper);
+                markPaperPackageService.saveOrUpdateBatchByMultiId(markPaperPackages);
             } else {
             } else {
-                MarkPaper insertMarkPaper = new MarkPaper(examId, courseCode, courseName, paperNumber, coursePaperId, packageCode, userId, paperType);
+                MarkPaper insertMarkPaper = new MarkPaper(examId, courseCode, courseName, paperNumber, coursePaperId, userId, paperType);
                 markPaperService.save(insertMarkPaper);
                 markPaperService.save(insertMarkPaper);
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {