|
@@ -96,24 +96,28 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
|
@Transactional
|
|
|
public void execMqOeLogic(MqDto mqDto, String key) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
|
|
|
Gson gson = new Gson();
|
|
|
- ConcurrentHashMap<Long, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
|
|
|
+ ConcurrentHashMap<String, WebSocketOeServer> webSocketMap = WebSocketOeServer.getWebSocketMap();
|
|
|
String tag = mqDto.getTag();
|
|
|
if (Objects.equals(MqTagEnum.OE_MONITOR_FINISH.name(), tag)) {//强制离线交卷
|
|
|
Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
|
|
|
examRecordId.forEach(s -> {
|
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
|
- if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
+ //获取考试记录的客户端websocketId
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
+ if (Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
|
- 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);
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
+ if (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);
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -139,36 +143,42 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
|
Set examRecordId = JacksonUtil.readJson(String.valueOf(mqDto.getBody()), Set.class);
|
|
|
examRecordId.forEach(s -> {
|
|
|
Long recordId = Long.parseLong(String.valueOf(s));
|
|
|
- if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
+ if (Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
|
- 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);
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
+ if (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);
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
} else if (Objects.equals(MqTagEnum.OE_IM_CLUSTERING.name(), tag)) {//点对点消息
|
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
|
- if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
+ if (Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
Long examId = ExamRecordCacheUtil.getExamId(recordId);
|
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
Long examActivityId = ExamRecordCacheUtil.getExamActivityId(recordId);
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
|
- 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(mqDto.getObjId()), examStudentId, MessageTypeEnum.valueOf(String.valueOf(prop.get("type")).toUpperCase()), String.valueOf(prop.get("content")));
|
|
|
- tIeExamInvigilateNoticeService.saveOrUpdate(tIeExamInvigilateNotice);
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
+ if (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(mqDto.getObjId()), examStudentId, MessageTypeEnum.valueOf(String.valueOf(prop.get("type")).toUpperCase()), String.valueOf(prop.get("content")));
|
|
|
+ tIeExamInvigilateNoticeService.saveOrUpdate(tIeExamInvigilateNotice);
|
|
|
+ }
|
|
|
}
|
|
|
} else if (Objects.equals(MqTagEnum.OE_IM_BROADCASTING.name(), tag)) {//广播消息
|
|
|
JSONArray jsonArray = JSONArray.parseArray(String.valueOf(mqDto.getBody()));
|
|
@@ -176,16 +186,19 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
|
log.info("examStudentIdentitySet:{}", JacksonUtil.parseJson(examStudentIdentitySet));
|
|
|
} else if (Objects.equals(MqTagEnum.OE_LIVENESS_VERIFY.name(), tag)) {//监考强制活体验证
|
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|
|
|
- if (Objects.nonNull(webSocketMap.get(recordId))) {
|
|
|
+ String clientWebsocketId = ExamRecordCacheUtil.getClientWebsocketId(recordId);
|
|
|
+ if (Objects.nonNull(webSocketMap.get(clientWebsocketId))) {
|
|
|
Long examStudentId = ExamRecordCacheUtil.getExamStudentId(recordId);
|
|
|
ExamStudentCacheBean examStudentCacheBean = teExamStudentService.getExamStudentCacheBean(examStudentId);
|
|
|
- WebSocketOeServer webSocketOeServer = webSocketMap.get(recordId);
|
|
|
- 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);
|
|
|
+ WebSocketOeServer webSocketOeServer = webSocketMap.get(clientWebsocketId);
|
|
|
+ if (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);
|
|
@@ -209,7 +222,6 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
|
|
|
@Override
|
|
|
public void execMqOeMobileLogic(MqDto mqDto, String key) {
|
|
|
Gson gson = new Gson();
|
|
|
- ConcurrentHashMap<String, WebSocketMobileServer> webSocketMap = WebSocketMobileServer.getWebSocketMap();
|
|
|
String tag = mqDto.getTag();
|
|
|
if (Objects.equals(MqTagEnum.EXAM_STOP.name(), tag)) {//考试退出
|
|
|
Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
|