Forráskód Böngészése

3.2.7 优化任务

xiaofei 2 éve
szülő
commit
42fde9e72b
23 módosított fájl, 285 hozzáadás és 426 törlés
  1. 0 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamPaperStructurePageDto.java
  2. 4 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskTempDto.java
  3. 0 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamPaperStructure.java
  4. 0 26
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTask.java
  5. 0 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskTemp.java
  6. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  7. 0 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  8. 2 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskService.java
  9. 14 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/SmsSendService.java
  10. 0 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  11. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamPaperStructureServiceImpl.java
  12. 53 263
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  13. 7 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  14. 126 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/SmsSendServiceImpl.java
  15. 6 1
      distributed-print-business/src/main/resources/db/log/脚本-xiaof.sql
  16. 0 25
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  17. 0 14
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  18. 28 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  19. 36 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ImportTemplateEnum.java
  20. 0 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java
  21. 0 13
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  22. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ExcelUtil.java
  23. 5 2
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

+ 0 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamPaperStructurePageDto.java

@@ -44,16 +44,6 @@ public class ExamPaperStructurePageDto extends ExamPaperStructure implements Ser
         this.statusStr = statusStr;
     }
 
-    @Override
-    public String getPaperNumberId() {
-        return paperNumberId;
-    }
-
-    @Override
-    public void setPaperNumberId(String paperNumberId) {
-        this.paperNumberId = paperNumberId;
-    }
-
     @Override
     public String getTaskStatus() {
         return taskStatus;

+ 4 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamTaskTempDto.java

@@ -2,16 +2,18 @@ package com.qmth.distributed.print.business.bean.dto;
 
 import com.qmth.teachcloud.common.annotation.ExcelNote;
 
+import javax.validation.constraints.NotNull;
+
 public class ExamTaskTempDto {
 
+    @NotNull
     @ExcelNote(value = "课程代码")
     private String courseCode;
+    @NotNull
     @ExcelNote(value = "课程名称")
     private String courseName;
     @ExcelNote(value = "试卷编号")
     private String paperNumber;
-    @ExcelNote(value = "适用专业(方向)")
-    private String specialty;
     @ExcelNote(value = "命题老师账号")
     private String userAccount;
     @ExcelNote(value = "命题老师名称")
@@ -41,14 +43,6 @@ public class ExamTaskTempDto {
         this.paperNumber = paperNumber;
     }
 
-    public String getSpecialty() {
-        return specialty;
-    }
-
-    public void setSpecialty(String specialty) {
-        this.specialty = specialty;
-    }
-
     public String getUserAccount() {
         return userAccount;
     }

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

@@ -130,9 +130,6 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
     @TableField("structure_change")
     private Boolean structureChange;
 
-    @TableField(exist = false)
-    private String paperNumberId;
-
     @TableField(exist = false)
     private String taskStatus;
 
@@ -275,14 +272,6 @@ public class ExamPaperStructure extends BaseEntity implements Serializable {
         this.enable = enable;
     }
 
-    public String getPaperNumberId() {
-        return paperNumberId;
-    }
-
-    public void setPaperNumberId(String paperNumberId) {
-        this.paperNumberId = paperNumberId;
-    }
-
     public Long getExamId() {
         return examId;
     }

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

@@ -52,22 +52,12 @@ public class ExamTask extends BaseEntity implements Serializable {
      */
     @TableField("course_name")
     private String courseName;
-    /**
-     * 适用专业
-     */
-    private String specialty;
     /**
      * 试卷编号
      */
     @TableField("paper_number")
     private String paperNumber;
 
-    /**
-     * 试卷编号ID
-     */
-    @TableField("paper_number_id")
-    private Long paperNumberId;
-
     /**
      * 课程创建的任务序号
      */
@@ -206,14 +196,6 @@ public class ExamTask extends BaseEntity implements Serializable {
         this.courseName = courseName;
     }
 
-    public String getSpecialty() {
-        return specialty;
-    }
-
-    public void setSpecialty(String specialty) {
-        this.specialty = specialty;
-    }
-
     public String getPaperNumber() {
         return paperNumber;
     }
@@ -222,14 +204,6 @@ public class ExamTask extends BaseEntity implements Serializable {
         this.paperNumber = paperNumber;
     }
 
-    public Long getPaperNumberId() {
-        return paperNumberId;
-    }
-
-    public void setPaperNumberId(Long paperNumberId) {
-        this.paperNumberId = paperNumberId;
-    }
-
     public String getSequence() {
         return sequence;
     }

+ 0 - 12
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamTaskTemp.java

@@ -53,10 +53,6 @@ public class ExamTaskTemp extends BaseEntity implements Serializable {
      */
     @TableField("paper_number")
     private String paperNumber;
-    /**
-     * 适用专业
-     */
-    private String specialty;
 
     @TableField("user_account")
     private String userAccount;
@@ -116,14 +112,6 @@ public class ExamTaskTemp extends BaseEntity implements Serializable {
         this.paperNumber = paperNumber;
     }
 
-    public String getSpecialty() {
-        return specialty;
-    }
-
-    public void setSpecialty(String specialty) {
-        this.specialty = specialty;
-    }
-
     public String getUserAccount() {
         return userAccount;
     }

+ 0 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java

@@ -32,8 +32,6 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
 
     List<BasicCourse> listCoursesByPrintPlanId(@Param("param") String param, @Param("printPlanIdList") List<Long> printPlanIdList);
 
-    List<String> listPaperNumberByPrintPlanId(@Param("param") String param, @Param("printPlanIdList") List<Long> printPlanIdList, @Param("orgIds") Set<Long> orgIds);
-
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
     List<ExamDetailCourse> listByAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId,@Param("examId") Long examId,@Param("courseCode") String courseCode,@Param("paperNumber") String paperNumber);

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

@@ -31,8 +31,6 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<BasicCourse> listCoursesByPrintPlanId(String param, List<Long> printPlanIdList);
 
-    List<String> listPaperNumberByPrintPlanId(String param, List<Long> printPlanIdList, Set<Long> orgIds);
-
     List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber);
 
     List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, Long examId, String courseCode, String paperNumber);

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

@@ -37,12 +37,8 @@ import java.util.Map;
  */
 public interface ExamTaskService extends IService<ExamTask> {
 
-    List<ExamTask> listByCourseCode(Long schoolId, String code);
-
     IPage<ExamTaskDto> list(Long semesterId, Long examId, Boolean enable, String status, Long cardRuleId, String courseCode, String paperNumber, Long startTime, Long endTime, String userName, String createName, Integer pageNumber, Integer pageSize);
 
-    List<String> listPaperNumber(String param, List<Long> printPlanIdList);
-
     List<BlurryUserDto> listUser(String param);
 
     ExamTask assignUser(ExamTask examTask);
@@ -103,16 +99,6 @@ public interface ExamTaskService extends IService<ExamTask> {
      */
     ReviewSampleDto findReviewSampleInfoByExamTaskId(Long examTaskId);
 
-    /**
-     * 发送即将到期数据短信提醒
-     */
-    void sendSmsExpireTask();
-
-    /**
-     * 发送已逾期数据短信提醒
-     */
-    void sendSmsOverdueTask();
-
     List<ExamTaskDetailDto> listTaskPaper(Long semesterId, Long examId, String courseCode, String paperNumber, Long cardRuleId, MakeMethodEnum makeMethod, Long startTime, Long endTime);
 
     TBTask taskDownloadPdf(Long semesterId, Long examId, String courseCode, String paperNumber, Long cardRuleId, MakeMethodEnum makeMethod, Long startTime, Long endTime);
@@ -126,7 +112,7 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @param userId
      * @return
      */
-    public IPage<WorkResult> getFlowTaskReadyList(IPage<Map> iPage, Long schoolId, Long orgId, Long userId);
+    IPage<WorkResult> getFlowTaskReadyList(IPage<Map> iPage, Long schoolId, Long orgId, Long userId);
 
     /**
      * 根据流程id和任务节点id获取待办
@@ -135,7 +121,7 @@ public interface ExamTaskService extends IService<ExamTask> {
      * @param taskId
      * @return
      */
-    public WorkResult getFlowInfo(Long flowId, Long taskId);
+    WorkResult getFlowInfo(Long flowId, Long taskId);
 
     /**
      * 根据流程状态查找命题任务

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

@@ -0,0 +1,14 @@
+package com.qmth.distributed.print.business.service;
+
+public interface SmsSendService {
+
+    /**
+     * 发送即将到期数据短信提醒
+     */
+    void sendSmsExpireTask();
+
+    /**
+     * 发送已逾期数据短信提醒
+     */
+    void sendSmsOverdueTask();
+}

+ 0 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -80,11 +80,6 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
         return this.baseMapper.listCoursesByPrintPlanId(SystemConstant.translateSpecificSign(param), printPlanIdList);
     }
 
-    @Override
-    public List<String> listPaperNumberByPrintPlanId(String param, List<Long> printPlanIdList, Set<Long> orgIds) {
-        return this.baseMapper.listPaperNumberByPrintPlanId(SystemConstant.translateSpecificSign(param), printPlanIdList, orgIds);
-    }
-
     @Override
     public List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber) {
         return this.baseMapper.listByPrintPlanIdAndCourseCodeAndPaperNumber(schoolId, printPlanId, courseCode, paperNumber);

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

@@ -228,7 +228,6 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         this.updateById(examPaperStructureTemp);
 
         ExamTask examTask = examTaskService.getByCourseCodeAndPaperNumber(examPaperStructureTemp.getSchoolId(), examPaperStructureTemp.getExamId(), examPaperStructureTemp.getCourseCode(), examPaperStructureTemp.getPaperNumber());
-        examPaperStructureTemp.setPaperNumberId(String.valueOf(examTask.getPaperNumberId()));
         return examPaperStructureTemp;
     }
 
