Browse Source

bug修改

wangliang 4 years ago
parent
commit
b5e7a78e17

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

@@ -25,6 +25,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.ExamConstant;
 import com.qmth.themis.exam.websocket.WebSocketMobileServer;
 import com.qmth.themis.exam.websocket.WebSocketMobileServer;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
@@ -274,21 +275,7 @@ public class TEExamController {
                 throw new BusinessException("总用时秒数不能为空");
                 throw new BusinessException("总用时秒数不能为空");
             }
             }
             Result re = ResultUtil.ok(teExamService.finish(teStudent.getId(), param.getRecordId(), param.getType(), param.getDurationSeconds()));
             Result re = ResultUtil.ok(teExamService.finish(teStudent.getId(), param.getRecordId(), param.getType(), param.getDurationSeconds()));
-            ConcurrentHashMap<String, WebSocketMobileServer> webSocketMap = WebSocketMobileServer.getWebSocketMap();
-            if (Objects.nonNull(webSocketMap.get(param.getRecordId() + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name()))) {
-                WebSocketMobileServer webSocketMobileServer = webSocketMap.get(param.getRecordId() + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name());
-                Map map = new HashMap<>();
-                map.put(SystemConstant.RECORD_ID, param.getRecordId());
-                WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_STOP.name(), map);
-                webSocketMobileServer.sendMessage(websocketDto);
-            }
-            if (Objects.nonNull(webSocketMap.get(param.getRecordId() + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
-                WebSocketMobileServer webSocketMobileServer = webSocketMap.get(param.getRecordId() + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name());
-                Map map = new HashMap<>();
-                map.put(SystemConstant.RECORD_ID, param.getRecordId());
-                WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_STOP.name(), map);
-                webSocketMobileServer.sendMessage(websocketDto);
-            }
+            ExamConstant.sendExamStopMsg(param.getRecordId());
             return re;
             return re;
         } finally {
         } finally {
             redisUtil.releaseLock(lockKey);
             redisUtil.releaseLock(lockKey);

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

@@ -38,6 +38,7 @@ import com.qmth.themis.common.signature.SignatureType;
 import com.qmth.themis.common.util.AesUtil;
 import com.qmth.themis.common.util.AesUtil;
 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.ExamConstant;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -257,6 +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()};
                             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};
                             Object[] values = new Object[]{breakId, ExamRecordStatusEnum.RESUME_PREPARE, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
                             tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
                             tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
+                            ExamConstant.sendExamStopMsg(recordId);
                             //考试断点异常原因 发送mq start
                             //考试断点异常原因 发送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));
                             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);
                             mqDtoService.assembleSendOneWayMsg(mqDtoBreak);

+ 45 - 0
themis-exam/src/main/java/com/qmth/themis/exam/config/ExamConstant.java

@@ -0,0 +1,45 @@
+package com.qmth.themis.exam.config;
+
+import com.qmth.themis.business.constant.SystemConstant;
+import com.qmth.themis.business.dto.WebsocketDto;
+import com.qmth.themis.business.enums.MonitorVideoSourceEnum;
+import com.qmth.themis.business.enums.WebsocketTypeEnum;
+import com.qmth.themis.exam.websocket.WebSocketMobileServer;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * @Description: 考试系统常量
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2020/9/21
+ */
+public class ExamConstant {
+
+    /**
+     * 发送移动端考试结束msg
+     *
+     * @param recordId
+     */
+    public static void sendExamStopMsg(Long recordId) {
+        ConcurrentHashMap<String, WebSocketMobileServer> webSocketMap = WebSocketMobileServer.getWebSocketMap();
+        if (Objects.nonNull(webSocketMap.get(recordId + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name()))) {
+            WebSocketMobileServer webSocketMobileServer = webSocketMap.get(recordId + "-" + MonitorVideoSourceEnum.MOBILE_FIRST.name());
+            Map map = new HashMap<>();
+            map.put(SystemConstant.RECORD_ID, recordId);
+            WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_STOP.name(), map);
+            webSocketMobileServer.sendMessage(websocketDto);
+        }
+        if (Objects.nonNull(webSocketMap.get(recordId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name()))) {
+            WebSocketMobileServer webSocketMobileServer = webSocketMap.get(recordId + "-" + MonitorVideoSourceEnum.MOBILE_SECOND.name());
+            Map map = new HashMap<>();
+            map.put(SystemConstant.RECORD_ID, recordId);
+            WebsocketDto websocketDto = new WebsocketDto(WebsocketTypeEnum.EXAM_STOP.name(), map);
+            webSocketMobileServer.sendMessage(websocketDto);
+        }
+    }
+}

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

