فهرست منبع

Merge branch 'dev'
update

wangliang 4 سال پیش
والد
کامیت
8adb728897

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

@@ -179,5 +179,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
     List<Map> listStudentByExamDetailId(Long schoolId, Long examDetailId, String ticketNumber, String type);
 
+    List<ExamDetail> listByCourseCodeAndPaperNumberAndPaperTypeIsNull(Long schoolId, String courseCode, String paperNumber);
+
     List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 }

+ 3 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBTaskService.java

@@ -11,6 +11,7 @@ import com.qmth.distributed.print.business.enums.TaskStatusEnum;
 import com.qmth.distributed.print.business.enums.TaskTypeEnum;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -134,8 +135,8 @@ public interface TBTaskService extends IService<TBTask> {
      *
      * @param schoolId
      * @param printPlanId
-     * @param entityId
+     * @param entityIds
      * @return
      */
-    public int countByPrintPlanIdAndEntityId(Long schoolId, Long printPlanId, Long entityId);
+    public boolean countByPrintPlanIdAndEntityId(Long schoolId, Long printPlanId, List<Long> entityIds);
 }

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

@@ -145,7 +145,7 @@ public class ClientServiceImpl implements ClientService {
             throw ExceptionResultEnum.ERROR.exception("打印员不能为空");
         }
         ExamDetail examDetail = examDetailService.getById(examDetailId);