@@ -292,7 +291,8 @@ public class ExamPaperStructureServiceImpl extends ServiceImpl<ExamPaperStructur
         for (String str : paperType.split(",")) {
             Map<String, Object> map = new HashMap<>();
             map.put("paperType", str);
-            String result = cloudMarkingTaskUtils.queryPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), examTask.getPaperNumberId() + str, str);
+            String subjectCode = examTask.getCourseCode() + str + examTask.getSequence();
+            String result = cloudMarkingTaskUtils.queryPaperStructure(examPaperStructure.getSchoolId(), String.valueOf(examPaperStructure.getThirdRelateId()), subjectCode, str);
             List<Map> paperStructure = JSONObject.parseArray(JSONObject.toJSON(result).toString(), Map.class);
             map.put("content", paperStructure);
             list.add(map);

+ 53 - 263
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -57,6 +57,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import javax.websocket.RemoteEndpoint;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -212,13 +213,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Resource
     private BasicOperationLogService basicOperationLogService;
 
-    @Override
-    public List<ExamTask> listByCourseCode(Long schoolId, String code) {
-        QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getCourseCode, code);
-        return this.list(queryWrapper);
-    }
-
     @Override
     public IPage<ExamTaskDto> list(Long semesterId, Long examId, Boolean enable, String status, Long cardRuleId, String courseCode, String paperNumber, Long startTime, Long endTime, String userName, String createName, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -240,50 +234,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return examTaskDtoIPage;
     }
 
-    @Override
-    public List<String> listPaperNumber(String param, List<Long> printPlanIdList) {
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        SysOrg sysOrg = sysOrgService.getById(sysUser.getOrgId());
-        Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
-        if (printPlanIdList.size() == 0) {
-            // 查询命题任务中的试卷编号
-            QueryWrapper<ExamTask> queryWrapperExamTask = new QueryWrapper<>();
-            queryWrapperExamTask.lambda().eq(ExamTask::getSchoolId, schoolId);
-            if (sysOrg != null && !OrgTypeEnum.PRINTING_HOUSE.equals(sysOrg.getType()) && orgIds.size() > 0) {
-                queryWrapperExamTask.lambda().in(ExamTask::getOrgId, orgIds);
-            }
-            List<String> list = new ArrayList<>();
-            if (StringUtils.isNotBlank(param)) {
-                queryWrapperExamTask.lambda().and(i -> i.like(ExamTask::getCourseCode, SystemConstant.translateSpecificSign(param)).or().like(ExamTask::getCourseName, SystemConstant.translateSpecificSign(param)));
-            }
-            List<ExamTask> examTasks = this.list(queryWrapperExamTask);
-            if (examTasks != null && examTasks.size() > 0) {
-                list = examTasks.stream().map(ExamTask::getPaperNumber).distinct().collect(Collectors.toList());
-            }
-
-            // 查询考务-科目中的试卷编号
-            QueryWrapper<ExamDetailCourse> queryWrapperExamDetailCourse = new QueryWrapper<>();
-            queryWrapperExamDetailCourse.lambda().eq(ExamDetailCourse::getSchoolId, schoolId);
-            if (orgIds.size() > 0) {
-                queryWrapperExamDetailCourse.lambda().in(ExamDetailCourse::getOrgId, orgIds);
-            }
-            List<String> list2 = new ArrayList<>();
-            if (StringUtils.isNotBlank(param)) {
-                queryWrapperExamDetailCourse.lambda().and(i -> i.like(ExamDetailCourse::getCourseCode, SystemConstant.translateSpecificSign(param))
-                        .or().like(ExamDetailCourse::getCourseName, SystemConstant.translateSpecificSign(param)));
-            }
-            List<ExamDetailCourse> ExamDetailCourses = examDetailCourseService.list(queryWrapperExamDetailCourse);
-            if (ExamDetailCourses != null && ExamDetailCourses.size() > 0) {
-                list2 = ExamDetailCourses.stream().map(ExamDetailCourse::getPaperNumber).distinct().collect(Collectors.toList());
-            }
-            list.addAll(list2);
-            return list.stream().distinct().collect(Collectors.toList());
-        } else {
-            return examDetailCourseService.listPaperNumberByPrintPlanId(param, printPlanIdList, orgIds);
-        }
-    }
-
     @Override
     public List<BlurryUserDto> listUser(String param) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
