Эх сурвалжийг харах

Merge branch 'dev_v2.2.0' into release_v2.2.0
merge

wangliang 3 жил өмнө
parent
commit
2c1c8fa29a
44 өөрчлөгдсөн 1397 нэмэгдсэн , 67 устгасан
  1. 66 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ApprovalInfo.java
  2. 91 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/BasicInfo.java
  3. 228 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ExamPackageDetail.java
  4. 44 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ExamRoomInfo.java
  5. 46 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ExamTaskApprovalFormDto.java
  6. 9 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ReviewLogDto.java
  7. 53 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailList.java
  8. 37 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailParams.java
  9. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetailCourse.java
  10. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java
  11. 11 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java
  12. 69 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskApplyTemp.java
  13. 24 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskApplyTempMapper.java
  14. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  15. 4 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskReviewLogMapper.java
  16. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  17. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskApplyTempService.java
  18. 2 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskPrintService.java
  19. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskReviewLogService.java
  20. 16 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  21. 19 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java
  22. 5 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  23. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  24. 29 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskApplyTempServiceImpl.java
  25. 20 33
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java
  26. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskReviewLogServiceImpl.java
  27. 285 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  28. 39 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceServiceImpl.java
  29. 4 0
      distributed-print-business/src/main/resources/mapper/ExamTaskApplyTempMapper.xml
  30. 35 0
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  31. 26 0
      distributed-print-business/src/main/resources/mapper/ExamTaskReviewLogMapper.xml
  32. 60 5
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  33. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/TFFlowController.java
  34. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintAuthenticationService.java
  35. 17 0
      distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java
  36. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicClazzService.java
  37. 6 3
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/CommonCacheService.java
  38. 2 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java
  39. 35 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java
  40. 11 8
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/CommonCacheServiceImpl.java
  41. 4 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java
  42. 4 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java
  43. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/AuthUtil.java
  44. 1 1
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/auth/TeachcloudReportAuthenticationService.java

+ 66 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ApprovalInfo.java

