wangliang 4 年 前
コミット
8f284378a6

+ 22 - 5
themis-admin/src/main/java/com/qmth/themis/admin/api/TIeInvigilateController.java

@@ -491,6 +491,7 @@ public class TIeInvigilateController {
         if (Objects.isNull(mapParameter.get("status")) || Objects.equals(mapParameter.get("status"), "")) {
             throw new BusinessException(ExceptionResultEnum.BREACH_STATUS_IS_NULL);
         }
+        List<TOeExamRecord> tOeExamRecordList = new ArrayList<>();
         if (recordIdList.size() > 0) {
             Integer status = Integer.parseInt(String.valueOf(mapParameter.get("status")));
             TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
@@ -503,8 +504,9 @@ public class TIeInvigilateController {
                     Long examId = ExamRecordCacheUtil.getExamId(l);
                     Long examStudentId = null;
                     Long examActivityId = null;
+                    TOeExamRecord tOeExamRecord = null;
                     if (Objects.isNull(examId)) {
-                        TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(l);
+                        tOeExamRecord = tOeExamRecordService.getById(l);
                         examId = tOeExamRecord.getExamId();
                         examStudentId = tOeExamRecord.getExamStudentId();
                         examActivityId = tOeExamRecord.getExamActivityId();
@@ -516,8 +518,13 @@ public class TIeInvigilateController {
                     TEExamBreachLog teExamBreachLog = new TEExamBreachLog(examId, examActivityId, l, examStudentId, type.name(), description, status);
                     teExamBreachLog.setCreateId(tbUser.getId());
                     finalTeExamBreachLogList.add(teExamBreachLog);
-                    ExamRecordCacheUtil.setBreachStatus(l, 0);
-                    tOeExamRecordService.sendExamRecordDataSaveMq(l, System.currentTimeMillis());
+                    if (Objects.nonNull(ExamRecordCacheUtil.getId(l)) && Objects.nonNull(tOeExamRecord)) {
+                        ExamRecordCacheUtil.setBreachStatus(l, 0);
+                        tOeExamRecordService.sendExamRecordDataSaveMq(l, System.currentTimeMillis());
+                    } else {
+                        tOeExamRecord.setBreachStatus(0);
+                        tOeExamRecordList.add(tOeExamRecord);
+                    }
                 }
             } else {//撤销违纪
                 BreachCancelTypeEnum type = BreachCancelTypeEnum.valueOf(String.valueOf(mapParameter.get("type")));
@@ -526,14 +533,24 @@ public class TIeInvigilateController {
                         .eq(TEExamBreachLog::getStatus, 0);
                 teExamBreachLogList = teExamBreachLogService.list(teExamBreachLogQueryWrapper);
                 teExamBreachLogList.forEach(s -> {
+                    TOeExamRecord tOeExamRecord = null;
                     s.setType(type.name());
                     s.setDescription(description);
                     s.setStatus(status);
                     s.setUpdateId(tbUser.getId());
-                    ExamRecordCacheUtil.setBreachStatus(s.getExamRecordId(), 1);
-                    tOeExamRecordService.sendExamRecordDataSaveMq(s.getExamRecordId(), System.currentTimeMillis());
+                    if (Objects.nonNull(ExamRecordCacheUtil.getId(s.getExamRecordId()))) {
+                        tOeExamRecord = tOeExamRecordService.getById(s.getExamRecordId());
+                        tOeExamRecord.setBreachStatus(1);
+                        tOeExamRecordList.add(tOeExamRecord);
+                    } else {
+                        ExamRecordCacheUtil.setBreachStatus(s.getExamRecordId(), 1);
+                        tOeExamRecordService.sendExamRecordDataSaveMq(s.getExamRecordId(), System.currentTimeMillis());
+                    }
                 });
             }
+            if (Objects.nonNull(tOeExamRecordList) && tOeExamRecordList.size() > 0) {
+                tOeExamRecordService.saveOrUpdateBatch(tOeExamRecordList);
+            }
             for (TEExamBreachLog eb : teExamBreachLogList) {
                 Map<String, Object> properties = new HashMap<>();
                 properties.put("type", eb.getDescription());

+ 10 - 10
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -515,18 +515,18 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
     @Override
     @Transactional
     public void examRecordDataSave(Long recordId) {
-        Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
-        Long paperId = ExamRecordCacheUtil.getPaperId(recordId);
-        Long firstStartTime = ExamRecordCacheUtil.getFirstStartTime(recordId);
-        Integer durationSeconds = ExamRecordCacheUtil.getDurationSeconds(recordId);
-        Double objectiveScore = ExamRecordCacheUtil.getObjectiveScore(recordId);
-        Long examId = ExamRecordCacheUtil.getExamId(recordId);
-        Long finishTime = ExamRecordCacheUtil.getFinishTime(recordId);
-        FinishTypeEnum finishTypeEnum = ExamRecordCacheUtil.getFinishType(recordId);
-        Long clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
-        Integer alreadyBreakCount = ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
         ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
         if (Objects.nonNull(examRecordStatusEnum)) {
+            Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
+            Long paperId = ExamRecordCacheUtil.getPaperId(recordId);
+            Long firstStartTime = ExamRecordCacheUtil.getFirstStartTime(recordId);
+            Integer durationSeconds = ExamRecordCacheUtil.getDurationSeconds(recordId);
+            Double objectiveScore = ExamRecordCacheUtil.getObjectiveScore(recordId);
+            Long examId = ExamRecordCacheUtil.getExamId(recordId);
+            Long finishTime = ExamRecordCacheUtil.getFinishTime(recordId);
+            FinishTypeEnum finishTypeEnum = ExamRecordCacheUtil.getFinishType(recordId);
+            Long clientLastSyncTime = ExamRecordCacheUtil.getClientLastSyncTime(recordId);
+            Integer alreadyBreakCount = ExamRecordCacheUtil.getAlreadyBreakCount(recordId);
             Long breakId = ExamRecordCacheUtil.getLastBreakId(recordId);
             Long lastBreakTime = ExamRecordCacheUtil.getLastBreakTime(recordId);
             Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);

+ 1 - 1
themis-business/src/main/resources/mapper/TOeExamRecordMapper.xml

@@ -866,7 +866,7 @@
         FROM t_oe_exam_record t
         where t.exam_student_id = #{examStudentId}
           and t.finish_time is not null
-          and (t.breach_status is null or t.breach_status != 1)
+          and (t.breach_status is null or t.breach_status = 1)
     </select>
 
 	<select id="findMaxObjectiveScore" resultType="com.qmth.themis.business.entity.TOeExamRecord">