@@ -294,10 +244,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Transactional
     @Override
     public ExamTask assignUser(ExamTask examTask) {
-        if (examTask.getId() == null) {
-            throw ExceptionResultEnum.ERROR.exception("参数有误");
-        }
-
         ExamStatusEnum examStatusEnum = ExamStatusEnum.DRAFT;
         Long flowId = null;
         UpdateWrapper<ExamTask> updateWrapper = new UpdateWrapper<>();
@@ -399,29 +345,26 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             Long examId = examTask.getExamId();
             String courseCode = examTask.getCourseCode();
             BasicPrintConfig basicPrintConfig = basicPrintConfigService.getByExamId(examId);
-            examTask.setExamId(examId);
-            examTask.setCardRuleId(basicPrintConfig.getCardRuleId());
             examTask.setSchoolId(schoolId);
+            examTask.setCardRuleId(basicPrintConfig.getCardRuleId());
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             if (StringUtils.isNotBlank(examTask.getPaperNumber())) {
                 QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
                 taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, examTask.getPaperNumber());
                 ExamTask task = this.getOne(taskQueryWrapper);
                 if (task != null) {
-                    throw ExceptionResultEnum.ERROR.exception("试卷编号在当前考试下已存在");
+                    BasicExam basicExam = basicExamService.getById(examId);
+                    throw ExceptionResultEnum.ERROR.exception("试卷编号[" + examTask.getPaperNumber() + "]在考试[" + basicExam.getName() + "]下已存在");
                 }
             } else {
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
                 String paperNumber = printCommonService.createPaperNumber(schoolId, examId);
                 examTask.setPaperNumber(paperNumber);
             }
-            examTask.setPaperNumberId(SystemConstant.getDbUuid());
 
             String sequence = printCommonService.createCourseSequence(schoolId, examTask.getCourseCode());
             examTask.setSequence(sequence);
 
-            QueryWrapper<BasicExamRule> queryWrapper = new QueryWrapper<>();
-            queryWrapper.lambda().eq(BasicExamRule::getSchoolId, examTask.getSchoolId());
             examTask.insertInfo(sysUser.getId());
             examTask.updateInfo(sysUser.getId());
 
@@ -462,7 +405,10 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     public ExamTaskImportDto importFile(MultipartFile file) throws IOException, NoSuchFieldException {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(ExamTaskTempDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            // 课程代码与试卷有相同数据map
             Map<String, String> courseCodePaperNumberMap = new HashMap<>();
+            // 试卷编号重复set
+            Set<String> paperNubmerSet = new HashSet<>();
             List<ExcelError> excelErrorTemp = new ArrayList<>();
             // 只允许导入一个sheet
             if (finalExcelList.size() > 1) {
@@ -473,63 +419,69 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 List<Object> examTaskTempList = excelMap.get(i);
                 for (int y = 0; y < examTaskTempList.size(); y++) {
                     ExamTaskTempDto userImportDto = (ExamTaskTempDto) examTaskTempList.get(y);
-                    if (StringUtils.isBlank(userImportDto.getCourseCode())) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]必填"));
-                    }
-                    if (StringUtils.isBlank(userImportDto.getCourseName())) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程名称]必填"));
-                    }
+
+                    String excelCourseCode = userImportDto.getCourseCode();
+                    String excelCourseName = userImportDto.getCourseName();
+                    String excelPaperNumber = userImportDto.getPaperNumber();
+                    String excelTeacherAccount = userImportDto.getUserAccount();
+                    String excelTeacherName = userImportDto.getUserName();
 
                     // 课程是否存在并且与名称对应
                     QueryWrapper<BasicCourse> queryWrapper = new QueryWrapper<>();
-                    queryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, userImportDto.getCourseCode());
+                    queryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId).eq(BasicCourse::getCode, excelCourseCode);
                     BasicCourse course = basicCourseService.getOne(queryWrapper);
+                    // 校验课程名称和课程代码
                     if (course == null) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]在系统中不存在"));
-                    } else if (!course.getName().equals(userImportDto.getCourseName())) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程名称]与系统中不匹配"));
+                        excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行课程代码[" + excelCourseCode + "]在系统中不存在"));
+                    } else if (!course.getName().equals(excelCourseName)) {
+                        excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行课程代码[" + excelCourseCode + "]对应的课程名称与课程管理中不一致。文件中为[" + excelCourseName + "],课程管理为[" + course.getName() + "]"));
                     }
-                    if (courseCodePaperNumberMap.containsKey(userImportDto.getCourseCode())) {
-                        String paperNumber = courseCodePaperNumberMap.get(userImportDto.getCourseCode());
-                        if (paperNumber != null && paperNumber.equals(userImportDto.getPaperNumber())) {
-                            excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]与[试卷编号]有相同数据"));
+                    if (courseCodePaperNumberMap.containsKey(excelCourseCode)) {
+                        String paperNumber = courseCodePaperNumberMap.get(excelCourseCode);
+                        if (paperNumber != null && paperNumber.equals(excelPaperNumber)) {
+                            excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行课程代码[" + excelCourseCode + "]与试卷编号[" + excelPaperNumber + "]有相同数据"));
                         }
                     } else {
-                        courseCodePaperNumberMap.put(userImportDto.getCourseCode(), userImportDto.getPaperNumber());
+                        courseCodePaperNumberMap.put(excelCourseCode, excelPaperNumber);
                     }
 
-                    // 校验命题老师
-                    String excelCourseCode = userImportDto.getCourseCode();
-                    String excelTeacherAccount = userImportDto.getUserAccount();
-                    String excelTeacherName = userImportDto.getUserName();
+                    // 校验试卷编号重复
+                    if (StringUtils.isNotBlank(excelPaperNumber)) {
+                        if (paperNubmerSet.contains(excelPaperNumber)) {
+                            excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "试卷编号[" + excelPaperNumber + "]有相同数据"));
+                        } else {
+                            paperNubmerSet.add(excelPaperNumber);
+                        }
+                    }
 
-//                    List<BlurryUserDto> listUser = sysUserService.listUser(excelCourseCode, null);
+                    // 校验命题老师
                     AssignTeacherDto assignTeacherDto = sysUserService.listUser(excelCourseCode, null);
-                    List<SysUserResult> listUser = Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getAllUserList() : new ArrayList<SysUserResult>();
+                    List<SysUserResult> listUser = Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getAllUserList() : new ArrayList<>();
                     Map<String, String> userMap = listUser.stream().collect(Collectors.toMap(SysUserResult::getLoginName, SysUserResult::getRealName));
                     if (userMap == null) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[命题老师账号]不存在"));
