|
@@ -58,6 +58,189 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
@Resource
|
|
@Resource
|
|
TOeExamRecordService tOeExamRecordService;
|
|
TOeExamRecordService tOeExamRecordService;
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 强制离线交卷持久化逻辑
|
|
|
|
+ *
|
|
|
|
+ * @param s
|
|
|
|
+ * @param webSocketMap
|
|
|
|
+ * @param gson
|
|
|
|
+ * @param mqDto
|
|
|
|
+ * @param key
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Transactional
|
|
|
|
+ protected Map<String, Object> oeMonitorFinishLogicPersisted(Object s,
|
|
|
|
+ ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
|
|
|
|
+ Gson gson,
|
|
|
|
+ MqDto mqDto,
|
|
|
|
+ String key) {
|
|
|
|
+ Map<String, Object> map = null;
|
|
|
|
+ Long recordId = Long.parseLong(String.valueOf(s));
|
|
|
|
+ //获取考试记录的客户端websocketId
|
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
+ if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
+ map = new HashMap<>();
|
|
|
|
+ Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
+ ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
+ if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
+ && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
+ && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
+ map.put("form", mqDto.getObjName());
|
|
|
|
+ map.put(SystemConstant.WEB_SOCKET_OE_SERVER, webSocketOeServer);
|
|
|
|
+ map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
+ map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
|
|
+ TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
|
|
|
|
+ teExamStudentLogService.save(teExamStudentLog);
|
|
|
|
+
|
|
|
|
+ mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
+ TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
+ tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
+ tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
+ redisUtil.delete(key, mqDto.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 预警交卷持久化逻辑
|
|
|
|
+ *
|
|
|
|
+ * @param s
|
|
|
|
+ * @param webSocketMap
|
|
|
|
+ * @param gson
|
|
|
|
+ * @param mqDto
|
|
|
|
+ * @param key
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Transactional
|
|
|
|
+ protected Map<String, Object> oeWarningFinishLogicPersisted(Object s,
|
|
|
|
+ ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
|
|
|
|
+ Gson gson,
|
|
|
|
+ MqDto mqDto,
|
|
|
|
+ String key) {
|
|
|
|
+ Map<String, Object> map = null;
|
|
|
|
+ Long recordId = Long.parseLong(String.valueOf(s));
|
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
+ if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
+ map = new HashMap<>();
|
|
|
|
+ Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
+ ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
+ if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
+ && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
+ && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
+ map.put(SystemConstant.WEB_SOCKET_OE_SERVER, webSocketOeServer);
|
|
|
|
+ map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
+ map.put(SystemConstant.BREACH_STATUS, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
|
|
+ TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
|
|
|
|
+ teExamStudentLogService.save(teExamStudentLog);
|
|
|
|
+ mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
+ TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
+ tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
+ tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
+ redisUtil.delete(key, mqDto.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 点对点消息持久化逻辑
|
|
|
|
+ *
|
|
|
|
+ * @param webSocketMap
|
|
|
|
+ * @param gson
|
|
|
|
+ * @param mqDto
|
|
|
|
+ * @param key
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Transactional
|
|
|
|
+ protected Map<String, Object> oeImClusteringLogicPersisted(ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
|
|
|
|
+ Gson gson,
|
|
|
|
+ MqDto mqDto,
|
|
|
|
+ String key) {
|
|
|
|
+ Map<String, Object> map = null;
|
|
|
|
+ Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
+ if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
+ map = new HashMap<>();
|
|
|
|
+ Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
|
+ Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
+ Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
+ ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
+ if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
+ && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
+ && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
+ Map<String, Object> prop = mqDto.getProperties();
|
|
|
|
+ map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
+ map.put("from", mqDto.getObjName());
|
|
|
|
+ map.put(SystemConstant.WEB_SOCKET_OE_SERVER, webSocketOeServer);
|
|
|
|
+ map.put("type", prop.get("type"));
|
|
|
|
+ map.put("content", prop.get("content"));
|
|
|
|
+ TIeExamInvigilateNotice tIeExamInvigilateNotice = new TIeExamInvigilateNotice(examId, examActivityId, recordId, Long.parseLong(String.valueOf(prop.get("formUserId"))), examStudentId, MessageTypeEnum.valueOf(String.valueOf(prop.get("type")).toUpperCase()), String.valueOf(prop.get("content")));
|
|
|
|
+ tIeExamInvigilateNoticeService.saveOrUpdate(tIeExamInvigilateNotice);
|
|
|
|
+
|
|
|
|
+ mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
+ TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
+ tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
+ tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
+ redisUtil.delete(key, mqDto.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 监考强制活体验证持久化逻辑
|
|
|
|
+ *
|
|
|
|
+ * @param webSocketMap
|
|
|
|
+ * @param gson
|
|
|
|
+ * @param mqDto
|
|
|
|
+ * @param key
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ protected Map<String, Object> oeLivenessVerifyLogicPersisted(ConcurrentHashMap<String, WebSocketOeServer> webSocketMap,
|
|
|
|
+ Gson gson,
|
|
|
|
+ MqDto mqDto,
|
|
|
|
+ String key) {
|
|
|
|
+ Map<String, Object> map = null;
|
|
|
|
+ Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
+ if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
+ map = new HashMap<>();
|
|
|
|
+ Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
+ ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
+ if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
+ && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
+ && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
+ && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
+ map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
+ map.put(SystemConstant.WEB_SOCKET_OE_SERVER, webSocketOeServer);
|
|
|
|
+ TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
|
|
|
|
+ teExamStudentLogService.save(teExamStudentLog);
|
|
|
|
+
|
|
|
|
+ mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
+ TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
+ tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
+ tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
+ redisUtil.delete(key, mqDto.getId());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* oe逻辑
|
|
* oe逻辑
|
|
*
|
|
*
|
|
@@ -65,7 +248,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
* @param key
|
|
* @param key
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- @Transactional
|
|
|
|
public void execMqOeLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
|
|
public void execMqOeLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
|
|
ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
|
|
@@ -73,126 +255,40 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
if (Objects.equals(MqTagEnum.OE_MONITOR_FINISH.name(), tag)) {//强制离线交卷
|
|
if (Objects.equals(MqTagEnum.OE_MONITOR_FINISH.name(), tag)) {//强制离线交卷
|
|
Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
|
|
Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
|
|
examRecordId.forEach(s -> {
|
|
examRecordId.forEach(s -> {
|
|
- Long recordId = Long.parseLong(String.valueOf(s));
|
|
|
|
- //获取考试记录的客户端websocketId
|
|
|
|
- String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
- if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
- Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
- ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
- ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
- if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
- && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
- && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
- Map map = new HashMap<>();
|
|
|
|
- map.put("form", mqDto.getObjName());
|
|
|
|
- map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
- map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
|
|
- WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_STOP_EXAM.name(), map);
|
|
|
|
- webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
- TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
|
|
|
|
- teExamStudentLogService.save(teExamStudentLog);
|
|
|
|
-
|
|
|
|
- mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
- TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
- tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
- tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
- redisUtil.delete(key, mqDto.getId());
|
|
|
|
- }
|
|
|
|
|
|
+ Map<String, Object> map = oeMonitorFinishLogicPersisted(s, webSocketMap, gson, mqDto, key);
|
|
|
|
+ if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
|
|
|
|
+ WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
|
|
|
|
+ WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_STOP_EXAM.name(), map);
|
|
|
|
+ webSocketOeServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
} else if (Objects.equals(MqTagEnum.OE_WARNING_FINISH.name(), tag)) {//预警交卷
|
|
} else if (Objects.equals(MqTagEnum.OE_WARNING_FINISH.name(), tag)) {//预警交卷
|
|
Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
|
|
Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
|
|
examRecordId.forEach(s -> {
|
|
examRecordId.forEach(s -> {
|
|
- Long recordId = Long.parseLong(String.valueOf(s));
|
|
|
|
- String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
- if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
- Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
- ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
- ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
- if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
- && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
- && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
- Map map = new HashMap<>();
|
|
|
|
- map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
- map.put(SystemConstant.BREACH_STATUS, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
|
|
- WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.BREACH_STOP_EXAM.name(), map);
|
|
|
|
- webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
- TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
|
|
|
|
- teExamStudentLogService.save(teExamStudentLog);
|
|
|
|
- mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
- TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
- tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
- tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
- redisUtil.delete(key, mqDto.getId());
|
|
|
|
- }
|
|
|
|
|
|
+ Map<String, Object> map = oeWarningFinishLogicPersisted(s, webSocketMap, gson, mqDto, key);
|
|
|
|
+ if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
|
|
|
|
+ WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
|
|
|
|
+ WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.BREACH_STOP_EXAM.name(), map);
|
|
|
|
+ webSocketOeServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
} else if (Objects.equals(MqTagEnum.OE_IM_CLUSTERING.name(), tag)) {//点对点消息
|
|
} else if (Objects.equals(MqTagEnum.OE_IM_CLUSTERING.name(), tag)) {//点对点消息
|
|
- Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
|
|
- String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
- if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
- Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
|
- Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
- Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
- ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
- if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
- && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
- && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
- Map<String, Object> prop = mqDto.getProperties();
|
|
|
|
- Map map = new HashMap<>();
|
|
|
|
- map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
- map.put("from", mqDto.getObjName());
|
|
|
|
- map.put("type", prop.get("type"));
|
|
|
|
- map.put("content", prop.get("content"));
|
|
|
|
- WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_NOTICE.name(), map);
|
|
|
|
- webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
- TIeExamInvigilateNotice tIeExamInvigilateNotice = new TIeExamInvigilateNotice(examId, examActivityId, recordId, Long.parseLong(String.valueOf(prop.get("formUserId"))), examStudentId, MessageTypeEnum.valueOf(String.valueOf(prop.get("type")).toUpperCase()), String.valueOf(prop.get("content")));
|
|
|
|
- tIeExamInvigilateNoticeService.saveOrUpdate(tIeExamInvigilateNotice);
|
|
|
|
- mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
- TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
- tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
- tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
- redisUtil.delete(key, mqDto.getId());
|
|
|
|
- }
|
|
|
|
|
|
+ Map<String, Object> map = oeImClusteringLogicPersisted(webSocketMap, gson, mqDto, key);
|
|
|
|
+ if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
|
|
|
|
+ WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
|
|
|
|
+ WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_NOTICE.name(), map);
|
|
|
|
+ webSocketOeServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
} else if (Objects.equals(MqTagEnum.OE_IM_BROADCASTING.name(), tag)) {//广播消息
|
|
} else if (Objects.equals(MqTagEnum.OE_IM_BROADCASTING.name(), tag)) {//广播消息
|
|
JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
|
|
JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
|
|
Set<String> examStudentIdentitySet = jsonArray.toJavaObject(Set.class);
|
|
Set<String> examStudentIdentitySet = jsonArray.toJavaObject(Set.class);
|
|
log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
|
|
log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
|
|
} else if (Objects.equals(MqTagEnum.OE_LIVENESS_VERIFY.name(), tag)) {//监考强制活体验证
|
|
} else if (Objects.equals(MqTagEnum.OE_LIVENESS_VERIFY.name(), tag)) {//监考强制活体验证
|
|
- Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
|
|
- String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
|
- if (Objects.nonNull(clientWebsocketId) && Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
|
- Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
|
- ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
|
- ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(recordId);
|
|
|
|
- if ((Objects.nonNull(examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.PERSISTED, examRecordStatusEnum)
|
|
|
|
- && !Objects.equals(ExamRecordStatusEnum.FINISHED, examRecordStatusEnum))
|
|
|
|
- && Objects.nonNull(webSocketOeServer.getRecordId())
|
|
|
|
- && webSocketOeServer.getRecordId().longValue() == recordId.longValue()) {
|
|
|
|
- Map map = new HashMap<>();
|
|
|
|
- map.put(SystemConstant.RECORD_ID, recordId);
|
|
|
|
- WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
|
|
|
|
- webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
- TEExamStudentLog teExamStudentLog = new TEExamStudentLog(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId, mqDto.getType().getCode());
|
|
|
|
- teExamStudentLogService.save(teExamStudentLog);
|
|
|
|
- mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
|
|
- TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
|
|
- tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
|
|
- tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
|
|
- redisUtil.delete(key, mqDto.getId());
|
|
|
|
- }
|
|
|
|
|
|
+ Map<String, Object> map = oeLivenessVerifyLogicPersisted(webSocketMap, gson, mqDto, key);
|
|
|
|
+ if (Objects.nonNull(map) && Objects.nonNull(map.get(SystemConstant.WEB_SOCKET_OE_SERVER))) {
|
|
|
|
+ WebSocketOeServer webSocketOeServer = (WebSocketOeServer) map.get(SystemConstant.WEB_SOCKET_OE_SERVER);
|
|
|
|
+ WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
|
|
|
|
+ webSocketOeServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
} else if (Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name(), tag)//移动端拍照/录音扫描完成
|
|
} else if (Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_READY.name(), tag)//移动端拍照/录音扫描完成
|
|
|| Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name(), tag)//移动端拍照/录音上传成功
|
|
|| Objects.equals(MqTagEnum.OE_WEBSOCKET_MOBILE_ANSWER_UPLOAD.name(), tag)//移动端拍照/录音上传成功
|
|
@@ -285,12 +381,13 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
redisUtil.delete(key, mqDto.getId());
|
|
redisUtil.delete(key, mqDto.getId());
|
|
|
|
+
|
|
|
|
+ webSocketOeServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -303,7 +400,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
* @param key
|
|
* @param key
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- @Transactional
|
|
|
|
public void execMqOeMobileLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
|
|
public void execMqOeMobileLogic(MqDto mqDto, String key) throws NoSuchAlgorithmException, IOException {
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
String tag = mqDto.getTag();
|
|
String tag = mqDto.getTag();
|
|
@@ -356,12 +452,13 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- webSocketFirstMobileServer.sendMessage(websocketDto);
|
|
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
redisUtil.delete(key, mqDto.getId());
|
|
redisUtil.delete(key, mqDto.getId());
|
|
|
|
+
|
|
|
|
+ webSocketFirstMobileServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
String mobileSecondWebsocketId = ExamRecordCacheUtil.getMobileSecondWebsocketId(recordId);
|
|
String mobileSecondWebsocketId = ExamRecordCacheUtil.getMobileSecondWebsocketId(recordId);
|
|
@@ -394,12 +491,13 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- webSocketSecondMobileServer.sendMessage(websocketDto);
|
|
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
|
|
tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
tmRocketMessage.setBody(JacksonUtil.parseJson(tmRocketMessage.getBody()));
|
|
tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
tmRocketMessageService.saveOrUpdate(tmRocketMessage);
|
|
redisUtil.delete(key, mqDto.getId());
|
|
redisUtil.delete(key, mqDto.getId());
|
|
|
|
+
|
|
|
|
+ webSocketSecondMobileServer.sendMessage(websocketDto);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|