@@ -0,0 +1,66 @@
+package com.qmth.distributed.print.business.bean.dto.ApprovalForm;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 命题任务审批表 - 审批信息
+ * @Author: CaoZixuan
+ * @Date: 2021-09-06
+ */
+public class ApprovalInfo {
+
+    @ApiModelProperty(value = "审批人id")
+    private Long approveId;
+
+    @ApiModelProperty(value = "审批人名称")
+    private String approveName;
+
+    @ApiModelProperty(value = "审批时间")
+    private Long time;
+
+    @ApiModelProperty(value = "审批意见(通过 + 备注信息)")
+    private String remark;
+
+    @ApiModelProperty(value = "审核级别(2:主任审核、3:院长审核)")
+    private int level;
+
+    public Long getApproveId() {
+        return approveId;
+    }
+
+    public void setApproveId(Long approveId) {
+        this.approveId = approveId;
+    }
+
+    public String getApproveName() {
+        return approveName;
+    }
+
+    public void setApproveName(String approveName) {
+        this.approveName = approveName;
+    }
+
+    public Long getTime() {
+        return time;
+    }
+
+    public void setTime(Long time) {
+        this.time = time;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    public void setLevel(int level) {
+        this.level = level;
+    }
+}

+ 91 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/BasicInfo.java

@@ -0,0 +1,91 @@
+package com.qmth.distributed.print.business.bean.dto.ApprovalForm;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 命题任务审批表 - 基础信息
+ * @Author: CaoZixuan
+ * @Date: 2021-09-06
+ */
+public class BasicInfo {
+
+    @ApiModelProperty(value = "教研室id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long teachingRoomId;
+
+    @ApiModelProperty(value = "教研室名称")
+    private String teachingRoomName;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "试卷名称")
+    private String paperName;
+
+    @ApiModelProperty(value = "考试开始时间")
+    private Long examStartTime;
+
+    @ApiModelProperty(value = "考试结束时间")
+    private Long examEndTime;
+
+    @ApiModelProperty(value = "拟卷老师")
+    private String teacherName;
+
+    public Long getTeachingRoomId() {
+        return teachingRoomId;
+    }
+
+    public void setTeachingRoomId(Long teachingRoomId) {
+        this.teachingRoomId = teachingRoomId;
+    }
+
+    public String getTeachingRoomName() {
+        return teachingRoomName;
+    }
+
+    public void setTeachingRoomName(String teachingRoomName) {
+        this.teachingRoomName = teachingRoomName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getPaperName() {
+        return paperName;
+    }
+
+    public void setPaperName(String paperName) {
+        this.paperName = paperName;
+    }
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+}

+ 228 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ExamPackageDetail.java

@@ -0,0 +1,228 @@
+package com.qmth.distributed.print.business.bean.dto.ApprovalForm;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.BackupMethodEnum;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 试卷包详情
+ * @Author: CaoZixuan
+ * @Date: 2021-09-07
+ */
+public class ExamPackageDetail {
+
+    @ApiModelProperty(value = "考场表id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examDetailId;
+
+    @ApiModelProperty(value = "考试开始时间")
+    private Long examStartTime;
+
+    @ApiModelProperty(value = "考试结束时间")
+    private Long examEndTime;
+
+    @ApiModelProperty(value = "考点")
+    private String examPlace;
+
+    @ApiModelProperty(value = "考场")
+    private String examRoom;
+
+    @ApiModelProperty(value = "卷袋编号")
+    private String packageCode;
+
+    @ApiModelProperty(value = "考场表状态")
+    private ExamDetailStatusEnum examDetailStatus;
+
+    @ApiModelProperty(value = "考场课程表id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examDetailCourseId;
+
+    @ApiModelProperty(value = "课程编号")
+    private String courseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    private String courseName;
+
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "考场课程表人数统计")
+    private Integer examDetailCourseTotalSubjects;
+
+    @ApiModelProperty(value = "考察课程表班级合计")
+    private String clazzIds;
+
+    @ApiModelProperty(value = "印刷计划id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examPrintPlanId;
+
+    @ApiModelProperty(value = "印刷计划名称")
+    private String examPrintPlanName;
+
+    @ApiModelProperty(value = "印刷计划印品")
+    private String printContent;
+
+    @ApiModelProperty(value = "备份方式")
+    private BackupMethodEnum backupMethod;
+
+    @ApiModelProperty(value = "备份数量")
+    private Integer backupCount;
+
+    @ApiModelProperty(value = "印刷计划状态")
+    private PrintPlanStatusEnum examPrintPlanStatus;
+
+    public Long getExamDetailId() {
+        return examDetailId;
+    }
+
+    public void setExamDetailId(Long examDetailId) {
+        this.examDetailId = examDetailId;
+    }
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public String getExamPlace() {
+        return examPlace;
+    }
+
+    public void setExamPlace(String examPlace) {
+        this.examPlace = examPlace;
+    }
+
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+
+    public ExamDetailStatusEnum getExamDetailStatus() {
+        return examDetailStatus;
+    }
+
+    public void setExamDetailStatus(ExamDetailStatusEnum examDetailStatus) {
+        this.examDetailStatus = examDetailStatus;
+    }
+
+    public Long getExamDetailCourseId() {
+        return examDetailCourseId;
+    }
+
+    public void setExamDetailCourseId(Long examDetailCourseId) {
+        this.examDetailCourseId = examDetailCourseId;
+    }
+
+    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 getExamDetailCourseTotalSubjects() {
+        return examDetailCourseTotalSubjects;
+    }
+
+    public void setExamDetailCourseTotalSubjects(Integer examDetailCourseTotalSubjects) {
+        this.examDetailCourseTotalSubjects = examDetailCourseTotalSubjects;
+    }
+
+    public String getClazzIds() {
+        return clazzIds;
+    }
+
+    public void setClazzIds(String clazzIds) {
+        this.clazzIds = clazzIds;
+    }
+
+    public Long getExamPrintPlanId() {
+        return examPrintPlanId;
+    }
+
+    public void setExamPrintPlanId(Long examPrintPlanId) {
+        this.examPrintPlanId = examPrintPlanId;
+    }
+
+    public String getExamPrintPlanName() {
+        return examPrintPlanName;
+    }
+
+    public void setExamPrintPlanName(String examPrintPlanName) {
+        this.examPrintPlanName = examPrintPlanName;
+    }
+
+    public String getPrintContent() {
+        return printContent;
+    }
+
+    public void setPrintContent(String printContent) {
+        this.printContent = printContent;
+    }
+
+    public BackupMethodEnum getBackupMethod() {
+        return backupMethod;
+    }
+
+    public void setBackupMethod(BackupMethodEnum backupMethod) {
+        this.backupMethod = backupMethod;
+    }
+
+    public Integer getBackupCount() {
+        return backupCount;
+    }
+
+    public void setBackupCount(Integer backupCount) {
+        this.backupCount = backupCount;
+    }
+
+    public PrintPlanStatusEnum getExamPrintPlanStatus() {
+        return examPrintPlanStatus;
+    }
+
+    public void setExamPrintPlanStatus(PrintPlanStatusEnum examPrintPlanStatus) {
+        this.examPrintPlanStatus = examPrintPlanStatus;
+    }
+}

+ 44 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ExamRoomInfo.java

@@ -0,0 +1,44 @@
+package com.qmth.distributed.print.business.bean.dto.ApprovalForm;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 命题任务审批表 - 考场信息
+ * @Author: CaoZixuan
+ * @Date: 2021-09-06
+ */
+public class ExamRoomInfo {
+
+    @ApiModelProperty(value = "使用班级(考场)")
+    private String clazzNames;
+
+    @ApiModelProperty(value = "人数")
+    private Integer studentCount;
+
+    @ApiModelProperty(value = "总印份数(人数 + 备用)")
+    private String printCount;
+
+    public String getClazzNames() {
+        return clazzNames;
+    }
+
+    public void setClazzNames(String clazzNames) {
+        this.clazzNames = clazzNames;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public String getPrintCount() {
+        return printCount;
+    }
+
+    public void setPrintCount(String printCount) {
+        this.printCount = printCount;
+    }
+}

+ 46 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ApprovalForm/ExamTaskApprovalFormDto.java

@@ -0,0 +1,46 @@
+package com.qmth.distributed.print.business.bean.dto.ApprovalForm;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description: 命题任务审批表Dto
+ * @Author: CaoZixuan
+ * @Date: 2021-09-06
+ */
+public class ExamTaskApprovalFormDto {
+
+    @ApiModelProperty(value = "基础信息")
+    private BasicInfo basicInfo;
+
+    @ApiModelProperty(value = "考场信息集合")
+    private List<ExamRoomInfo> examRoomInfoList;
+
+    @ApiModelProperty(value = "审批信息集合")
+    private List<ApprovalInfo> approvalInfoList;
+
+    public BasicInfo getBasicInfo() {
+        return basicInfo;
+    }
+
+    public void setBasicInfo(BasicInfo basicInfo) {
+        this.basicInfo = basicInfo;
+    }
+
+    public List<ExamRoomInfo> getExamRoomInfoList() {
+        return examRoomInfoList;
+    }
+
+    public void setExamRoomInfoList(List<ExamRoomInfo> examRoomInfoList) {
+        this.examRoomInfoList = examRoomInfoList;
+    }
+
+    public List<ApprovalInfo> getApprovalInfoList() {
+        return approvalInfoList;
+    }
+
+    public void setApprovalInfoList(List<ApprovalInfo> approvalInfoList) {
+        this.approvalInfoList = approvalInfoList;
+    }
+}

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ReviewLogDto.java

@@ -17,6 +17,7 @@ public class ReviewLogDto {
     private FlowApproveOperationEnum approvePass;
     private String reviewStatus;
     private String reason;
+    private String setUp;
     private String operateId;
     private String operateName;
     private Long operateTime;
@@ -80,4 +81,12 @@ public class ReviewLogDto {
     public void setOperateTime(Long operateTime) {
         this.operateTime = operateTime;
     }
+
+    public String getSetUp() {
+        return setUp;
+    }
+
+    public void setSetUp(String setUp) {
+        this.setUp = setUp;
+    }
 }

+ 53 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailList.java

@@ -0,0 +1,53 @@
+package com.qmth.distributed.print.business.bean.params;
+
+/**
+ * @Date: 2021/4/8.
+ */
+public class ExamDetailList {
+
+    String classId;
+    String className;
+    Integer studentCount;
+    Long printHouseId;
+    String extendFields;
+
+    public String getClassId() {
+        return classId;
+    }
+
+    public void setClassId(String classId) {
+        this.classId = classId;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public Long getPrintHouseId() {
+        return printHouseId;
+    }
+
+    public void setPrintHouseId(Long printHouseId) {
+        this.printHouseId = printHouseId;
+    }
+
+    public String getExtendFields() {
+        return extendFields;
+    }
+
+    public void setExtendFields(String extendFields) {
+        this.extendFields = extendFields;
+    }
+}

+ 37 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ExamDetailParams.java

@@ -0,0 +1,37 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import java.util.List;
+
+/**
+ * @Date: 2021/4/8.
+ */
+public class ExamDetailParams {
+
+    private Long examStartTime;
+    private Long examEndTime;
+    private List<ExamDetailList> list;
+
+    public Long getExamStartTime() {
+        return examStartTime;
+    }
+
+    public void setExamStartTime(Long examStartTime) {
+        this.examStartTime = examStartTime;
+    }
+
+    public Long getExamEndTime() {
+        return examEndTime;
+    }
+
+    public void setExamEndTime(Long examEndTime) {
+        this.examEndTime = examEndTime;
+    }
+
+    public List<ExamDetailList> getList() {
+        return list;
+    }
+
+    public void setList(List<ExamDetailList> list) {
+        this.list = list;
+    }
+}

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetailCourse.java

@@ -59,6 +59,9 @@ public class ExamDetailCourse extends BaseEntity implements Serializable {
     @TableField("paper_type")
     private String paperType;
 
+    @TableField("clazz_id")
+    private String clazzId;
+
     @ApiModelProperty(value = "备用题卡json")
     @TableField("attachment_id")
     private String attachmentId;
@@ -154,4 +157,12 @@ public class ExamDetailCourse extends BaseEntity implements Serializable {
     public void setCardPagesA3(Integer cardPagesA3) {
         this.cardPagesA3 = cardPagesA3;
     }
+
+    public String getClazzId() {
+        return clazzId;
+    }
+
+    public void setClazzId(String clazzId) {
+        this.clazzId = clazzId;
+    }
 }

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java

@@ -60,6 +60,9 @@ public class ExamStudent extends BaseEntity implements Serializable {
     @TableField("paper_type")
     private String paperType;
 
+    @TableField("clazz_id")
+    private String clazzId;
+
     @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "附件id")
     @TableField(value = "attachment_id")
@@ -168,6 +171,14 @@ public class ExamStudent extends BaseEntity implements Serializable {
         this.paperType = paperType;
     }
 
+    public String getClazzId() {
+        return clazzId;
+    }
+
+    public void setClazzId(String clazzId) {
+        this.clazzId = clazzId;
+    }
+
     public Boolean getSyncStatus() {
         return syncStatus;
     }

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

@@ -109,6 +109,9 @@ public class ExamTask extends BaseEntity implements Serializable {
     @TableField("lecturer_name")
     private String lecturerName;
 
+    @TableField("paper_name")
+    private String paperName;
+
     @TableField(exist = false)
     private List<Map<String, String>> users;
 
@@ -273,6 +276,14 @@ public class ExamTask extends BaseEntity implements Serializable {
         this.lecturerName = lecturerName;
     }
 
+    public String getPaperName() {
+        return paperName;
+    }
+
+    public void setPaperName(String paperName) {
+        this.paperName = paperName;
+    }
+
     public List<Map<String, String>> getUsers() {
         return users;
     }

+ 69 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskApplyTemp.java

@@ -0,0 +1,69 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.ExamStatusEnum;
+import com.qmth.distributed.print.business.enums.ReviewStatusEnum;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 命题任务
+ * </p>
+ *
+ * @author xf
+ * @since 2021-03-23
+ */
+@TableName("exam_task_apply_temp")
+public class ExamTaskApplyTemp extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("school_id")
+    private Long schoolId;
+
+    @ApiModelProperty(value = "机构id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(value = "org_id", updateStrategy = FieldStrategy.IGNORED)
+    private Long orgId;
+
+    /**
+     * 保存内容
+     */
+    @TableField("exam_task_content")
+    private String examTaskContent;
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public String getExamTaskContent() {
+        return examTaskContent;
+    }
+
+    public void setExamTaskContent(String examTaskContent) {
+        this.examTaskContent = examTaskContent;
+    }
+}

+ 24 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskApplyTempMapper.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.distributed.print.business.bean.dto.CardRuleDto;
+import com.qmth.distributed.print.business.entity.BasicCardRule;
+import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <p>
+ * 命题任务创建临时表 Mapper 接口
+ * </p>
+ *
+ * @author xf
+ * @since 2021-09-06
+ */
+public interface ExamTaskApplyTempMapper extends BaseMapper<ExamTaskApplyTemp> {
+
+}

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ExamPackageDetail;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.enums.MakeMethodEnum;
@@ -128,4 +129,11 @@ public interface ExamTaskMapper extends BaseMapper<ExamTask> {
      * @return
      */
     List<Long> findFlowIdToNotMySelf(@Param("currentUserId") Long currentUserId);
+
+    /**
+     * 根据试卷编号查询考场详细数据集(印刷计划状态为‘PRINTING’、‘PRINTING_FINISH‘的)
+     * @param paperNumber 试卷编号
+     * @return 数据集
+     */
+    List<ExamPackageDetail> findExamPackageDetailByPaperNumber(@Param("paperNumber") String paperNumber);
 }

+ 4 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskReviewLogMapper.java

@@ -1,8 +1,10 @@
 package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ApprovalInfo;
 import com.qmth.distributed.print.business.bean.dto.ReviewLogDto;
 import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -17,4 +19,6 @@ import java.util.List;
 public interface ExamTaskReviewLogMapper extends BaseMapper<ExamTaskReviewLog> {
 
     List<ReviewLogDto> list(Long examTaskId);
+
+    ApprovalInfo findOnePassBySetUp(@Param("flowId") Long flowId,@Param("setup") int setup);
 }

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java

@@ -94,4 +94,11 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
     List<ThirdObjectDto> printSyncPlan(Long schoolId);
 
     void syncDataCloudBatch(SyncDataParam syncDataParam);
+
+    /**
+     * 根据考场详情表查找印刷计划
+     * @param examDetailId 考场详情表id
+     * @return 印刷计划
+     */
+    ExamPrintPlan findByExamDetailId(Long examDetailId);
 }

+ 16 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskApplyTempService.java

@@ -0,0 +1,16 @@
+package com.qmth.distributed.print.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
+
+/**
+ * <p>
+ * 命题任务 服务类
+ * </p>
+ *
+ * @author xf
+ * @since 2021-03-23
+ */
+public interface ExamTaskApplyTempService extends IService<ExamTaskApplyTemp> {
+    ExamTaskApplyTemp stageTaskApply(ExamTaskApplyTemp examTaskApplyTemp);
+}

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

@@ -38,4 +38,6 @@ public interface ExamTaskPrintService extends IService<ExamTaskPrint> {
     List<TaskPrintExtendFieldsDto> listTaskPrintExtendFields();
 
     void submitTaskPrint(ExamTaskPrintParams examTaskPrintParams) throws IOException;
+
+    List<TaskPrintClassDto> listExamTaskClass(String courseCode);
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskReviewLogService.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ApprovalInfo;
 import com.qmth.distributed.print.business.bean.dto.ReviewLogDto;
 import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
 
@@ -17,4 +18,6 @@ import java.util.List;
 public interface ExamTaskReviewLogService extends IService<ExamTaskReviewLog> {
 
     List<ReviewLogDto> list(Long flowId);
+
+    ApprovalInfo findOnePassBySetUp(Long flowId,int setup);
 }

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

@@ -3,9 +3,11 @@ package com.qmth.distributed.print.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 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.params.ExamTaskApplyParam;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
@@ -203,4 +205,18 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @return
      */
     List<Long> findFlowIdToNotMySelf(Long currentUserId);
+
+    /**
+     * 新增命题申请
+     * @param examTaskApplyTemp
+     * @return
+     */
+    ExamTask submitTaskApply(ExamTaskApplyTemp examTaskApplyTemp);
+
+    /**
+     * 查找命题任务审核表
+     * @param examTaskId 命题任务id
+     * @return 命题任务审核表参数
+     */
+    ExamTaskApprovalFormDto findExamTaskApprovalForm(Long examTaskId);
 }

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

@@ -3,7 +3,9 @@ package com.qmth.distributed.print.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.itextpdf.text.DocumentException;
 import com.qmth.distributed.print.business.bean.dto.PdfDto;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.entity.ExamDetail;
+import com.qmth.distributed.print.business.entity.ExamTaskPrint;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysOrg;
@@ -217,4 +219,21 @@ public interface PrintCommonService {
      * @throws IOException
      */
     public void checkData(Long schoolId, String courseCode, String paperNumber, SysUser user) throws IOException;
+
+    /**
+     * 保存考务数据
+     * @param schoolId
+     * @param extendFields
+     * @param classIds
+     * @param examDetailCourseId
+     * @param sysUser
+     */
+    public int saveBatchStudent(Long schoolId, String extendFields, List<String> classIds, Long examDetailCourseId, SysUser sysUser);
+
+    /**
+     * 生成准考证号
+     * @param serialNumberParams
+     * @return
+     */
+    public String createTempNumber(SerialNumberParams serialNumberParams);
 }

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

@@ -20,6 +20,7 @@ import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
+import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -61,6 +62,9 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Autowired
+    BasicCourseService basicCourseService;
+
     @Transactional
     @Override
     public String saveExamCard(ExamCardParams examCardParams) {
@@ -78,7 +82,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         if (examCardParams.getId() == null) {
             examCard = new ExamCard();
             examCard.setSchoolId(schoolId);
-            examCard.setOrgId(user.getOrgId());
+            examCard.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examCardParams.getCourseCode()));
             examCard.setCourseCode(examCardParams.getCourseCode());
             examCard.setCourseName(examCardParams.getCourseName());
             examCard.setTitle(examCardParams.getTitle());
@@ -87,7 +91,6 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             examCard.setType(examCardParams.getType());
             examCard.setTemplateId(examCardParams.getTemplateId());
             examCard.insertInfo(user.getId());
-            examCard.setOrgId(user.getOrgId());
             this.save(examCard);
 
             examCardDetail = new ExamCardDetail();

+ 14 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -14,6 +14,7 @@ import com.qmth.distributed.print.business.bean.result.PrintPlanResult;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.ClientPrintData;
+import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
@@ -448,6 +449,19 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         }
     }
 
+    @Override
+    public ExamPrintPlan findByExamDetailId(Long examDetailId) {
+        ExamDetail examDetail = examDetailService.getById(examDetailId);
+        if (Objects.isNull(examDetail)){
+            throw ExceptionResultEnum.ERROR.exception("未找到印刷考场数据");
+        }
+        ExamPrintPlan examPrintPlan = this.getById(examDetail.getPrintPlanId());
+        if (Objects.isNull(examPrintPlan)){
+            throw ExceptionResultEnum.ERROR.exception("未找到印刷计划");
+        }
+        return examPrintPlan;
+    }
+
 
     /**
      * 查找子机构

+ 29 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskApplyTempServiceImpl.java

@@ -0,0 +1,29 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.entity.ExamTaskApplyTemp;
+import com.qmth.distributed.print.business.mapper.ExamTaskApplyTempMapper;
+import com.qmth.distributed.print.business.service.ExamTaskApplyTempService;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.springframework.stereotype.Service;
+
+import java.util.Objects;
+
+/**
+ * @Date: 2021/9/6.
+ */
+@Service
+public class ExamTaskApplyTempServiceImpl extends ServiceImpl<ExamTaskApplyTempMapper, ExamTaskApplyTemp> implements ExamTaskApplyTempService {
+    @Override
+    public ExamTaskApplyTemp stageTaskApply(ExamTaskApplyTemp examTaskApplyTemp) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        if (Objects.isNull(examTaskApplyTemp.getId())) {
+            examTaskApplyTemp.setSchoolId(schoolId);
+            examTaskApplyTemp.setOrgId(sysUser.getOrgId());
+        }
+        this.saveOrUpdate(examTaskApplyTemp);
+        return examTaskApplyTemp;
+    }
+}

+ 20 - 33
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskPrintServiceImpl.java

@@ -36,6 +36,7 @@ import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -76,11 +77,9 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
     @Resource
     TBTaskService tbTaskService;
 
-    @Resource
-    AsyncCreatePdfTempleteService asyncCreatePdfTempleteService;
-
-    @Resource
-    ConvertUtil convertUtil;
+    @Autowired
+    @Lazy
+    PrintCommonService printCommonService;
 
     @Resource
     RedisUtil redisUtil;
@@ -194,7 +193,7 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
             ExamDetail examDetail = new ExamDetail();
             examDetail.setId(SystemConstant.getDbUuid());
-            examDetail.setPackageCode(createTempNumber(serialNumberParams));
+            examDetail.setPackageCode(printCommonService.createTempNumber(serialNumberParams));
             examDetail.setSchoolId(schoolId);
             examDetail.setOrgId(sysUser.getOrgId());
             examDetail.setPrintPlanId(examTaskPrint.getPrintPlanId());
@@ -223,11 +222,12 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             examDetailCourse.setCourseCode(examTaskPrint.getCourseCode());
             examDetailCourse.setCourseName(examTaskPrint.getCourseName());
             examDetailCourse.setPaperNumber(examTaskPrint.getPaperNumber());
+            examDetailCourse.setClazzId(examTaskPrint.getClassId());
             examDetailCourse.setTotalSubjects(examTaskPrint.getStudentCount());
             examDetailCourse.setCreateId(examTaskPrint.getCreateId());
             examDetailCourseService.save(examDetailCourse);
 
-            saveBatchStudent(examTaskPrint, classIds, examDetailCourse.getId(), sysUser);
+            printCommonService.saveBatchStudent(examTaskPrint.getSchoolId(), examTaskPrint.getExtendFields(), classIds, examDetailCourse.getId(), sysUser);
 
             // 更改印刷计划状态
             examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
@@ -267,12 +267,14 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
             QueryWrapper<ExamDetailCourse> examDetailCourseQueryWrapper = new QueryWrapper<>();
             examDetailCourseQueryWrapper.lambda().eq(ExamDetailCourse::getExamDetailId, taskPrint.getExamDetailId());
             ExamDetailCourse examDetailCourse = examDetailCourseService.getOne(examDetailCourseQueryWrapper);
+            examDetailCourse.setClazzId(taskPrint.getClassId());
+            examDetailCourseService.updateById(examDetailCourse);
 
             UpdateWrapper<ExamStudent> examStudentUpdateWrapper = new UpdateWrapper<>();
             examStudentUpdateWrapper.lambda().eq(ExamStudent::getExamDetailCourseId, examDetailCourse.getId());
             examStudentService.remove(examStudentUpdateWrapper);
 
-            saveBatchStudent(taskPrint, classIds, examDetailCourse.getId(), sysUser);
+            printCommonService.saveBatchStudent(taskPrint.getSchoolId(), taskPrint.getExtendFields(), classIds, examDetailCourse.getId(), sysUser);
 
             return examDetail;
         }
@@ -361,29 +363,17 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
         }
     }
 
-    private void saveBatchStudent(ExamTaskPrint examTaskPrint, List<String> classIds, Long examDetailCourseId, SysUser sysUser) {
-        QueryWrapper<BasicStudent> queryWrapper1 = new QueryWrapper<>();
-        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, examTaskPrint.getSchoolId()).in(BasicStudent::getClazzId, classIds);
-        List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper1);
-        AtomicInteger atomicInteger = new AtomicInteger(1);
-        List<ExamStudent> examStudents = new ArrayList<>();
-        SerialNumberParams ticketNumberParams = new SerialNumberParams("ticketNumber-" + examTaskPrint.getSchoolId(), DateUtil.format(new Date(), "yyyyMM"), 6);
-        for (BasicStudent basicStudent : basicStudents) {
-            ExamStudent examStudent = new ExamStudent();
-            examStudent.setId(SystemConstant.getDbUuid());
-            examStudent.setSchoolId(examTaskPrint.getSchoolId());
-            examStudent.setOrgId(sysUser.getOrgId());
-            examStudent.setExamDetailCourseId(examDetailCourseId);
-            examStudent.setStudentName(basicStudent.getStudentName());
-            examStudent.setStudentCode(basicStudent.getStudentCode());
-            // 准考证号(年月+000001)
-            examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
-            examStudent.setExtendFields(examTaskPrint.getExtendFields());
-            examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
-            examStudent.setCreateId(examTaskPrint.getCreateId());
-            examStudents.add(examStudent);
+    @Override
+    public List<TaskPrintClassDto> listExamTaskClass(String courseCode) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        List<BasicUserCourse> courseList = basicUserCourseService.listBySchoolIdAndCourseCode(schoolId, courseCode);
+        Set<String> stringList = courseList.stream().map(m -> String.valueOf(m.getClazzId())).collect(Collectors.toSet());
+
+        if (!CollectionUtils.isEmpty(stringList)) {
+            List<TaskPrintClassDto> taskPrintClassDtos = basicStudentService.listByClass(schoolId, stringList);
+            return taskPrintClassDtos;
         }
-        examStudentService.saveBatch(examStudents);
+        return null;
     }
 
     private void validateClass(List<ExamTaskPrint> examTaskPrints, List<String> classIds) {
@@ -399,7 +389,4 @@ public class ExamTaskPrintServiceImpl extends ServiceImpl<ExamTaskPrintMapper, E
         }
     }
 