+                        excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行课程代码[" + excelCourseCode + "]所属机构下未找到命题老师"));
                     } else {
-                        List<SysUserResult> courseUserList = Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getCourseUserList() : new ArrayList<SysUserResult>();
+                        List<SysUserResult> courseUserList = Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getCourseUserList() : new ArrayList<>();
                         Map<String, String> courseUserMap = courseUserList.stream().collect(Collectors.toMap(SysUserResult::getLoginName, SysUserResult::getRealName));
                         if (!CollectionUtils.isEmpty(courseUserMap)) {
                             userMap.putAll(courseUserMap);
                         }
                         if (StringUtils.isNotBlank(excelTeacherAccount)) {
                             if (StringUtils.isBlank(excelTeacherName)) {
-                                excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[命题老师姓名]不能为空"));
+                                excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行命题老师姓名不能为空"));
                             } else {
                                 if (StringUtils.isBlank(userMap.get(excelTeacherAccount))) {
-                                    excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[命题老师账号]不存在"));
+                                    excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行命题老师账号[" + excelTeacherAccount + "]系统中不存在"));
                                 } else {
-                                    if (!excelTeacherName.equals(userMap.get(excelTeacherAccount))) {
-                                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[命题老师姓名]与系统不匹配"));
+                                    String teacherName = userMap.get(excelTeacherAccount);
+                                    if (!excelTeacherName.equals(teacherName)) {
+                                        excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行命题老师姓名与系统不一致。文件中为[" + excelTeacherName + "],用户管理中为[" + teacherName + "]"));
                                     }
                                 }
                             }
                         } else {
                             if (StringUtils.isNotBlank(excelTeacherName)) {
-                                excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[命题老师账号]不能为空"));
+                                excelErrorTemp.add(new ExcelError(y + 1, "第" + (y + 1) + "行命题老师账号必填"));
                             }
                         }
                     }
@@ -556,7 +508,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         ExamTaskImportDto examTaskImportDto = new ExamTaskImportDto();
         examTaskImportDto.setBatchNo(batchNo);
         List<ExamTaskDto> tasks = new ArrayList<>();
-        Set<String> paperNumbers = new HashSet<>();
 
         List<BasicCourse> userCourses = printCommonService.list(null, null, null);
         // 错误信息
@@ -570,10 +521,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 // 校验该用户是否有科目
                 long matchCourseCount = userCourses.stream().filter(m -> examTaskTemp.getCourseCode().equals(m.getCode())).count();
                 if (matchCourseCount == 0) {
-                    throw ExceptionResultEnum.ERROR.exception("用户没有科目[" + examTaskTemp.getCourseName() + "(" + examTaskTemp.getCourseCode() + ")]权限");
+                    throw ExceptionResultEnum.ERROR.exception("用户没有科目[" + examTaskTemp.getCourseName() + "(" + examTaskTemp.getCourseCode() + ")]权限");
                 }
-
-
                 examTaskTemp.setId(SystemConstant.getDbUuid());
                 examTaskTemp.setBatchNo(batchNo);
                 examTaskTemp.setSchoolId(schoolId);
@@ -582,41 +531,21 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 //保存
                 examTaskTempService.save(examTaskTemp);
 
-                if (StringUtils.isNotBlank(examTaskTemp.getPaperNumber())) {
-                    if (paperNumbers.contains(examTaskTemp.getPaperNumber())) {
-                        // 试卷编号在文件内重复,跳过
-                        String error = examTaskTemp.getPaperNumber() + "文件中重复";
-                        stringJoiner.add(error);
-                        continue;
-                    }
-//                    QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
-//                    taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, examTaskTemp.getPaperNumber());
-//                    ExamTask task1 = this.getOne(taskQueryWrapper);
-//                    if (task1 != null) {
-//                        // 试卷编号已存在,直接跳过
-//                        String error = examTaskTemp.getPaperNumber() + "已存在";
-//                        stringJoiner.add(error);
-//                        continue;
-//                    }
-                    paperNumbers.add(examTaskTemp.getPaperNumber());
-                }
-
                 ExamTaskDto examTaskDto = new ExamTaskDto();
                 examTaskDto.setCourseCode(examTaskTemp.getCourseCode());
                 examTaskDto.setCourseName(examTaskTemp.getCourseName());
                 examTaskDto.setPaperNumber(examTaskTemp.getPaperNumber());
-                examTaskDto.setSpecialty(examTaskTemp.getSpecialty());
-                AssignTeacherDto assignTeacherDto = null;
 
                 QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
                 queryWrapper.lambda().eq(SysUser::getSchoolId, schoolId).eq(SysUser::getLoginName, examTaskTemp.getUserAccount());
                 SysUser sysUser1 = sysUserService.getOne(queryWrapper);
+                AssignTeacherDto assignTeacherDto;
                 if (sysUser1 != null) {
                     assignTeacherDto = listUsers(examTaskTemp.getCourseCode(), String.valueOf(sysUser1.getId()));
                 } else {
                     assignTeacherDto = listUsers(examTaskTemp.getCourseCode(), null);
                 }
-                examTaskDto.setUsers(Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getAllUserList() : new ArrayList<SysUserResult>());
+                examTaskDto.setUsers(Objects.nonNull(assignTeacherDto) ? assignTeacherDto.getAllUserList() : new ArrayList<>());
                 String userName = examTaskTempDto.getUserName();
                 String userAccount = examTaskTempDto.getUserAccount();
                 if (SystemConstant.strNotNull(userName) && SystemConstant.strNotNull(userAccount)) {
@@ -646,26 +575,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                         }
                     }
                 }
-
-//                // 校验命题老师
-//                if (StringUtils.isBlank(examTaskTemp.getUserAccount())) {
-//                    examTaskDto.setUsers(listUsers(examTaskTemp.getCourseCode(), null));
-//                } else {
-//                    QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
-//                    queryWrapper.lambda().eq(SysUser::getLoginName, examTaskTemp.getUserAccount());
-//                    SysUser sysUser1 = sysUserService.getOne(queryWrapper);
-//                    if (sysUser1 == null) {
-//                        examTaskDto.setUsers(listUsers(examTaskTemp.getCourseCode(), null));
-//                    } else {
-//                        List<BlurryUserDto> blurryUserDtoList = listUsers(examTaskTemp.getCourseCode(), String.valueOf(sysUser1.getId()));
-//
-//                        if (blurryUserDtoList.size() == 0){
-//                            //如果没有查询到模糊用户数据 可能是excel中命题老师没有该课程权限,则舍弃该用户再次查询该科目-试卷的模糊用户
-//                            blurryUserDtoList = listUsers(examTaskTemp.getCourseCode(), null);
-//                        }
-//                        examTaskDto.setUsers(blurryUserDtoList);
-//                    }
-//                }
                 tasks.add(examTaskDto);
             }
         }
