Browse Source

新增客户端websocket连接成功时通知移动端状态,试卷下载成功接口修改

wangliang 4 years ago
parent
commit
164dd15be7

+ 2 - 1
themis-business/src/main/java/com/qmth/themis/business/enums/MqTagEnum.java

@@ -56,7 +56,8 @@ public enum MqTagEnum {
     OE_WEBSOCKET_EXAM_STOP("客户端考试结束标签", "客户端考试结束","normal", 44),
     MONITOR_START("监控开始标签", "监控开始","normal", 45),
     MONITOR_STOP("监控结束标签", "监控结束","normal", 46),
-    EXAM_START("考试移动端监控开始标签", "考试移动端开始", "normal", 47);
+    EXAM_START("考试移动端监控开始标签", "考试移动端开始", "normal", 47),
+    OE_WEBSOCKET_MOBILE_MONITOR_STATUS("通知客户端移动端当前监控状态标签", "通知客户端移动端当前监控状态", "normal", 48);
 
     private MqTagEnum(String desc, String code, String type, int id) {
         this.desc = desc;

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

@@ -39,7 +39,9 @@ public enum WebsocketTypeEnum {
 
     MOBILE_MONITOR_START("移动端监控开始", "mobileMonitorStart"),
 
-    MOBILE_MONITOR_STOP("移动端监控停止", "mobileMonitorStop");
+    MOBILE_MONITOR_STOP("移动端监控停止", "mobileMonitorStop"),
+
+    MOBILE_MONITOR_STATUS("移动端监控状态", "mobileMonitorStatus");
 
     private String code;
     private String desc;

+ 4 - 0
themis-exam/src/main/java/com/qmth/themis/exam/api/TEExamController.java

@@ -341,6 +341,10 @@ public class TEExamController {
         if (Objects.isNull(param.getRecordId()) || Objects.equals(param.getRecordId(), "")) {
             throw new BusinessException(ExceptionResultEnum.RECORD_ID_IS_NULL);
         }
+        Integer paperDownload = Objects.isNull(ExamRecordCacheUtil.getPaperDownload(param.getRecordId())) ? 1 : ExamRecordCacheUtil.getPaperDownload(param.getRecordId());
+        if (paperDownload.intValue() == 1) {
+            ExamRecordCacheUtil.setPaperDownload(param.getRecordId(), 0, true);
+        }
         return ResultUtil.ok(Collections.singletonMap("updateTime", System.currentTimeMillis()));
     }
 }

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

@@ -200,7 +200,8 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                 || Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name(), tag)//移动端拍照/录音上传成功
                 || Objects.equals(MqTagEnum.OE_WEBSOCKET_EXAM_STOP.name(), tag)//考试结束
                 || Objects.equals(MqTagEnum.MONITOR_START.name(), tag)//监控开始
-                || Objects.equals(MqTagEnum.MONITOR_STOP.name(), tag)) {//监控结束
+                || Objects.equals(MqTagEnum.MONITOR_STOP.name(), tag)//监控结束
+                || Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_MONITOR_STATUS.name(), tag)) {//通知客户端移动端当前监控状态
             Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
             String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
             if (Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
@@ -223,6 +224,9 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
                         case "MONITOR_STOP":
                             websocketDto = new WebsocketDto(WebsocketTypeEnum.MOBILE_MONITOR_STOP.name(), mqDto.getProperties());
                             break;
+                        case "OE_WEBSOCKET_MOBILE_MONITOR_STATUS":
+                            websocketDto = new WebsocketDto(WebsocketTypeEnum.MOBILE_MONITOR_STATUS.name(), mqDto.getProperties());
+                            break;
                         default:
                             break;
                     }

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/start/StartRunning.java

@@ -43,7 +43,7 @@ public class StartRunning implements CommandLineRunner {
         /**
          * websocket mq start
          */
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.OE_HARD_FINISH.name() + "||" + MqTagEnum.OE_IM_BROADCASTING.name() + "||" + MqTagEnum.OE_IM_CLUSTERING.name() + "||" + MqTagEnum.OE_LIVENESS_VERIFY.name() + "||" + MqTagEnum.OE_MONITOR_FINISH.name() + "||" + MqTagEnum.OE_WARNING_FINISH.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name() + "||" + MqTagEnum.OE_WEBSOCKET_EXAM_STOP.name() + "||" + MqTagEnum.MONITOR_START.name() + "||" + MqTagEnum.MONITOR_STOP.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketOeServer.class));
+        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.OE_HARD_FINISH.name() + "||" + MqTagEnum.OE_IM_BROADCASTING.name() + "||" + MqTagEnum.OE_IM_CLUSTERING.name() + "||" + MqTagEnum.OE_LIVENESS_VERIFY.name() + "||" + MqTagEnum.OE_MONITOR_FINISH.name() + "||" + MqTagEnum.OE_WARNING_FINISH.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name() + "||" + MqTagEnum.OE_WEBSOCKET_EXAM_STOP.name() + "||" + MqTagEnum.MONITOR_START.name() + "||" + MqTagEnum.MONITOR_STOP.name() + "||" + MqTagEnum.OE_WEBSOCKET_MOBILE_MONITOR_STATUS.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketOeServer.class));
         rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_MOBILE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_STOP.name() + "||" + MqTagEnum.EXAM_START.name(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketMobileServer.class));
         SystemConstant.initTempFiles();
         log.info("服务器启动时执行 end");