-    public String createTempNumber(SerialNumberParams serialNumberParams) {
-        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
-    }
 }

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskReviewLogServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.ApprovalInfo;
 import com.qmth.distributed.print.business.bean.dto.ReviewLogDto;
 import com.qmth.distributed.print.business.entity.ExamTaskReviewLog;
 import com.qmth.distributed.print.business.mapper.ExamTaskReviewLogMapper;
@@ -24,4 +25,9 @@ public class ExamTaskReviewLogServiceImpl extends ServiceImpl<ExamTaskReviewLogM
     public List<ReviewLogDto> list(Long examTaskId) {
         return this.baseMapper.list(examTaskId);
     }
+
+    @Override
+    public ApprovalInfo findOnePassBySetUp(Long flowId, int setup) {
+        return this.baseMapper.findOnePassBySetUp(flowId,setup);
+    }
 }

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

@@ -8,8 +8,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.google.gson.Gson;
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.*;
 import com.qmth.distributed.print.business.bean.dto.*;
+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.ExamTaskApplyParam;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.*;
@@ -18,7 +22,6 @@ import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncCreatePdfTempleteService;
 import com.qmth.distributed.print.business.templete.execute.AsyncPaperReviewPdfExportService;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
-import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.bean.dto.MqDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
@@ -29,7 +32,6 @@ import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.excel.ExcelError;
-import javafx.beans.binding.ObjectExpression;
 import org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.runtime.ProcessInstance;
