ソースを参照

考试侯考阶段退出修改通话状态

wangliang 2 年 前
コミット
773df1de44

+ 38 - 13
themis-exam/src/main/java/com/qmth/themis/exam/api/TEExamController.java

@@ -13,11 +13,9 @@ import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
 import com.qmth.themis.business.dto.response.TEExamDto;
 import com.qmth.themis.business.dto.response.TEExamWaitDto;
 import com.qmth.themis.business.entity.TEExam;
+import com.qmth.themis.business.entity.TIeExamInvigilateCallLog;
 import com.qmth.themis.business.entity.TOeExamRecord;
-import com.qmth.themis.business.enums.ExamRecordStatusEnum;
-import com.qmth.themis.business.enums.ExceptionEnum;
-import com.qmth.themis.business.enums.MqTagEnum;
-import com.qmth.themis.business.enums.SystemOperationEnum;
+import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.MqDtoService;
 import com.qmth.themis.business.service.TEExamService;
 import com.qmth.themis.business.service.TOeExamBreakHistoryService;
@@ -30,6 +28,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.config.ExamConstant;
 import com.qmth.themis.exam.websocket.WebSocketOeServer;
 import io.swagger.annotations.*;
@@ -65,6 +64,9 @@ public class TEExamController {
     @Resource
     MqUtil mqUtil;
 
+    @Resource
+    DictionaryConfig dictionaryConfig;
+
     @ApiOperation(value = "验证考试口令接口")
     @RequestMapping(value = "/short_code", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "考试信息", response = TEExam.class)})
@@ -129,22 +131,45 @@ public class TEExamController {
                 .equals(mapParameter.get(SystemConstant.RECORD_ID), "")) {
             throw new BusinessException(ExceptionResultEnum.RECORD_ID_IS_NULL);
         }
-        String recordId = (String) mapParameter.get(SystemConstant.RECORD_ID);
-        ExamRecordStatusEnum status = ExamRecordCacheUtil.getStatus(Long.valueOf(recordId));
-        if (Objects.nonNull(status) && Objects.equals(ExamRecordStatusEnum.ANSWERING, status)) {//答题状态,强制断点
-            ExamConstant.sendExamStopMsg(Long.valueOf(recordId), true, false);
-            tOeExamRecordService.examBreakLogic(Long.valueOf(recordId), true);
-        } else if (Objects.nonNull(status) && Objects.equals(ExamRecordStatusEnum.FIRST_PREPARE, status)) {
-            ExamConstant.sendExamStopMsg(Long.valueOf(recordId), false, true);
+        Long recordId = Long.parseLong((String) mapParameter.get(SystemConstant.RECORD_ID));
+        ExamRecordStatusEnum examStatus = ExamRecordCacheUtil.getStatus(recordId);
+        if (Objects.nonNull(examStatus) && Objects.equals(ExamRecordStatusEnum.ANSWERING, examStatus)) {//答题状态,强制断点
+            ExamConstant.sendExamStopMsg(recordId, true, false);
+            tOeExamRecordService.examBreakLogic(recordId, true);
+        } else if (Objects.nonNull(examStatus) && Objects.equals(ExamRecordStatusEnum.FIRST_PREPARE, examStatus)) {
+            ExamConstant.sendExamStopMsg(recordId, false, true);
         } else {
-            if (Objects.nonNull(status) && (ExamRecordStatusEnum.FINISHED == status || ExamRecordStatusEnum.PERSISTED == status)) {
+            if (Objects.nonNull(examStatus) && (ExamRecordStatusEnum.FINISHED == examStatus || ExamRecordStatusEnum.PERSISTED == examStatus)) {
                 throw new BusinessException(ExceptionResultEnum.EXAM_FINISH);
             } else {
                 throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_ERROR);
             }
         }
+
+        MonitorVideoSourceEnum source = MonitorVideoSourceEnum.CLIENT_CAMERA;
+        String liveUrl = SystemConstant.setStreamId(dictionaryConfig.monitorDomain().getPrefix(), recordId, source);
+        MonitorStatusSourceEnum status = ExamRecordCacheUtil.getMonitorStatus(recordId, source);
+        MonitorCallStatusSourceEnum callStatus = Objects.nonNull(ExamRecordCacheUtil.getMonitorCallStatus(recordId, source)) ? ExamRecordCacheUtil.getMonitorCallStatus(recordId, source) : null;
+        if (Objects.nonNull(callStatus) && (callStatus == MonitorCallStatusSourceEnum.START
+                || callStatus == MonitorCallStatusSourceEnum.CALLING)) {
+            Long timestamp = System.currentTimeMillis();
+            MonitorCallStatusSourceEnum updateCallStatus = MonitorCallStatusSourceEnum.STOP;
+            if (callStatus == MonitorCallStatusSourceEnum.START) {
+                updateCallStatus = MonitorCallStatusSourceEnum.CANCEL;
+            }
+            ExamRecordCacheUtil.setMonitorCallStatus(recordId, source, updateCallStatus, timestamp);
+            tOeExamRecordService.sendExamRecordDataSaveMq(recordId, timestamp);
+            String monitorKey = ExamRecordCacheUtil.getMonitorKey(recordId);
+            TIeExamInvigilateCallLog tIeExamInvigilateCallLog = new TIeExamInvigilateCallLog(recordId, source, liveUrl, status, monitorKey, updateCallStatus);
+            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());
+            mqDtoService.assembleSendOneWayMsg(mqDto);
+            //监考监控通话信息 发送mq end
+        }
+
         ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
-        String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(Long.parseLong(recordId));
+        String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
         if (Objects.nonNull(clientWebsocketId)) {
             WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
             WebSocketOeServer.close(webSocketOeServer);

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

@@ -36,7 +36,7 @@ import java.util.Map;
 import java.util.Objects;
 
 /**
- * @Description: mobile监考监控通话信息 前端控制器
+ * @Description: oe监考监控通话信息 前端控制器
  * @Param:
  * @return:
  * @Author: wangliang