|
@@ -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.TEExamDto;
|
|
import com.qmth.themis.business.dto.response.TEExamWaitDto;
|
|
import com.qmth.themis.business.dto.response.TEExamWaitDto;
|
|
import com.qmth.themis.business.entity.TEExam;
|
|
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.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.MqDtoService;
|
|
import com.qmth.themis.business.service.TEExamService;
|
|
import com.qmth.themis.business.service.TEExamService;
|
|
import com.qmth.themis.business.service.TOeExamBreakHistoryService;
|
|
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.exception.BusinessException;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
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.config.ExamConstant;
|
|
import com.qmth.themis.exam.websocket.WebSocketOeServer;
|
|
import com.qmth.themis.exam.websocket.WebSocketOeServer;
|
|
import io.swagger.annotations.*;
|
|
import io.swagger.annotations.*;
|
|
@@ -65,6 +64,9 @@ public class TEExamController {
|
|
@Resource
|
|
@Resource
|
|
MqUtil mqUtil;
|
|
MqUtil mqUtil;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ DictionaryConfig dictionaryConfig;
|
|
|
|
+
|
|
@ApiOperation(value = "验证考试口令接口")
|
|
@ApiOperation(value = "验证考试口令接口")
|
|
@RequestMapping(value = "/short_code", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/short_code", method = RequestMethod.POST)
|
|
@ApiResponses({@ApiResponse(code = 200, message = "考试信息", response = TEExam.class)})
|
|
@ApiResponses({@ApiResponse(code = 200, message = "考试信息", response = TEExam.class)})
|
|
@@ -129,22 +131,45 @@ public class TEExamController {
|
|
.equals(mapParameter.get(SystemConstant.RECORD_ID), "")) {
|
|
.equals(mapParameter.get(SystemConstant.RECORD_ID), "")) {
|
|
throw new BusinessException(ExceptionResultEnum.RECORD_ID_IS_NULL);
|
|
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 {
|
|
} 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);
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_FINISH);
|
|
} else {
|
|
} else {
|
|
throw new BusinessException(ExceptionResultEnum.EXAM_STATUS_ERROR);
|
|
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();
|
|
ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
|
|
- String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(Long.parseLong(recordId));
|
|
|
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
if (Objects.nonNull(clientWebsocketId)) {
|
|
if (Objects.nonNull(clientWebsocketId)) {
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
WebSocketOeServer.close(webSocketOeServer);
|
|
WebSocketOeServer.close(webSocketOeServer);
|