+ 10 - 4
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketOeServer.java

@@ -8,10 +8,7 @@ import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.WebsocketDto;
 import com.qmth.themis.business.entity.TBSession;
-import com.qmth.themis.business.enums.ExamRecordStatusEnum;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.enums.WebsocketStatusEnum;
-import com.qmth.themis.business.enums.WebsocketTypeEnum;
+import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.*;
@@ -35,6 +32,7 @@ import javax.websocket.server.ServerEndpoint;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.net.InetSocketAddress;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -105,6 +103,14 @@ public class WebSocketOeServer implements Concurrently {
         WebsocketUtil.updateExamRecordWebsocketStatus(this.recordId, this.ip, this.websocketSessionId, WebsocketStatusEnum.ON_LINE);
         this.updateTime = System.currentTimeMillis();
         tranMap = WebsocketUtil.initWebsocket(this.recordId, null, this.deviceId, this.ip, this.updateTime);
+        MqUtil mqUtil = SpringContextHolder.getBean(MqUtil.class);
+        MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
+        Map mqMap = new HashMap<>();
+        mqMap.put(SystemConstant.RECORD_ID, this.recordId);
+        mqMap.put(MonitorVideoSourceEnum.MOBILE_FIRST.name().toLowerCase(), ExamRecordCacheUtil.getMonitorStatus(this.recordId, MonitorVideoSourceEnum.MOBILE_FIRST));
+        mqMap.put(MonitorVideoSourceEnum.MOBILE_SECOND.name().toLowerCase(), ExamRecordCacheUtil.getMonitorStatus(this.recordId, MonitorVideoSourceEnum.MOBILE_SECOND));
+        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.OE_WEBSOCKET_MOBILE_MONITOR_STATUS.name(), recordId, MqTagEnum.OE_WEBSOCKET_MOBILE_MONITOR_STATUS, String.valueOf(recordId), mqMap, String.valueOf(recordId));
+        mqDtoService.assembleSendOneWayMsg(mqDto);
     }
 
     /**

+ 1 - 0
themis-exam/src/main/java/com/qmth/themis/exam/websocketTemplete/WebSocketOeMessageTemplete.java

@@ -39,6 +39,7 @@ public class WebSocketOeMessageTemplete {
      * @param time
      * @return
      */
+    @Deprecated
     @Transactional
     public WebsocketDto clientPaperDownload(String body, Long time) {
         JSONObject jsonObject = JSONObject.parseObject(body);