浏览代码

加入streamName和websocket mq修成为广播模式

wangliang 4 年之前
父节点
当前提交
c0611e6d06
共有 16 个文件被更改,包括 159 次插入21 次删除
  1. 4 7
      themis-admin/src/main/java/com/qmth/themis/admin/api/TIeInvigilateCallMobileController.java
  2. 11 0
      themis-admin/src/main/java/com/qmth/themis/admin/config/DictionaryConfig.java
  3. 2 0
      themis-admin/src/main/resources/application.properties
  4. 4 0
      themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java
  5. 2 0
      themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java
  6. 23 0
      themis-business/src/main/java/com/qmth/themis/business/domain/ClientDomain.java
  7. 23 0
      themis-business/src/main/java/com/qmth/themis/business/domain/MonitorDomain.java
  8. 15 1
      themis-business/src/main/java/com/qmth/themis/business/entity/TIeExamInvigilateCall.java
  9. 18 2
      themis-business/src/main/java/com/qmth/themis/business/entity/TIeExamInvigilateCallLog.java
  10. 7 0
      themis-exam/src/main/java/com/qmth/themis/exam/api/TEStudentController.java
  11. 12 4
      themis-exam/src/main/java/com/qmth/themis/exam/api/TIeInvigilateCallMobileController.java
  12. 12 4
      themis-exam/src/main/java/com/qmth/themis/exam/api/TIeInvigilateCallOeController.java
  13. 22 0
      themis-exam/src/main/java/com/qmth/themis/exam/config/DictionaryConfig.java
  14. 0 1
      themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java
  15. 2 2
      themis-exam/src/main/java/com/qmth/themis/exam/start/StartRunning.java
  16. 2 0
      themis-exam/src/main/resources/application.properties

+ 4 - 7
themis-admin/src/main/java/com/qmth/themis/admin/api/TIeInvigilateCallMobileController.java

@@ -9,7 +9,6 @@ import com.qmth.themis.business.annotation.ApiJsonObject;
 import com.qmth.themis.business.annotation.ApiJsonProperty;
 import com.qmth.themis.business.bean.mobile.MobileAuthorizationMonitorBean;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
-import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.AuthDto;
@@ -20,7 +19,6 @@ import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.*;
 import com.qmth.themis.business.util.*;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
-import com.qmth.themis.common.enums.Platform;
 import com.qmth.themis.common.enums.Source;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
@@ -68,9 +66,6 @@ public class TIeInvigilateCallMobileController {
     @Resource
     DictionaryConfig dictionaryConfig;
 
-    @Resource
-    TEExamService teExamService;
-
     @Resource
     TOeExamRecordService tOeExamRecordService;
 
@@ -173,8 +168,9 @@ public class TIeInvigilateCallMobileController {
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, MonitorCallStatusSourceEnum.CALLING);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
         MonitorStatusSourceEnum status = ExamRecordCacheUtil.getMonitorStatus(recordId, source);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
         TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl,
-                status, monitorKey, MonitorCallStatusSourceEnum.CALLING);
+                status, monitorKey, MonitorCallStatusSourceEnum.CALLING, streamName);
         //监考监控通话信息 发送mq start
         MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.MONITOR_LOG.name(),
                 tIeExamInvigilateCallLog, MqTagEnum.MONITOR_LOG, String.valueOf(tIeExamInvigilateCallLog.getId()),
@@ -211,8 +207,9 @@ public class TIeInvigilateCallMobileController {
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, MonitorCallStatusSourceEnum.STOP);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
         MonitorStatusSourceEnum status = ExamRecordCacheUtil.getMonitorStatus(recordId, source);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
         TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl,
-                status, monitorKey, MonitorCallStatusSourceEnum.STOP);
+                status, monitorKey, MonitorCallStatusSourceEnum.STOP, streamName);
         tIeExamInvigilateCallLog.setEndTime(System.currentTimeMillis());
         //监考监控通话信息 发送mq start
         MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.MONITOR_LOG.name(),

+ 11 - 0
themis-admin/src/main/java/com/qmth/themis/admin/config/DictionaryConfig.java