@@ -140,9 +142,18 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     BasicCardRuleService basicCardRuleService;
 
+    @Autowired
+    ExamPrintPlanService examPrintPlanService;
+
     @Resource
     RedisUtil redisUtil;
 
+    @Resource
+    SysOrgService sysOrgService;
+
+    @Resource
+    BasicClazzService basicClazzService;
+
     @Override
     public List<ExamTask> listByCourseCode(Long schoolId, String code) {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
@@ -1500,6 +1511,278 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTaskMapper.findFlowIdToNotMySelf(currentUserId);
     }
 
+    @Override
+    public ExamTask submitTaskApply(ExamTaskApplyTemp examTaskApplyTemp) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        JSONObject jsonObject = JSONObject.parseObject(examTaskApplyTemp.getExamTaskContent());
+
+        // 新建命题任务
+        ExamTask examTask = JSONObject.parseObject(String.valueOf(jsonObject.get("examTask")), ExamTask.class);
+        try {
+            BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId();
+            if (basicExamRule == null) {
+                throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
+            }
+
+            if (StringUtils.isNotBlank(examTask.getPaperNumber())) {
+                QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
+                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTask.getPaperNumber());
+                if (Objects.nonNull(examTask.getId())) {
+                    taskQueryWrapper.lambda().ne(ExamTask::getId, examTask.getId());
+                }
+                ExamTask task = this.getOne(taskQueryWrapper);
+                if (task != null) {
+                    throw ExceptionResultEnum.ERROR.exception("试卷编号已存在");
+                }
+            } else {
+                // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
+                String paperNumber = printCommonService.createPaperNumber(schoolId);
+                examTask.setPaperNumber(paperNumber);
+            }
+
+            examTask.setId(SystemConstant.getDbUuid());
+            examTask.setSchoolId(schoolId);
+            examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
+            examTask.setReview(basicExamRule.getReview());
+            examTask.setUserId(sysUser.getId());
+            examTask.setStatus(ExamStatusEnum.SUBMIT);
+            examTask.setCreateId(sysUser.getId());
+            examTask.setCreateTime(System.currentTimeMillis());
+
+            if (Objects.isNull(examTask.getFlowId())) {
+                //TODO 这里以后要判断学校code来取流程key
+                if (basicExamRule.getReview()) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.computeIfAbsent(SystemConstant.APPROVE_ID, v -> String.valueOf(examTask.getUserId()));
+                    ProcessInstance processInstance = activitiService.startActivity(SystemConstant.GDYKDX_FLOW_KEY, map);
+                    examTask.setFlowId(Long.parseLong(processInstance.getId()));
+                }
+            }
+            this.save(examTask);
+
+            // 新建试卷
+            ExamTaskDetail examTaskDetail = JSONObject.parseObject(String.valueOf(jsonObject.get("examTaskDetail")), ExamTaskDetail.class);
+            validSubmitParam(examTaskDetail);
+            // 已曝光试卷和未曝光试卷赋值(新增时,已曝光试卷为null,未曝光试卷为paper_type)
+            examTaskDetail.setId(SystemConstant.getDbUuid());
+            examTaskDetail.setUnexposedPaperType(examTaskDetail.getPaperType());
+            examTaskDetail.setExamTaskId(examTask.getId());
+            examTaskDetail.setCreateId(sysUser.getId());
+            examTaskDetail.setCreateTime(System.currentTimeMillis());
+
+            examTaskDetailService.save(examTaskDetail);
+
+            ExamPrintPlan examPrintPlan = JSONObject.parseObject(String.valueOf(jsonObject.get("examPrintPlan")), ExamPrintPlan.class);
+
+            ExamDetailParams examDetailParams = JSONObject.parseObject(String.valueOf(jsonObject.get("examDetail")), ExamDetailParams.class);
+            List<String> printContentList = JSONObject.parseArray(examPrintPlan.getPrintContent(), String.class);
+            examPrintPlan.setId(SystemConstant.getDbUuid());
+            examPrintPlan.setSchoolId(schoolId);
+            examPrintPlan.setOrgId(sysUser.getOrgId());
+            examPrintPlan.setPrintContent(String.join(",", printContentList));
+            examPrintPlan.setExamStartTime(Long.valueOf(examDetailParams.getExamStartTime()));
+            examPrintPlan.setExamEndTime(Long.valueOf(examDetailParams.getExamEndTime()));
+            // 课程+试卷编号
+            examPrintPlan.setName(examTask.getCourseName() + examTask.getPaperNumber());
+            examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+            examPrintPlan.setCreateId(sysUser.getId());
+            examPrintPlanService.save(examPrintPlan);
+
+            List<ExamDetailList> examDetailLists = JSONObject.parseArray(String.valueOf(examDetailParams.getList()), ExamDetailList.class);
+
+            int i = 1;
+            for (ExamDetailList examDetailList : examDetailLists) {
+                SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-" + schoolId, "1", 6);
+                ExamDetail examDetail = new ExamDetail();
+                examDetail.setId(SystemConstant.getDbUuid());
+                examDetail.setPackageCode(printCommonService.createTempNumber(serialNumberParams));
+                examDetail.setSchoolId(schoolId);
+                examDetail.setOrgId(sysUser.getOrgId());
+                examDetail.setPrintPlanId(examPrintPlan.getId());
+                examDetail.setPrintPlanName(examPrintPlan.getName());
+                examDetail.setExamPlace("考场" + i);
+                examDetail.setExamRoom("考点" + i);
+                examDetail.setStatus(ExamDetailStatusEnum.NEW);
+                examDetail.setExamStartTime(examDetailParams.getExamStartTime());
+                examDetail.setExamEndTime(examDetailParams.getExamEndTime());
+                examDetail.setTotalSubjects(examDetailList.getStudentCount());
+                examDetail.setExamDataSource(ExamDataSourceEnum.EXAM_TASK);
+                examDetail.setNormal(true);
+                examDetail.setPrintHouseId(Long.valueOf(examDetailList.getPrintHouseId()));
+                examDetail.setCreateId(sysUser.getId());
+                examDetail.setCreateTime(System.currentTimeMillis());
+                examDetailService.save(examDetail);
+
+                List<String> classIds = Arrays.asList(examDetailList.getClassId().split(","));
+                ExamDetailCourse examDetailCourse = new ExamDetailCourse();
+                examDetailCourse.setId(SystemConstant.getDbUuid());
+                examDetailCourse.setSchoolId(schoolId);
+                examDetailCourse.setOrgId(sysUser.getOrgId());
+                examDetailCourse.setExamDetailId(examDetail.getId());
+                examDetailCourse.setCourseCode(examTask.getCourseCode());
+                examDetailCourse.setCourseName(examTask.getCourseName());
+                examDetailCourse.setPaperNumber(examTask.getPaperNumber());
+                examDetailCourse.setClazzId(examDetailList.getClassId());
+                examDetailCourse.setTotalSubjects(examDetailList.getStudentCount());
+                examDetailCourse.setCreateId(sysUser.getId());
+                examDetailCourseService.save(examDetailCourse);
+
+                // 更新实际考生数量
+                int studentCount = printCommonService.saveBatchStudent(schoolId, examDetailList.getExtendFields(), classIds, examDetailCourse.getId(), sysUser);
+                if (studentCount - examDetail.getTotalSubjects().intValue() != 0) {
+                    UpdateWrapper<ExamDetail> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(ExamDetail::getTotalSubjects, studentCount).eq(ExamDetail::getId, examDetail.getId());
+                    examDetailService.update(updateWrapper);
+                }
+                if (studentCount - examDetailCourse.getTotalSubjects().intValue() != 0) {
+                    UpdateWrapper<ExamDetailCourse> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(ExamDetailCourse::getTotalSubjects, studentCount).eq(ExamDetailCourse::getId, examDetailCourse.getId());
+                    examDetailCourseService.update(updateWrapper);
+                }
+                i++;
+            }
+
+            if (Objects.nonNull(examTask.getFlowId())) {
+                // 审核一级
+                Task task = taskService.createTaskQuery().processInstanceId(String.valueOf(examTask.getFlowId())).singleResult();
+                if (Objects.nonNull(task)) {
+                    Map<String, Object> map1 = new HashMap<>();
+                    map1.computeIfAbsent(SystemConstant.FLOW_TASK_ID, v -> task.getId());
+                    activitiService.taskApprove(map1);
+                }
+            }
+
+            return examTask;
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (e instanceof ActivitiObjectNotFoundException) {
+                ResultUtil.error("流程不存在");
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public ExamTaskApprovalFormDto findExamTaskApprovalForm(Long examTaskId) {
+//        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        // 1.basicInfo 部分
+        ExamTask examTask = this.getById(examTaskId);
+        if (Objects.isNull(examTask)){
+            throw ExceptionResultEnum.ERROR.exception("命题任务不存在");
+        }
+        String paperNumber = examTask.getPaperNumber();
+        String paperName = examTask.getPaperName();
+        Long teachingRoomId = examTask.getTeachingRoomId();
+        SysOrg teachingRoom = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getId,teachingRoomId).eq(SysOrg::getType,OrgTypeEnum.TEACHING_ROOM));
+        if (Objects.isNull(teachingRoom)){
+            throw ExceptionResultEnum.ERROR.exception("找不到教研室");
+        }
+        String teachingRoomName = teachingRoom.getName();
+        Long examStartTime = null;
+        Long examEndTime = null;
+        // 流程id
+        Long flowId = examTask.getFlowId();
+
+
+
+        // 2.ExamRoomInfo 部分
+        List<ExamRoomInfo> examRoomInfoList = new ArrayList<>();
+        List<ExamPackageDetail> examPackageDetailDatasource = this.baseMapper.findExamPackageDetailByPaperNumber(paperNumber);
+        if (examPackageDetailDatasource.size() > 0){
+            Set<Long> examDetailIdSet = examPackageDetailDatasource.stream().map(ExamPackageDetail::getExamDetailId).collect(Collectors.toSet());
+            for (Long examDetailId : examDetailIdSet) {
+                // 一个考场下
+                // 班级
+                String classNames = "";
+                int studentCount = 0;
+                String printCount = "";
+
+                List<ExamPackageDetail> examPackageDetailCell = examPackageDetailDatasource.stream()
+                        .filter(e -> examDetailId.equals(e.getExamDetailId()))
+                        .collect(Collectors.toList());
+
+                List<BackupMethodEnum> backupMethodEnums = examPackageDetailCell.stream().map(ExamPackageDetail::getBackupMethod).distinct().collect(Collectors.toList());
+                if (backupMethodEnums.size() != 1 && backupMethodEnums.get(0) != BackupMethodEnum.ROOM){
+                    throw ExceptionResultEnum.ERROR.exception("印刷计划试卷备份方式必须按考场");
+                }
+                List<Integer> backupCountList = examPackageDetailCell.stream().map(ExamPackageDetail::getBackupCount).distinct().collect(Collectors.toList());
+                if (backupCountList.size() != 1){
+                    throw ExceptionResultEnum.ERROR.exception("印刷计划试卷备份数量异常");
+                }
+                // 试卷该考场备份数量
+                Integer backupCount = backupCountList.get(0);
+                // 班级主键','隔开
+                String clazzIds = "";
+                final String separator = ",";
+                for (ExamPackageDetail examPackageDetail : examPackageDetailCell) {
+                    // 处理考试开始结束时间
+                    Long cellStartTime = examPackageDetail.getExamStartTime();
+                    Long cellEndTime = examPackageDetail.getExamEndTime();
+                    if (examStartTime == null || cellStartTime < examStartTime){
+                        examStartTime = cellStartTime;
+                    }
+                    if (examEndTime == null || cellEndTime > examEndTime){
+                        examEndTime = cellEndTime;
+                    }
+                    // 处理班级和数量
+                    Integer studentCellCount = examPackageDetail.getExamDetailCourseTotalSubjects();
+                    String clazzIdCell = examPackageDetail.getClazzIds();
+                    studentCount = studentCount + studentCellCount;
+                    clazzIds = clazzIds + clazzIdCell + separator;
+                }
+                clazzIds = clazzIds.substring(0,clazzIds.length() - separator.length());
+                classNames = basicClazzService.findClazzNamesByClazzIds(clazzIds,separator);
+                printCount = studentCount + " + " + backupCount;
+
+                // 组装examRoom
+                ExamRoomInfo examRoomInfo = new ExamRoomInfo();
+                examRoomInfo.setClazzNames(classNames);
+                examRoomInfo.setStudentCount(studentCount);
+                examRoomInfo.setPrintCount(printCount);
+                examRoomInfoList.add(examRoomInfo);
+            }
+        }
+
+        // 3.ApprovalInfo部分
+        List<ApprovalInfo> approvalInfoList = new ArrayList<>();
+        ApprovalInfo second = examTaskReviewLogService.findOnePassBySetUp(flowId,2);
+        if (Objects.isNull(second)){
+            throw ExceptionResultEnum.ERROR.exception("未找到主任级审核记录");
+        }
+        ApprovalInfo third = examTaskReviewLogService.findOnePassBySetUp(flowId,3);
+        if (Objects.isNull(third)){
+            throw ExceptionResultEnum.ERROR.exception("未找到院长级审核记录");
+        }
+        second.setRemark("通过," + second.getRemark());
+        third.setRemark("通过," + third.getRemark());
+        approvalInfoList.add(second);
+        approvalInfoList.add(third);
+
+
+        // ---- 组装Dto
+        ExamTaskApprovalFormDto examTaskApprovalFormDto = new ExamTaskApprovalFormDto();
+        BasicInfo basicInfo = new BasicInfo();
+        basicInfo.setTeachingRoomId(teachingRoomId);
+        basicInfo.setTeachingRoomName(teachingRoomName);
+        basicInfo.setPaperName(paperName);
+        basicInfo.setPaperNumber(paperNumber);
+        basicInfo.setTeacherName(examTask.getTeacherName());
+        basicInfo.setExamStartTime(examStartTime);
+        basicInfo.setExamEndTime(examEndTime);
+
+
+        examTaskApprovalFormDto.setBasicInfo(basicInfo);
+        examTaskApprovalFormDto.setExamRoomInfoList(examRoomInfoList);
+        examTaskApprovalFormDto.setApprovalInfoList(approvalInfoList);
+
+        return examTaskApprovalFormDto;
+    }
+
     /**
      * 简单校验提交参数
      *

+ 39 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceServiceImpl.java

@@ -12,6 +12,7 @@ import com.itextpdf.text.DocumentException;
 import com.itextpdf.text.pdf.PdfReader;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.PdfDto;
+import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
@@ -48,6 +49,7 @@ import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * @Description: 公共服务service impl
@@ -119,6 +121,12 @@ public class PrintCommonServiceServiceImpl implements PrintCommonService {
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Resource
+    BasicStudentService basicStudentService;
+
+    @Resource
+    ExamStudentService examStudentService;
+
     @Resource
     RedisUtil redisUtil;
 
@@ -897,4 +905,35 @@ public class PrintCommonServiceServiceImpl implements PrintCommonService {
             }
         }
     }
+
+    public int saveBatchStudent(Long schoolId, String extendFields, List<String> classIds, Long examDetailCourseId, SysUser sysUser) {
+        QueryWrapper<BasicStudent> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.lambda().eq(BasicStudent::getSchoolId, schoolId).in(BasicStudent::getClazzId, classIds);
+        List<BasicStudent> basicStudents = basicStudentService.list(queryWrapper1);
+        AtomicInteger atomicInteger = new AtomicInteger(1);
+        List<ExamStudent> examStudents = new ArrayList<>();
+        SerialNumberParams ticketNumberParams = new SerialNumberParams("ticketNumber-" + schoolId, DateUtil.format(new Date(), "yyyyMM"), 6);
+        for (BasicStudent basicStudent : basicStudents) {
+            ExamStudent examStudent = new ExamStudent();
+            examStudent.setId(SystemConstant.getDbUuid());
+            examStudent.setSchoolId(schoolId);
+            examStudent.setOrgId(sysUser.getOrgId());
+            examStudent.setExamDetailCourseId(examDetailCourseId);
+            examStudent.setStudentName(basicStudent.getStudentName());
+            examStudent.setStudentCode(basicStudent.getStudentCode());
+            // 准考证号(年月+000001)
+            examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
+            examStudent.setExtendFields(extendFields);
+            examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
+            examStudent.setClazzId(String.valueOf(basicStudent.getClazzId()));
+            examStudent.setCreateId(sysUser.getId());
+            examStudents.add(examStudent);
+        }
+        examStudentService.saveBatch(examStudents);
+        return examStudents.size();
+    }
+
+    public String createTempNumber(SerialNumberParams serialNumberParams) {
+        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
+    }
 }

+ 4 - 0
distributed-print-business/src/main/resources/mapper/ExamTaskApplyTempMapper.xml

@@ -0,0 +1,4 @@
+<?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.distributed.print.business.mapper.ExamTaskApplyTempMapper">
+</mapper>

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

@@ -1034,4 +1034,39 @@
         </where>
         order by et.paper_number asc
     </select>
+    <select id="findExamPackageDetailByPaperNumber"
+            resultType="com.qmth.distributed.print.business.bean.dto.ApprovalForm.ExamPackageDetail">
+        SELECT
+            ed.id AS examDetailId,
+            ed.exam_start_time AS examStartTime,
+            ed.exam_end_time AS examEndTime,
+            ed.exam_place AS examPlace,
+            ed.exam_room AS examRoom,
+            ed.package_code AS packageCode,
+            ed.status AS examDetailStatus,
+            edc.id AS examDetailCourseId,
+            edc.course_code AS courseCode,
+            edc.course_name AS courseName,
+            edc.paper_number AS paperNumber,
+            edc.total_subjects AS examDetailCourseTotalSubjects,
+            edc.clazz_id AS clazzIds,
+            epp.id AS examPrintPlanId,
+            epp.name AS examPrintPlanName,
+            epp.print_content AS printContent,
+            epp.backup_method AS backupMethod,
+            epp.backup_count AS backupCount,
+            epp.status AS examPrintPlanStatus
+        FROM
+            exam_detail ed
+                INNER JOIN
+            exam_detail_course edc ON edc.exam_detail_id = ed.id
+                INNER JOIN
+            exam_print_plan epp ON epp.id = ed.print_plan_id
+        <where>
+            <if test="paperNumber != null and paperNumber != ''">
+                AND edc.paper_number = #{paperNumber}
+            </if>
+            AND (epp.status = 'PRINTING' OR epp.status = 'PRINT_FINISH')
+        </where>
+    </select>
 </mapper>

+ 26 - 0
distributed-print-business/src/main/resources/mapper/ExamTaskReviewLogMapper.xml

@@ -23,6 +23,7 @@
             tffl.id,
             tffl.approve_operation as approvePass,
             tffl.approve_remark as reason,
+            tffl.approve_setup as setUp,
             tffl.approve_id as operateId,
             su.real_name as operateName,
             tffl.create_time as operateTime
@@ -33,4 +34,29 @@
         order by tffl.create_time desc
     </select>
 
+    <select id="findOnePassBySetUp"
+            resultType="com.qmth.distributed.print.business.bean.dto.ApprovalForm.ApprovalInfo">
+        SELECT
+            tffl.approve_remark AS remark,
+            tffl.approve_setup AS level,
+            tffl.approve_id AS approveId,
+            su.real_name AS approveName,
+            tffl.create_time AS time
+        FROM
+            t_f_flow_log tffl
+                LEFT JOIN
+            sys_user su ON tffl.approve_id = su.id
+        <where>
+            AND tffl.approve_operation = 'APPROVE'
+            <if test="flowId > 0 and flowId != ''">
+                AND tffl.flow_id = #{flowId}
+            </if>
+            <if test="setup != null and setup != ''">
+                AND tffl.approve_setup = #{setup}
+            </if>
+        </where>
+        ORDER BY tffl.create_time DESC
+        LIMIT 1
+    </select>
+
 </mapper>

+ 60 - 5
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -91,6 +91,9 @@ public class ExamTaskController {
     @Resource
     ActivitiService activitiService;
 
+    @Autowired
+    ExamTaskApplyTempService examTaskApplyTempService;
+
 
     /**
      * 命题任务管理-查询
@@ -592,6 +595,48 @@ public class ExamTaskController {
         return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
     }
 
+    /**
+     * 班级列表
+     *
+     * @param courseCode
+     * @return
+     */
+    @ApiOperation(value = "命题任务管理-命题申请-班级列表")
+    @RequestMapping(value = "/list_task_apply_class", method = RequestMethod.POST)
+    public Result listTaskApplyClass(@RequestParam(value = "courseCode") String courseCode) {
+        return ResultUtil.ok(examTaskPrintService.listExamTaskClass(courseCode));
+    }
+
+    /**
+     * 命题任务管理-命题申请-暂存
+     *
+     * @param examTaskApplyTemp
+     * @return
+     */
+    @ApiOperation(value = "命题任务管理-命题申请-暂存")
+    @RequestMapping(value = "/stage_task_apply", method = RequestMethod.POST)
+    public Result stageTaskApply(@RequestBody ExamTaskApplyTemp examTaskApplyTemp) {
+        ExamTaskApplyTemp task = examTaskApplyTempService.stageTaskApply(examTaskApplyTemp);
+        return ResultUtil.ok(task);
+    }
+
+    /**
+     * 命题任务管理-命题申请-提交
+     *
+     * @param examTaskApplyTemp
+     * @return
+     */
+    @ApiOperation(value = "命题任务管理-命题申请-提交")
+    @RequestMapping(value = "/submit_task_apply", method = RequestMethod.POST)
+    public Result submitTaskApply(@RequestBody ExamTaskApplyTemp examTaskApplyTemp) throws IOException {
+        ExamTask examTask = examTaskService.submitTaskApply(examTaskApplyTemp);
+        if (!examTask.getReview()) {
+            // 校验是否可以提交打印状态
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+        }
+        return ResultUtil.ok();
+    }
+
     /**
      * 入库申请-新建命题任务
      *
@@ -601,17 +646,17 @@ public class ExamTaskController {
     @ApiOperation(value = "入库申请-新建命题任务-暂存/提交")
     @RequestMapping(value = "/save_task_apply", method = RequestMethod.POST)
     public Result saveTaskApply(@RequestBody ExamTaskApplyParam examTaskApplyParam) throws IOException {
-        ExamTask task = examTaskService.saveExamTaskAndExamTaskDetail(examTaskApplyParam);
-        if (examTaskApplyParam.getExamTaskDetail().getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && !task.getReview()) {
+        ExamTask examTask = examTaskService.saveExamTaskAndExamTaskDetail(examTaskApplyParam);
+        if (examTaskApplyParam.getExamTaskDetail().getOperateType().equals(ExamStatusEnum.SUBMIT.name()) && !examTask.getReview()) {
             // 校验是否可以提交打印状态
-            printCommonService.checkData(task.getSchoolId(), task.getCourseCode(), task.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
+            printCommonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), (SysUser) ServletUtil.getRequestUser());
         }
 
-        return ResultUtil.ok(task);
+        return ResultUtil.ok(examTask);
     }
 
     /**
-     * 入库申请-新建命题任务
+     * 入库申请-新建命题任务-取消/删除
      *
      * @param examTaskId
      * @return
@@ -752,5 +797,15 @@ public class ExamTaskController {
         return ResultUtil.ok((Object) examTaskService.findCardTitle(SystemConstant.convertIdToLong(cardRuleId)));
     }
 
+
+    @ApiOperation(value = "命题任务-审批-获取试卷审批表数据")
+    @RequestMapping(value = "/find_approve_form_json", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findApproveFormJson(@ApiParam(value = "题卡规则id", required = true) @RequestParam String examTaskId) {
+        return ResultUtil.ok((Object) examTaskService.findExamTaskApprovalForm(SystemConstant.convertIdToLong(examTaskId)));
+    }
+
+
+
 }
 

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

@@ -76,7 +76,6 @@ public class TFFlowController {
     @Resource
     TFFlowApproveLogService tfFlowApproveLogService;
 
-
     @ApiOperation(value = "注册流程")
     @Transactional
     @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintAuthenticationService.java

@@ -118,7 +118,7 @@ public class DistributedPrintAuthenticationService implements AuthorizationServi
             return true;
         }
         //系统公用接口不拦截
-        List<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS);
+        List<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS, SystemConstant.getHeadOrUserSchoolId());
         int sysCount = Objects.nonNull(sysUrls) ? (int) sysUrls.stream().filter(s -> s.equalsIgnoreCase(path)).count() : 0;
         if (sysCount > 0) {
             return true;

+ 17 - 0
distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java

@@ -3,6 +3,8 @@ package com.qmth.distributed.print;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
+import com.qmth.distributed.print.business.entity.ExamPrintPlan;
+import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.enums.MessageEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -40,6 +42,8 @@ public class ServiceTest {
     private BasicVerifyCodeService basicVerifyCodeService;
     @Resource
     private BasicCourseService basicCourseService;
+    @Resource
+    private ExamTaskService examTaskService;
 
 
     @Test
@@ -107,4 +111,17 @@ public class ServiceTest {
         System.out.println(JSON.toJSONString(basicCourseList));
     }
 
+    @Test
+    public void findByExamDetailId(){
+        Long examDetailId = 1L;
+        ExamPrintPlan examPrintPlan = examPrintPlanService.findByExamDetailId(examDetailId);
+        System.out.println(JSON.toJSONString(examPrintPlan));
+    }
+
+    @Test
+    public void approveForm(){
+        Long examTask = 167675409079468032L;
+        System.out.println(JSON.toJSONString(examTaskService.findExamTaskApprovalForm(examTask)));
+    }
+
 }

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicClazzService.java

@@ -56,4 +56,20 @@ public interface BasicClazzService extends IService<BasicClazz> {
      * @return 班级数据源
      */
     List<ClazzDatasourceResult> findClazzDatasource(Long campusId);
