Переглянути джерело

3.3.1 增加3.2.8补考需求

xiaofei 1 рік тому
батько
коміт
c2e232896d
24 змінених файлів з 592 додано та 33 видалено
  1. 140 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/MakeupExamTaskDto.java
  2. 71 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/MakeupExamTaskParam.java
  3. 28 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/MakeupExamTaskTotalParam.java
  4. 13 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/PrintPlanParams.java
  5. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/PrintPlanResult.java
  6. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPrintPlan.java
  7. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  8. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  9. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ConditionService.java
  10. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  11. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  12. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  13. 5 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ConditionServiceImpl.java
  14. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  15. 77 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  16. 54 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  17. 23 19
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  18. 7 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  19. 18 0
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  20. 1 0
      distributed-print-business/src/main/resources/mapper/ExamPrintPlanMapper.xml
  21. 70 0
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  22. 3 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ConditionController.java
  23. 34 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  24. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExamCategoryEnum.java

+ 140 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/MakeupExamTaskDto.java

@@ -0,0 +1,140 @@
+package com.qmth.distributed.print.business.bean.dto;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+
+/**
+ * 补考任务
+ */
+public class MakeupExamTaskDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long printPlanId;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examDetailId;
+    private String courseCode;
+    private String courseName;
+    private String paperNumber;
+    private String loginName;
+    private String realName;
+    private String unexposedPaperType;
+    private String exposedPaperType;
+    private ExamDetailStatusEnum status;
+    private String statusDisplay;
+    private Integer totalSubjects;
+    private Integer backupCount;
+
+    public Long getPrintPlanId() {
+        return printPlanId;
+    }
+
+    public void setPrintPlanId(Long printPlanId) {
+        this.printPlanId = printPlanId;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public Long getExamDetailId() {
+        return examDetailId;
+    }
+
+    public void setExamDetailId(Long examDetailId) {
+        this.examDetailId = examDetailId;
+    }
+
+    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 getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getUnexposedPaperType() {
+        return unexposedPaperType;
+    }
+
+    public void setUnexposedPaperType(String unexposedPaperType) {
+        this.unexposedPaperType = unexposedPaperType;
+    }
+
+    public String getExposedPaperType() {
+        return exposedPaperType;
+    }
+
+    public void setExposedPaperType(String exposedPaperType) {
+        this.exposedPaperType = exposedPaperType;
+    }
+
+    public ExamDetailStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(ExamDetailStatusEnum status) {
+        this.status = status;
+    }
+
+    public String getStatusDisplay() {
+        return this.status != null ? status.getName() : statusDisplay;
+    }
+
+    public void setStatusDisplay(String statusDisplay) {
+        this.statusDisplay = statusDisplay;
+    }
+
+    public Integer getTotalSubjects() {
+        return totalSubjects;
+    }
+
+    public void setTotalSubjects(Integer totalSubjects) {
+        this.totalSubjects = totalSubjects;
+    }
+
+    public Integer getBackupCount() {
+        return backupCount;
+    }
+
+    public void setBackupCount(Integer backupCount) {
+        this.backupCount = backupCount;
+    }
+}

+ 71 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/MakeupExamTaskParam.java

@@ -0,0 +1,71 @@
+package com.qmth.distributed.print.business.bean.params;
+
+/**
+ * 补考任务提交
+ */
+public class MakeupExamTaskParam {
+
+    private Long examDetailId;
+    private Long examId;
+    private String courseCode;
+    private String courseName;
+    private String paperNumber;
+    private Integer totalSubjects;
+    private Double backupCount;
+
+    public Long getExamDetailId() {
+        return examDetailId;
+    }
+
+    public void setExamDetailId(Long examDetailId) {
+        this.examDetailId = examDetailId;
+    }
+
+    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 Integer getTotalSubjects() {
+        return totalSubjects;
+    }
+
+    public void setTotalSubjects(Integer totalSubjects) {
+        this.totalSubjects = totalSubjects;
+    }
+
+    public Double getBackupCount() {
+        return backupCount;
+    }
+
+    public void setBackupCount(Double backupCount) {
+        this.backupCount = backupCount;
+    }
+}

+ 28 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/MakeupExamTaskTotalParam.java

@@ -0,0 +1,28 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import java.util.List;
+
+/**
+ * 补考任务提交
+ */
+public class MakeupExamTaskTotalParam {
+
+    private Long printPlanId;
+    private List<MakeupExamTaskParam> list;
+
+    public Long getPrintPlanId() {
+        return printPlanId;
+    }
+
+    public void setPrintPlanId(Long printPlanId) {
+        this.printPlanId = printPlanId;
+    }
+
+    public List<MakeupExamTaskParam> getList() {
+        return list;
+    }
+
+    public void setList(List<MakeupExamTaskParam> list) {
+        this.list = list;
+    }
+}

+ 13 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/PrintPlanParams.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.teachcloud.common.annotation.EditKey;
 import com.qmth.teachcloud.common.annotation.EditKey;
 import com.qmth.teachcloud.common.enums.DrawRuleEnum;
 import com.qmth.teachcloud.common.enums.DrawRuleEnum;
