wangliang 4 سال پیش
والد
کامیت
9c65caeb0a

+ 5 - 0
themis-backend/src/main/java/com/qmth/themis/backend/api/TIeInvigilateController.java

@@ -182,6 +182,11 @@ public class TIeInvigilateController {
         MqDto mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oe.name(), recordId, MqEnum.WEBSOCKET_IM_CLUSTERING_LOG, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
         mqDtoService.assembleSendOneWayMsg(mqDto);
         //发送mq给客户端监考消息end
+
+        //发送mq给客户端监考强制活体验证start
+        mqDto = new MqDto(MqTopicEnum.themisTopic.getCode(), MqTagEnum.oe.name(), recordId, MqEnum.WEBSOCKET_LIVENESS_VERIFY_LOG, String.valueOf(tbUser.getId()), mapParameter, tbUser.getName());
+        mqDtoService.assembleSendOneWayMsg(mqDto);
+        //发送mq给客户端监考强制活体验证end
         return ResultUtil.ok(SystemConstant.SUCCESS);
     }
 }

+ 1 - 0
themis-business/src/main/java/com/qmth/themis/business/enums/MqEnum.java

@@ -25,6 +25,7 @@ public enum MqEnum {
     WEBSOCKET_MONITOR_FINISH_LOG(12, "监考强制离线(交卷)"),
     WEBSOCKET_WARNING_FINISH_LOG(13, "预警强制离线(交卷)"),
     WEBSOCKET_HAND_FINISH_LOG(14, "手动(交卷)"),
+    WEBSOCKET_LIVENESS_VERIFY_LOG(15, "监考强制活体验证"),
 
     /**
      * websocket超时退出

+ 10 - 1
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -144,7 +144,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
                 Map<String, Object> prop = mqDto.getProperties();
                 Map map = new HashMap<>();
-                map.put(SystemConstant.RECORD_ID, prop.get("examRecordId"));
+                map.put(SystemConstant.RECORD_ID, recordId);
                 map.put("from", mqDto.getObjName());
                 map.put("type", prop.get("type"));
                 map.put("content", prop.get("content"));
@@ -155,6 +155,15 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
             JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
             Set<String> examStudentIdentitySet = jsonArray.toJavaObject(Set.class);
             log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
+        } else if (MqEnum.WEBSOCKET_LIVENESS_VERIFY_LOG.ordinal() == mqEnum.ordinal()) {//监考强制活体验证
+            Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
+            if (Objects.nonNull(webSocketMap.get(recordId))) {
+                WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
+                Map map = new HashMap<>();
+                map.put(SystemConstant.RECORD_ID, recordId);
+                WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
+                webSocketOeServer.sendMessage(websocketDto);
+            }
         }
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqEnum.valueOf(String.valueOf(mqDto.getType())).getId(), mqDto.getType().getCode(), JacksonUtil.parseJson(mqDto));

+ 5 - 13
themis-exam/src/main/java/com/qmth/themis/exam/websocketTemplete/WebSocketOeMessageTemplete.java

@@ -81,36 +81,28 @@ public class WebSocketOeMessageTemplete {
         objectMap.put("answerProgress", progress);
         objectMap.put("durationSeconds", durationSeconds);
         redisUtil.setForHash(RedisKeyHelper.examRecordCacheKey(recordId), objectMap);
-        return this.syncAck();
+        return this.syncAck(body);
     }
 
     /**
      * 同步确认
      *
+     * @param body
      * @return
      */
-    public WebsocketDto syncAck() {
+    public WebsocketDto syncAck(String body) {
         Map map = new HashMap<>();
         map.put(SystemConstant.ACK_MESSAGE, System.currentTimeMillis());
         return new WebsocketDto(WebsocketTypeEnum.convertToName(Thread.currentThread().getStackTrace()[1].getMethodName()), map);
     }
 
-    /**
-     * 监考消息
-     *
-     * @param body
-     * @return
-     */
-    public WebsocketDto invigilateNotice(String body) {
-        return this.invigilateNoticeAck();
-    }
-
     /**
      * 监考消息确认
      *
+     * @param body
      * @return
      */
-    public WebsocketDto invigilateNoticeAck() {
+    public WebsocketDto invigilateNoticeAck(String body) {
         Map map = new HashMap<>();
         map.put(SystemConstant.ACK_MESSAGE, System.currentTimeMillis());
         return new WebsocketDto(WebsocketTypeEnum.convertToName(Thread.currentThread().getStackTrace()[1].getMethodName()), map);