ソースを参照

Merge remote-tracking branch 'origin/dev' into dev

wangliang 4 年 前
コミット
a0e23b0e2d

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

@@ -147,4 +147,12 @@ public interface CommonService {
      * @param files    需要下载的文件集合
      */
     public void downloadFileAndZip(HttpServletResponse response, String filePath, List<File> files);
+
+    /**
+     * 校验是否可以提交
+     * @param schoolId
+     * @param courseCode
+     * @param paperNumber
+     */
+    public void checkData(Long schoolId, String courseCode, String paperNumber);
 }

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

@@ -130,4 +130,8 @@ public interface ExamDetailService extends IService<ExamDetail> {
     void disposeExamDetailCourseByExaminationExcel(List<Map<String, Object>> dataList,Long userId);
 
     void disposeExamStudentByExaminationExcel(List<Map<String, Object>> dataList,Long userId);
+
+    List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
+
+    List<ExamDetail> listByExamPrintId(Long printPlanId);
 }

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

@@ -86,4 +86,6 @@ public interface ExamTaskService extends IService<ExamTask> {
     IPage<WorkResult> queryByMyWorkSubmit(IPage<Map> iPage, Long userId, Long schoolId, ExamStatusEnum status);
 
     void paperDownload(HttpServletResponse response, Long examTaskId);
+
+    ExamTask getByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 }

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

@@ -12,10 +12,7 @@ import com.qmth.distributed.print.business.bean.result.PrivilegeResult;
 import com.qmth.distributed.print.business.bean.result.RolePrivilegeResult;
 import com.qmth.distributed.print.business.config.DictionaryConfig;
 import com.qmth.distributed.print.business.entity.*;
-import com.qmth.distributed.print.business.enums.PrivilegeEnum;
-import com.qmth.distributed.print.business.enums.PrivilegePropertyEnum;
-import com.qmth.distributed.print.business.enums.RoleTypeEnum;
-import com.qmth.distributed.print.business.enums.UploadFileEnum;
+import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.OssUtil;
 import com.qmth.distributed.print.business.util.RedisUtil;
@@ -27,6 +24,7 @@ import com.qmth.distributed.print.common.util.SessionUtil;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.LinkedMultiValueMap;
 