+import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Range;
 import org.hibernate.validator.constraints.Range;
@@ -41,6 +42,10 @@ public class PrintPlanParams {
     @Length(min = 1,message = "请输入印刷计划名称")
     @Length(min = 1,message = "请输入印刷计划名称")
     private String name;
     private String name;
 
 
+    @ApiModelProperty(value = "考试类型",required = true)
+    @NotNull(message = "请选择考试类型")
+    private ExamCategoryEnum category;
+
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "考试开始时间",required = true)
     @ApiModelProperty(value = "考试开始时间",required = true)
     @NotNull(message = "请输入考试开始时间")
     @NotNull(message = "请输入考试开始时间")
@@ -117,6 +122,14 @@ public class PrintPlanParams {
         this.name = name;
         this.name = name;
     }
     }
 
 
+    public ExamCategoryEnum getCategory() {
+        return category;
+    }
+
+    public void setCategory(ExamCategoryEnum category) {
+        this.category = category;
+    }
+
     public Long getExamStartTime() {
     public Long getExamStartTime() {
         return examStartTime;
         return examStartTime;
     }
     }

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/PrintPlanResult.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.enums.DrawRuleEnum;
 import com.qmth.teachcloud.common.enums.DrawRuleEnum;
+import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
 import java.util.List;
 import java.util.List;
@@ -41,6 +42,9 @@ public class PrintPlanResult {
     @ApiModelProperty(value = "印刷计划状态")
     @ApiModelProperty(value = "印刷计划状态")
     private PrintPlanStatusEnum status;
     private PrintPlanStatusEnum status;
 
 
+    @ApiModelProperty(value = "试卷类型")
+    private ExamCategoryEnum category;
+
     @ApiModelProperty(value = "总门次")
     @ApiModelProperty(value = "总门次")
     private int totalGates;
     private int totalGates;
 
 
@@ -167,6 +171,14 @@ public class PrintPlanResult {
         this.status = status;
         this.status = status;
     }
     }
 
 
+    public ExamCategoryEnum getCategory() {
+        return category;
+    }
+
+    public void setCategory(ExamCategoryEnum category) {
+        this.category = category;
+    }
+
     public int getTotalGates() {
     public int getTotalGates() {
         return totalGates;
         return totalGates;
     }
     }

+ 14 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPrintPlan.java

@@ -9,6 +9,7 @@ import com.qmth.distributed.print.business.enums.BackupMethodEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.enums.DrawRuleEnum;
 import com.qmth.teachcloud.common.enums.DrawRuleEnum;
+import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
@@ -36,6 +37,11 @@ public class ExamPrintPlan extends BaseEntity implements Serializable {
     @TableField(value = "org_id", updateStrategy = FieldStrategy.IGNORED)
     @TableField(value = "org_id", updateStrategy = FieldStrategy.IGNORED)
     private Long orgId;
     private Long orgId;
 
 
+    /**
+     * 考试类型
+     */
+    private ExamCategoryEnum category;
+
     /**
     /**
      * 印刷计划名称
      * 印刷计划名称
      */
      */
@@ -132,6 +138,14 @@ public class ExamPrintPlan extends BaseEntity implements Serializable {
         this.orgId = orgId;
         this.orgId = orgId;
     }
     }
 
 
+    public ExamCategoryEnum getCategory() {
+        return category;
+    }
+
+    public void setCategory(ExamCategoryEnum category) {
+        this.category = category;
+    }
+
     public String getName() {
     public String getName() {
         return name;
         return name;
     }
     }

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

@@ -123,4 +123,6 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
     List<ExamDetailCourseDto> listByExamIdAndCourseCode(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseCode") String courseCode);
     List<ExamDetailCourseDto> listByExamIdAndCourseCode(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("courseCode") String courseCode);
 
 
     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, @Param("markStatus") String markStatus);
+
+    int countMakeupUsedByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 }
 }

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

@@ -108,4 +108,7 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
     public WorkResult getFlowInfo(@Param("flowId") Long flowId, @Param("taskId") Long taskId);
     public WorkResult getFlowInfo(@Param("flowId") Long flowId, @Param("taskId") Long taskId);
 
 
     List<ExamTask> getExamTaskByCourseCodeAndCardId(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("cardId") String cardId);
     List<ExamTask> getExamTaskByCourseCodeAndCardId(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("cardId") String cardId);
+
+    IPage<MakeupExamTaskDto> listMakeupExamTask(@Param("page") Page<MakeupExamTaskDto> page, @Param("printPlanId") Long printPlanId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("collegeId") Long collegeId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userName") String userName);
+
 }
 }

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

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -14,7 +15,7 @@ public interface ConditionService {
 
 
     List<BasicSemester> listSemester(Boolean enable);
     List<BasicSemester> listSemester(Boolean enable);
 
 
-    List<BasicExam> listExam(Long semesterId, Boolean enable);
+    List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable);
 
 
     List<BasicCourse> listCourse(Long semesterId, Long examId, Boolean enable, List<String> printPlanId);
     List<BasicCourse> listCourse(Long semesterId, Long examId, Boolean enable, List<String> printPlanId);
 
 

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