@@ -689,24 +598,16 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Override
     public List<ExamTask> saveBatch(ExamTask task) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Long examId = task.getExamId();
+        BasicExam basicExam = basicExamService.getById(examId);
 
         task.setSchoolId(schoolId);
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-
         if (StringUtils.isBlank(task.getBatchNo())) {
-            throw ExceptionResultEnum.ERROR.exception("batchNo不能为空");
-        }
-
-        QueryWrapper<BasicExamRule> examQueryWrapper = new QueryWrapper<>();
-        examQueryWrapper.lambda().eq(BasicExamRule::getSchoolId, schoolId);
-        BasicExamRule basicExamRule = basicExamRuleService.getOne(examQueryWrapper);
-        if (basicExamRule == null) {
-            throw ExceptionResultEnum.ERROR.exception("通用规则未设置");
+            throw ExceptionResultEnum.ERROR.exception("导入批次号不能为空,请重新导入");
         }
 
         List<ExamTask> list = new ArrayList<>();
-        Set<String> paperNumbers = new HashSet<>();
         List<Map<String, String>> userList = task.getUsers();
 
         StringJoiner stringJoiner = new StringJoiner(",");
@@ -721,36 +622,27 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, courseCode));
             examTask.setCourseCode(userMap.get("courseCode"));
             examTask.setCourseName(userMap.get("courseName"));
-            examTask.setSpecialty(userMap.get("specialty"));
             examTask.setExamId(examId);
             examTask.setCardRuleId(cardRuleId);
 
             String sequence = printCommonService.createCourseSequence(schoolId, examTask.getCourseCode());
             examTask.setSequence(sequence);
 
-            if (StringUtils.isNotBlank(userMap.get("paperNumber"))) {
-                if (paperNumbers.contains(userMap.get("paperNumber"))) {
-                    stringJoiner.add(String.format("试卷编号[%s]在文件内重复", userMap.get("paperNumber")));
-                    // 试卷编号在文件内重复,跳过
-                    continue;
-                }
+            String paperNumber = userMap.get("paperNumber");
+            if (StringUtils.isNotBlank(paperNumber)) {
                 QueryWrapper<ExamTask> taskQueryWrapper = new QueryWrapper<>();
-                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, userMap.get("paperNumber"));
+                taskQueryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, paperNumber);
                 ExamTask task1 = this.getOne(taskQueryWrapper);
                 if (task1 != null) {
-//                    throw ExceptionResultEnum.ERROR.exception("试卷编号在当前考试下已存在");
-                    stringJoiner.add(String.format("试卷编号[%s]在当前考试下已存在", userMap.get("paperNumber")));
+                    stringJoiner.add(String.format("试卷编号[%s]在考试[%s]下已使用", paperNumber, basicExam.getName()));
 //                    // 试卷编号已存在,直接跳过
                     continue;
                 }
-                paperNumbers.add(userMap.get("paperNumber"));
             } else {
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
-                String paperNumber = printCommonService.createPaperNumber(schoolId, examId);
-                userMap.put("paperNumber", paperNumber);
+                paperNumber = printCommonService.createPaperNumber(schoolId, examId);
             }
-            examTask.setPaperNumber(userMap.get("paperNumber"));
-            examTask.setPaperNumberId(SystemConstant.getDbUuid());
+            examTask.setPaperNumber(paperNumber);
             examTask.setStartTime(task.getStartTime());
             examTask.setEndTime(task.getEndTime());
             examTask.setEnable(true);
@@ -763,18 +655,12 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setTeachingRoomId(teachingRoomId);
 
             String userId = userMap.get("userId");
-            String specialty = userMap.get("specialty");
-            if (specialty != null && specialty.length() > 0 && !specialty.equals("null")) {
-                examTask.setSpecialty(specialty);
-            }
-
             if (userId != null && userId.length() > 0 && !userId.equals("null")) {
                 examTask.setUserId(SystemConstant.convertIdToLong(userId));
                 examTask.setStatus(ExamStatusEnum.STAGE);
             } else {
                 examTask.setStatus(ExamStatusEnum.DRAFT);
             }
-
             examTask.setReview(basicPrintConfig.getReview());
             list.add(examTask);
         }
@@ -1212,101 +1098,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         return reviewSampleDtoList.get(0);
     }
 