+
+    /**
+     * 根据班级id组查找班级名称组
+     * @param clazzIds 班级id组(字符串)
+     * @param separator 分隔符 默认","
+     * @return 班级名称组
+     */
+    String findClazzNamesByClazzIds(String clazzIds, String separator);
+
+    /**
+     * 根据班级id组查找班级名称组
+     * @param clazzIdList 班级id组(集合)
+     * @param separator 分隔符 默认","
+     * @return 班级名称组
+     */
+    String findClazzNamesByClazzIds(List<Long> clazzIdList, String separator);
 }

+ 6 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/CommonCacheService.java

@@ -137,25 +137,28 @@ public interface CommonCacheService {
      * 获取鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      * @return
      */
-    public List<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum);
+    public List<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);
 
     /**
      * 修改鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      * @return
      */
-    public List<String> updatePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum);
+    public List<String> updatePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);
 
 
     /**
      * 删除鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      */
-    public void removePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum);
+    public void removePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);
 
     /**
      * 添加角色权限缓存

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -91,9 +91,10 @@ public interface TeachcloudCommonService {
      * 获取鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      * @return
      */
-    public List<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum);
+    public List<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);
 
     /**
      * 给学校赋予权限的公共方法(权限是否启用跟学校联动)

+ 35 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java

@@ -1,7 +1,6 @@
 package com.qmth.teachcloud.common.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,7 +9,6 @@ import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
 import com.qmth.teachcloud.common.bean.result.BasicClazzResult;
 import com.qmth.teachcloud.common.bean.result.ClazzDatasourceResult;
-import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
@@ -218,6 +216,28 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
                 }).collect(Collectors.toList());
     }
 
+    @Override
+    public String findClazzNamesByClazzIds(String clazzIds, String separator) {
+        if (!SystemConstant.strNotNull(separator)) {
+            separator = ",";
+        }
+        String[] strArr;
+        strArr = clazzIds.split(separator);
+        Set<Long> clazzIdSet = Arrays.stream(strArr).map(SystemConstant::convertIdToLong).collect(Collectors.toSet());
+        List<String> clazzNameList = this.findClazzNamesByClazzIdSet(clazzIdSet);
+        return String.join(separator, clazzNameList);
+    }
+
+    @Override
+    public String findClazzNamesByClazzIds(List<Long> clazzIdList, String separator) {
+        if (!SystemConstant.strNotNull(separator)) {
+            separator = ",";
+        }
+        Set<Long> clazzIdSet = new HashSet<>(clazzIdList);
+        List<String> clazzNameList = this.findClazzNamesByClazzIdSet(clazzIdSet);
+        return String.join(separator,clazzNameList);
+    }
+
     /**
      * 基础班级保存助手方法
      *
@@ -283,4 +303,17 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
         }
         return editEntityList;
     }
+
+    /**
+     * 根据clazzIdSet集合查询班级名称集合
+     * @param clazzIdSet 班级idset
+     * @return 班级名称集合
+     */
+    private List<String> findClazzNamesByClazzIdSet(Set<Long> clazzIdSet){
+        List<BasicClazz> basicClazzList = new ArrayList<>();
+        if (clazzIdSet.size() > 0){
+            basicClazzList = this.list(new QueryWrapper<BasicClazz>().lambda().in(BasicClazz::getId,clazzIdSet));
+        }
+        return basicClazzList.stream().map(BasicClazz::getClazzName).collect(Collectors.toList());
+    }
 }