@@ -102,4 +102,15 @@ public class DictionaryConfig {
     public MqConfigDomain mqConfigDomain() {
         return new MqConfigDomain();
     }
+
+    /**
+     * 监控配置
+     *
+     * @return
+     */
+    @Bean
+    @ConfigurationProperties(prefix = "monitor.config", ignoreUnknownFields = false)
+    public MonitorDomain monitorDomain() {
+        return new MonitorDomain();
+    }
 }

+ 2 - 0
themis-admin/src/main/resources/application.properties

@@ -192,6 +192,8 @@ mq.config.map.WEBSOCKET_OE_MOBILE_GROUP=themis-group-exam-websocketOeMobile
 prefix.url.admin=api/admin
 prefix.url.open=api/open
 
+monitor.config.prefix=oe_test
+
 #\u65E0\u9700\u9274\u6743\u7684url
 no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/admin/user/login/account,/api/admin/sys/org/queryByOrgCode,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**,/api/admin/client/save,/api/admin/client/upload,/api/admin/client/query,/api/admin/app/save,/api/admin/app/query
 common.system.urls=/api/admin/sys/getMenu,/api/admin/user/logout,/api/admin/sys/env,/api/admin/sys/file/upload,/api/admin/sys/file/download,/api/admin/sys/org/query,/api/admin/sys/role/query,/api/admin/sys/examActivity/query,/api/admin/sys/exam/query,/api/admin/sys/examRoom/query,/api/admin/sys/exam/privilegeQuery,/api/admin/student/photo/upload,/api/admin/sys/getPlayUrls

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

@@ -217,6 +217,10 @@ public class ExamRecordCacheUtil {
         }
     }
 
+//    public static void setStreamName(Long recordId, MonitorVideoSourceEnum source, String streamName) {
+//        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.STREAM_NAME + source.name(), streamName);
+//    }
+
     public static MonitorStatusSourceEnum getMonitorStatus(Long recordId, MonitorVideoSourceEnum source) {
         return Objects.nonNull(redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_STATUS_ + source.name())) ? MonitorStatusSourceEnum.valueOf((String) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), SystemConstant.MONITOR_STATUS_ + source.name())) : null;
     }