-    /**
-     * 统计截止到当天为止的即将逾期的审核待办任务总数
-     */
-    @Override
-    public void sendSmsExpireTask() {
-        SysConfig sysConfig = sysConfigService.getByKey("sys.warning.days");
-        if (sysConfig != null && StringUtils.isNotBlank(sysConfig.getConfigValue())) {
-            Integer configValue = Integer.valueOf(sysConfig.getConfigValue());
-            // 当天15点
-            Calendar c1 = Calendar.getInstance();
-            c1.set(Calendar.HOUR_OF_DAY, 15);
-            c1.set(Calendar.MINUTE, 0);
-            c1.set(Calendar.SECOND, 0);
-            long startTime = c1.getTimeInMillis();
-            // 3天后
-            Calendar c2 = Calendar.getInstance();
-            c2.setTime(c1.getTime());
-            c2.add(Calendar.DATE, configValue);
-            long endTime = c2.getTimeInMillis();
-            // 命题任务到期预警
-            String[] examTaskStatus1 = {ExamStatusEnum.SUBMIT.name()};
-            List<ExamTask> examTasks1 = this.baseMapper.listExamTaskExpire(startTime, endTime, examTaskStatus1);
-            if (examTasks1 != null && examTasks1.size() > 0) {
-                Map<Long, List<String>> listMap = examTasks1.stream().collect(Collectors.groupingBy(ExamTask::getUserId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
-                for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
-                    basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_EXAM_TASK_WILL_EXPIRE, entry.getKey(), entry.getValue());
-                }
-            }
-            // 命题分配到期预警
-            String[] examTaskStatus2 = {ExamStatusEnum.SUBMIT.name()};
-            List<ExamTask> examTasks2 = this.baseMapper.listExamTaskExpire(startTime, endTime, examTaskStatus2);
-            if (examTasks2 != null && examTasks2.size() > 0) {
-                Map<Long, List<String>> listMap = examTasks2.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
-                for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
-                    basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_ALLOCATION_WILL_EXPIRE, entry.getKey(), entry.getValue());
-                }
-            }
-
-            // 审核待办到期预警
-            List<ExamTask> examTasks3 = this.baseMapper.listExamTaskAuditExpire(startTime, endTime);
-            if (examTasks3 != null && examTasks3.size() > 0) {
-                Map<Long, List<String>> listMap = examTasks3.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
-                for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
-                    basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_AUDIT_WILL_EXPIRE, entry.getKey(), entry.getValue());
-                }
-            }
-        }
-    }
-
-    /**
-     * 统计当天逾期的审核任务增量
-     */
-    @Override
-    public void sendSmsOverdueTask() {
-        // 当天9点
-        Calendar c1 = Calendar.getInstance();
-        c1.set(Calendar.HOUR_OF_DAY, 9);
-        c1.set(Calendar.MINUTE, 0);
-        c1.set(Calendar.SECOND, 0);
-        long endTime = c1.getTimeInMillis();
-
-        // 1天前
-        Calendar cal = Calendar.getInstance();
-        cal.setTime(c1.getTime());
-        cal.add(Calendar.DATE, -1);
-        long startTime = cal.getTimeInMillis();
-        // 命题任务已逾期
-        String[] examTaskStatus1 = {ExamStatusEnum.SUBMIT.name()};
-        List<ExamTask> examTasks1 = this.baseMapper.listExamTaskExpire(startTime, endTime, examTaskStatus1);
-        if (examTasks1 != null && examTasks1.size() > 0) {
-            Map<Long, List<String>> listMap = examTasks1.stream().collect(Collectors.groupingBy(ExamTask::getUserId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
-            for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
-                basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_EXAM_TASK_OVERDUE, entry.getKey(), entry.getValue());
-            }
-        }
-        // 命题分配已逾期
-        String[] examTaskStatus2 = {ExamStatusEnum.SUBMIT.name()};
-        List<ExamTask> examTasks2 = this.baseMapper.listExamTaskExpire(startTime, endTime, examTaskStatus2);
-        if (examTasks2 != null && examTasks2.size() > 0) {
-            Map<Long, List<String>> listMap = examTasks2.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
-            for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
-                basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_ALLOCATION_OVERDUE, entry.getKey(), entry.getValue());
-            }
-        }
-
-        // 审核待办已逾期
-        List<ExamTask> examTasks3 = this.baseMapper.listExamTaskAuditExpire(startTime, endTime);
-        if (examTasks3 != null && examTasks3.size() > 0) {
-            Map<Long, List<String>> listMap = examTasks3.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
-            for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
-                basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_AUDIT_OVERDUE, entry.getKey(), entry.getValue());
-            }
-        }
-    }
-
     @Override
     public List<ExamTaskDetailDto> listTaskPaper(Long semesterId, Long examId, String courseCode, String paperNumber, Long cardRuleId, MakeMethodEnum makeMethod, Long startTime, Long
             endTime) {
@@ -1491,7 +1282,6 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             examTask.setSequence(sequence);
 
             examTask.setId(SystemConstant.getDbUuid());
-            examTask.setPaperNumberId(SystemConstant.getDbUuid());
             examTask.setSchoolId(schoolId);
             examTask.setOrgId(basicCourseService.getOrgIdBySchoolIdAndCourseCode(schoolId, examTask.getCourseCode()));
 

+ 7 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -600,11 +600,12 @@ public class PrintCommonServiceImpl implements PrintCommonService {
      */
     @Override
     public boolean remove(Long id) {
-        // code是否已有命题任务
-        BasicCourse course = basicCourseMapper.selectById(id);
-        List<ExamTask> taskList = examTaskService.listByCourseCode(course.getSchoolId(), course.getCode());
-        if (taskList != null && taskList.size() > 0) {
-            throw ExceptionResultEnum.ERROR.exception("课程绑定命题任务,不能删除");
+        BasicCourse basicCourse = basicCourseMapper.selectById(id);
+        QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTask::getSchoolId, basicCourse.getSchoolId()).eq(ExamTask::getCourseCode, basicCourse.getCode());
+        int count = examTaskService.count(queryWrapper);
+        if (count > 0) {
+            throw ExceptionResultEnum.ERROR.exception("课程[" + basicCourse.getName() + "(" + basicCourse.getCode() + ")]绑定命题任务,不能删除");
         }
         return basicCourseService.removeById(id);
     }
@@ -937,7 +938,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         String date = DateUtil.today().replace(SystemConstant.HYPHEN, "");
         String paperNumber = convertUtil.getIncre(date, "paperNumber" + schoolId, 5);
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, paperNumber);
+        queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getExamId, examId).eq(ExamTask::getPaperNumber, paperNumber);
         ExamTask examTask = examTaskService.getOne(queryWrapper);
         if (examTask != null) {
             return createPaperNumber(schoolId, examId);

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

@@ -0,0 +1,126 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.qmth.distributed.print.business.entity.ExamTask;
+import com.qmth.distributed.print.business.enums.ExamStatusEnum;
+import com.qmth.distributed.print.business.mapper.ExamTaskMapper;
+import com.qmth.distributed.print.business.service.BasicMessageService;
+import com.qmth.distributed.print.business.service.SmsSendService;
+import com.qmth.teachcloud.common.entity.SysConfig;
+import com.qmth.teachcloud.common.enums.MessageEnum;
+import com.qmth.teachcloud.common.service.SysConfigService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class SmsSendServiceImpl implements SmsSendService {
+
+    @Resource
+    SysConfigService sysConfigService;
+
+    @Resource
+    BasicMessageService basicMessageService;
+
+    @Resource
+    ExamTaskMapper examTaskMapper;
+
+    /**
+     * 统计截止到当天为止的即将逾期的审核待办任务总数
+     */
+    @Override
+    public void sendSmsExpireTask() {
+        SysConfig sysConfig = sysConfigService.getByKey("sys.warning.days");
+        if (sysConfig != null && StringUtils.isNotBlank(sysConfig.getConfigValue())) {
+            Integer configValue = Integer.valueOf(sysConfig.getConfigValue());
+            // 当天15点
+            Calendar c1 = Calendar.getInstance();
+            c1.set(Calendar.HOUR_OF_DAY, 15);
+            c1.set(Calendar.MINUTE, 0);
+            c1.set(Calendar.SECOND, 0);
+            long startTime = c1.getTimeInMillis();
+            // 3天后
+            Calendar c2 = Calendar.getInstance();
+            c2.setTime(c1.getTime());
+            c2.add(Calendar.DATE, configValue);
+            long endTime = c2.getTimeInMillis();
+            // 命题任务到期预警
+            String[] examTaskStatus1 = {ExamStatusEnum.SUBMIT.name()};
+            List<ExamTask> examTasks1 = examTaskMapper.listExamTaskExpire(startTime, endTime, examTaskStatus1);
+            if (examTasks1 != null && examTasks1.size() > 0) {
+                Map<Long, List<String>> listMap = examTasks1.stream().collect(Collectors.groupingBy(ExamTask::getUserId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
+                for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
+                    basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_EXAM_TASK_WILL_EXPIRE, entry.getKey(), entry.getValue());
+                }
+            }
+            // 命题分配到期预警
+            String[] examTaskStatus2 = {ExamStatusEnum.SUBMIT.name()};
+            List<ExamTask> examTasks2 = examTaskMapper.listExamTaskExpire(startTime, endTime, examTaskStatus2);
+            if (examTasks2 != null && examTasks2.size() > 0) {
+                Map<Long, List<String>> listMap = examTasks2.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
+                for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
+                    basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_ALLOCATION_WILL_EXPIRE, entry.getKey(), entry.getValue());
+                }
+            }
+
+            // 审核待办到期预警
+            List<ExamTask> examTasks3 = examTaskMapper.listExamTaskAuditExpire(startTime, endTime);
+            if (examTasks3 != null && examTasks3.size() > 0) {
+                Map<Long, List<String>> listMap = examTasks3.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
+                for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
+                    basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_AUDIT_WILL_EXPIRE, entry.getKey(), entry.getValue());
+                }
+            }
+        }
+    }
+
+    /**
+     * 统计当天逾期的审核任务增量
+     */
+    @Override
+    public void sendSmsOverdueTask() {
+        // 当天9点
+        Calendar c1 = Calendar.getInstance();
+        c1.set(Calendar.HOUR_OF_DAY, 9);
+        c1.set(Calendar.MINUTE, 0);
+        c1.set(Calendar.SECOND, 0);
+        long endTime = c1.getTimeInMillis();
+
+        // 1天前
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(c1.getTime());
+        cal.add(Calendar.DATE, -1);
+        long startTime = cal.getTimeInMillis();
+        // 命题任务已逾期
+        String[] examTaskStatus1 = {ExamStatusEnum.SUBMIT.name()};
+        List<ExamTask> examTasks1 = examTaskMapper.listExamTaskExpire(startTime, endTime, examTaskStatus1);
+        if (examTasks1 != null && examTasks1.size() > 0) {
+            Map<Long, List<String>> listMap = examTasks1.stream().collect(Collectors.groupingBy(ExamTask::getUserId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
+            for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
+                basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_EXAM_TASK_OVERDUE, entry.getKey(), entry.getValue());
+            }
+        }
+        // 命题分配已逾期
+        String[] examTaskStatus2 = {ExamStatusEnum.SUBMIT.name()};
+        List<ExamTask> examTasks2 = examTaskMapper.listExamTaskExpire(startTime, endTime, examTaskStatus2);
+        if (examTasks2 != null && examTasks2.size() > 0) {
+            Map<Long, List<String>> listMap = examTasks2.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
+            for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
+                basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_ALLOCATION_OVERDUE, entry.getKey(), entry.getValue());
+            }
+        }
+
+        // 审核待办已逾期
+        List<ExamTask> examTasks3 = examTaskMapper.listExamTaskAuditExpire(startTime, endTime);
+        if (examTasks3 != null && examTasks3.size() > 0) {
+            Map<Long, List<String>> listMap = examTasks3.stream().collect(Collectors.groupingBy(ExamTask::getCreateId, Collectors.mapping(m -> m.getId().toString(), Collectors.toList())));
+            for (Map.Entry<Long, List<String>> entry : listMap.entrySet()) {
+                basicMessageService.sendNoticeExpireOrOverdue(MessageEnum.NOTICE_OF_AUDIT_OVERDUE, entry.getKey(), entry.getValue());
+            }
+        }
+    }
+}