@@ -252,4 +252,6 @@ public interface ExamDetailService extends IService<ExamDetail> {
     List<ExamDetail> listByExamAndPackage(Long examId, String packageCode);
     List<ExamDetail> listByExamAndPackage(Long examId, String packageCode);
 
 
     ExamDetail getByExamDetailCourseId(Long examDetailId);
     ExamDetail getByExamDetailCourseId(Long examDetailId);
+
+    int countMakeupUsedByExamIdAndPaperNumber(Long examId, String paperNumber);
 }
 }

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

@@ -6,6 +6,7 @@ import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.ExamTaskApprovalFormDto;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.ExamTaskApprovalFormDto;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.params.ExamTaskReApplyParam;
 import com.qmth.distributed.print.business.bean.params.ExamTaskReApplyParam;
+import com.qmth.distributed.print.business.bean.params.MakeupExamTaskTotalParam;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskExamStudentImportResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskExamStudentImportResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
@@ -213,4 +214,8 @@ public interface ExamTaskService extends IService<ExamTask> {
     List<String> listPaperNumber(String param, List<Long> printPlanIdList);
     List<String> listPaperNumber(String param, List<Long> printPlanIdList);
 
 
     ExamTask getByExamIdAndCourseCodeAndPaperNumber(Long examId, String courseCode, String paperNumber);
     ExamTask getByExamIdAndCourseCodeAndPaperNumber(Long examId, String courseCode, String paperNumber);
+
+    IPage<MakeupExamTaskDto> listMakeupExamTask(Long printPlanId, Long semesterId, Long examId, Long collegeId, String courseCode, String paperNumber, String userName, Integer pageNumber, Integer pageSize);
+
+    void saveMakeupTask(MakeupExamTaskTotalParam makeupExamTaskTotalParam);
 }
 }

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