+ 2 - 0
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -141,6 +141,8 @@ public class SystemConstant {
 
     public static final String MONITOR_LIVE_URL_ = "monitorLiveUrl_";
 
+    public static final String STREAM_NAME = "streamName_";
+
     public static final String MONITOR_STATUS_ = "monitorStatus_";
 
     public static final String MONITOR_CALL_STATUS_ = "monitorCallStatus_";

+ 23 - 0
themis-business/src/main/java/com/qmth/themis/business/domain/ClientDomain.java

@@ -0,0 +1,23 @@
+package com.qmth.themis.business.domain;
+
+import java.io.Serializable;
+
+/** 
+* @Description: 客户端 config
+* @Param:  
+* @return:  
+* @Author: wangliang
+* @Date: 2020/11/23 
+*/ 
+public class ClientDomain implements Serializable {
+    
+    String url;
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+}

+ 23 - 0
themis-business/src/main/java/com/qmth/themis/business/domain/MonitorDomain.java

@@ -0,0 +1,23 @@
+package com.qmth.themis.business.domain;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 监控 config
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/11/23
+ */
+public class MonitorDomain implements Serializable {
+
+    String prefix;
+
+    public String getPrefix() {
+        return prefix;
+    }
+
+    public void setPrefix(String prefix) {
+        this.prefix = prefix;
+    }
+}

+ 15 - 1
themis-business/src/main/java/com/qmth/themis/business/entity/TIeExamInvigilateCall.java

@@ -78,18 +78,32 @@ public class TIeExamInvigilateCall extends BaseEntity {
     @TableField(exist = false)
     private String sourceUserId;
 
+    @ApiModelProperty(value = "流名称")
+    @TableField(value = "stream_name")
+    private String streamName;
+
     public TIeExamInvigilateCall() {
 
     }
 
     public TIeExamInvigilateCall(Long examRecordId, MonitorVideoSourceEnum source, String liveUrl,
-            MonitorStatusSourceEnum status, String monitorKey) {
+                                 MonitorStatusSourceEnum status, String monitorKey, String streamName
+    ) {
         setId(UidUtil.nextId());
         this.examRecordId = examRecordId;
         this.source = source;
         this.liveUrl = liveUrl;
         this.status = status;
         this.monitorKey = monitorKey;
+        this.streamName = streamName;
+    }
+
+    public String getStreamName() {
+        return streamName;
+    }
+
+    public void setStreamName(String streamName) {
+        this.streamName = streamName;
     }
 
     public String getSourceUserId() {

+ 18 - 2
themis-business/src/main/java/com/qmth/themis/business/entity/TIeExamInvigilateCallLog.java

@@ -78,22 +78,29 @@ public class TIeExamInvigilateCallLog extends BaseEntity {
     @ApiModelProperty(value = "结束通话时间")
     private Long endTime;
 
+    @ApiModelProperty(value = "流名称")
+    @TableField(value = "stream_name")
+    private String streamName;
+
     public TIeExamInvigilateCallLog() {
 
     }
 
     public TIeExamInvigilateCallLog(Long examRecordId, MonitorVideoSourceEnum source, String liveUrl,
-            MonitorStatusSourceEnum status, String monitorKey) {
+                                    MonitorStatusSourceEnum status, String monitorKey, String streamName
+    ) {
         setId(UidUtil.nextId());
         setExamRecordId(examRecordId);
         setSource(source);
         setLiveUrl(liveUrl);
         setStatus(status);
         setMonitorKey(monitorKey);
+        setStreamName(streamName);
     }
 
     public TIeExamInvigilateCallLog(Long examRecordId, MonitorVideoSourceEnum source, String liveUrl,
-            MonitorStatusSourceEnum status, String monitorKey, MonitorCallStatusSourceEnum callStatus) {
+                                    MonitorStatusSourceEnum status, String monitorKey, MonitorCallStatusSourceEnum callStatus, String streamName
+    ) {
         setId(UidUtil.nextId());
         setExamRecordId(examRecordId);
         setSource(source);
@@ -101,6 +108,15 @@ public class TIeExamInvigilateCallLog extends BaseEntity {
         setStatus(status);
         setCallStatus(callStatus);
         setMonitorKey(monitorKey);
+        setStreamName(streamName);
+    }
+
+    public String getStreamName() {
+        return streamName;
+    }
+
+    public void setStreamName(String streamName) {
+        this.streamName = streamName;
     }
 
     public Long getStartTime() {

+ 7 - 0
themis-exam/src/main/java/com/qmth/themis/exam/api/TEStudentController.java

@@ -287,6 +287,13 @@ public class TEStudentController {
         map.put(SystemConstant.ACCESS_TOKEN, test);
         map.put(SystemConstant.STUDENT_ACCOUNT, teStudent);
         map.put(SystemConstant.SESSION_ID, sessionId);
+
+        Map<String,Object> mapParameter = new HashMap<>();
+        mapParameter.put("examRecordId",1);
+        mapParameter.put("type","text");
+        mapParameter.put("content","test123");
+        MqDto mqDtoTest = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.OE_IM_CLUSTERING.name(), 1, MqTagEnum.OE_IM_CLUSTERING, String.valueOf(teStudent.getId()), mapParameter, teStudent.getName());
+        mqDtoService.assembleSendOneWayMsg(mqDtoTest);
         return ResultUtil.ok(map);
     }
 

+ 12 - 4
themis-exam/src/main/java/com/qmth/themis/exam/api/TIeInvigilateCallMobileController.java

@@ -14,6 +14,7 @@ import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
+import com.qmth.themis.exam.config.DictionaryConfig;
 import com.qmth.themis.exam.websocket.WebSocketMobileServer;
 import com.qmth.themis.exam.websocket.WebSocketOeServer;
 import io.swagger.annotations.*;
@@ -52,6 +53,10 @@ public class TIeInvigilateCallMobileController {
     @Resource
     MqUtil mqUtil;
 
+    @Resource
+    DictionaryConfig dictionaryConfig;
+
+    @Deprecated
     @ApiOperation(value = "监控观看地址更新接口")
     @RequestMapping(value = "/live_url", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
@@ -81,7 +86,7 @@ public class TIeInvigilateCallMobileController {
             }
             String liveUrl = String.valueOf(mapParameter.get("liveUrl"));
             String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-            TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.INIT, monitorKey);
+            TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.INIT, monitorKey, null);
             //获取考试记录缓存
             ExamRecordCacheUtil.setMonitorLiveUrl(recordId, source, liveUrl, true);
 
@@ -131,7 +136,8 @@ public class TIeInvigilateCallMobileController {
         }
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, MonitorCallStatusSourceEnum.START);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.START);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
+        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.START, streamName);
         tIeExamInvigilateCallLog.setStartTime(System.currentTimeMillis());
         //监考监控通话信息 发送mq start
         MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.MONITOR_LOG.name(), tIeExamInvigilateCallLog, MqTagEnum.MONITOR_LOG, String.valueOf(tIeExamInvigilateCallLog.getId()), source.name());
@@ -175,7 +181,8 @@ public class TIeInvigilateCallMobileController {
         ExamRecordCacheUtil.setMonitorStatus(recordId, source, status, true);
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, callStatus);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.START, monitorKey, callStatus);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
+        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.START, monitorKey, callStatus, streamName);
         if (Objects.nonNull(mapParameter.get("type")) && !Objects.equals(mapParameter.get("type"), "")) {
             tIeExamInvigilateCallLog.setType(ExceptionEnum.valueOf(String.valueOf(mapParameter.get("type"))));
         }
