瀏覽代碼

获取命题任务审核表json

caozixuan 3 年之前
父節點
當前提交
e3d7020113
共有 19 個文件被更改,包括 787 次插入2 次删除
  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. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskMapper.java
  8. 4 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskReviewLogMapper.java
  9. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  10. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskReviewLogService.java
  11. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  12. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  13. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskReviewLogServiceImpl.java
  14. 126 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  15. 35 0
      distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml
  16. 26 0
      distributed-print-business/src/main/resources/mapper/ExamTaskReviewLogMapper.xml
  17. 17 0
      distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java
  18. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicClazzService.java
  19. 33 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.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;
+    }
 }

+ 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);
 }

+ 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);
 }

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

@@ -3,6 +3,7 @@ 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;
@@ -203,4 +204,11 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @return
      */
     List<Long> findFlowIdToNotMySelf(Long currentUserId);
+
+    /**
+     * 查找命题任务审核表
+     * @param examTaskId 命题任务id
+     * @return 命题任务审核表参数
+     */
+    ExamTaskApprovalFormDto findExamTaskApprovalForm(Long examTaskId);
 }

+ 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;
+    }
+
 
     /**
      * 查找子机构

+ 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);
+    }
 }

+ 126 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -9,6 +9,7 @@ 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.*;
+import com.qmth.distributed.print.business.bean.dto.ApprovalForm.*;
 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.*;
@@ -143,6 +144,15 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     RedisUtil redisUtil;
 
+    @Resource
+    SysOrgService sysOrgService;
+
+    @Resource
+    ExamPrintPlanService examPrintPlanService;
+
+    @Resource
+    BasicClazzService basicClazzService;
+
     @Override
     public List<ExamTask> listByCourseCode(Long schoolId, String code) {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
@@ -1500,6 +1510,122 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTaskMapper.findFlowIdToNotMySelf(currentUserId);
     }
 
+    @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;
+    }
+
     /**
      * 简单校验提交参数
      *

+ 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>

+ 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);
 }

+ 33 - 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,26 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
                 }).collect(Collectors.toList());
     }
 
+    @Override
+    public String findClazzNamesByClazzIds(String clazzIds, String separator) {
+        String[] strArr;
+        if (SystemConstant.strNotNull(separator)){
+            strArr = clazzIds.split(separator);
+        }else {
+            strArr = clazzIds.split(",");
+        }
+        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) {
+        Set<Long> clazzIdSet = new HashSet<>(clazzIdList);
+        List<String> clazzNameList = this.findClazzNamesByClazzIdSet(clazzIdSet);
+        return String.join(separator,clazzNameList);
+    }
+
     /**
      * 基础班级保存助手方法
      *
@@ -283,4 +301,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());
+    }
 }