+ 6 - 1
distributed-print-business/src/main/resources/db/log/脚本-xiaof.sql

@@ -189,6 +189,9 @@ DELETE FROM `sys_privilege` WHERE (`id` = '423');
 DELETE FROM `sys_privilege` WHERE (`id` = '424');
 DELETE FROM `sys_privilege` WHERE (`id` = '436');
 DELETE FROM `sys_privilege` WHERE (`id` = '307');
+DELETE FROM `sys_privilege` WHERE (`id` = '140');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('174', '导入模板下载', '/api/admin/common/download_import_template', 'URL', '149', '15', 'SYS', '1', '1', '1');
+
 
 ALTER TABLE `exam_card`
     ADD COLUMN `content` MEDIUMTEXT NULL COMMENT '题卡工具制作题卡内容' AFTER `status`,
@@ -203,4 +206,6 @@ CHANGE COLUMN `update_time` `update_time` BIGINT NULL DEFAULT NULL COMMENT '更
 update exam_card a set a.content = (select b.content from exam_card_detail b where a.id = b.card_id);
 update exam_card a set a.html_content = (select b.html_content from exam_card_detail b where a.id = b.card_id);
 update exam_card a set a.backup_attachment = (select b.attachment_id from exam_card_detail b where a.id = b.card_id);
-update exam_card a set a.jpg_attachment = (select b.jpg_attachment_info from exam_card_detail b where a.id = b.card_id);
+update exam_card a set a.jpg_attachment = (select b.jpg_attachment_info from exam_card_detail b where a.id = b.card_id);
+
+ALTER TABLE `exam_task` DROP COLUMN `paper_number_id`;

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

@@ -90,31 +90,6 @@
         </where>
 
     </select>
-    <select id="listPaperNumberByPrintPlanId" resultType="java.lang.String">
-        SELECT
-            distinct a.paper_number paperNumber
-        FROM
-            exam_detail_course a
-                LEFT JOIN
-            exam_detail b ON a.exam_detail_id = b.id
-        <where>
-            <if test="printPlanIdList != null and printPlanIdList != '' and printPlanIdList.size() > 0">
-                and b.print_plan_id IN
-                <foreach collection="printPlanIdList" item="item" index="index" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
-            <if test="param != null and param != ''">
-                and a.paper_number like concat('%', #{param},'%')
-            </if>
-            <if test="orgIds != null and orgIds != '' and orgIds.size > 0">
-                AND a.org_id IN
-                <foreach collection="orgIds" item="item" index="index" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
-        </where>
-    </select>
     <select id="listByPrintPlanIdAndCourseCodeAndPaperNumber" resultMap="BaseResultMap">
         SELECT
             a.*

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

@@ -101,20 +101,6 @@ public class ExamTaskController {
         return ResultUtil.ok(examTaskService.list(SystemConstant.convertIdToLong(semesterId), SystemConstant.convertIdToLong(examId), enable, status, SystemConstant.convertIdToLong(cardRuleId), courseCode, paperNumber, startTime, endTime, userName, createName, pageNumber, pageSize));
     }
 
-    /**
-     * 试卷编号模糊查询
-     */
-    @ApiOperation(value = "试卷编号模糊查询")
-    @RequestMapping(value = "/paper_number_query", method = RequestMethod.POST)
-    public Result paperNumberQuery(@RequestParam(value = "param", required = false) String param,
-                                   @RequestParam(value = "printPlanId", required = false) List<String> printPlanId) {
-        if (Objects.isNull(printPlanId)) {
-            printPlanId = new ArrayList<>();
-        }
-        List<Long> printPlanIdList = printPlanId.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList());
-        return ResultUtil.ok(examTaskService.listPaperNumber(param, printPlanIdList));
-    }
-
     /**
      * 命题老师模糊查询
      */