@@ -238,7 +245,8 @@ public class TIeInvigilateCallMobileController {
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, MonitorCallStatusSourceEnum.STOP);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
         MonitorStatusSourceEnum status = ExamRecordCacheUtil.getMonitorStatus(recordId, source);
-        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.STOP);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
+        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.STOP, streamName);
         tIeExamInvigilateCallLog.setEndTime(System.currentTimeMillis());
         //监考监控通话信息 发送mq start
         MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.MONITOR_LOG.name(), tIeExamInvigilateCallLog, MqTagEnum.MONITOR_LOG, String.valueOf(tIeExamInvigilateCallLog.getId()), source.name());

+ 12 - 4
themis-exam/src/main/java/com/qmth/themis/exam/api/TIeInvigilateCallOeController.java

@@ -13,6 +13,7 @@ import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
 import com.qmth.themis.common.util.Result;
 import com.qmth.themis.common.util.ResultUtil;
+import com.qmth.themis.exam.config.DictionaryConfig;
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -51,6 +52,10 @@ public class TIeInvigilateCallOeController {
     @Resource
     MqUtil mqUtil;
 
+    @Resource
+    DictionaryConfig dictionaryConfig;
+
+    @Deprecated
     @ApiOperation(value = "监控观看地址更新接口")
     @RequestMapping(value = "/live_url", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
@@ -75,7 +80,7 @@ public class TIeInvigilateCallOeController {
             }
             String liveUrl = String.valueOf(mapParameter.get("liveUrl"));
             String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-            TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.INIT, monitorKey);
+            TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.INIT, monitorKey,null);
             //获取考试记录缓存
             ExamRecordCacheUtil.setMonitorLiveUrl(recordId, source, liveUrl, false);
             ExamRecordCacheUtil.setMonitorStatus(recordId, source, tIeExamInvigilateCallLog.getStatus(), false);
@@ -133,7 +138,8 @@ public class TIeInvigilateCallOeController {
         ExamRecordCacheUtil.setMonitorStatus(recordId, source, status, true);
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, callStatus);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.START, monitorKey, callStatus);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
+        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, MonitorStatusSourceEnum.START, monitorKey, callStatus, streamName);
         if (Objects.nonNull(mapParameter.get("type")) && !Objects.equals(mapParameter.get("type"), "")) {
             tIeExamInvigilateCallLog.setType(ExceptionEnum.valueOf(String.valueOf(mapParameter.get("type"))));
         }