@@ -223,6 +223,7 @@ public interface PrintCommonService {
      */
      */
     void checkData(Long schoolId, Long examId, String courseCode, String paperNumber, SysUser user) throws IOException;
     void checkData(Long schoolId, Long examId, String courseCode, String paperNumber, SysUser user) throws IOException;
 
 
+    void checkDataMakeup(Long schoolId, ExamDetail examDetail, String courseCode, String paperNumber, SysUser user);
     /**
     /**
      * 根据学生集合创建考生考务数据
      * 根据学生集合创建考生考务数据
      *
      *

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

@@ -10,6 +10,7 @@ import com.qmth.distributed.print.business.service.ConditionService;
 import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.distributed.print.business.service.TeachCourseService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
@@ -60,9 +61,12 @@ public class ConditionServiceImpl implements ConditionService {
     }
     }
 
 
     @Override
     @Override
-    public List<BasicExam> listExam(Long semesterId, Boolean enable) {
+    public List<BasicExam> listExam(Long semesterId, ExamCategoryEnum category, Boolean enable) {
         QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
         QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicExam::getSemesterId, semesterId);
         queryWrapper.lambda().eq(BasicExam::getSemesterId, semesterId);
+        if (category != null) {
+            queryWrapper.lambda().eq(BasicExam::getCategory, category);
+        }
         if (enable != null) {
         if (enable != null) {
             queryWrapper.lambda().eq(BasicExam::getEnable, enable);
             queryWrapper.lambda().eq(BasicExam::getEnable, enable);
         }
         }

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

@@ -1312,4 +1312,9 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         ExamDetailCourse examDetailCourse = examDetailCourseService.getById(examDetailCourseId);
         ExamDetailCourse examDetailCourse = examDetailCourseService.getById(examDetailCourseId);
         return this.getById(examDetailCourse.getExamDetailId());
         return this.getById(examDetailCourse.getExamDetailId());
     }
     }
+
+    @Override
+    public int countMakeupUsedByExamIdAndPaperNumber(Long examId, String paperNumber) {
+        return this.baseMapper.countMakeupUsedByExamIdAndPaperNumber(examId, paperNumber);
+    }
 }
 }

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

@@ -14,10 +14,7 @@ import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.*;
 import com.qmth.distributed.print.business.bean.dto.approvalForm.*;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.dto.examObject.ExamObjectDto;
 import com.qmth.distributed.print.business.bean.dto.excel.ExamStudentImportDto;
 import com.qmth.distributed.print.business.bean.dto.excel.ExamStudentImportDto;
-import com.qmth.distributed.print.business.bean.params.ExamDetailList;
-import com.qmth.distributed.print.business.bean.params.ExamDetailParams;
-import com.qmth.distributed.print.business.bean.params.ExamTaskReApplyParam;
-import com.qmth.distributed.print.business.bean.params.ExamTaskStudentObjectParam;
+import com.qmth.distributed.print.business.bean.params.*;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskExamStudentImportResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskExamStudentImportResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
 import com.qmth.distributed.print.business.bean.result.examTaskStudent.ExamTaskStudentObjectResult;
@@ -2091,6 +2088,82 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return this.getOne(queryWrapper);
         return this.getOne(queryWrapper);
     }
     }
 
 
+    @Override
+    public IPage<MakeupExamTaskDto> listMakeupExamTask(Long printPlanId, Long semesterId, Long examId, Long collegeId, String courseCode, String paperNumber, String userName, Integer pageNumber, Integer pageSize) {
+        if(semesterId == null){
+            throw ExceptionResultEnum.ERROR.exception("请选择学期");
+        }
+        if(examId == null){
+            throw ExceptionResultEnum.ERROR.exception("请选择考试");
+        }
+        Page<MakeupExamTaskDto> page = new Page<>(pageNumber, pageSize);
+        return this.baseMapper.listMakeupExamTask(page, printPlanId, semesterId, examId, collegeId, courseCode, paperNumber, userName);
+    }
+
+    @Override
+    public void saveMakeupTask(MakeupExamTaskTotalParam makeupExamTaskTotalParam) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(makeupExamTaskTotalParam.getPrintPlanId());
+
+        for (MakeupExamTaskParam makeupExamTaskParam : makeupExamTaskTotalParam.getList()) {
+            ExamDetail examDetail;
+            if (makeupExamTaskParam.getExamDetailId() == null) {
+                // 课程是否在其它补考计划已创建任务
+                int count = examDetailService.countMakeupUsedByExamIdAndPaperNumber(makeupExamTaskParam.getExamId(), makeupExamTaskParam.getPaperNumber());
+                if(count > 0){
+                    throw ExceptionResultEnum.ERROR.exception("试卷编号["+makeupExamTaskParam.getPaperNumber()+"]已在其它计划中提交");
+                }
+
+                examDetail = new ExamDetail();
+                examDetail.setId(SystemConstant.getDbUuid());
+                examDetail.setPackageCode("1" + redisCounterUtil.getCounter(schoolId, 6, "packageCode"));
+                examDetail.setSchoolId(schoolId);
+                examDetail.setOrgId(sysUser.getOrgId());
+                examDetail.setPrintPlanId(examPrintPlan.getId());
+                examDetail.setPrintPlanName(examPrintPlan.getName());
+                examDetail.setExamId(makeupExamTaskParam.getExamId());
+                examDetail.setStatus(ExamDetailStatusEnum.NEW);
+                examDetail.setExamStartTime(DateDisposeUtils.parseDate(DateDisposeUtils.getDate()+" 00:00:00").getTime());
+                examDetail.setExamEndTime(DateDisposeUtils.parseDate(DateDisposeUtils.getDate()+" 23:59:00").getTime());
+                examDetail.setTotalSubjects(makeupExamTaskParam.getTotalSubjects());
+                examDetail.setExamDataSource(ExamDataSourceEnum.EXAM_TASK);
+                examDetail.setNormal(true);
+                examDetail.setBackupCount(makeupExamTaskParam.getBackupCount());
+                examDetail.setCreateId(sysUser.getId());
+                examDetail.setCreateTime(System.currentTimeMillis());
+                examDetailService.save(examDetail);
+
+                ExamDetailCourse examDetailCourse = new ExamDetailCourse();
+                examDetailCourse.setId(SystemConstant.getDbUuid());
+                examDetailCourse.setSchoolId(schoolId);
+                examDetailCourse.setExamDetailId(examDetail.getId());
+                examDetailCourse.setCourseCode(makeupExamTaskParam.getCourseCode());
+                examDetailCourse.setCourseName(makeupExamTaskParam.getCourseName());
+                examDetailCourse.setPaperNumber(makeupExamTaskParam.getPaperNumber());
+                examDetailCourse.setTotalSubjects(makeupExamTaskParam.getTotalSubjects());
+                examDetailCourse.setCreateId(sysUser.getId());
+                examDetailCourseService.save(examDetailCourse);
+            } else {
+                examDetail = examDetailService.getById(makeupExamTaskParam.getExamDetailId());
+                if (examDetail.getTotalSubjects() != makeupExamTaskParam.getTotalSubjects()) {
+                    examDetail.setTotalSubjects(makeupExamTaskParam.getTotalSubjects());
+                    examDetail.setStatus(ExamDetailStatusEnum.NEW);
+                    examDetailService.updateById(examDetail);
+
+                    UpdateWrapper<ExamDetailCourse> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(ExamDetailCourse::getTotalSubjects, makeupExamTaskParam.getTotalSubjects())
+                            .eq(ExamDetailCourse::getExamDetailId, examDetail.getId());
+                    examDetailCourseService.update(updateWrapper);
+                }
+            }
+
+            // 生成pdf
+            printCommonService.checkDataMakeup(schoolId, examDetail, makeupExamTaskParam.getCourseCode(), makeupExamTaskParam.getPaperNumber(), sysUser);
+        }
+    }
+
     /**
     /**
      * 简单校验提交参数
      * 简单校验提交参数
      *
      *

+ 54 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -1051,6 +1051,60 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         }
         }
     }
     }
 
 
+    /**
+     * 校验是否可以提交
+     *
+     * @param schoolId
+     * @param courseCode
+     * @param paperNumber
+     * @param user
+     */
+    @Override
+    public void checkDataMakeup(Long schoolId, ExamDetail examDetail, String courseCode, String paperNumber, SysUser user) {
+        // 校验命题任务是否提交
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, examDetail.getExamId(), courseCode, paperNumber);
+        BasicExam basicExam = basicExamService.getById(examTask.getExamId());
+        if (basicExam != null && ExamModelEnum.MODEL3.equals(basicExam.getExamModel())) {
+            log.info("考试模式为模式3,不生成pdf");
+            return;
+        }
+
+        if (examTask != null && !examTask.getEnable()) {
+            log.info("命题任务已禁用");
+            return;
+        }
+        ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(examTask.getId());
+        if (!examTaskDetail.getEnable()) {
+            log.info("卷库已禁用");
+            return;
+        }
+
+        boolean canCreatePdf = true;
+        if (examTask.getReview()) {
+            TFFlowApprove tfFlowApprove = tfFlowApproveService.findByFlowId(examTask.getFlowId());
+            // 1.命题任务已完成
+            if (tfFlowApprove == null || tfFlowApprove.getStatus() != FlowStatusEnum.FINISH) {
+                canCreatePdf = false;
+            }
+        }
+
+        if (canCreatePdf) {
+            //所有考场都撤回,印刷任务状态改为就绪
+            QueryWrapper<ExamDetail> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().eq(ExamDetail::getPrintPlanId, examDetail.getPrintPlanId()).notIn(ExamDetail::getStatus, ExamDetailStatusEnum.NEW, ExamDetailStatusEnum.READY);
+            List<ExamDetail> examDetailss = examDetailService.list(queryWrapper);
+            if (examDetailss.isEmpty()) {
+                UpdateWrapper<ExamPrintPlan> printPlanUpdateWrapper = new UpdateWrapper<>();
+                printPlanUpdateWrapper.lambda().set(ExamPrintPlan::getStatus, PrintPlanStatusEnum.READY).eq(ExamPrintPlan::getId, examDetail.getPrintPlanId());
+                examPrintPlanService.update(printPlanUpdateWrapper);
+            }
+            TbTaskDetailResult tbTaskDetailResult = examDetailCourseService.getByExamDetailId(examDetail.getId());
+            Map<String, Object> map = tbTaskService.saveTask(tbTaskDetailResult, TaskTypeEnum.CREATE_PDF, examDetail.getPrintPlanId(), user, examDetail.getId());
+            MqDto mqDto = new MqDto(MqTagEnum.PDF.getCode(), map, String.valueOf(map.get(SystemConstant.TB_TASK_ID)));
+            redisUtil.sendMessage(mqDto.getTopic(), mqDto);
+        }
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
     public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, Long examId, String semesterId, ExamTask examTask, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, Long cardRuleId, SysUser sysUser) {
     public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, Long examId, String semesterId, ExamTask examTask, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, Long cardRuleId, SysUser sysUser) {

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

@@ -109,6 +109,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Autowired
     @Autowired
     ExamTaskPrintService examTaskPrintService;
     ExamTaskPrintService examTaskPrintService;
     @Resource
     @Resource
+    BasicExamService basicExamService;
+    @Resource
     SysUserService sysUserService;
     SysUserService sysUserService;
     @Resource
     @Resource
     FileStoreUtil fileStoreUtil;
     FileStoreUtil fileStoreUtil;
@@ -219,11 +221,11 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 return null;
                 return null;
             }
             }
             //查询命题任务绑定的试卷和题卡
             //查询命题任务绑定的试卷和题卡
-            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(sysUser.getSchoolId(), examPrintPlan.getExamId(), examDetailCourse.getCourseCode(), examDetailCourse.getPaperNumber());
+            ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(sysUser.getSchoolId(), examDetail.getExamId(), examDetailCourse.getCourseCode(), examDetailCourse.getPaperNumber());
             if (examTask == null) {
             if (examTask == null) {
                 throw ExceptionResultEnum.EXAM_TASK_IS_NULL.exception();
                 throw ExceptionResultEnum.EXAM_TASK_IS_NULL.exception();
             } else if (examTask.getReview()) {
             } else if (examTask.getReview()) {
-                examTask = examTaskService.findExamTaskByFlowStatus(sysUser.getSchoolId(), examPrintPlan.getExamId(), examDetailCourse.getCourseCode(), examDetailCourse.getPaperNumber(), FlowStatusEnum.FINISH);
+                examTask = examTaskService.findExamTaskByFlowStatus(sysUser.getSchoolId(), examDetail.getExamId(), examDetailCourse.getCourseCode(), examDetailCourse.getPaperNumber(), FlowStatusEnum.FINISH);
             } else {
             } else {
                 if (!ExamStatusEnum.SUBMIT.equals(examTask.getStatus())) {
                 if (!ExamStatusEnum.SUBMIT.equals(examTask.getStatus())) {
                     throw ExceptionResultEnum.EXAM_TASK_NOT_SUBMIT.exception();
                     throw ExceptionResultEnum.EXAM_TASK_NOT_SUBMIT.exception();
@@ -441,23 +443,25 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 }
                 }
             }
             }
         }
         }
