Browse Source

3.2.3 考号重复校验,考号自动生成规则修改

xiaofei 2 years ago
parent
commit
26c09798e3

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

@@ -54,4 +54,6 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
     List<ExamStudentCourseClassDto> listExamStudentByPaperNumberAndPaperType(@Param("batchId") Long batchId, @Param("paperNumber") String paperNumber, @Param("paperType") String paperType);
 
     List<SyncExamStudentDto> listStudentByExamDetailCourseId(@Param("examDetailCourseId") Long examDetailCourseId);
+
+    List<String> listTicketNumberBySemesterId(String semesterId);
 }

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

@@ -13,7 +13,6 @@ import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.enums.ExamDataSourceEnum;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.SysUser;
-import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -180,10 +179,11 @@ public interface ExamDetailService extends IService<ExamDetail> {
     /**
      * 根据考务数据Excel数据处理考务-学生表
      *
+     * @param examId
      * @param dataList Excel处理后的数据
      * @param userId   当前用户id
      */
-    void disposeExamStudentByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) throws IllegalAccessException;
+    void disposeExamStudentByExaminationExcel(Long examId, List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) throws IllegalAccessException;
 
     /**
      * 删除考务数据

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

@@ -47,4 +47,6 @@ public interface ExamStudentService extends IService<ExamStudent> {
     List<Map> listStudentScoreSync(Long schoolId, String studentCode, String examNumber, String subjectCode);
 
     List<SyncExamStudentDto> listStudentByExamDetailCourseId(List<ExamDetailCourseDto> examDetailCourseList);
+
+    List<String> listTicketNumberBySemesterId(String semesterId);
 }

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

@@ -265,7 +265,7 @@ public interface PrintCommonService {
      * @param sysUser                        请求用户
      * @return 结果
      */
