Parcourir la source

新的重考记录产生前,不再把前一次的重考记录作废,需等后面的重考实际上产生了考试记录后,再把前面的重考记录作废。

deason il y a 11 mois
Parent
commit
f1ee8e27bf

+ 33 - 0
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/SyncExamDataCloudServiceProvider.java

@@ -73,6 +73,9 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
     @Autowired
     private ExamRecordDataRepo examRecordDataRepo;
 
+    @Autowired
+    private ExamRecordForMarkingRepo examRecordForMarkingRepo;
+
     @Autowired
     private ExamStudentRepo examStudentRepo;
 
@@ -469,6 +472,7 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
         if (isReexamine) {
             result.setReexamineType(examStudentEntity.getReexamineType());
             result.setReexamineDetail(examStudentEntity.getReexamineDetail());
+            this.handleReexamine(examRecordData.getExamStudentId(), usedNum, examTimes, examStudentEntity.getExtraNum());
         }
 
         result.setCourseId(examRecordData.getCourseId());
@@ -522,6 +526,35 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
         return examRecordDataRepo.saveAndFlush(result);
     }
 
+    /**
+     * 处理重考
+     */
+    private void handleReexamine(Long examStudentId, Integer usedNum, Integer examTimes, Integer extraNum) {
+        List<ExamRecordDataEntity> examRecords = examRecordDataRepo.findByExamStudentId(examStudentId);
+        Optional<ExamRecordDataEntity> examRecordOptional = examRecords.stream()
+                .filter(examRecordData -> examRecordData.getExamRecordStatus() != ExamRecordStatus.EXAM_INVALID
+                        && examRecordData.getIsReexamine() != null && examRecordData.getIsReexamine())
+                .findFirst();
+
+        if (examRecordOptional.isPresent()) {
+            ExamRecordDataEntity examRecordData = examRecordOptional.get();
+
+            // 将上一次重考的记录设置成无效
+            examRecordData.setExamRecordStatus(ExamRecordStatus.EXAM_INVALID);
+            examRecordDataRepo.save(examRecordData);
+
+            // 删除生成的阅卷数据,避免传到阅卷
+            ExamRecordForMarkingEntity examRecordForMarking = examRecordForMarkingRepo.findByExamRecordDataId(examRecordData.getId());
+            if (examRecordForMarking != null) {
+                examRecordForMarkingRepo.delete(examRecordForMarking);
+            }
+
+            LOG.warn("处理重考,将上一次重考记录作废!examId:{} studentId:{} examStudentId:{} examRecordDataId:{} usedNum:{} examTimes:{} extraNum:{}",
+                    examRecordData.getExamId(), examRecordData.getStudentId(), examStudentId, examRecordData.getId(),
+                    usedNum, examTimes, extraNum);
+        }
+    }
+
     /**
      * 计算考试次数
      */

+ 11 - 6
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamStudentServiceImpl.java

@@ -24,9 +24,11 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordFileAnswerRepo;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordForMarkingRepo;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamStudentRepo;
-import cn.com.qmth.examcloud.core.oe.admin.dao.entity.*;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordFileAnswerEntity;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordForMarkingEntity;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamStudentEntity;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ReexamineLogEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.CourseLevel;
-import cn.com.qmth.examcloud.core.oe.admin.dao.enums.ExamRecordStatus;
 import cn.com.qmth.examcloud.core.oe.admin.dao.enums.FinishStatus;
 import cn.com.qmth.examcloud.core.oe.admin.service.*;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.OnHandExamInfo;
@@ -1020,7 +1022,7 @@ public class ExamStudentServiceImpl implements ExamStudentService {
     @Transactional
     public void setReexamine(Long examStudentId, String reexamineType, String reexamineDetail, Long operateUserId, String operateUserName) {
         // 查询出上一次重考的记录
-        List<ExamRecordDataEntity> examRecordDataList = examRecordService.getExamRecordListByExamStudentId(examStudentId);
+        /*List<ExamRecordDataEntity> examRecordDataList = examRecordService.getExamRecordListByExamStudentId(examStudentId);
         Optional<ExamRecordDataEntity> examRecordOptional = examRecordDataList.stream()
                 .filter(examRecordData -> examRecordData.getExamRecordStatus() != ExamRecordStatus.EXAM_INVALID
                         && examRecordData.getIsReexamine() != null && examRecordData.getIsReexamine())
@@ -1040,12 +1042,12 @@ public class ExamStudentServiceImpl implements ExamStudentService {
 
             // 重新计算考生的最终分数
             examStudentFinalScoreService.calcAndSaveFinalScore(examRecordData.getExamStudentId());
-        }
+        }*/
 
         // 考生表重考次数+1
         ExamStudentEntity examStudent = examStudentRepo.findByExamStudentId(examStudentId);
-        Integer extraExamNum = examStudent.getExtraNum() == null ? 0 : examStudent.getExtraNum();
-        examStudent.setExtraNum(extraExamNum + 1);
+        int extraNum = examStudent.getExtraNum() == null ? 0 : examStudent.getExtraNum();
+        examStudent.setExtraNum(extraNum + 1);
         examStudent.setReexamineType(reexamineType);
         examStudent.setReexamineDetail(reexamineDetail);
         examStudent.setUpdateTime(new Date());
@@ -1065,6 +1067,9 @@ public class ExamStudentServiceImpl implements ExamStudentService {
         reexamineLog.setUpdateTime(new Date());
         reexamineLog.setCreationTime(new Date());
         reexamineLogService.addReexamineLog(reexamineLog);
+
+        log.warn("重考设置!examId:{} studentId:{} examStudentId:{} usedNum:{} extraNum:{} {} {}", examStudent.getExamId(),
+                examStudent.getStudentId(), examStudentId, examStudent.getUsedNum(), extraNum, reexamineType, reexamineDetail);
     }
 
     @Override

+ 0 - 2
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ReexamineLogServiceImpl.java

@@ -43,8 +43,6 @@ public class ReexamineLogServiceImpl implements ReexamineLogService {
         }
 
         reexamineLogRepo.save(reexamineLog);
-        log.warn("重考设置!examId:{} examStudentId:{} {} {}", reexamineLog.getExamId(), reexamineLog.getExamStudentId(),
-                reexamineLog.getReexamineType(), reexamineLog.getReexamineDetail());
     }
 
     @Override