-
-        String variableContent = examPrintPlan.getVariableContent();
-        if (StringUtils.isNotBlank(variableContent)) {
-            List<Long> examDetailCourseListIds = examDetailCourseList.stream().map(BaseEntity::getId).collect(Collectors.toList());
-            List<ExamStudentCourseDto> examStudentCourseDtoList = examStudentService.queryBySchoolIdAndExamDetailCourseIds(basicSchool.getId(), examDetailCourseListIds);
-            //获取变量印品
-            JSONArray jsonArrayVariable = JSONArray.parseArray(variableContent);
-            for (int i = 0; i < jsonArrayVariable.size(); i++) {
-                JSONObject jsonObjectVariable = jsonArrayVariable.getJSONObject(i);
-                String type = (String) jsonObjectVariable.get("type");
-                if (Objects.nonNull(jsonObjectVariable.get("templateId")) && !Objects.equals("", jsonObjectVariable.get("templateId"))) {
-                    Long templateId = Long.parseLong((String) jsonObjectVariable.get("templateId"));
-                    if ((CreatePdfTypeEnum.ALL.equals(createPdfType) || CreatePdfTypeEnum.SIGN.equals(createPdfType)) && Objects.nonNull(type) && Objects.equals(type.toUpperCase(), "SIGN")) {//签到表
-                        createPdfUtil.createSignBook(templateId, basicSchool.getName(), examDetail, examStudentCourseDtoList, list[1], (Integer) jsonObjectVariable.get("backupCount"), examDetailCourseList, fileTempList);
-                    } else if ((CreatePdfTypeEnum.ALL.equals(createPdfType) || CreatePdfTypeEnum.PACKAGE.equals(createPdfType)) && Objects.nonNull(type) && Objects.equals(type.toUpperCase(), "PACKAGE")) {//卷袋贴
-                        Integer backupCount = SystemConstant.calcBackupCount(examDetail.getBackupCount(), examDetail.getTotalSubjects(), 1);
-                        createPdfUtil.createPaperPackage(templateId, basicSchool.getName(), examDetail, examStudentCourseDtoList, list[1], backupCount, (Integer) jsonObjectVariable.get("backupCount"), examDetailCourseList, examPrintPlan.getExamId(), fileTempList);
+        BasicExam basicExam = basicExamService.getById(examPrintPlan.getExamId());
+        if (basicExam.getCategory().equals(ExamCategoryEnum.FORMAL)) {
+            String variableContent = examPrintPlan.getVariableContent();
+            if (StringUtils.isNotBlank(variableContent)) {
+                List<Long> examDetailCourseListIds = examDetailCourseList.stream().map(BaseEntity::getId).collect(Collectors.toList());
+                List<ExamStudentCourseDto> examStudentCourseDtoList = examStudentService.queryBySchoolIdAndExamDetailCourseIds(basicSchool.getId(), examDetailCourseListIds);
+                //获取变量印品
+                JSONArray jsonArrayVariable = JSONArray.parseArray(variableContent);
+                for (int i = 0; i < jsonArrayVariable.size(); i++) {
+                    JSONObject jsonObjectVariable = jsonArrayVariable.getJSONObject(i);
+                    String type = (String) jsonObjectVariable.get("type");
+                    if (Objects.nonNull(jsonObjectVariable.get("templateId")) && !Objects.equals("", jsonObjectVariable.get("templateId"))) {
+                        Long templateId = Long.parseLong((String) jsonObjectVariable.get("templateId"));
+                        if ((CreatePdfTypeEnum.ALL.equals(createPdfType) || CreatePdfTypeEnum.SIGN.equals(createPdfType)) && Objects.nonNull(type) && Objects.equals(type.toUpperCase(), "SIGN")) {//签到表
+                            createPdfUtil.createSignBook(templateId, basicSchool.getName(), examDetail, examStudentCourseDtoList, list[1], (Integer) jsonObjectVariable.get("backupCount"), examDetailCourseList, fileTempList);
+                        } else if ((CreatePdfTypeEnum.ALL.equals(createPdfType) || CreatePdfTypeEnum.PACKAGE.equals(createPdfType)) && Objects.nonNull(type) && Objects.equals(type.toUpperCase(), "PACKAGE")) {//卷袋贴
+                            Integer backupCount = SystemConstant.calcBackupCount(examDetail.getBackupCount(), examDetail.getTotalSubjects(), 1);
+                            createPdfUtil.createPaperPackage(templateId, basicSchool.getName(), examDetail, examStudentCourseDtoList, list[1], backupCount, (Integer) jsonObjectVariable.get("backupCount"), examDetailCourseList, examPrintPlan.getExamId(), fileTempList);
+                        }
                     }
                     }
                 }
                 }
             }
             }

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

@@ -1284,11 +1284,13 @@ public class CreatePdfUtil {
             // 替换考生卷型
             // 替换考生卷型
             studentHtml = studentHtml.replaceAll("\\$\\{paperTypeName\\}", examStudent != null && examStudent.getPaperType() != null ? examStudent.getPaperType() : StringUtils.isNotBlank(paperType) ? paperType : "");
             studentHtml = studentHtml.replaceAll("\\$\\{paperTypeName\\}", examStudent != null && examStudent.getPaperType() != null ? examStudent.getPaperType() : StringUtils.isNotBlank(paperType) ? paperType : "");
 
 
-            // 根据题卡规则必选字段,替换相应值,没有则“”
-            List<StudentExtendDto> studentExtendDtos = createExtendObject(examDetail, examStudent, basicCardRule);
-            if (studentExtendDtos != null) {
-                for (StudentExtendDto extendDto : studentExtendDtos) {
-                    studentHtml = studentHtml.replaceAll("\\$\\{" + extendDto.getFieldName() + "\\}", String.valueOf(extendDto.getValue()));
+            if (examStudent != null) {
+                // 根据题卡规则必选字段,替换相应值,没有则“”
+                List<StudentExtendDto> studentExtendDtos = createExtendObject(examDetail, examStudent, basicCardRule);
+                if (studentExtendDtos != null) {
+                    for (StudentExtendDto extendDto : studentExtendDtos) {
+                        studentHtml = studentHtml.replaceAll("\\$\\{" + extendDto.getFieldName() + "\\}", String.valueOf(extendDto.getValue()));
+                    }
                 }
                 }
             }
             }
         }
         }

+ 18 - 0
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -726,4 +726,22 @@
                             AND mp.status = #{markStatus})
                             AND mp.status = #{markStatus})
         GROUP BY ed.school_id , be.semester_id, ed.exam_id , edc.course_code , edc.course_name , edc.paper_number , edc.course_paper_id , edc.paper_type , et.user_id, ed.exam_start_time, ed.exam_end_time
         GROUP BY ed.school_id , be.semester_id, ed.exam_id , edc.course_code , edc.course_name , edc.paper_number , edc.course_paper_id , edc.paper_type , et.user_id, ed.exam_start_time, ed.exam_end_time
     </select>
     </select>
+    <select id="countMakeupUsedByExamIdAndPaperNumber" resultType="java.lang.Integer">
+        SELECT
+            COUNT(1)
+        FROM
+            exam_detail ed
+                LEFT JOIN
+            exam_detail_course edc ON ed.id = edc.exam_detail_id
+        WHERE
+            ed.exam_id = #{examId}
+          AND edc.paper_number = #{paperNumber}
+          AND EXISTS( SELECT
+                          1
+                      FROM
+                          exam_print_plan epp
+                      WHERE
+                          ed.print_plan_id = epp.id
+                        AND epp.category = 'MAKEUP')
+    </select>
 </mapper>
 </mapper>

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

@@ -38,6 +38,7 @@
             a.exam_start_time AS examStartTime,
             a.exam_start_time AS examStartTime,
             a.exam_end_time AS examEndTime,
             a.exam_end_time AS examEndTime,
             a.status,
             a.status,
+            a.category,
             (
             (
             SELECT
             SELECT
                 COUNT(
                 COUNT(

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

@@ -1304,4 +1304,74 @@
           AND et.course_code = #{courseCode}
           AND et.course_code = #{courseCode}
           and FIND_IN_SET(#{cardId}, REPLACE(REPLACE(substring_index(substring_index(CONVERT((etd.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"',''))
           and FIND_IN_SET(#{cardId}, REPLACE(REPLACE(substring_index(substring_index(CONVERT((etd.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"',''))
     </select>
     </select>
+    <select id="listMakeupExamTask"
+            resultType="com.qmth.distributed.print.business.bean.dto.MakeupExamTaskDto">
+        SELECT
+            a.exam_id,
+            a.course_code,
+            a.course_name,
+            a.paper_number,
+            a.login_name,
+            a.real_name,
+            a.unexposed_paper_type,
+            a.exposed_paper_type,
+            b.id examDetailId,
+            b.print_plan_id,
+            b.total_subjects,
+            b.backup_count,
+            b.status
+        FROM
+        (SELECT
+            et.exam_id,
+            et.course_code,
+            et.course_name,
+            et.paper_number,
+            su.login_name,
+            su.real_name,
+            etd.unexposed_paper_type,
+            etd.exposed_paper_type
+        FROM
+            exam_task et
+        LEFT JOIN exam_task_detail etd ON et.id = etd.exam_task_id
+        LEFT JOIN basic_exam be ON et.exam_id = be.id
+        LEFT JOIN sys_user su ON et.user_id = su.id
+        WHERE
+        be.semester_id = #{semesterId}
+        AND et.exam_id = #{examId}
+        <if test="courseCode != null and courseCode != ''">
+            AND et.course_code = #{courseCode}
+        </if>
+        <if test="paperNumber != null and paperNumber != ''">
+            AND et.paper_number = #{paperNumber}
+        </if>
+        <if test="userName != null and userName !=''">
+            AND (su.login_name = #{userName} or su.real_name = #{userName})
+        </if>
+        <if test="collegeId != null">
+            AND EXISTS( SELECT
+            1
+            FROM
+            basic_course bc
+            WHERE
+            et.course_code = bc.code
+            AND bc.teaching_room_id = #{collegeId})
+        </if>
+        AND etd.unexposed_paper_type is not null) a
+        LEFT JOIN
+        (SELECT
+            ed.id,
+            ed.print_plan_id,
+            ed.exam_id,
+            edc.course_code,
+            edc.paper_number,
+            ed.total_subjects,
+            ed.backup_count,
+            ed.status
+        FROM
+            exam_detail ed
+        LEFT JOIN exam_detail_course edc ON ed.id = edc.exam_detail_id
+        WHERE
+        print_plan_id = #{printPlanId}) b ON a.exam_id = b.exam_id
+        AND a.paper_number = b.paper_number
+    </select>
 </mapper>
 </mapper>

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

@@ -7,6 +7,7 @@ import com.qmth.distributed.print.business.service.ConditionService;
 import com.qmth.teachcloud.common.bean.result.BasicCollegeResult;
 import com.qmth.teachcloud.common.bean.result.BasicCollegeResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.enums.ExamCategoryEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.mark.service.ScanConditionService;
 import com.qmth.teachcloud.mark.service.ScanConditionService;
@@ -44,8 +45,9 @@ public class ConditionController {
     @RequestMapping(value = "/list_exam", method = RequestMethod.POST)
     @RequestMapping(value = "/list_exam", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicExam.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = BasicExam.class)})
     public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
     public Result listExam(@ApiParam(value = "学期ID") @RequestParam(required = false) Long semesterId,
+                           @ApiParam(value = "考试类型") @RequestParam(required = false) ExamCategoryEnum category,
                            @ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
                            @ApiParam(value = "启用/禁用") @RequestParam(required = false, defaultValue = "true") Boolean enable) {
-        return ResultUtil.ok(conditionService.listExam(semesterId, enable));
+        return ResultUtil.ok(conditionService.listExam(semesterId, category, enable));
     }
     }
 
 
     @ApiOperation(value = "课程")
     @ApiOperation(value = "课程")

+ 34 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -1,9 +1,12 @@
 package com.qmth.distributed.print.api;
 package com.qmth.distributed.print.api;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
+import com.qmth.distributed.print.business.bean.dto.MakeupExamTaskDto;
 import com.qmth.distributed.print.business.bean.dto.RelatePaperDto;
 import com.qmth.distributed.print.business.bean.dto.RelatePaperDto;
 import com.qmth.distributed.print.business.bean.params.DeleteParams;
 import com.qmth.distributed.print.business.bean.params.DeleteParams;
+import com.qmth.distributed.print.business.bean.params.MakeupExamTaskTotalParam;
 import com.qmth.distributed.print.business.bean.params.PrintPlanParams;
 import com.qmth.distributed.print.business.bean.params.PrintPlanParams;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
@@ -262,5 +265,36 @@ public class ExamPrintPlanController {
         List<RelatePaperDto> list = examTaskService.listPaperTypes(examTaskId, printPlanId, courseCode);
         List<RelatePaperDto> list = examTaskService.listPaperTypes(examTaskId, printPlanId, courseCode);
         return ResultUtil.ok(list);
         return ResultUtil.ok(list);
     }
     }
+
+    /**
+     * 补考任务查询
+     */
+    @ApiOperation(value = "补考任务查询")
+    @RequestMapping(value = "/list_makeup_task", method = RequestMethod.POST)
+    public Result listMakeupTask(@ApiParam(value = "印刷计划", required = true) @RequestParam(value = "printPlanId") Long printPlanId,
+                                 @ApiParam(value = "学期") @RequestParam(value = "semesterId", required = false) Long semesterId,
+                                 @ApiParam(value = "考试") @RequestParam(value = "examId", required = false) Long examId,
+                                 @ApiParam(value = "开课学院") @RequestParam(value = "collegeId", required = false) Long collegeId,
+                                 @ApiParam(value = "课程代码") @RequestParam(value = "courseCode", required = false) String courseCode,
+                                 @ApiParam(value = "试卷编号") @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                                 @ApiParam(value = "命题老师") @RequestParam(value = "userName", required = false) String userName,
+                                 @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                 @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        IPage<MakeupExamTaskDto> list = examTaskService.listMakeupExamTask(printPlanId, semesterId, examId, collegeId, courseCode, paperNumber, userName, pageNumber, pageSize);
+        return ResultUtil.ok(list);
+    }
+
+    /**
+     * 补考任务保存
+     *
+     * @return
+     */
+    @ApiOperation(value = "补考任务保存")
+    @RequestMapping(value = "/save_makeup_task", method = RequestMethod.POST)
+    public Result saveMakeupTask(@ApiParam(value = "补考任务") @RequestBody MakeupExamTaskTotalParam makeupExamTaskTotalParam) {
+        examTaskService.saveMakeupTask(makeupExamTaskTotalParam);
+        return ResultUtil.ok(true, "");
+    }
+
 }
 }
 
 

+ 2 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExamCategoryEnum.java

@@ -7,9 +7,9 @@ import java.util.Objects;
  */
  */
 public enum ExamCategoryEnum {
 public enum ExamCategoryEnum {
 
 
-    ONLINE("线上考试"),
+    FORMAL("正式考试"),
 
 
-    OFFLINE("线下考试");
+    MAKEUP("补考");
 
 
     private String desc;
     private String desc;