wangliang 4 years ago
parent
commit
3029d207b5

+ 8 - 0
themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java

@@ -309,6 +309,10 @@ public class ExamRecordCacheUtil {
         return (String) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_id.getCode());
     }
 
+    public static String getMobileWebsocketId(Long recordId) {
+        return (String) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_websocket_id.getCode());
+    }
+
     public static void setClientWebsocketStatus(Long recordId, WebsocketStatusEnum websocketStatusEnum, Long timestamp) {
         ClientWebsocketStatusBean clientWebsocketStatusBean = getClientWebsocketStatusBean(recordId);
         if (Objects.isNull(clientWebsocketStatusBean)) {
@@ -330,6 +334,10 @@ public class ExamRecordCacheUtil {
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_websocket_id.getCode(), id);
     }
 
+    public static void setMobileWebsocketId(Long recordId, String id) {
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.mobile_websocket_id.getCode(), id);
+    }
+
     public static void setClientLastSyncTime(Long recordId, Long date) {
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), ExamRecordFieldEnum.client_last_sync_time.getCode(), date);
     }

+ 3 - 1
themis-business/src/main/java/com/qmth/themis/business/enums/ExamRecordFieldEnum.java

@@ -111,7 +111,9 @@ public enum ExamRecordFieldEnum {
 
     in_process_liveness_judge_policy("inProcessLivenessJudgePolicy"),
 
-    monitor_video_source("monitorVideoSource");
+    monitor_video_source("monitorVideoSource"),
+
+    mobile_websocket_id("mobileWebsocketId");
 
     private String code;
 

+ 15 - 16
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -32,7 +32,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * @Description: mq 考生端执行逻辑 impl
@@ -238,11 +237,11 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
             }
         }
 //        if (match.get()) {
-            mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-            TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
-            tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
-            tmRocketMessageService.saveOrUpdate(tmRocketMessage);
-            redisUtil.delete(key, mqDto.getId());
+        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
+        TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
+        tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
+        tmRocketMessageService.saveOrUpdate(tmRocketMessage);
+        redisUtil.delete(key, mqDto.getId());
 //        }
     }
 
@@ -262,9 +261,9 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
         if (Objects.equals(MqTagEnum.EXAM_STOP.name(), tag)//考试退出
                 || Objects.equals(MqTagEnum.EXAM_START.name(), tag)) {//考试开始
             Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
-            String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
-            if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name()))) {
-                WebSocketMobileServer webSocketMobileServer = webSocketMap.get(clientWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name());
+            String mobileWebsocketId = ExamRecordCacheUtil.getMobileWebsocketId(recordId);
+            if (Objects.nonNull(mobileWebsocketId) && Objects.nonNull(webSocketMap.get(mobileWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name()))) {
+                WebSocketMobileServer webSocketMobileServer = webSocketMap.get(mobileWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name());
                 ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
                 if ((Objects.nonNull(examRecordStatusEnum)
                         && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
@@ -286,8 +285,8 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                     webSocketMobileServer.sendMessage(websocketDto);
                 }
             }
-            if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
-                WebSocketMobileServer webSocketMobileServer = webSocketMap.get(clientWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name());
+            if (Objects.nonNull(mobileWebsocketId) && Objects.nonNull(webSocketMap.get(mobileWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
+                WebSocketMobileServer webSocketMobileServer = webSocketMap.get(mobileWebsocketId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name());
                 ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
                 if ((Objects.nonNull(examRecordStatusEnum)
                         && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
@@ -311,11 +310,11 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
             }
         }
 //        if (match.get()) {
-            mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
-            TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
-            tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
-            tmRocketMessageService.saveOrUpdate(tmRocketMessage);
-            redisUtil.delete(key, mqDto.getId());
+        mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
+        TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
+        tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
+        tmRocketMessageService.saveOrUpdate(tmRocketMessage);
+        redisUtil.delete(key, mqDto.getId());
 //        }
     }
 }

+ 2 - 1
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketMobileServer.java

@@ -93,7 +93,8 @@ public class WebSocketMobileServer implements Concurrently {
         this.session = session;
         session.setMaxIdleTimeout(SystemConstant.WEBSOCKET_MAX_TIME_OUT);
         this.sessionId = tbSession.getId();
-        this.websocketSessionId = String.valueOf(UidUtil.nextId());
+        this.websocketSessionId = Objects.isNull(ExamRecordCacheUtil.getMobileWebsocketId(this.recordId)) ? String.valueOf(UidUtil.nextId()) : ExamRecordCacheUtil.getMobileWebsocketId(recordId);
+        ExamRecordCacheUtil.setMobileWebsocketId(this.recordId, this.websocketSessionId);
         if (webSocketMap.containsKey(this.websocketSessionId + "-" + this.source.name())) {
             webSocketMap.remove(this.websocketSessionId + "-" + this.source.name());
             webSocketMap.put(this.websocketSessionId + "-" + this.source.name(), this);