@@ -75,6 +73,18 @@ public class CommonServiceImpl implements CommonService {
     @Resource
     OssUtil ossUtil;
 
+    @Autowired
+    private ExamTaskService examTaskService;
+
+    @Autowired
+    private ExamDetailService examDetailService;
+
+    @Autowired
+    private ExamPrintPlanService examPrintPlanService;
+
+    @Autowired
+    private BasicExamRuleService basicExamRuleService;
+
     /**
      * 新增用户权限
      *
@@ -483,6 +493,58 @@ public class CommonServiceImpl implements CommonService {
         }
     }
 
+    @Override
+    public void checkData(Long schoolId, String courseCode, String paperNumber) {
+        boolean isSuccess = true;
+        // 校验命题任务是否提交
+        ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        if (examTask != null && !examTask.getEnable()) {
+            throw ExceptionResultEnum.ERROR.exception("命题任务已禁用");
+        }
+        if (examTask == null || !examTask.getStatus().name().equals(ExamStatusEnum.FINISH.name())) {
+            isSuccess = false;
+        }
+
+        // 校验考务数据是否导入
+        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        if (examDetails.isEmpty()) {
+            isSuccess = false;
+        } else {
+            // 校验附件是否生成
+            for (ExamDetail examDetail : examDetails) {
+                if (!examDetail.getStatus().name().equals(ExamDetailStatusEnum.READY.name()) || examDetail.getAttachmentId() == null) {
+                    isSuccess = false;
+                }
+            }
+        }
+
+        // 校验通过,更新exam_detail状态和exam_print_plan状态
+        if (isSuccess) {
+            BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId();
+            if (basicExamRule == null) {
+                throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
+            }
+            // 更新exam_detail状态
+            for (ExamDetail examDetail : examDetails) {
+                // 自动提交印刷,状态更新为WAITING
+                examDetail.setStatus(PrintMethodEnum.AUTO.name().equals(basicExamRule.getPrintMethod().name()) ? ExamDetailStatusEnum.WAITING : ExamDetailStatusEnum.READY);
+                examDetailService.updateById(examDetail);
+
+                // 更新exam_print_plan状态
+                ExamPrintPlan examPrintPlan = examPrintPlanService.getById(examDetail.getPrintPlanId());
+                if (examPrintPlan == null || !examPrintPlan.getStatus().name().equals(PrintPlanStatusEnum.NEW.name())) {
+                    throw ExceptionResultEnum.ERROR.exception("印刷计划数据有误");
+                }
+                List<ExamDetail> list = examDetailService.listByExamPrintId(examDetail.getPrintPlanId());
+                if (list.isEmpty()) {
+                    examPrintPlan.setStatus(PrintPlanStatusEnum.READY);
+                    examPrintPlanService.updateById(examPrintPlan);
+                }
+            }
+        }
+
+    }
+
     public static void outputFile(HttpServletResponse response, File file, String fileName) {
         try {
 

+ 63 - 46
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -14,11 +14,7 @@ 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.entity.ExamStudent;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.mapper.ExamDetailMapper;
 import com.qmth.distributed.print.business.service.*;
@@ -38,10 +34,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -299,7 +292,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     public boolean submitTask(ExamDetail examDetail) {
         // 检查前置操作是否完成 todo
         UpdateWrapper<ExamDetail> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ExamDetail::getStatus, ExamDetailStatusEnum.PRINTING).eq(ExamDetail::getId, examDetail.getId());
+        updateWrapper.lambda().set(ExamDetail::getStatus, ExamDetailStatusEnum.WAITING).eq(ExamDetail::getId, examDetail.getId());
         return this.update(updateWrapper);
     }
 
@@ -327,16 +320,16 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void disposeExamDetailByExaminationExcel(List<Map<String, Object>> dataList, Long userId){
+    public void disposeExamDetailByExaminationExcel(List<Map<String, Object>> dataList, Long userId) {
         List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
             Map<String, Object> map = new HashMap<>();
-            map.put("schoolId",e.get("schoolId"));
-            map.put("printPlanId",e.get("printPlanId"));
-            map.put("printPlanName",e.get("printPlanName"));
-            map.put("examPlace",e.get("examPlace"));
-            map.put("examRoom",e.get("examRoom"));
-            map.put("examDate",e.get("examDate"));
-            map.put("examTime",e.get("examTime"));
+            map.put("schoolId", e.get("schoolId"));
+            map.put("printPlanId", e.get("printPlanId"));
+            map.put("printPlanName", e.get("printPlanName"));
+            map.put("examPlace", e.get("examPlace"));
+            map.put("examRoom", e.get("examRoom"));
+            map.put("examDate", e.get("examDate"));
+            map.put("examTime", e.get("examTime"));
             return Stream.of(map);
         }).distinct().collect(Collectors.toList());
 
@@ -378,19 +371,19 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void disposeExamDetailCourseByExaminationExcel(List<Map<String, Object>> dataList,Long userId){
+    public void disposeExamDetailCourseByExaminationExcel(List<Map<String, Object>> dataList, Long userId) {
 
         List<Map<String, Object>> examDetailKeyList = dataList.stream().flatMap(e -> {
             Map<String, Object> map = new HashMap<>();
-            map.put("schoolId",e.get("schoolId"));
-            map.put("printPlanId",e.get("printPlanId"));
-            map.put("examPlace",e.get("examPlace"));
-            map.put("examRoom",e.get("examRoom"));
-            map.put("examDate",e.get("examDate"));
-            map.put("examTime",e.get("examTime"));
-            map.put("courseCode",e.get("courseCode"));
-            map.put("courseName",e.get("courseName"));
-            map.put("paperNumber",e.get("paperNumber"));
+            map.put("schoolId", e.get("schoolId"));
+            map.put("printPlanId", e.get("printPlanId"));
+            map.put("examPlace", e.get("examPlace"));
+            map.put("examRoom", e.get("examRoom"));
+            map.put("examDate", e.get("examDate"));
+            map.put("examTime", e.get("examTime"));
+            map.put("courseCode", e.get("courseCode"));
+            map.put("courseName", e.get("courseName"));
+            map.put("paperNumber", e.get("paperNumber"));
             return Stream.of(map);
         }).distinct().collect(Collectors.toList());
 
@@ -406,12 +399,12 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             String courseName = String.valueOf(map.get("courseName"));
             String paperNumber = String.valueOf(map.get("paperNumber"));
             List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
-                    .eq(ExamDetail::getPrintPlanId,printPlanId)
-                    .eq(ExamDetail::getExamPlace,examPlace)
-                    .eq(ExamDetail::getExamRoom,examRoom)
-                    .eq(ExamDetail::getExamStartTime,examStartTime)
-                    .eq(ExamDetail::getExamEndTime,examEndTime));
-            if (examDetailList.size() != 1){
+                    .eq(ExamDetail::getPrintPlanId, printPlanId)
+                    .eq(ExamDetail::getExamPlace, examPlace)
+                    .eq(ExamDetail::getExamRoom, examRoom)
+                    .eq(ExamDetail::getExamStartTime, examStartTime)
+                    .eq(ExamDetail::getExamEndTime, examEndTime));
+            if (examDetailList.size() != 1) {
                 throw ExceptionResultEnum.ERROR.exception("无法找到新增的考务场次数据");
             }
             Long examDetailId = examDetailList.get(0).getId();
@@ -428,9 +421,10 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
         examDetailCourseService.saveBatch(examDetailCourseList);
     }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void disposeExamStudentByExaminationExcel(List<Map<String, Object>> dataList,Long userId){
+    public void disposeExamStudentByExaminationExcel(List<Map<String, Object>> dataList, Long userId) {
         List<ExamStudent> examStudentList = new ArrayList<>();
         for (Map<String, Object> map : dataList) {
             Long schoolId = Long.valueOf(String.valueOf(map.get("schoolId")));
@@ -445,21 +439,21 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             String studentName = String.valueOf(map.get("studentName"));
             String studentCode = String.valueOf(map.get("studentCode"));
             List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
-                    .eq(ExamDetail::getPrintPlanId,printPlanId)
-                    .eq(ExamDetail::getExamPlace,examPlace)
-                    .eq(ExamDetail::getExamRoom,examRoom)
-                    .eq(ExamDetail::getExamStartTime,examStartTime)
-                    .eq(ExamDetail::getExamEndTime,examEndTime));
-            if (examDetailList.size() != 1){
+                    .eq(ExamDetail::getPrintPlanId, printPlanId)
+                    .eq(ExamDetail::getExamPlace, examPlace)
+                    .eq(ExamDetail::getExamRoom, examRoom)
+                    .eq(ExamDetail::getExamStartTime, examStartTime)
+                    .eq(ExamDetail::getExamEndTime, examEndTime));
+            if (examDetailList.size() != 1) {
                 throw ExceptionResultEnum.ERROR.exception("无法找到新增的考务场次数据");
             }
             Long examDetailId = examDetailList.get(0).getId();
             List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.list(new QueryWrapper<ExamDetailCourse>().lambda()
-                    .eq(ExamDetailCourse::getExamDetailId,examDetailId)
-                    .eq(ExamDetailCourse::getCourseCode,courseCode)
-                    .eq(ExamDetailCourse::getCourseName,courseName)
-                    .eq(ExamDetailCourse::getPaperNumber,paperNumber));
-            if (examDetailCourseList.size() != 1){
+                    .eq(ExamDetailCourse::getExamDetailId, examDetailId)
+                    .eq(ExamDetailCourse::getCourseCode, courseCode)
+                    .eq(ExamDetailCourse::getCourseName, courseName)
+                    .eq(ExamDetailCourse::getPaperNumber, paperNumber));
+            if (examDetailCourseList.size() != 1) {
                 throw ExceptionResultEnum.ERROR.exception("无法找到新增的考务科目数据");
             }
             Long examDetailCourseId = examDetailCourseList.get(0).getId();
@@ -478,4 +472,27 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         }
         examStudentService.saveBatch(examStudentList);
     }
+
+    @Override
+    public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
+        QueryWrapper<ExamDetailCourse> examDetailCourseQueryWrapper = new QueryWrapper<>();
+        examDetailCourseQueryWrapper.lambda().eq(ExamDetailCourse::getSchoolId, schoolId)
+                .eq(ExamDetailCourse::getCourseCode, courseCode)
+                .eq(ExamDetailCourse::getPaperNumber, paperNumber);
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.list(examDetailCourseQueryWrapper);
+        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> listByExamPrintId(Long printPlanId) {
+        QueryWrapper<ExamDetail> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamDetail::getPrintPlanId, printPlanId)
+                .ne(ExamDetail::getStatus, ExamDetailStatusEnum.READY);
+        return this.list(queryWrapper);
+    }
 }

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

@@ -572,4 +572,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
         commonService.downloadFileAndZip(response, rootPath, fileList);
     }
+
+    @Override
+    public ExamTask getByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
+        QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId)
+                .eq(ExamTask::getCourseCode, courseCode)
+                .eq(ExamTask::getPaperNumber, paperNumber);
+        return this.getOne(queryWrapper);
+    }
 }