+ 11 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/CommonCacheServiceImpl.java

@@ -226,34 +226,37 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * 获取鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0")
-    public List<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum) {
-        return commonService.getPrivilegeUrl(privilegePropertyEnum);
+    @Cacheable(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0 + '-' + #p1")
+    public List<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId) {
+        return commonService.getPrivilegeUrl(privilegePropertyEnum, schoolId);
     }
 
     /**
      * 修改鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0")
-    public List<String> updatePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum) {
-        return commonService.getPrivilegeUrl(privilegePropertyEnum);
+    @CachePut(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0 + '-' + #p1")
+    public List<String> updatePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId) {
+        return commonService.getPrivilegeUrl(privilegePropertyEnum, schoolId);
     }
 
     /**
      * 删除鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      */
     @Override
-    @CacheEvict(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0")
-    public void removePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum) {
+    @CacheEvict(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0 + '-' + #p1")
+    public void removePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId) {
 
     }
 

+ 4 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -301,9 +301,9 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
 
     @Override
     public List<SysOrg> findDeepByOrgIdAndType(OrgTypeEnum orgTypeEnum) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-
-        return this.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getType, orgTypeEnum).eq(SysOrg::getEnable, true)
-                .in(SysOrg::getSchoolId, schoolId));
+        Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
+        return this.list(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getType, orgTypeEnum)
+                .eq(SysOrg::getEnable, true)
+                .in(SysOrg::getId, orgIds));
     }
 }