@@ -23,6 +23,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.signature.SignatureInfo;
 import com.qmth.themis.common.signature.SignatureInfo;
 import com.qmth.themis.common.signature.SignatureType;
 import com.qmth.themis.common.signature.SignatureType;
+import com.qmth.themis.exam.config.ExamConstant;
 import com.qmth.themis.exam.listener.service.MqOeLogicService;
 import com.qmth.themis.exam.listener.service.MqOeLogicService;
 import com.qmth.themis.exam.websocketTemplete.WebSocketOeMessageTemplete;
 import com.qmth.themis.exam.websocketTemplete.WebSocketOeMessageTemplete;
 import com.qmth.themis.mq.templete.Concurrently;
 import com.qmth.themis.mq.templete.Concurrently;
@@ -191,19 +192,20 @@ public class WebSocketOeServer implements Concurrently {
                 } else {
                 } else {
                     alreadyBreakCount++;
                     alreadyBreakCount++;
                     Long breakId = Constants.idGen.next();
                     Long breakId = Constants.idGen.next();
-                    ExamRecordCacheUtil.setLastBreakId(recordId, breakId, false);
-                    ExamRecordCacheUtil.setStatus(recordId, ExamRecordStatusEnum.BREAK_OFF, false);
+                    ExamRecordCacheUtil.setLastBreakId(this.recordId, breakId, false);
+                    ExamRecordCacheUtil.setStatus(this.recordId, ExamRecordStatusEnum.BREAK_OFF, false);
                     Date lastBreakTimeNow = new Date();
                     Date lastBreakTimeNow = new Date();
-                    ExamRecordCacheUtil.setLastBreakTime(recordId, lastBreakTimeNow, false);
-                    ExamRecordCacheUtil.setAlreadyBreakCount(recordId, alreadyBreakCount, false);
+                    ExamRecordCacheUtil.setLastBreakTime(this.recordId, lastBreakTimeNow, false);
+                    ExamRecordCacheUtil.setAlreadyBreakCount(this.recordId, alreadyBreakCount, false);
                     Date lastStartTime = new Date();
                     Date lastStartTime = new Date();
-                    ExamRecordCacheUtil.setLastStartTime(recordId, lastStartTime, false);
+                    ExamRecordCacheUtil.setLastStartTime(this.recordId, lastStartTime, false);
                     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()};
                     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};
                     Object[] values = new Object[]{breakId, ExamRecordStatusEnum.RESUME_PREPARE, lastBreakTimeNow, alreadyBreakCount, lastStartTime};
                     TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
                     TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
-                    tOeExamRecordService.dataUpdatesMq(recordId, columns, values);
+                    tOeExamRecordService.dataUpdatesMq(this.recordId, columns, values);
+                    ExamConstant.sendExamStopMsg(this.recordId);
                     //考试断点异常原因 发送mq start
                     //考试断点异常原因 发送mq start
-                    MqDto mqDtoBreak = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_BREAK.name(), ExceptionEnum.EXIT, MqTagEnum.EXAM_BREAK, String.valueOf(recordId), String.valueOf(recordId));
+                    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);
                     MqDtoService mqDtoService = SpringContextHolder.getBean(MqDtoService.class);
                     mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
                     mqDtoService.assembleSendOneWayMsg(mqDtoBreak);
                     //考试断点异常原因 发送mq end
                     //考试断点异常原因 发送mq end

+ 0 - 5
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -625,11 +625,6 @@ public class MqLogicServiceImpl implements MqLogicService {
         tOeExamBreakHistoryService.saveOrUpdate(tOeExamBreakHistory);
         tOeExamBreakHistoryService.saveOrUpdate(tOeExamBreakHistory);
         redisUtil.setForHash(RedisKeyHelper.examBreakCacheKey(tOeExamBreakHistory.getId()), SimpleBeanUtil.objectToMap(tOeExamBreakHistory));
         redisUtil.setForHash(RedisKeyHelper.examBreakCacheKey(tOeExamBreakHistory.getId()), SimpleBeanUtil.objectToMap(tOeExamBreakHistory));
 
 
-        //发送移动端监考退出考试mq消息 start
-        MqDto mqDtoExamStop = new MqDto(MqTopicEnum.THEMIS_TOPIC.getCode(), MqTagEnum.EXAM_STOP.name(), recordId, MqTagEnum.EXAM_STOP, String.valueOf(recordId), String.valueOf(recordId));
-        mqDtoService.assembleSendOneWayMsg(mqDtoExamStop);
-        //发送移动端监考退出考试mq消息 end
-
         Gson gson = new Gson();
         Gson gson = new Gson();
         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);