瀏覽代碼

印刷任务管理

xiaof 4 年之前
父節點
當前提交
2f73d1aa2a
共有 17 個文件被更改,包括 441 次插入113 次删除
  1. 38 29
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/PrintTaskDto.java
  2. 20 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/PrintTaskTotalDto.java
  3. 44 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/TaskTotalLeftDto.java
  4. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TemplatePrintInfoResult.java
  5. 64 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java
  6. 6 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetailCourse.java
  7. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/EnumType.java
  8. 39 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamDetailStatusEnum.java
  9. 8 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailMapper.java
  10. 7 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  11. 1 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamPrintPlanService.java
  12. 85 22
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  13. 4 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java
  14. 6 2
      distributed-print-business/src/main/resources/db/init-table.sql
  15. 89 5
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  16. 3 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/EnumsController.java
  17. 25 11
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

+ 38 - 29
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/PrintTaskDto.java

@@ -5,24 +5,33 @@ package com.qmth.distributed.print.business.bean.dto;
  */
 public class PrintTaskDto {
 
+    private String examDetailId;
     private String printPlanId;
     private String printPlanName;
-    private String examDate;
-    private String examTime;
+    private String examStartTime;
+    private String examEndTime;
     private String courseNameCode;
     private String paperNumber;
     private String examPlace;
     private String examRoom;
-    private String pageA3;
-    private String pageA4;
+    private String singlePagesA3;
+    private Integer pagesA3;
+    private Integer pagesA4;
     private Integer totalSubjects;
-    private Integer totalPages;
     private String status;
     private Boolean validate;
     private Long printStartTime;
     private Long printEndTime;
     private String packageCode;
 
+    public String getExamDetailId() {
+        return examDetailId;
+    }
+
+    public void setExamDetailId(String examDetailId) {
+        this.examDetailId = examDetailId;
+    }
+
     public String getPrintPlanId() {
         return printPlanId;
     }
@@ -39,20 +48,20 @@ public class PrintTaskDto {
         this.printPlanName = printPlanName;
     }
 
-    public String getExamDate() {
-        return examDate;
+    public String getExamStartTime() {
+        return examStartTime;
     }
 
-    public void setExamDate(String examDate) {
-        this.examDate = examDate;
+    public void setExamStartTime(String examStartTime) {
+        this.examStartTime = examStartTime;
     }
 
-    public String getExamTime() {
-        return examTime;
+    public String getExamEndTime() {
+        return examEndTime;
     }
 
-    public void setExamTime(String examTime) {
-        this.examTime = examTime;
+    public void setExamEndTime(String examEndTime) {
+        this.examEndTime = examEndTime;
     }
 
     public String getCourseNameCode() {
@@ -87,36 +96,36 @@ public class PrintTaskDto {
         this.examRoom = examRoom;
     }
 
-    public String getPageA3() {
-        return pageA3;
+    public String getSinglePagesA3() {
+        return singlePagesA3;
     }
 
-    public void setPageA3(String pageA3) {
-        this.pageA3 = pageA3;
+    public void setSinglePagesA3(String singlePagesA3) {
+        this.singlePagesA3 = singlePagesA3;
     }
 
-    public String getPageA4() {
-        return pageA4;
+    public Integer getPagesA3() {
+        return pagesA3;
     }
 
-    public void setPageA4(String pageA4) {
-        this.pageA4 = pageA4;
+    public void setPagesA3(Integer pagesA3) {
+        this.pagesA3 = pagesA3;
     }
 
-    public Integer getTotalSubjects() {
-        return totalSubjects;
+    public Integer getPagesA4() {
+        return pagesA4;
     }
 
-    public void setTotalSubjects(Integer totalSubjects) {
-        this.totalSubjects = totalSubjects;
+    public void setPagesA4(Integer pagesA4) {
+        this.pagesA4 = pagesA4;
     }
 
-    public Integer getTotalPages() {
-        return totalPages;
+    public Integer getTotalSubjects() {
+        return totalSubjects;
     }
 
-    public void setTotalPages(Integer totalPages) {
-        this.totalPages = totalPages;
+    public void setTotalSubjects(Integer totalSubjects) {
+        this.totalSubjects = totalSubjects;
     }
 
     public String getStatus() {

+ 20 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/PrintTaskTotalDto.java

@@ -7,10 +7,10 @@ public class PrintTaskTotalDto {
 
     private String totalSubjects;
     private String packageCount;
-    private String pageA3;
-    private String pageA4;
-    private String pageA3Left;
-    private String pageA4Left;
+    private String pagesA3;
+    private String pagesA4;
+    private String pagesA3Left;
+    private String pagesA4Left;
 
     public String getTotalSubjects() {
         return totalSubjects;
@@ -28,35 +28,35 @@ public class PrintTaskTotalDto {
         this.packageCount = packageCount;
     }
 
-    public String getPageA3() {
-        return pageA3;
+    public String getPagesA3() {
+        return pagesA3;
     }
 
-    public void setPageA3(String pageA3) {
-        this.pageA3 = pageA3;
+    public void setPagesA3(String pagesA3) {
+        this.pagesA3 = pagesA3;
     }
 
-    public String getPageA4() {
-        return pageA4;
+    public String getPagesA4() {
+        return pagesA4;
     }
 
-    public void setPageA4(String pageA4) {
-        this.pageA4 = pageA4;
+    public void setPagesA4(String pagesA4) {
+        this.pagesA4 = pagesA4;
     }
 
-    public String getPageA3Left() {
-        return pageA3Left;
+    public String getPagesA3Left() {
+        return pagesA3Left;
     }
 
-    public void setPageA3Left(String pageA3Left) {
-        this.pageA3Left = pageA3Left;
+    public void setPagesA3Left(String pagesA3Left) {
+        this.pagesA3Left = pagesA3Left;
     }
 
-    public String getPageA4Left() {
-        return pageA4Left;
+    public String getPagesA4Left() {
+        return pagesA4Left;
     }
 
-    public void setPageA4Left(String pageA4Left) {
-        this.pageA4Left = pageA4Left;
+    public void setPagesA4Left(String pagesA4Left) {
+        this.pagesA4Left = pagesA4Left;
     }
 }

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

@@ -0,0 +1,44 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+/**
+ * @Date: 2021/4/12.
+ */
+public class TaskTotalLeftDto {
+
+    private Integer paperPagesA3;
+    private Integer cardPagesA3;
+    private Integer printPaperCount;
+    private Integer printCardCount;
+
+    public Integer getPaperPagesA3() {
+        return paperPagesA3;
+    }
+
+    public void setPaperPagesA3(Integer paperPagesA3) {
+        this.paperPagesA3 = paperPagesA3;
+    }
+
+    public Integer getCardPagesA3() {
+        return cardPagesA3;
+    }
+
+    public void setCardPagesA3(Integer cardPagesA3) {
+        this.cardPagesA3 = cardPagesA3;
+    }
+
+    public Integer getPrintPaperCount() {
+        return printPaperCount;
+    }
+
+    public void setPrintPaperCount(Integer printPaperCount) {
+        this.printPaperCount = printPaperCount;
+    }
+
+    public Integer getPrintCardCount() {
+        return printCardCount;
+    }
+
+    public void setPrintCardCount(Integer printCardCount) {
+        this.printCardCount = printCardCount;
+    }
+}

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/TemplatePrintInfoResult.java

@@ -40,6 +40,7 @@ public class TemplatePrintInfoResult {
     @ApiModelProperty(value = "模板样式")
     private ClassifyEnum templateClassify;
 
+    @JsonSerialize(using = ToStringSerializer.class)
     @ApiModelProperty(value = "模板附件id")
     private Long attachmentId;
 

+ 64 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java

@@ -6,6 +6,7 @@ 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.base.BaseEntity;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
@@ -68,6 +69,22 @@ public class ExamDetail extends BaseEntity implements Serializable {
     @TableField("package_code")
     private String packageCode;
 
+    @TableField("pages_a3")
+    private String pagesA3;
+
+    @TableField("pages_a4")
+    private String pagesA4;
+
+    private Boolean validate;
+
+    private ExamDetailStatusEnum status;
+
+    @TableField("print_start_time")
+    private Long printStartTime;
+
+    @TableField("print_end_time")
+    private Long printEndTime;
+
     @ApiModelProperty(value = "附件id")
     @TableField(value = "attachment_id")
     private Long attachmentId;
@@ -180,4 +197,51 @@ public class ExamDetail extends BaseEntity implements Serializable {
         this.packageCode = packageCode;
     }
 
+    public String getPagesA3() {
+        return pagesA3;
+    }
+
+    public void setPagesA3(String pagesA3) {
+        this.pagesA3 = pagesA3;
+    }
+
+    public String getPagesA4() {
+        return pagesA4;
+    }
+
+    public void setPagesA4(String pagesA4) {
+        this.pagesA4 = pagesA4;
+    }
+
+    public Boolean getValidate() {
+        return validate;
+    }
+
+    public void setValidate(Boolean validate) {
+        this.validate = validate;
+    }
+
+    public ExamDetailStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(ExamDetailStatusEnum status) {
+        this.status = status;
+    }
+
+    public Long getPrintStartTime() {
+        return printStartTime;
+    }
+
+    public void setPrintStartTime(Long printStartTime) {
+        this.printStartTime = printStartTime;
+    }
+
+    public Long getPrintEndTime() {
+        return printEndTime;
+    }
+
+    public void setPrintEndTime(Long printEndTime) {
+        this.printEndTime = printEndTime;
+    }
 }

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

@@ -36,6 +36,12 @@ public class ExamDetailCourse extends BaseEntity implements Serializable {
     @TableField("paper_number")
     private String paperNumber;
 
+    @TableField("paper_pages_a3")
+    private String paperPagesA3;
+
+    @TableField("card_pages_a3")
+    private String cardPagesA3;
+
     public Long getSchoolId() {
         return schoolId;
     }

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/EnumType.java

@@ -23,6 +23,7 @@ public enum EnumType {
     ORG_CENTER_TYPE_ENUM("机构用户中心类型"),
     MAKE_METHOD("题卡制作方式"),
     PRINT_PLAN_STATUS_ENUM("印刷计划状态类型"),
+    EXAM_DETAIL_STATUS_ENUM("考场状态类型"),
     CARD_TYPE("题卡类型");
 
     EnumType(String desc) {

+ 39 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/ExamDetailStatusEnum.java

@@ -0,0 +1,39 @@
+package com.qmth.distributed.print.business.enums;
+
+import com.qmth.distributed.print.business.enums.result.EnumResult;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description: 考场状态枚举类
+ */
+public enum ExamDetailStatusEnum {
+    NEW("新建"),
+    READY("就绪"),
+    WAITING("待打印"),
+    PRINTING("印刷中"),
+    FINISH("已完成");
+    private final String desc;
+
+    ExamDetailStatusEnum(String desc) {
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public static List<EnumResult> listTypes() {
+        List<EnumResult> list = new ArrayList<>();
+        for (ExamDetailStatusEnum value : ExamDetailStatusEnum.values()) {
+            EnumResult result = new EnumResult();
+            result.setName(value.name());
+            result.setOrdinal(value.ordinal());
+            result.setCode(null);
+            result.setDesc(value.getDesc());
+            list.add(result);
+        }
+        return list;
+    }
+}

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

@@ -4,11 +4,15 @@ 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.PrintTaskDto;
+import com.qmth.distributed.print.business.bean.dto.PrintTaskTotalDto;
+import com.qmth.distributed.print.business.bean.dto.TaskTotalLeftDto;
 import com.qmth.distributed.print.business.bean.result.ExaminationDetailResult;
 import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.entity.ExamDetail;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Map;
+
 /**
  * <p>
  * 考务数据 Mapper 接口
@@ -40,4 +44,8 @@ public interface ExamDetailMapper extends BaseMapper<ExamDetail> {
 
     IPage<ExaminationDetailResult> findDetailPageById(@Param("page") Page<ExaminationDetailResult> page,
                                                   @Param("examDetailId") Long examDetailId);
+
+    PrintTaskTotalDto taskTotalData(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("status") String status, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("examPlace") String examPlace, @Param("examRoom") String examRoom, @Param("examStartTime") Long examStartTime, @Param("examEndTime") Long examEndTime);
+
+    TaskTotalLeftDto calcLeftA3(Long schoolId);
 }

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

@@ -42,7 +42,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     PrintTaskTotalDto taskTotalData(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime);
 
-    String taskViewPDF(Long id);
+    String taskViewPDF(Long examDetailId);
 
     /**
      * 查询有效的考务字段
@@ -118,4 +118,10 @@ public interface ExamDetailService extends IService<ExamDetail> {
      * @return 考场集合
      */
     List<String> findExamRoomDatasource();
+
+    boolean submitTask(ExamDetail examDetail);
+
+    boolean taskCancel(ExamDetail examDetail);
+
+    boolean resubmitTask(ExamDetail examDetail);
 }

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

@@ -6,10 +6,9 @@ import com.qmth.distributed.print.business.bean.params.DeleteParams;
 import com.qmth.distributed.print.business.bean.params.PrintPlanParams;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 import com.qmth.distributed.print.business.bean.result.PrintPlanResult;
-import com.qmth.distributed.print.business.bean.result.PrintPlanTemplateResult;
+import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
-import org.omg.CORBA.OBJ_ADAPTER;
 
 import java.util.List;
 import java.util.Map;
@@ -70,7 +69,4 @@ public interface ExamPrintPlanService extends IService<ExamPrintPlan> {
      */
     Boolean removePrintPlan(DeleteParams deleteParams);
 
-    boolean submitTask(ExamPrintPlan examPrintPlan);
-
-    boolean taskCancel(ExamPrintPlan examPrintPlan);
 }

+ 85 - 22
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -2,31 +2,32 @@ package com.qmth.distributed.print.business.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 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;
 import com.qmth.distributed.print.business.bean.dto.FieldsDto;
 import com.qmth.distributed.print.business.bean.dto.PrintTaskDto;
 import com.qmth.distributed.print.business.bean.dto.PrintTaskTotalDto;
+import com.qmth.distributed.print.business.bean.dto.TaskTotalLeftDto;
 import com.qmth.distributed.print.business.bean.result.ExaminationDetailResult;
 import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.bean.result.SummarizedDataResult;
+import com.qmth.distributed.print.business.entity.BasicAttachment;
 import com.qmth.distributed.print.business.entity.BasicExamRule;
 import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamDetailMapper;
-import com.qmth.distributed.print.business.service.BasicExamRuleService;
-import com.qmth.distributed.print.business.service.CacheService;
-import com.qmth.distributed.print.business.service.ExamDetailCourseService;
-import com.qmth.distributed.print.business.service.ExamDetailService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.ServletUtil;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
-
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -58,12 +59,18 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Resource
     private CacheService cacheService;
 
+    @Autowired
+    private BasicAttachmentService basicAttachmentService;
+
+    @Autowired
+    private CommonService commonService;
+
     private final static Logger log = LoggerFactory.getLogger(ExamDetailServiceImpl.class);
 
     @Transactional(rollbackFor = Exception.class)
     @Override
     public double calculateTotalSubjects(Long printPlanId) {
-        List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId,printPlanId));
+        List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId, printPlanId));
         return examDetailList.stream().collect(Collectors.summarizingDouble(ExamDetail::getTotalSubjects)).getSum();
     }
 
@@ -71,7 +78,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Override
     public double calculateTotalPackages(Long printPlanId) {
         double result = 0;
-        List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId,printPlanId));
+        List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda().eq(ExamDetail::getPrintPlanId, printPlanId));
         for (ExamDetail examDetail : examDetailList) {
             double count = examDetailCourseService.calculatePackagesByDetailId(examDetail.getId());
             result = result + count;
@@ -83,17 +90,43 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     public IPage<PrintTaskDto> listPrintTask(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Page<PrintTaskDto> page = new Page<>(pageNumber, pageSize);
-        IPage<PrintTaskDto> pirntTaskDtoIPage = this.baseMapper.listPrintTask(page, schoolId, printPlanId,status, courseCode, paperNumber, examPlace,examRoom, examStartTime, examEndTime);
+        IPage<PrintTaskDto> pirntTaskDtoIPage = this.baseMapper.listPrintTask(page, schoolId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime);
         return pirntTaskDtoIPage;
     }
 
     @Override
     public PrintTaskTotalDto taskTotalData(Long printPlanId, String status, String courseCode, String paperNumber, String examPlace, String examRoom, Long examStartTime, Long examEndTime) {
-        return null;
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        PrintTaskTotalDto printTaskTotalDto = this.baseMapper.taskTotalData(schoolId, printPlanId, status, courseCode, paperNumber, examPlace, examRoom, examStartTime, examEndTime);
+
+        // 计算A3剩余
+        TaskTotalLeftDto totalLeftDto = this.baseMapper.calcLeftA3(schoolId);
+        if (printTaskTotalDto != null) {
+            // 分别计算张数
+            // 试卷
+            int paperPagesA3 = totalLeftDto.getPaperPagesA3();
+            int printPaperCount = totalLeftDto.getPrintPaperCount();
+            int paperPages = paperPagesA3 % 2 == 0 ? paperPagesA3 / 2 : paperPagesA3 / 2 + 1;
+            int totalPaperPages = paperPages * printPaperCount;
+
+            // 题卡
+            int cardPagesA3 = totalLeftDto.getCardPagesA3();
+            int printCardCount = totalLeftDto.getPrintCardCount();
+            int cardPages = cardPagesA3 % 2 == 0 ? cardPagesA3 / 2 : cardPagesA3 / 2 + 1;
+            int totalCardPages = cardPages * printCardCount;
+            printTaskTotalDto.setPagesA3Left(String.valueOf(totalPaperPages + totalCardPages));
+
+        }
+        return printTaskTotalDto;
     }
 
     @Override
-    public String taskViewPDF(Long id) {
+    public String taskViewPDF(Long examDetailId) {
+        ExamDetail examDetail = this.getById(examDetailId);
+        if (examDetail.getAttachmentId() != null) {
+            BasicAttachment attachment = basicAttachmentService.getById(examDetail.getAttachmentId());
+            return attachment == null ? null : commonService.filePreview(attachment.getPath());
+        }
         return null;
     }
 
@@ -102,15 +135,15 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     public List<FieldsDto> findExaminationFields(Long schoolId) {
         // TODO: 2021/4/9 回复schoolId的获取方式
 //        BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId();
-        BasicExamRule basicExamRule = basicExamRuleService.list(new QueryWrapper<BasicExamRule>().lambda().eq(BasicExamRule::getSchoolId,schoolId)).get(0);
-        if (basicExamRule == null){
+        BasicExamRule basicExamRule = basicExamRuleService.list(new QueryWrapper<BasicExamRule>().lambda().eq(BasicExamRule::getSchoolId, schoolId)).get(0);
+        if (basicExamRule == null) {
             throw ExceptionResultEnum.ERROR.exception("找不到该学校考务字段信息 + schoolId" + schoolId);
         }
         String requiredFields = basicExamRule.getRequiredFields();
         String extendFields = basicExamRule.getExtendFields();
         // 必选字段
-        List<FieldsDto> requiredFieldsList = JSONObject.parseArray(requiredFields,FieldsDto.class);
-        if (requiredFieldsList.stream().anyMatch(e -> !e.getEnable())){
+        List<FieldsDto> requiredFieldsList = JSONObject.parseArray(requiredFields, FieldsDto.class);
+        if (requiredFieldsList.stream().anyMatch(e -> !e.getEnable())) {
             throw ExceptionResultEnum.ERROR.exception("该学校考务字段设置存在必选字段禁用的情况 schoolId = " + schoolId);
         }
         for (FieldsDto fieldsDto : requiredFieldsList) {
@@ -118,9 +151,9 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
 
         // 扩展字段
-        List<FieldsDto> extendFieldsList = JSONObject.parseArray(extendFields,FieldsDto.class);
+        List<FieldsDto> extendFieldsList = JSONObject.parseArray(extendFields, FieldsDto.class);
         List<String> extendCodeList = extendFieldsList.stream().map(FieldsDto::getCode).collect(Collectors.toList());
-        if (extendCodeList.stream().anyMatch(e -> requiredFieldsList.stream().map(FieldsDto::getCode).collect(Collectors.toList()).contains(e))){
+        if (extendCodeList.stream().anyMatch(e -> requiredFieldsList.stream().map(FieldsDto::getCode).collect(Collectors.toList()).contains(e))) {
             throw ExceptionResultEnum.ERROR.exception("该学校考务字段设置存在相同的code schoolId = " + schoolId);
         }
         // 有效的扩展字段
@@ -181,11 +214,11 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Transactional(rollbackFor = Exception.class)
     @Override
     public IPage<ExaminationResult> findExaminationBriefPage(Long schoolId, Long printPlanId, String courseCode, String paperNumber, String examPlace, String examRoom, String packageCode, int pageNumber, int pageSize) {
-        IPage<ExaminationResult> page = examDetailMapper.findBriefPage(new Page<>(pageNumber,pageSize),schoolId,printPlanId,courseCode,paperNumber,examPlace,examRoom,packageCode);
+        IPage<ExaminationResult> page = examDetailMapper.findBriefPage(new Page<>(pageNumber, pageSize), schoolId, printPlanId, courseCode, paperNumber, examPlace, examRoom, packageCode);
         List<ExaminationResult> list = page.getRecords();
         for (ExaminationResult examinationResult : list) {
             String examDetailCourseIds = examinationResult.getExamDetailCourseIds();
-            if (examDetailCourseIds == null || examDetailCourseIds.length() == 0){
+            if (examDetailCourseIds == null || examDetailCourseIds.length() == 0) {
                 throw ExceptionResultEnum.ERROR.exception("考务数据确实课程信息");
             }
             String[] arr = examDetailCourseIds.split(",");
@@ -201,8 +234,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                 courseNameCodeStr = courseNameCodeStr + name + "(" + code + ")" + separator;
                 paperNumberStr = paperNumberStr + number + separator;
             }
-            courseNameCodeStr = courseNameCodeStr.substring(0,courseNameCodeStr.length() - separator.length());
-            paperNumberStr = paperNumberStr.substring(0,paperNumberStr.length() - separator.length());
+            courseNameCodeStr = courseNameCodeStr.substring(0, courseNameCodeStr.length() - separator.length());
+            paperNumberStr = paperNumberStr.substring(0, paperNumberStr.length() - separator.length());
             examinationResult.setCourseNameCode(courseNameCodeStr);
             examinationResult.setPaperNumber(paperNumberStr);
         }
@@ -232,13 +265,13 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Transactional(rollbackFor = Exception.class)
     @Override
     public IPage<ExaminationDetailResult> findExaminationDetail(Long printPlanId, String courseCode, String paperNumber, String examPlace, String examRoom, String studentParam, int pageNumber, int pageSize) {
-        return examDetailMapper.findDetailPage(new Page<>(pageNumber,pageSize),printPlanId,courseCode,paperNumber,examPlace,examRoom,studentParam);
+        return examDetailMapper.findDetailPage(new Page<>(pageNumber, pageSize), printPlanId, courseCode, paperNumber, examPlace, examRoom, studentParam);
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
     public IPage<ExaminationDetailResult> findExaminationDetail(Long examDetailId, int pageNumber, int pageSize) {
-        return examDetailMapper.findDetailPageById(new Page<>(pageNumber,pageSize),examDetailId);
+        return examDetailMapper.findDetailPageById(new Page<>(pageNumber, pageSize), examDetailId);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -254,4 +287,34 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         List<ExamDetail> examDetail = this.list();
         return examDetail.stream().map(ExamDetail::getExamRoom).distinct().collect(Collectors.toList());
     }
+
+    @Override
+    public boolean submitTask(ExamDetail examDetail) {
+        // 检查前置操作是否完成 todo
+        UpdateWrapper<ExamDetail> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamDetail::getStatus, ExamDetailStatusEnum.PRINTING).eq(ExamDetail::getId, examDetail.getId());
+        return this.update(updateWrapper);
+    }
+
+    @Override
+    public boolean taskCancel(ExamDetail examDetail) {
+        ExamDetail detail = this.getById(examDetail.getId());
+        if (!detail.getStatus().name().equals(ExamDetailStatusEnum.WAITING.name())) {
+            throw ExceptionResultEnum.ERROR.exception("印刷状态为“待印刷”的任务可撤回提交");
+        }
+        UpdateWrapper<ExamDetail> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ExamDetail::getStatus, ExamDetailStatusEnum.READY).eq(ExamDetail::getId, examDetail.getId());
+        return this.update(updateWrapper);
+    }
+
+    @Override
+    public boolean resubmitTask(ExamDetail examDetail) {
+        ExamDetail detail = this.getById(examDetail.getId());
+        if (!detail.getStatus().name().equals(ExamDetailStatusEnum.PRINTING.name())
+                && !detail.getStatus().name().equals(ExamDetailStatusEnum.FINISH.name())) {
+            throw ExceptionResultEnum.ERROR.exception("印刷状态为“印刷中”、“已完成”的任务可重新提交印刷");
+        }
+        // todo 调用生成pdf方法
+        return false;
+    }
 }

+ 4 - 18
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPrintPlanServiceImpl.java

@@ -11,11 +11,9 @@ import com.qmth.distributed.print.business.bean.params.PrintPlanParams;
 import com.qmth.distributed.print.business.bean.result.PrintPlanBrief;
 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.BasicSchool;
-import com.qmth.distributed.print.business.entity.ExamPrintPlan;
-import com.qmth.distributed.print.business.entity.SysOrg;
-import com.qmth.distributed.print.business.entity.SysUser;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ClassifyEnum;
+import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.TemplateTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamPrintPlanMapper;
@@ -132,6 +130,7 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
                 Map<String, Object> printMap = new HashMap<>();
                 printMap.put("id", String.valueOf(templatePrintInfoResult.getTemplateId()));
                 printMap.put("name", templatePrintInfoResult.getTemplateName());
+                printMap.put("attachmentId", templatePrintInfoResult.getAttachmentId());
                 templateList.add(printMap);
             }
             if (templateList.size() > 0){
@@ -154,6 +153,7 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
                 Map<String, Object> printMap = new HashMap<>();
                 printMap.put("id", String.valueOf(templatePrintInfoResult.getTemplateId()));
                 printMap.put("name", templatePrintInfoResult.getTemplateName());
+                printMap.put("attachmentId", templatePrintInfoResult.getAttachmentId());
                 templateList.add(printMap);
             }
             if (templateList.size() > 0){
@@ -246,18 +246,4 @@ public class ExamPrintPlanServiceImpl extends ServiceImpl<ExamPrintPlanMapper, E
         }
         return resultList;
     }
-
-    @Override
-    public boolean submitTask(ExamPrintPlan examPrintPlan) {
-        UpdateWrapper<ExamPrintPlan> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ExamPrintPlan::getStatus, PrintPlanStatusEnum.PRINTING).eq(ExamPrintPlan::getId, examPrintPlan.getId());
-        return this.update(updateWrapper);
-    }
-
-    @Override
-    public boolean taskCancel(ExamPrintPlan examPrintPlan) {
-        UpdateWrapper<ExamPrintPlan> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ExamPrintPlan::getStatus, PrintPlanStatusEnum.NEW).eq(ExamPrintPlan::getId, examPrintPlan.getId());
-        return this.update(updateWrapper);
-    }
 }

+ 6 - 2
distributed-print-business/src/main/resources/db/init-table.sql

@@ -394,10 +394,12 @@ CREATE TABLE `exam_detail` (
   `print_progress` double DEFAULT NULL,
   `print_user` varchar(30) DEFAULT NULL COMMENT '打印员:一个考场只能被一个打印员认领',
   `package_code` varchar(30) DEFAULT NULL COMMENT '考场代码:卷袋贴、签到表上条码',
-  `paper_pages_a3` INT(2) DEFAULT NULL COMMENT '试卷单科次准印量A3(页)',
-  `card_pages_a3` INT(2) DEFAULT NULL COMMENT '题卡单科次准印量A3(页)',
   `pages_a3` INT(2) DEFAULT NULL COMMENT 'A3印量小计(页)',
   `pages_a4` INT(2) DEFAULT NULL COMMENT 'A4印量小计(页)',
+  `status` varchar(30) DEFAULT NULL COMMENT '状态:NEW: "新建",READY: "就绪",WAITING: "待印刷",PRINTING: "印刷中",FINISH: "已完成"',
+  `validate` TINYINT(1) DEFAULT false COMMENT '是否校验',
+  `print_start_time` bigint DEFAULT NULL COMMENT '打印开始时间',
+  `print_end_time` bigint DEFAULT NULL COMMENT '打印完成时间',
   `create_id` bigint DEFAULT NULL,
   `create_time` bigint DEFAULT NULL,
   `update_id` bigint DEFAULT NULL,
@@ -431,6 +433,8 @@ CREATE TABLE `exam_detail_course` (
   `course_code` varchar(20) NOT NULL,
   `course_name` varchar(50) NOT NULL,
   `paper_number` varchar(30) NOT NULL,
+  `paper_pages_a3` INT(2) DEFAULT NULL COMMENT '试卷单科次准印量A3(页)',
+  `card_pages_a3` INT(2) DEFAULT NULL COMMENT '题卡单科次准印量A3(页)',
   `create_id` bigint DEFAULT NULL,
   `create_time` bigint DEFAULT NULL,
   `update_id` bigint DEFAULT NULL,

+ 89 - 5
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -28,6 +28,7 @@
     </sql>
     <select id="listPrintTask" resultType="com.qmth.distributed.print.business.bean.dto.PrintTaskDto">
         SELECT
+            b.id examDetailId,
             b.package_code packageCode,
             a.id printPlanId,
             a.name printPlanName,
@@ -37,16 +38,20 @@
             c.paperNumber,
             b.exam_place examPlace,
             b.exam_room examRoom,
-            b.total_subjects totalSubjects
+            b.total_subjects totalSubjects,
+            ifnull(b.pages_a3, 0) pagesA3,
+            ifnull(b.pages_a4, 0) pagesA4,
+            c.singlePagesA3
         FROM
             exam_print_plan a
-                LEFT JOIN
+                 JOIN
             exam_detail b ON a.id = b.print_plan_id
-                LEFT JOIN
+                 JOIN
             (SELECT
                 exam_detail_id,
                     GROUP_CONCAT(CONCAT(course_name, '(', course_code, ')')) courseNameCode,
-                    GROUP_CONCAT(paper_number) paperNumber
+                    GROUP_CONCAT(paper_number) paperNumber,
+                    GROUP_CONCAT(ifnull(paper_pages_a3, 0) + ifnull(card_pages_a3, 0)) singlePagesA3
             FROM
                 exam_detail_course
                 <where>
@@ -63,7 +68,7 @@
                     a.id = #{printPlanId}
                 </if>
                 <if test="status != null and status != ''">
-                    a.status = #{status}
+                    b.status = #{status}
                 </if>
                 <if test="examPlace != null and examPlace != ''">
                     b.exam_place = #{examPlace}
@@ -213,5 +218,84 @@
             </if>
         </where>
     </select>
+    <select id="taskTotalData" resultType="com.qmth.distributed.print.business.bean.dto.PrintTaskTotalDto">
+        SELECT
+            count(b.package_code) packageCount,
+            sum(b.total_subjects) totalSubjects,
+            sum(ifnull(b.pages_a3, 0))/2 pagesA3,
+            sum(ifnull(b.pages_a4, 0))/2 pagesA4
+        FROM
+            exam_print_plan a
+         JOIN
+            exam_detail b ON a.id = b.print_plan_id
+        <where>
+            <if test="printPlanId != null and printPlanId != ''">
+                a.id = #{printPlanId}
+            </if>
+            <if test="status != null and status != ''">
+                b.status = #{status}
+            </if>
+            <if test="examPlace != null and examPlace != ''">
+                b.exam_place = #{examPlace}
+            </if>
+            <if test="examRoom != null and examRoom != ''">
+                b.exam_room = #{examRoom}
+            </if>
+            <if test="examStartTime != null and examStartTime != ''">
+                b.exam_start_time &gt; #{examStartTime}
+            </if>
+            <if test="examEndTime != null and examEndTime != ''">
+                b.exam_end_time &lt; #{examEndTime}
+            </if>
+        </where>
+    </select>
+    <select id="calcLeftA3" resultType="com.qmth.distributed.print.business.bean.dto.TaskTotalLeftDto">
+        SELECT
+            IFNULL(c.paper_pages_a3, 0) paperPagesA3,
+            IFNULL(c.card_pages_a3, 0) cardPagesA3,
+            IFNULL(d.print_paper_count, 0) printPaperCount,
+            IFNULL(d.print_card_count, 0) printCardCount
+        FROM
+            exam_print_plan a
+         JOIN
+            exam_detail b ON a.id = b.print_plan_id
+        JOIN
+        exam_detail_course c
+                JOIN
+            (SELECT
+                exam_detail_course_id,
+                    SUM(CASE print_paper
+                        WHEN 0 THEN 1
+                        ELSE 0
+                    END) print_paper_count,
+                    SUM(CASE print_card
+                        WHEN 0 THEN 1
+                        ELSE 0
+                    END) print_card_count
+            FROM
+                exam_student ab
+            GROUP BY exam_detail_course_id) d ON c.id = d.exam_detail_course_id
+        <where>
+            c.school_id = #{schoolId}
+            <if test="printPlanId != null and printPlanId != ''">
+                a.id = #{printPlanId}
+            </if>
+            <if test="status != null and status != ''">
+                b.status = #{status}
+            </if>
+            <if test="examPlace != null and examPlace != ''">
+                b.exam_place = #{examPlace}
+            </if>
+            <if test="examRoom != null and examRoom != ''">
+                b.exam_room = #{examRoom}
+            </if>
+            <if test="examStartTime != null and examStartTime != ''">
+                b.exam_start_time &gt; #{examStartTime}
+            </if>
+            <if test="examEndTime != null and examEndTime != ''">
+                b.exam_end_time &lt; #{examEndTime}
+            </if>
+        </where>
+    </select>
 
 </mapper>

+ 3 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/EnumsController.java

@@ -98,6 +98,9 @@ public class EnumsController {
         } else if (type.equals(EnumType.CARD_TYPE.name())){
             // 题卡类型
             list = CardTypeEnum.listTypes();
+        } else if (type.equals(EnumType.EXAM_DETAIL_STATUS_ENUM.name())){
+            // 考场状态
+            list = ExamDetailStatusEnum.listTypes();
         }
         return ResultUtil.ok(list);
     }

+ 25 - 11
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -12,6 +12,7 @@ import com.qmth.distributed.print.business.bean.dto.RelatePaperDto;
 import com.qmth.distributed.print.business.bean.params.DeleteParams;
 import com.qmth.distributed.print.business.bean.params.PrintPlanParams;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
+import com.qmth.distributed.print.business.entity.ExamDetail;
 import com.qmth.distributed.print.business.entity.ExamPrintPlan;
 import com.qmth.distributed.print.business.entity.SysUser;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
@@ -189,24 +190,39 @@ public class ExamPrintPlanController {
     }
 
     /**
-     * @param examPrintPlan
+     * 提交印刷
+     * @param examDetail
      * @return
      */
     @ApiOperation(value = "印刷任务管理-提交印刷")
     @RequestMapping(value = "/task_submit", method = RequestMethod.POST)
-    public Result taskSubmit(@RequestBody ExamPrintPlan examPrintPlan) {
-        boolean isSuccess = examPrintPlanService.submitTask(examPrintPlan);
+    public Result taskSubmit(@RequestBody ExamDetail examDetail) {
+        boolean isSuccess = examDetailService.submitTask(examDetail);
         return ResultUtil.ok(isSuccess);
     }
 
     /**
-     * @param examPrintPlan
+     * 撤回
+     * @param examDetail
      * @return
      */
     @ApiOperation(value = "印刷任务管理-撤回提交")
     @RequestMapping(value = "/task_cancel", method = RequestMethod.POST)
-    public Result taskCancel(@RequestBody ExamPrintPlan examPrintPlan) {
-        boolean isSuccess = examPrintPlanService.taskCancel(examPrintPlan);
+    public Result taskCancel(@RequestBody ExamDetail examDetail) {
+        boolean isSuccess = examDetailService.taskCancel(examDetail);
+        return ResultUtil.ok(isSuccess);
+    }
+
+
+    /**
+     * 重新提交
+     * @param examDetail
+     * @return
+     */
+    @ApiOperation(value = "印刷任务管理-重新提交")
+    @RequestMapping(value = "/task_resubmit", method = RequestMethod.POST)
+    public Result taskResubmit(@RequestBody ExamDetail examDetail) {
+        boolean isSuccess = examDetailService.resubmitTask(examDetail);
         return ResultUtil.ok(isSuccess);
     }
 
@@ -240,15 +256,13 @@ public class ExamPrintPlanController {
     /**
      * 印刷任务管理-查看PDF
      *
-     * @param request
-     * @param id
+     * @param examDetailId
      * @return
      */
     @ApiOperation(value = "印刷任务管理-查看PDF")
     @RequestMapping(value = "/task_view_pdf", method = RequestMethod.POST)
-    public Result taskViewPDF(HttpServletRequest request,
-                              @RequestParam Long id) {
-        String path = examDetailService.taskViewPDF(id);
+    public Result taskViewPDF(@RequestParam Long examDetailId) {
+        String path = examDetailService.taskViewPDF(examDetailId);
         return ResultUtil.ok(path);
     }
 }