|
@@ -2,14 +2,20 @@ package com.qmth.themis.exam.listener.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.Gson;
|
|
|
|
+import com.qmth.themis.business.cache.RedisKeyHelper;
|
|
|
|
+import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
import com.qmth.themis.business.constant.SystemConstant;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.MqDto;
|
|
import com.qmth.themis.business.dto.WebsocketDto;
|
|
import com.qmth.themis.business.dto.WebsocketDto;
|
|
|
|
+import com.qmth.themis.business.entity.TIeExamInvigilateNotice;
|
|
import com.qmth.themis.business.entity.TMRocketMessage;
|
|
import com.qmth.themis.business.entity.TMRocketMessage;
|
|
import com.qmth.themis.business.enums.FinishTypeEnum;
|
|
import com.qmth.themis.business.enums.FinishTypeEnum;
|
|
|
|
+import com.qmth.themis.business.enums.MessageTypeEnum;
|
|
import com.qmth.themis.business.enums.MqTagEnum;
|
|
import com.qmth.themis.business.enums.MqTagEnum;
|
|
import com.qmth.themis.business.enums.WebsocketTypeEnum;
|
|
import com.qmth.themis.business.enums.WebsocketTypeEnum;
|
|
import com.qmth.themis.business.service.TEExamStudentLogService;
|
|
import com.qmth.themis.business.service.TEExamStudentLogService;
|
|
|
|
+import com.qmth.themis.business.service.TEExamStudentService;
|
|
|
|
+import com.qmth.themis.business.service.TIeExamInvigilateNoticeService;
|
|
import com.qmth.themis.business.service.TMRocketMessageService;
|
|
import com.qmth.themis.business.service.TMRocketMessageService;
|
|
import com.qmth.themis.business.util.JacksonUtil;
|
|
import com.qmth.themis.business.util.JacksonUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
@@ -48,6 +54,12 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
@Resource
|
|
@Resource
|
|
TEExamStudentLogService teExamStudentLogService;
|
|
TEExamStudentLogService teExamStudentLogService;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ TEExamStudentService teExamStudentService;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ TIeExamInvigilateNoticeService tIeExamInvigilateNoticeService;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* mq最大重试次数逻辑
|
|
* mq最大重试次数逻辑
|
|
*
|
|
*
|
|
@@ -88,6 +100,9 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
examRecordId.forEach(s -> {
|
|
examRecordId.forEach(s -> {
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
|
+ Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
+ Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
Map map = new HashMap<>();
|
|
Map map = new HashMap<>();
|
|
map.put("form", mqDto.getObjName());
|
|
map.put("form", mqDto.getObjName());
|
|
@@ -95,6 +110,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_STOP_EXAM.name(), map);
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_STOP_EXAM.name(), map);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
+ teExamStudentLogService.saveStudentLogInfo(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
} else if (tag.contains(MqTagEnum.OE_HARD_FINISH.name())) {//手动交卷
|
|
} else if (tag.contains(MqTagEnum.OE_HARD_FINISH.name())) {//手动交卷
|
|
@@ -102,12 +118,16 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
examRecordId.forEach(s -> {
|
|
examRecordId.forEach(s -> {
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
|
+ Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
+ Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
Map map = new HashMap<>();
|
|
Map map = new HashMap<>();
|
|
map.put(SystemConstant.RECORD_ID, recordId);
|
|
map.put(SystemConstant.RECORD_ID, recordId);
|
|
map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
map.put(SystemConstant.MESSAGE, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.HAND_STOP_EXAM.name(), map);
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.HAND_STOP_EXAM.name(), map);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
+ teExamStudentLogService.saveStudentLogInfo(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
} else if (tag.contains(MqTagEnum.OE_WARNING_FINISH.name())) {//预警交卷
|
|
} else if (tag.contains(MqTagEnum.OE_WARNING_FINISH.name())) {//预警交卷
|
|
@@ -115,17 +135,25 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
examRecordId.forEach(s -> {
|
|
examRecordId.forEach(s -> {
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
|
+ Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
+ Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
Map map = new HashMap<>();
|
|
Map map = new HashMap<>();
|
|
map.put(SystemConstant.RECORD_ID, recordId);
|
|
map.put(SystemConstant.RECORD_ID, recordId);
|
|
map.put(SystemConstant.BREACH_STATUS, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
map.put(SystemConstant.BREACH_STATUS, FinishTypeEnum.valueOf(String.valueOf(mqDto.getProperties().get("type"))).getCode());
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.BREACH_STOP_EXAM.name(), map);
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.BREACH_STOP_EXAM.name(), map);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
+ teExamStudentLogService.saveStudentLogInfo(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
} else if (tag.contains(MqTagEnum.OE_IM_CLUSTERING.name())) {//点对点消息
|
|
} else if (tag.contains(MqTagEnum.OE_IM_CLUSTERING.name())) {//点对点消息
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
|
+ Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
+ Long examId = Long.parseLong(String.valueOf(objectMap.get("examId")));
|
|
|
|
+ Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
|
+ Long examActivityId = Long.parseLong(String.valueOf(objectMap.get("examActivityId")));
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
Map<String, Object> prop = mqDto.getProperties();
|
|
Map<String, Object> prop = mqDto.getProperties();
|
|
Map map = new HashMap<>();
|
|
Map map = new HashMap<>();
|
|
@@ -135,6 +163,8 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
map.put("content", prop.get("content"));
|
|
map.put("content", prop.get("content"));
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_NOTICE.name(), map);
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_NOTICE.name(), map);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
+ TIeExamInvigilateNotice tIeExamInvigilateNotice = new TIeExamInvigilateNotice(examId, examActivityId, recordId, Long.parseLong(mqDto.getObjId()), examStudentId, MessageTypeEnum.valueOf(String.valueOf(prop.get("type"))), String.valueOf(prop.get("content")));
|
|
|
|
+ tIeExamInvigilateNoticeService.saveOrUpdate(tIeExamInvigilateNotice);
|
|
}
|
|
}
|
|
} else if (tag.contains(MqTagEnum.OE_IM_BROADCASTING.name())) {//广播消息
|
|
} else if (tag.contains(MqTagEnum.OE_IM_BROADCASTING.name())) {//广播消息
|
|
JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
|
|
JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
|
|
@@ -143,15 +173,18 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
} else if (tag.contains(MqTagEnum.OE_LIVENESS_VERIFY.name())) {//监考强制活体验证
|
|
} else if (tag.contains(MqTagEnum.OE_LIVENESS_VERIFY.name())) {//监考强制活体验证
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
|
+ Map<String, Object> objectMap = redisUtil.getHashEntries(RedisKeyHelper.examRecordCacheKey(recordId));
|
|
|
|
+ Long examStudentId = Long.parseLong(String.valueOf(objectMap.get("examStudentId")));
|
|
|
|
+ ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
Map map = new HashMap<>();
|
|
Map map = new HashMap<>();
|
|
map.put(SystemConstant.RECORD_ID, recordId);
|
|
map.put(SystemConstant.RECORD_ID, recordId);
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
|
|
WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.INVIGILATE_LIVENESS_VERIFY.name(), map);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
webSocketOeServer.sendMessage(websocketDto);
|
|
|
|
+ teExamStudentLogService.saveStudentLogInfo(mqDto.getType().name(), mqDto.getType().getCode(), mqDto.getType().getCode(), examStudentCacheBean.getStudentId(), examStudentId, recordId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
|
|
-// teExamStudentLogService.saveStudentLogInfo(mqDto.getTimestamp(), MqTagEnum.valueOf(String.valueOf(mqDto.getType())).getId(), mqDto.getType().getCode(), JacksonUtil.parseJson(mqDto));
|
|
|
|
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);
|