+ 28 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -44,11 +44,14 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.File;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Date: 2021/3/30.
@@ -837,4 +840,29 @@ public class SysController {
         }
         return ResultUtil.ok(list);
     }
+
+    /**
+     * 下载导入模板
+     *
+     * @return
+     */
+    @ApiOperation(value = "下载导入模板")
+    @RequestMapping(value = "/download_import_template", method = RequestMethod.POST)
+    @Aac(auth = BOOL.FALSE)
+    public void downloadImportTemplate(@RequestParam(value = "type") String type, HttpServletResponse response) {
+        List<String> templateEnums = Stream.of(ImportTemplateEnum.values()).map(m -> m.name()).collect(Collectors.toList());
+        if (!templateEnums.contains(type)) {
+            throw ExceptionResultEnum.ERROR.exception("不支持的模板类型");
+        }
+
+        ImportTemplateEnum importTemplateEnum = ImportTemplateEnum.valueOf(type);
+        //注意getResource("")里面是空字符串
+        String path = this.getClass().getClassLoader().getResource("").getPath();
+        File file = new File(path + File.separator + "file", importTemplateEnum.getTemplateName());
+        if (file.exists()) {
+            throw ExceptionResultEnum.ERROR.exception("模板文件下载失败");
+        }
+        // 导出
+        FileUtil.outputFile(response, file, importTemplateEnum.getFileName());
+    }
 }

+ 36 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ImportTemplateEnum.java

@@ -0,0 +1,36 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 模板下载类型
+ */
+public enum ImportTemplateEnum {
+
+    TEMPLATE_ORG("org.xlsx", "组织架构导入模板.xlsx"),
+    TEMPLATE_USER("user.xlsx", "用户导入模板.xlsx"),
+    TEMPLATE_STUDENT("student.xlsx", "学生导入模板.xlsx"),
+    TEMPLATE_COURSE("course.xlsx", "课程导入模板.xlsx"),
+    TEMPLATE_TEACH_CLASS("teachClass.xlsx", "教学班学生导入模板.xlsx"),
+    TEMPLATE_EXAM_TASK("examTask.xlsx", "命题任务导入模板.xlsx"),
+    TEMPLATE_EXAM_TASK_STUDENT("examTaskStudent.xlsx", "命题任务学生导入模板.xlsx"),
+    //    TEMPLATE_EXAM_STUDENT("","考务数据导入模板.xlsx"),// 不需要,有固定接口
+    TEMPLATE_EXAM_PLAN("examPlan.xlsx", "命题计划导入模板.xlsx");
+
+    ImportTemplateEnum(String templateName, String fileName) {
+        this.templateName = templateName;
+        this.fileName = fileName;
+    }
+
+    private String templateName;
+    private String fileName;
+
+    public String getTemplateName() {
+        return templateName;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+}

+ 0 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java

@@ -26,8 +26,6 @@ public interface BasicCourseService extends IService<BasicCourse> {
 
     List<BasicCourse> listCoursesByUserId(Long userId);
 
-    BasicCourse findByCourseCode(String courseCode);
-
     BasicCourse findByCourseCode(String courseCode, Long schoolId);
 
     /**
@@ -101,8 +99,6 @@ public interface BasicCourseService extends IService<BasicCourse> {
      */
     Long getOrgIdBySchoolIdAndCourseCode(Long schoolId, String courseCode);
 
-    List<BasicCourse> findBySchoolIdAndCourseCode(Long schoolId, List<String> courseCodes);
-
     void exportData(HttpServletResponse response, Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime) throws Exception;
 
     /**

+ 0 - 13
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -83,12 +83,6 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         return this.baseMapper.listCoursesByUserId(userId);
     }
 
-    @Deprecated
-    @Override
-    public BasicCourse findByCourseCode(String courseCode) {
-        return this.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getCode, courseCode));
-    }
-
     @Override
     public BasicCourse findByCourseCode(String courseCode, Long schoolId) {
         BasicCourse basicCourse = this.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getCode, courseCode).eq(BasicCourse::getSchoolId, schoolId));
@@ -451,13 +445,6 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         return basicCourse.getTeachingRoomId();
     }
 
-    @Override
-    public List<BasicCourse> findBySchoolIdAndCourseCode(Long schoolId, List<String> courseCodes) {
-        QueryWrapper<BasicCourse> basicCourseQueryWrapper = new QueryWrapper<>();
-        basicCourseQueryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId).in(BasicCourse::getCode, courseCodes);
-        return this.list(basicCourseQueryWrapper);
-    }
-
     @Override
     public void exportData(HttpServletResponse response, Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime) throws Exception {
         Long schoolId = SystemConstant.convertIdToLong(ServletUtil.getRequestHeaderSchoolId().toString());

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

@@ -211,7 +211,7 @@ public class ExcelUtil {
                                             Annotation annotation = fields[j].getAnnotation(NotNull.class);
                                             ExcelNote note = fields[j].getAnnotation(ExcelNote.class);
                                             if ((Objects.isNull(obj) || Objects.equals("", obj)) && Objects.nonNull(annotation)) {
-                                                excelErrorList.add(y, new ExcelError(j + 1, "excel第" + (y + 1) + "个sheet第" + (j + 1) + "行[" + note.value() + "]为空"));
+                                                excelErrorList.add(y, new ExcelError(j + 1, "excel第" + (y + 1) + "个sheet第" + (j + 1) + "行[" + note.value() + "]必填"));
                                             }
                                         } else {
                                             Field field = null;
@@ -235,7 +235,7 @@ public class ExcelUtil {
                                             Annotation annotation = fields[j].getAnnotation(NotNull.class);
                                             ExcelNote note = fields[j].getAnnotation(ExcelNote.class);
                                             if ((Objects.isNull(obj) || Objects.equals("", obj)) && Objects.nonNull(annotation)) {
-                                                excelErrorList.add(y, new ExcelError(i + 1, "excel第" + (y + 1) + "个sheet第" + (i + 1) + "行[" + note.value() + "]为空"));
+                                                excelErrorList.add(y, new ExcelError(i + 1, "excel第" + (y + 1) + "个sheet第" + (i + 1) + "行[" + note.value() + "]必填"));
                                             }
                                         }
                                     }

+ 5 - 2
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -43,6 +43,9 @@ public class JobServiceImpl implements JobService {
     @Resource
     PrintCommonService printCommonService;
 
+    @Resource
+    SmsSendService smsSendService;
+
     @Resource
     ExamTaskService examTaskService;
 
@@ -76,12 +79,12 @@ public class JobServiceImpl implements JobService {
 
     @Override
     public void sendSmsExpireTask() {
-        examTaskService.sendSmsExpireTask();
+        smsSendService.sendSmsExpireTask();
     }
 
     @Override
     public void sendSmsOverdueTask() {
-        examTaskService.sendSmsOverdueTask();
+        smsSendService.sendSmsOverdueTask();
     }
 
     @Override