-        if(StringUtils.isNotBlank(examDetail.getPrintUser()) && !examDetail.getPrintUser().equals(printUser)){
+        if(isPrint && StringUtils.isNotBlank(examDetail.getPrintUser()) && !examDetail.getPrintUser().equals(printUser)){
             throw ExceptionResultEnum.ERROR.exception("该任务已被["+printUser+"]占用");
         }
 

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

@@ -608,7 +608,7 @@ public class CommonServiceImpl implements CommonService {
         // 1.命题任务已完成
         if (examTask != null && examTask.getStatus().name().equals(ExamStatusEnum.FINISH.name())) {
             // 2.校验考务数据是否导入
-            List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+            List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumberAndPaperTypeIsNull(schoolId, courseCode, paperNumber);
             if (examDetails != null && examDetails.size() > 0) {
                 // 3.检查examDetailId下有无其它课程
                 for (ExamDetail examDetail : examDetails) {

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

@@ -655,6 +655,18 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         return this.baseMapper.listStudentByExamDetailId(schoolId, examDetailId, ticketNumber, type);
     }
 
+    @Override
+    public List<ExamDetail> listByCourseCodeAndPaperNumberAndPaperTypeIsNull(Long schoolId, String courseCode, String paperNumber) {
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        examDetailCourses = examDetailCourses.stream().filter(m->StringUtils.isBlank(m.getPaperType())).collect(Collectors.toList());
+        if (examDetailCourses != null && examDetailCourses.size() > 0) {
+            Set<Long> examDetailIds = examDetailCourses.stream().map(m -> m.getExamDetailId()).collect(Collectors.toSet());
+            List<ExamDetail> examDetails = this.listByIds(examDetailIds);
+            return examDetails;
+        }
+        return null;
+    }
+
     @Override
     public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
         List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);

+ 61 - 15
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -68,20 +68,62 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     @Autowired
     private ExamTaskPaperLogService examTaskPaperLogService;
 
+    @Transactional
     @Override
-    public boolean enable(ExamTaskDetail examTaskDetail) throws IOException {
+    public boolean enable(ExamTaskDetail examTaskDetail) {
+        // 禁用,解决试卷关联关系,并且解除生成pdf绑定
+        if (!examTaskDetail.getEnable()) {
+            // 正在生成pdf不能禁用
+            ExamTask examTask = examTaskService.getById(examTaskDetail.getId());
+            List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber());
+            if (!examDetails.isEmpty()) {
+                Map<Long, List<Long>> map = examDetails.stream().collect(Collectors.groupingBy(ExamDetail::getPrintPlanId, Collectors.mapping(ExamDetail::getId, Collectors.toList())));
+                for (Map.Entry<Long, List<Long>> listEntry : map.entrySet()) {
+                    boolean b = tbTaskService.countByPrintPlanIdAndEntityId(examTask.getSchoolId(), listEntry.getKey(), listEntry.getValue());
+                    if (!b) {
+                        throw ExceptionResultEnum.ERROR.exception("有关联该任务的考场正在生成打印pdf,不能禁用卷库");
+                    }
+
+                    // 解除所有考场该任务绑定关系
+                    // 更新exam_detail
+                    List<Long> examDetailIds = listEntry.getValue();
+                    UpdateWrapper<ExamDetail> examDetailUpdateWrapper = new UpdateWrapper<>();
+                    examDetailUpdateWrapper.lambda()
+                            .set(ExamDetail::getStatus, ExamDetailStatusEnum.NEW)
+                            .set(ExamDetail::getAttachmentId, null)
+                            .set(ExamDetail::getAttachmentPath, null)
+                            .set(ExamDetail::getPagesA3, null)
+                            .set(ExamDetail::getPagesA4,null)
+                            .in(ExamDetail::getId, examDetailIds);
+                    examDetailService.update(examDetailUpdateWrapper);
+                    // 更新绑定关系
+                    List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByPrintPlanIdAndCourseCodeAndPaperNumber(examTask.getSchoolId(), listEntry.getKey(), examTask.getCourseCode(), examTask.getPaperNumber());
+                    List<Long> examDetailCourseIds = examDetailCourses.stream().map(m->m.getId()).collect(Collectors.toList());
+                    UpdateWrapper<ExamDetailCourse> examDetailCourseUpdateWrapper = new UpdateWrapper<>();
+                    examDetailCourseUpdateWrapper.lambda()
+                            .set(ExamDetailCourse::getPaperType, null)
+                            .set(ExamDetailCourse::getPaperPagesA3, null)
+                            .set(ExamDetailCourse::getCardPagesA3,null)
+                            .in(ExamDetailCourse::getId, examDetailCourseIds);
+                    examDetailCourseService.update(examDetailCourseUpdateWrapper);
+
+                    // 全部任务都取消,更新计划状态
+                    //所有考场都撤回,印刷任务状态改为就绪
+                    QueryWrapper<ExamDetail> examDetailQueryWrapper = new QueryWrapper<>();
+                    examDetailQueryWrapper.lambda().eq(ExamDetail::getPrintPlanId, listEntry.getKey()).notIn(ExamDetail::getStatus, ExamDetailStatusEnum.NEW, ExamDetailStatusEnum.READY);
+                    List<ExamDetail> examDetailList = examDetailService.list(examDetailQueryWrapper);
+                    if (examDetailList.isEmpty()) {
+                        UpdateWrapper<ExamPrintPlan> printPlanUpdateWrapper = new UpdateWrapper<>();
+                        printPlanUpdateWrapper.lambda().set(ExamPrintPlan::getStatus, PrintPlanStatusEnum.READY).eq(ExamPrintPlan::getId, listEntry.getKey());
+                        examPrintPlanService.update(printPlanUpdateWrapper);
+                    }
+                }
+            }
+        }
         UpdateWrapper<ExamTaskDetail> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(ExamTaskDetail::getEnable, examTaskDetail.getEnable()).eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getId());
         this.update(updateWrapper);
 
-        // 启用,触发考场生成pdf
-        if (examTaskDetail.getEnable()) {
-            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-            ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
-            // 校验是否可以提交打印状态
-            commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
-        }
-
         return true;
     }
 
@@ -115,12 +157,16 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         examStudentService.updatePaperType(examDetailCourses, paperParam.getRelatePaperType());
 
         // 重新生成pdf
-        List<Long> examDetailCourseIds = examDetailCourses.stream().map(m -> m.getId()).collect(Collectors.toList());
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.CREATE_PDF, paperParam.getPrintPlanId(), sysUser, null);
-        map.computeIfAbsent("examDetailCourseIds", v -> examDetailCourseIds);
-        map.computeIfAbsent("paperType", v -> paperParam.getRelatePaperType());
-        asyncCreatePdfTempleteService.createPdf(map, null);
+//        List<Long> examDetailCourseIds = examDetailCourses.stream().map(m -> m.getId()).collect(Collectors.toList());
+        for (ExamDetailCourse examDetailCours : examDetailCourses) {
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.CREATE_PDF, paperParam.getPrintPlanId(), sysUser, null);
+            map.computeIfAbsent("examDetailId", v -> examDetailCours.getExamDetailId());
+            map.computeIfAbsent("examDetailCourseIds", v -> examDetailCours.getId());
+            map.computeIfAbsent("paperType", v -> paperParam.getRelatePaperType());
+            asyncCreatePdfTempleteService.createPdf(map, null);
+        }
+
         return true;
     }
 

+ 8 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBTaskServiceImpl.java

@@ -27,6 +27,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -273,23 +274,24 @@ public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> impleme
      *
      * @param schoolId
      * @param printPlanId