-    List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, String examShortCode, String courseShortCode, Long cardRuleId, SysUser sysUser);
+    List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String semesterId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, String examShortCode, String courseShortCode, Long cardRuleId, SysUser sysUser);
 
     /**
      * 生成准考证号

+ 21 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -43,7 +43,6 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -83,6 +82,9 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     @Resource
     private BasicStudentService basicStudentService;
 
+    @Resource
+    private BasicExamService basicExamService;
+
     @Resource
     private SysOrgService sysOrgService;
 
@@ -639,10 +641,16 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void disposeExamStudentByExaminationExcel(List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) throws IllegalAccessException {
+    public void disposeExamStudentByExaminationExcel(Long examId, List<ExaminationImportDto> dataList, Long userId, SysUser sysUser) throws IllegalAccessException {
+        BasicExam basicExam = basicExamService.getById(examId);
+        // 查询学期下所有考务数据的准考证号集合
+        List<String> examStudentTicketNumberList = examStudentService.listTicketNumberBySemesterId(basicExam.getSemesterId());
+
         List<ExamStudent> examStudentList = new ArrayList<>();
         List<BasicStudentExtrasParam> basicStudentExtrasParamList = new ArrayList<>();
         Map<String, Integer> ticketNumberCodeMap = new HashMap<>();
+        Set<String> ticketNumberRepeatList = new HashSet<>();
+        StringJoiner stringJoiner = new StringJoiner(",");
         for (ExaminationImportDto examinationImportDto : dataList) {
             Long schoolId = examinationImportDto.getSchoolId();
             Long printPlanId = examinationImportDto.getPrintPlanId();
@@ -667,6 +675,10 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
                 ticketNumberCodeMap.put(ticketNumber, 1);
             }
 
+            if (!examStudentTicketNumberList.isEmpty() && examStudentTicketNumberList.contains(ticketNumber)) {
+                ticketNumberRepeatList.add(ticketNumber);
+            }
+
             List<FieldsDto> fieldsDtoList = examinationImportDto.getSecondaryFieldList();
             List<ExtendFieldsDto> extendFieldsDtoList = this.getExtendFieldsByFields(fieldsDtoList);
             List<ExamDetail> examDetailList = this.list(new QueryWrapper<ExamDetail>().lambda()
@@ -721,7 +733,13 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         // 校验准考证号是否重复
         List<String> stringList = ticketNumberCodeMap.entrySet().stream().filter(m -> m.getValue().intValue() > 1).map(m -> String.format("考号[%s]有%d条重复数据", m.getKey(), m.getValue().intValue())).collect(Collectors.toList());
         if (!stringList.isEmpty()) {
-            throw ExceptionResultEnum.ERROR.exception(String.join(",", stringList));
+            stringJoiner.add(String.join(",", stringList));
+        }
+        if (!ticketNumberRepeatList.isEmpty()) {
+            stringJoiner.add("考号[" + String.join(",", ticketNumberRepeatList) + "]在当前学期下已存在");
+        }
+        if (stringJoiner.toString().length() > 1) {
+            throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
         }
 
         // 更新基础学生表和附加数据

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

@@ -120,4 +120,9 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
         }
         return syncExamStudentDtoList;
     }
+
+    @Override
+    public List<String> listTicketNumberBySemesterId(String semesterId) {
+        return this.baseMapper.listTicketNumberBySemesterId(semesterId);
+    }
 }

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

@@ -1757,7 +1757,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
                         // 更新实际考生数量
                         List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList = examDetailList.getExamTaskStudentObjectParamList();
-                        List<ExamStudent> examStudents = printCommonService.createBatchStudentByStudentList(schoolId, paperNumber, examDetailList.getExtendFields(), examTaskStudentObjectParamList, examDetailCourse.getId(), basicExam.getShortCode(), basicCourse.getShortCode(), basicPrintConfig.getCardRuleId(), sysUser);
+                        List<ExamStudent> examStudents = printCommonService.createBatchStudentByStudentList(schoolId, basicExam.getSemesterId(), paperNumber, examDetailList.getExtendFields(), examTaskStudentObjectParamList, examDetailCourse.getId(), basicExam.getShortCode(), basicCourse.getShortCode(), basicPrintConfig.getCardRuleId(), sysUser);
                         if (!CollectionUtils.isEmpty(examStudents)) {
                             examStudentService.insertBatch(examStudents);
                         }

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

@@ -1106,7 +1106,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, String examShortCode, String courseShortCode, Long cardRuleId, SysUser sysUser) {
+    public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String semesterId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, String examShortCode, String courseShortCode, Long cardRuleId, SysUser sysUser) {
         AtomicInteger atomicInteger = new AtomicInteger(1);
 
         BasicCardRule basicCardRule = basicCardRuleService.getById(cardRuleId);
@@ -1154,7 +1154,9 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             examStudent.setCollegeName(basicStudentResult.getCollegeName());
             examStudent.setMajorName(basicStudentResult.getMajorName());
             String prefix = convertUtil.randomNumberPrefix(examShortCode, courseShortCode, map.get(String.valueOf(basicClazzId)), basicCardRule == null ? null : basicCardRule.getExamNumberDigit());
-            SerialNumberParams ticketNumberParams = new SerialNumberParams(SystemConstant.NUMBER_CACHE + "ticketNumber-" + schoolId, prefix, StringUtils.isBlank(prefix) ? 8 : basicCardRule.getExamNumberDigit() - prefix.length());
+            StringJoiner stringJoiner = new StringJoiner("-");
+            stringJoiner.add("ticketNumber").add(schoolId.toString()).add(semesterId);
+            SerialNumberParams ticketNumberParams = new SerialNumberParams(SystemConstant.NUMBER_CACHE + stringJoiner , prefix, StringUtils.isBlank(prefix) ? 8 : basicCardRule.getExamNumberDigit() - prefix.length());
             examStudent.setTicketNumber(createTicketNumber(ticketNumberParams));
             examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
             examStudent.setExtendFields(extendFields);

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

@@ -883,7 +883,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             // 组装exam_detail_course数据
             examDetailService.disposeExamDetailCourseByExaminationExcel(examinationImportDtoList, userId, sysUser);
             // 组装exam_student数据
-            examDetailService.disposeExamStudentByExaminationExcel(examinationImportDtoList, userId, sysUser);
+            examDetailService.disposeExamStudentByExaminationExcel(examPrintPlan.getExamId(), examinationImportDtoList, userId, sysUser);
 
             // 更改印刷计划状态
             examPrintPlan.setStatus(PrintPlanStatusEnum.READY);

+ 20 - 0
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -284,4 +284,24 @@
                 AND a.paper_type = b.paper_type
                 AND a.clazz_id = b.clazz_id
     </select>
+    <select id="listTicketNumberBySemesterId" resultType="java.lang.String">
+        SELECT
+            es.ticket_number
+        FROM
+            exam_student es
+        WHERE
+            EXISTS( SELECT
+                        1
+                    FROM
+                        exam_detail_course edc
+                            JOIN
+                        exam_detail ed ON edc.exam_detail_id = ed.id
+                            JOIN
+                        exam_print_plan epp ON ed.print_plan_id = epp.id
+                            JOIN
+                        basic_exam be ON epp.exam_id = be.id
+                    WHERE
+                        es.exam_detail_course_id = edc.id
+                      AND be.semester_id = #{semesterId})
+    </select>
 </mapper>