Ver código fonte

fix:考生字典导入课程不同,试卷编号相同需要校验

caozixuan 1 ano atrás
pai
commit
fc45b08c59

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

@@ -289,7 +289,7 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
 
         // 校验2 试卷编号存在时,任课教师,考试时间,考点考场均必填;
         BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
-        boolean needPaperNumber = basicSchool.getHasPaperNumber() == null ? false : basicSchool.getHasPaperNumber();
+        boolean needPaperNumber = basicSchool.getHasPaperNumber() != null && basicSchool.getHasPaperNumber();
         if (SystemConstant.strNotNull(paperNumber)) {
             String hasPaperNumberError = "试卷编号不为空时: ";
             if (!SystemConstant.strNotNull(teacherCode) || !SystemConstant.strNotNull(teacherName)) {

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

@@ -2089,13 +2089,15 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
         List<BasicExamStudent> dbData = basicExamStudentService.list(new QueryWrapper<BasicExamStudent>().lambda()
                 .select(BasicExamStudent::getId, BasicExamStudent::getExamId, BasicExamStudent::getCourseCode,
-                        BasicExamStudent::getStudentCode).eq(BasicExamStudent::getSchoolId, schoolId)
-                .eq(BasicExamStudent::getExamId, examId));
+                        BasicExamStudent::getStudentCode, BasicExamStudent::getPaperNumber).eq(BasicExamStudent::getSchoolId, schoolId).eq(BasicExamStudent::getExamId, examId));
 
         // 数据库中学生学号和id对应关系
         Map<String, Long> studentCodeIdMap = dbData.stream().collect(Collectors.toMap(
                 k -> k.getExamId() + SystemConstant.HYPHEN + k.getCourseCode() + SystemConstant.HYPHEN + k.getStudentCode(),
                 BaseEntity::getId));
+        Map<String, String> paperNumberCourseCodeMap = dbData.stream().filter(e -> SystemConstant.strNotNull(e.getPaperNumber())).collect(
+                Collectors.toMap(BasicExamStudent::getPaperNumber, BasicExamStudent::getCourseCode, (o1, o2) -> o1));
+
         // excel中学生学号和学生字典对象关系
         Map<String, BasicExamStudent> studentCodeObjMap = new HashMap<>();
         AtomicInteger successInteger = new AtomicInteger(0);
@@ -2104,11 +2106,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         ExcelResult<BasicExamStudentDto> excelResult = ConvertUtil.analyzeExcel(inputStream, BasicExamStudentDto.class,
                 true, 1);
         List<BasicExamStudentDto> basicExamStudentDtoList = excelResult.getDatasource();
-        boolean success = excelResult.isSuccess();
         for (BasicExamStudentDto basicExamStudentDto : basicExamStudentDtoList) {
             List<String> errorMsgList = new ArrayList<>();
             // 行索引
-            String courseName = basicExamStudentDto.getCourseName();
             String courseCode = basicExamStudentDto.getCourseCode();
             String studentName = basicExamStudentDto.getStudentName();
             String studentCode = basicExamStudentDto.getStudentCode();
@@ -2135,6 +2135,17 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 errorMsgList.add(e.getMessage());
             }
 
+            if (SystemConstant.strNotNull(paperNumber) && SystemConstant.strNotNull(courseCode)) {
+                if (paperNumberCourseCodeMap.containsKey(paperNumber)) {
+                    if (!Objects.equals(paperNumberCourseCodeMap.get(paperNumber), courseCode)) {
+                        errorMsgList.add(String.format("试卷编号和课程编号不匹配:试卷编号[%s]已经存在于课程[%s]下", paperNumber,
+                                paperNumberCourseCodeMap.get(paperNumber)));
+                    }
+                } else {
+                    paperNumberCourseCodeMap.put(paperNumber, courseCode);
+                }
+            }
+
             String key = examId + SystemConstant.HYPHEN + courseCode + SystemConstant.HYPHEN + studentCode;
             Long id = null;
             if (studentCodeIdMap.containsKey(key)) {
@@ -2194,9 +2205,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Transactional
     @Override
     public Map<String, Object> executeImportMarkStudentLogic(Map<String, Object> map) throws Exception {
-        SysUser requestUser = (SysUser) map.get(SystemConstant.USER);
         InputStream inputStream = (InputStream) map.get("inputStream");
-        Long examId = SystemConstant.convertIdToLong(String.valueOf(map.get("examId")));
         // 检验课程编号和课程名称对应
         Map<String, String> courseCodeNameCheckMap = new HashMap<>();
         // 检验学号在课程下唯一
@@ -2423,7 +2432,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     optionScope.add(code);
                 }
             } catch (Exception e) {
-                throw ExceptionResultEnum.ERROR.exception(logicErrorCommonNotice + "[选项个数]不能超过26");
+                throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             }
 
             // 答案选项越界校验
@@ -2457,8 +2466,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 case 2:
                     break;
                 case 3:
-                    if (!OptionsEnum.A.getCode().equals(answer) && !OptionsEnum.B.getCode().equals(answer)) {
-                        logicErrorList.add("判断题答案只能为A&B");
+                    if (optionCount != 2) {
+                        logicErrorList.add("判断题[选项个数]只能为2");
                     }
                     break;
                 default: