wangliang 4 年 前
コミット
50f8a00a51

+ 9 - 1
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -758,7 +758,15 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         if (audioLeftPlayCounts != null && audioLeftPlayCounts.size() > 0) {
             ret.setAudioLeftPlayCount(audioLeftPlayCounts);
         }
-        ExamRecordCacheUtil.setLastPrepareTime(recordId, new Date(), true);
+
+        Date lastPrepareTime = new Date();
+        ExamRecordCacheUtil.setLastPrepareTime(recordId, new Date(), false);
+        ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.RESUME_PREPARE, false);
+        String[] columns = new String[]{ExamRecordFieldEnum.last_prepare_time.name(), ExamRecordFieldEnum.status.name()};
+        Object[] values = new Object[]{lastPrepareTime, ExamRecordStatusEnum.RESUME_PREPARE};
+        toeExamRecordService.dataUpdatesMq(recordId, columns, values);
+        //更新场次-考试记录缓存
+        ExamActivityRecordCacheUtil.setExamRecordStatus(es.getExamActivityId(), recordId, ExamRecordCacheUtil.getStatus(recordId));
         return ret;
     }
 

+ 4 - 1
themis-exam/src/main/java/com/qmth/themis/exam/api/TEStudentController.java

@@ -6,6 +6,7 @@ import com.qmth.themis.business.annotation.ApiJsonObject;
 import com.qmth.themis.business.annotation.ApiJsonProperty;
 import com.qmth.themis.business.bean.exam.ExamActivityUnFinishBean;
 import com.qmth.themis.business.bean.exam.ExamUnFinishBean;
+import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamingDataCacheUtil;
 import com.qmth.themis.business.cache.bean.ExamActivityCacheBean;
@@ -256,13 +257,15 @@ public class TEStudentController {
                             Date lastStartTime = new Date();
                             ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
                             String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(), ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(), ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name()};
-                            Object[] values = new Object[]{breakId, ExamRecordStatusEnum.RESUME_PREPARE, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
+                            Object[] values = new Object[]{breakId, ExamRecordStatusEnum.BREAK_OFF, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
                             tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
                             ExamConstant.sendExamStopMsg(recordId, true);
                             //考试断点异常原因 发送mq start
                             MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(), ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId), String.valueOf(recordId));
                             mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
                             //考试断点异常原因 发送mq end
+                            //更新场次-考试记录缓存
+                            ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId, ExamRecordCacheUtil.getStatus(recordId));
                         }
                         ExamUnFinishBean examUnFinishBean = this.unFinishCommon(recordId, ec, examStudentCacheBean, examActivityCacheBean, examStudentId);
                         map.put("unFinished", examUnFinishBean);

+ 3 - 0
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketOeServer.java

@@ -2,6 +2,7 @@ package com.qmth.themis.exam.websocket;
 
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
+import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
@@ -207,6 +208,8 @@ public class WebSocketOeServer implements Concurrently {
                         MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
                         mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
                         //考试断点异常原因 发送mq end
+                        //更新场次-考试记录缓存
+                        ExamActivityRecordCacheUtil.setExamRecordStatus(examStudentCacheBean.getExamActivityId(), recordId, ExamRecordCacheUtil.getStatus(recordId));
                     }
                 }
             }

+ 4 - 4
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.google.gson.Gson;
+import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.RedisKeyHelper;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
@@ -239,10 +240,7 @@ public class MqLogicServiceImpl implements MqLogicService {
                 Integer diff = 0;
                 if (Objects.nonNull(clientLastSyncTime)) {//大于等于当前时间,说明未重连或重登录
                     Long l = (System.currentTimeMillis() - clientLastSyncTime.getTime()) / 1000;
-                    if (l >= 2 && !Objects.equals(ExamRecordCacheUtil.getStatus(recordId), ExamRecordStatusEnum.FINISHED)) {
-                        diff = l.intValue();
-                        ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, true);
-                    }
+                    diff = l.intValue();
                 }
                 Long examId = ExamRecordCacheUtil.getExamId(recordId);
                 Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
@@ -273,6 +271,8 @@ public class MqLogicServiceImpl implements MqLogicService {
                     MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(), ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId), String.valueOf(recordId));
                     mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
                     //考试断点异常原因 发送mq end
+                    //更新场次-考试记录缓存
+                    ExamActivityRecordCacheUtil.setExamRecordStatus(examActivityId, recordId, ExamRecordCacheUtil.getStatus(recordId));
                 }
                 //增加异常日志
                 TIeInvigilateExceptionInfo tIeInvigilateExceptionInfo = new TIeInvigilateExceptionInfo(examId, examActivityId, recordId, examStudentId, ExceptionEnum.NET_TIME_OUT.getCode(), ExceptionEnum.NET_TIME_OUT, diff);