wangliang 4 年之前
父節點
當前提交
eaa1a80fc6

+ 12 - 6
themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java

@@ -259,8 +259,10 @@ public class ExamRecordCacheUtil {
         if (Objects.isNull(monitorStatusBean)) {
         if (Objects.isNull(monitorStatusBean)) {
             monitorStatusBean = new MonitorStatusBean(statusSourceEnum, timestamp);
             monitorStatusBean = new MonitorStatusBean(statusSourceEnum, timestamp);
         } else {
         } else {
-            monitorStatusBean.setMonitorStatusSourceEnum(statusSourceEnum);
-            monitorStatusBean.setTimestamp(timestamp);
+            if (Objects.nonNull(monitorStatusBean.getTimestamp()) && monitorStatusBean.getTimestamp().longValue() < timestamp.longValue()) {
+                monitorStatusBean.setMonitorStatusSourceEnum(statusSourceEnum);
+                monitorStatusBean.setTimestamp(timestamp);
+            }
         }
         }
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_STATUS_ + source.name(), monitorStatusBean);
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_STATUS_ + source.name(), monitorStatusBean);
     }
     }
@@ -283,8 +285,10 @@ public class ExamRecordCacheUtil {
         if (Objects.isNull(monitorCallStatusBean)) {
         if (Objects.isNull(monitorCallStatusBean)) {
             monitorCallStatusBean = new MonitorCallStatusBean(callStatusSourceEnum, timestamp);
             monitorCallStatusBean = new MonitorCallStatusBean(callStatusSourceEnum, timestamp);
         } else {
         } else {
-            monitorCallStatusBean.setMonitorCallStatusSourceEnum(callStatusSourceEnum);
-            monitorCallStatusBean.setTimestamp(timestamp);
+            if (Objects.nonNull(monitorCallStatusBean.getTimestamp()) && monitorCallStatusBean.getTimestamp().longValue() < timestamp.longValue()) {
+                monitorCallStatusBean.setMonitorCallStatusSourceEnum(callStatusSourceEnum);
+                monitorCallStatusBean.setTimestamp(timestamp);
+            }
         }
         }
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_CALL_STATUS_ + source.name(), monitorCallStatusBean);
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_CALL_STATUS_ + source.name(), monitorCallStatusBean);
     }
     }
@@ -311,8 +315,10 @@ public class ExamRecordCacheUtil {
         if (Objects.isNull(clientWebsocketStatusBean)) {
         if (Objects.isNull(clientWebsocketStatusBean)) {
             clientWebsocketStatusBean = new ClientWebsocketStatusBean(websocketStatusEnum, timestamp);
             clientWebsocketStatusBean = new ClientWebsocketStatusBean(websocketStatusEnum, timestamp);
         } else {
         } else {
-            clientWebsocketStatusBean.setWebsocketStatusEnum(websocketStatusEnum);
-            clientWebsocketStatusBean.setTimestamp(timestamp);
+            if (Objects.nonNull(clientWebsocketStatusBean.getTimestamp()) && clientWebsocketStatusBean.getTimestamp().longValue() < timestamp.longValue()) {
+                clientWebsocketStatusBean.setWebsocketStatusEnum(websocketStatusEnum);
+                clientWebsocketStatusBean.setTimestamp(timestamp);
+            }
         }
         }
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode(), clientWebsocketStatusBean);
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode(), clientWebsocketStatusBean);
     }
     }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.themis.business.bean.admin.*;
 import com.qmth.themis.business.bean.admin.*;
+import com.qmth.themis.business.bean.status.ClientWebsocketStatusBean;
 import com.qmth.themis.business.bean.status.ExamStatusBean;
 import com.qmth.themis.business.bean.status.ExamStatusBean;
 import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamActivityRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
@@ -416,6 +417,10 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
             if (o instanceof ExamStatusBean) {
             if (o instanceof ExamStatusBean) {
                 record.put(ExamRecordFieldEnum.status.getCode(), ((ExamStatusBean) o).getExamRecordStatusEnum());
                 record.put(ExamRecordFieldEnum.status.getCode(), ((ExamStatusBean) o).getExamRecordStatusEnum());
             }
             }
+            o = redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_status.getCode());
+            if (o instanceof ClientWebsocketStatusBean) {
+                record.put(ExamRecordFieldEnum.client_websocket_status.getCode(), ((ClientWebsocketStatusBean) o).getWebsocketStatusEnum());
+            }
             TOeExamRecord er = SimpleBeanUtil.mapToObject(record, TOeExamRecord.class);
             TOeExamRecord er = SimpleBeanUtil.mapToObject(record, TOeExamRecord.class);
             er.setStatus(ExamRecordStatusEnum.PERSISTED);
             er.setStatus(ExamRecordStatusEnum.PERSISTED);
             if (struct != null) {
             if (struct != null) {