+ 4 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -298,14 +298,16 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      * 获取鉴权url
      *
      * @param privilegePropertyEnum
+     * @param schoolId
      * @return
      */
     @Override
-    public List<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum) {
+    public List<String> getPrivilegeUrl(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId) {
         QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
         sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getType, PrivilegeEnum.URL)
                 .eq(SysPrivilege::getProperty, privilegePropertyEnum)
-                .eq(SysPrivilege::getEnable, true);
+                .eq(SysPrivilege::getEnable, true)
+                .eq(SysPrivilege::getSchoolId, schoolId);
         List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
         return Objects.nonNull(sysPrivilegeList) && sysPrivilegeList.size() > 0 ? sysPrivilegeList.stream().map(s -> s.getUrl()).collect(Collectors.toList()) : null;
     }

+ 2 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/AuthUtil.java

@@ -46,7 +46,7 @@ public class AuthUtil {
     public static boolean adminAuthInterceptor(HttpServletRequest request, HttpServletResponse response, Object handler) {
         String url = request.getServletPath();
         commonCacheService = SpringContextHolder.getBean(CommonCacheService.class);
-        List<String> privilegeUrl = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.NO_AUTH);
+        List<String> privilegeUrl = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.NO_AUTH, SystemConstant.getHeadOrUserSchoolId());
         //无需鉴权的url
         int noAuthCount = Objects.nonNull(privilegeUrl) ? (int) privilegeUrl.stream().filter(s -> s.equalsIgnoreCase(url)).count() : 0;
         if (noAuthCount > 0) {
@@ -159,7 +159,7 @@ public class AuthUtil {
             return true;
         }
         //系统公用接口不拦截
-        List<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS);
+        List<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS, SystemConstant.getHeadOrUserSchoolId());
         int sysCount = Objects.nonNull(sysUrls) ? (int) sysUrls.stream().filter(s -> s.equalsIgnoreCase(url)).count() : 0;
         if (sysCount > 0) {
             return true;

+ 1 - 1
teachcloud-report/src/main/java/com/qmth/teachcloud/report/auth/TeachcloudReportAuthenticationService.java

@@ -118,7 +118,7 @@ public class TeachcloudReportAuthenticationService implements AuthorizationServi
             return true;
         }
         //系统公用接口不拦截
-        List<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS);
+        List<String> sysUrls = commonCacheService.privilegeUrlCache(PrivilegePropertyEnum.SYS, SystemConstant.getHeadOrUserSchoolId());
         int sysCount = Objects.nonNull(sysUrls) ? (int) sysUrls.stream().filter(s -> s.equalsIgnoreCase(path)).count() : 0;
         if (sysCount > 0) {
             return true;