@@ -175,7 +181,8 @@ public class TIeInvigilateCallOeController {
         }
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, MonitorCallStatusSourceEnum.START);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.START);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
+        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.START, streamName);
         tIeExamInvigilateCallLog.setStartTime(System.currentTimeMillis());
         //监考监控通话信息 发送mq start
         MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.MONITOR_LOG.name(), tIeExamInvigilateCallLog, MqTagEnum.MONITOR_LOG, String.valueOf(tIeExamInvigilateCallLog.getId()), source.name());
@@ -211,7 +218,8 @@ public class TIeInvigilateCallOeController {
         MonitorStatusSourceEnum status = ExamRecordCacheUtil.getMonitorStatus(recordId, source);
         ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, MonitorCallStatusSourceEnum.STOP);
         String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
-        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.STOP);
+        String streamName = dictionaryConfig.monitorDomain().getPrefix() + "_" + recordId + "_" + ExamRecordCacheUtil.getMonitorVideoSource(recordId);
+        TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, MonitorCallStatusSourceEnum.STOP, streamName);
         tIeExamInvigilateCallLog.setEndTime(System.currentTimeMillis());
         //监考监控通话信息 发送mq start
         MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.MONITOR_LOG.name(), tIeExamInvigilateCallLog, MqTagEnum.MONITOR_LOG, String.valueOf(tIeExamInvigilateCallLog.getId()), source.name());

+ 22 - 0
themis-exam/src/main/java/com/qmth/themis/exam/config/DictionaryConfig.java

@@ -102,4 +102,26 @@ public class DictionaryConfig {
     public MqConfigDomain mqConfigDomain() {
         return new MqConfigDomain();
     }
+
+    /**
+     * 客户端配置
+     *
+     * @return
+     */
+    @Bean
+    @ConfigurationProperties(prefix = "client.config", ignoreUnknownFields = false)
+    public ClientDomain clientDomain() {
+        return new ClientDomain();
+    }
+
+    /**
+     * 监控配置
+     *
+     * @return
+     */
+    @Bean
+    @ConfigurationProperties(prefix = "monitor.config", ignoreUnknownFields = false)
+    public MonitorDomain monitorDomain() {
+        return new MonitorDomain();
+    }
 }

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

@@ -22,7 +22,6 @@ import com.qmth.themis.business.util.JacksonUtil;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.exam.config.ExamConstant;
 import com.qmth.themis.exam.listener.service.MqOeLogicService;
-import com.qmth.themis.exam.websocket.WebSocketMobileServer;
 import com.qmth.themis.exam.websocket.WebSocketOeServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

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

@@ -43,8 +43,8 @@ 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(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebSocketOeServer.class));
-        rocketMessageConsumer.setRocketMQConsumer(nameServer, dictionaryConfig.mqConfigDomain().getMap().get(MqGroupEnum.WEBSOCKET_OE_MOBILE_GROUP.name()), dictionaryConfig.mqConfigDomain().getTopic(), MqTagEnum.EXAM_STOP.name(), MessageModel.CLUSTERING, SpringContextHolder.getBean(WebSocketMobileServer.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(), 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(), MessageModel.BROADCASTING, SpringContextHolder.getBean(WebSocketMobileServer.class));
         SystemConstant.initTempFiles();
         log.info("服务器启动时执行 end");
     }

+ 2 - 0
themis-exam/src/main/resources/application.properties

@@ -180,6 +180,8 @@ prefix.url.exam=api/oe
 prefix.url.mobile=api/mobile
 
 wxapp.upload.url=https://mobile.online-exam-test.cn
+client.config.url=https://cdn.online-exam.cn/client
+monitor.config.prefix=oe_test
         
 #\u65E0\u9700\u9274\u6743\u7684url
 no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/oe/student/login,/api/oe/sys/env,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**,/api/oe/exam/short_code,/api/mobile/authorization