-     * @param entityId
+     * @param entityIds
      * @return
      */
     @Override
-    public int countByPrintPlanIdAndEntityId(Long schoolId, Long printPlanId, Long entityId) {
+    public boolean countByPrintPlanIdAndEntityId(Long schoolId, Long printPlanId, List<Long> entityIds) {
         QueryWrapper<TBTask> tbTaskQueryWrapper = new QueryWrapper<>();
-        tbTaskQueryWrapper.lambda().ne(TBTask::getStatus, TaskStatusEnum.FINISH).isNotNull(TBTask::getStatus);
+        tbTaskQueryWrapper.lambda().ne(TBTask::getStatus, TaskStatusEnum.FINISH).isNotNull(TBTask::getStatus)
+                .eq(TBTask::getType, TaskTypeEnum.CREATE_PDF);
         if (Objects.nonNull(schoolId)) {
             tbTaskQueryWrapper.lambda().eq(TBTask::getSchoolId, schoolId);
         }
         if (Objects.nonNull(printPlanId)) {
             tbTaskQueryWrapper.lambda().eq(TBTask::getPrintPlanId, printPlanId);
         }
-        if (Objects.nonNull(entityId)) {
-            tbTaskQueryWrapper.lambda().eq(TBTask::getEntityId, entityId);
+        if (Objects.nonNull(entityIds)) {
+            tbTaskQueryWrapper.lambda().in(TBTask::getEntityId, entityIds);
         }
-        return this.count(tbTaskQueryWrapper);
+        return this.count(tbTaskQueryWrapper) == 0 ? true : false;
     }
 
     /**

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

@@ -1547,6 +1547,8 @@ CREATE TABLE `t_b_task`  (
   `school_id` bigint(20) NULL DEFAULT NULL COMMENT '学校id',
   `org_id` bigint(20) NULL DEFAULT NULL COMMENT '机构id',
   `print_plan_id` bigint(20) NULL DEFAULT NULL COMMENT '印刷计划id',
+  `remark` mediumtext COMMENT '备注',
+  `obj_name` varchar(500) DEFAULT NULL COMMENT '实体名称',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '导入导出任务表' ROW_FORMAT = Dynamic;
 

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

@@ -116,7 +116,6 @@
             a.school_id = #{schoolId}
                 AND a.course_code = #{courseCode}
                 AND a.paper_number = #{paperNumber}
-                AND a.paper_type is null
                 AND c.status != 'END'
     </select>
 

+ 7 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -451,6 +451,13 @@ public class ExamTaskController {
     @RequestMapping(value = "/paper_enable", method = RequestMethod.POST)
     public Result taskPaperEnable(@RequestBody ExamTaskDetail examTaskDetail) throws IOException {
         boolean isSuccess = examTaskDetailService.enable(examTaskDetail);
+        // 启用,触发考场生成pdf
+        if(examTaskDetail.getEnable()){
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            ExamTask examTask = examTaskService.getById(examTaskDetail.getId());
+            // 校验是否可以提交打印状态
+            commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
+        }
         return ResultUtil.ok(isSuccess);
     }
 

+ 3 - 3
distributed-print/src/main/resources/application.properties

@@ -66,7 +66,7 @@ org.center.orgQueryApi=/api/open/org/query
 #\u7EDF\u8BA1\u9875\u9762\u914D\u7F6E
 com.qmth.api.metrics-endpoint=/metrics-count
 com.qmth.api.global-auth=true
-#com.qmth.api.global-strict=true
+#com.qmth.api.global-strict=false
 #com.qmth.api.global-rate-limit=1/5s
 
 #token\u8D85\u65F6\u914D\u7F6E
@@ -86,7 +86,7 @@ prefix.url.work=admin/work
 prefix.url.client=admin/client
 
 #\u65E5\u5FD7\u914D\u7F6E
-com.qmth.logging.root-level=info
+com.qmth.logging.root-level=error
 com.qmth.logging.file-path=/Users/king/Downloads/distributed-print.log
 
 #\u5F15\u5165task\u914D\u7F6E\u6587\u4EF6
@@ -99,5 +99,5 @@ sms.config.codeSendInterval=60
 sms.config.aliyunSMSKey=LTAI4Fi8jVRYT49QBXU9x5QX
 #aliyun SMS secret
 sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
-sms.config.aliyunSMSSignName=\u9038\u6559\u4e91
+sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
 sms.config.aliyunSMSTplCode=SMS_147416565