wangliang 4 лет назад
Родитель
Сommit
fcf4d17ba2

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

@@ -275,7 +275,7 @@ public class TEExamController {
                 throw new BusinessException("总用时秒数不能为空");
             }
             Result re = ResultUtil.ok(teExamService.finish(teStudent.getId(), param.getRecordId(), param.getType(), param.getDurationSeconds()));
-            ExamConstant.sendExamStopMsg(param.getRecordId());
+            ExamConstant.sendExamStopMsg(param.getRecordId(), false);
             return re;
         } finally {
             redisUtil.releaseLock(lockKey);

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

@@ -258,7 +258,7 @@ public class TEStudentController {
                             String[] columns = new String[]{ExamRecordFieldEnum.last_break_id.name(), ExamRecordFieldEnum.status.name(), ExamRecordFieldEnum.last_break_time.name(), ExamRecordFieldEnum.already_break_count.name(), ExamRecordFieldEnum.last_start_time.name()};
                             Object[] values = new Object[]{breakId, ExamRecordStatusEnum.RESUME_PREPARE, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
                             tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
-                            ExamConstant.sendExamStopMsg(recordId);
+                            ExamConstant.sendExamStopMsg(recordId, true);
                             //考试断点异常原因 发送mq start
                             MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(), ExceptionEnum.NET_TIME_OUT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId), String.valueOf(recordId));
                             mqDtoService.assembleSendOneWayMsg(mqDtoBreak);

+ 11 - 8
themis-exam/src/main/java/com/qmth/themis/exam/config/ExamConstant.java

@@ -25,16 +25,19 @@ public class ExamConstant {
      * 发送考试结束msg
      *
      * @param recordId
+     * @param clientStop
      */
-    public static void sendExamStopMsg(Long recordId) {
+    public static void sendExamStopMsg(Long recordId, boolean clientStop) {
         //客户端考试结束
-        ConcurrentHashMap<Long, WebSocketOeServer> webSocketOeMap = WebSocketOeServer.getWebSocketMap();
-        if (Objects.nonNull(webSocketOeMap.get(recordId))) {
-            WebSocketOeServer webSocketOeServer = webSocketOeMap.get(recordId);
-            Map map = new HashMap<>();
-            map.put(SystemConstant.RECORD_ID, recordId);
-            WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_STOP.name(), map);
-            webSocketOeServer.sendMessage(websocketDto);
+        if (clientStop) {
+            ConcurrentHashMap<Long, WebSocketOeServer> webSocketOeMap = WebSocketOeServer.getWebSocketMap();
+            if (Objects.nonNull(webSocketOeMap.get(recordId))) {
+                WebSocketOeServer webSocketOeServer = webSocketOeMap.get(recordId);
+                Map map = new HashMap<>();
+                map.put(SystemConstant.RECORD_ID, recordId);
+                WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_STOP.name(), map);
+                webSocketOeServer.sendMessage(websocketDto);
+            }
         }
 
         //移动端考试结束

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/listener/service/impl/MqOeLogicServiceImpl.java

@@ -211,7 +211,7 @@ public class MqOeLogicServiceImpl implements MqOeLogicService {
         String tag = mqDto.getTag();
         if (Objects.equals(MqTagEnum.EXAM_STOP.name(), tag)) {//考试退出
             Long recordId = Long.parseLong(String.valueOf(mqDto.getBody()));
-            ExamConstant.sendExamStopMsg(recordId);
+            ExamConstant.sendExamStopMsg(recordId, true);
         }
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketMobileServer.java

@@ -151,7 +151,7 @@ public class WebSocketMobileServer implements Concurrently {
                 map.put("monitorVideoSource", this.source.name());
                 WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.MOBILE_MONITOR_STOP.name(), map);
                 webSocketOeServer.sendMessage(websocketDto);
-                ExamConstant.sendExamStopMsg(this.recordId);
+                ExamConstant.sendExamStopMsg(this.recordId, true);
             }
         }
         log.info("用户退出:{},当前在线人数为:{},updateTime:{}", this.sessionId, getOnlineCount(), this.updateTime);

+ 1 - 1
themis-exam/src/main/java/com/qmth/themis/exam/websocket/WebSocketOeServer.java

@@ -201,7 +201,7 @@ public class WebSocketOeServer implements Concurrently {
                         Object[] values = new Object[]{breakId, ExamRecordStatusEnum.RESUME_PREPARE, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
                         TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
                         tOeExamRecordService.dataUpdatesMq(this.recordId, columns, values);
-                        ExamConstant.sendExamStopMsg(this.recordId);
+                        ExamConstant.sendExamStopMsg(this.recordId, true);
                         //考试断点异常原因 发送mq start
                         MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(), ExceptionEnum.EXIT, MqTagEnum.EXAM_BREAK, String.valueOf(this.recordId), String.valueOf(this.recordId));
                         MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);