소스 검색

修复辅机位不退出的BUG

wangliang 3 년 전
부모
커밋
5e7a1fc353

+ 27 - 0
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -4,8 +4,10 @@ import com.google.common.collect.Sets;
 import com.qmth.themis.business.cache.ExamRecordCacheUtil;
 import com.qmth.themis.business.dto.ExpireTimeDTO;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
+import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.*;
 import com.qmth.themis.business.service.CacheService;
+import com.qmth.themis.business.service.TOeExamRecordService;
 import com.qmth.themis.business.util.RedisUtil;
 import com.qmth.themis.business.util.SessionUtil;
 import com.qmth.themis.common.contanst.Constants;
@@ -648,4 +650,29 @@ public class SystemConstant {
         return String.valueOf(UUID.randomUUID()).replaceAll("-", "");
     }
 
+    /**
+     * 获取考试状态
+     *
+     * @param recordId
+     * @return
+     */
+    public static ExamRecordStatusEnum getExamStatus(Long recordId) {
+        TOeExamRecord tOeExamRecord = getExamRecord(recordId);
+        return tOeExamRecord.getStatus();
+    }
+
+    /**
+     * 获取考试状态
+     *
+     * @param recordId
+     * @return
+     */
+    public static TOeExamRecord getExamRecord(Long recordId) {
+        TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
+        TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(recordId);
+        if (Objects.isNull(tOeExamRecord)) {
+            throw new BusinessException(ExceptionResultEnum.NOT_FOUND_EXAM_RECORD);
+        }
+        return tOeExamRecord;
+    }
 }

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

@@ -62,9 +62,6 @@ public class TEExamController {
     @Resource
     MqUtil mqUtil;
 
-    @Resource
-    TEExamStudentService teExamStudentService;
-
     @ApiOperation(value = "验证考试口令接口")
     @RequestMapping(value = "/short_code", method = RequestMethod.POST)
     @ApiResponses({ @ApiResponse(code = 200, message = "考试信息", response = TEExam.class) })
@@ -402,13 +399,8 @@ public class TEExamController {
         }
         ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(param.getRecordId());
         if (Objects.isNull(examRecordStatusEnum)) {
-            TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(param.getRecordId());
-            if (Objects.nonNull(tOeExamRecord)) {
-                examRecordStatusEnum = tOeExamRecord.getStatus();
-            }
+            examRecordStatusEnum = Objects.isNull(examRecordStatusEnum) ? SystemConstant.getExamStatus(param.getRecordId()) : examRecordStatusEnum;
         }
-        Map<String, Object> map = new HashMap<>();
-        map.put(SystemConstant.STATUS, examRecordStatusEnum);
-        return ResultUtil.ok(map);
+        return ResultUtil.ok(Collections.singletonMap(SystemConstant.STATUS, examRecordStatusEnum));
     }
 }

+ 3 - 11
themis-exam/src/main/java/com/qmth/themis/exam/api/TEMobileController.java

@@ -12,7 +12,6 @@ import com.qmth.themis.business.cache.bean.ExamStudentCacheBean;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.dto.MqDto;
 import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
-import com.qmth.themis.business.entity.TOeExamRecord;
 import com.qmth.themis.business.enums.ExamRecordStatusEnum;
 import com.qmth.themis.business.enums.MobileModeEnum;
 import com.qmth.themis.business.enums.MqTagEnum;
@@ -32,6 +31,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.security.NoSuchAlgorithmException;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -59,9 +59,6 @@ public class TEMobileController {
     @Resource
     RedisUtil redisUtil;
 
-    @Resource
-    TOeExamRecordService tOeExamRecordService;
-
     @Resource
     QrCodeUtil qrCodeUtil;
 
@@ -196,13 +193,8 @@ public class TEMobileController {
         }
         ExamRecordStatusEnum examRecordStatusEnum = ExamRecordCacheUtil.getStatus(param.getRecordId());
         if (Objects.isNull(examRecordStatusEnum)) {
-            TOeExamRecord tOeExamRecord = tOeExamRecordService.getById(param.getRecordId());
-            if (Objects.nonNull(tOeExamRecord)) {
-                examRecordStatusEnum = tOeExamRecord.getStatus();
-            }
+            examRecordStatusEnum = Objects.isNull(examRecordStatusEnum) ? SystemConstant.getExamStatus(param.getRecordId()) : examRecordStatusEnum;
         }
-        Map<String, Object> map = new HashMap<>();
-        map.put(SystemConstant.STATUS, examRecordStatusEnum);
-        return ResultUtil.ok(map);
+        return ResultUtil.ok(Collections.singletonMap(SystemConstant.STATUS, examRecordStatusEnum));
     }
 }

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

@@ -136,7 +136,7 @@ public class WebSocketOeServer implements Concurrently {
                 if (this.websocketSessionId != null && this.websocketSessionId.equals(currentId)) {
                     long timestamp = System.currentTimeMillis();
                     WebsocketUtil.updateExamRecordWebsocketStatus(this.recordId, this.ip, this.websocketSessionId,
-                            WebsocketStatusEnum.ON_LINE);
+                            WebsocketStatusEnum.OFF_LINE);
                     //判断是否是正常退出
                     TOeExamRecordService tOeExamRecordService = SpringContextHolder.getBean(TOeExamRecordService.class);
                     tOeExamRecordService.sendExamRecordDataSaveMq(this.recordId, timestamp);
@@ -264,7 +264,7 @@ public class WebSocketOeServer implements Concurrently {
 
     @Override
     public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
-            ConsumeConcurrentlyContext consumeConcurrentlyContext) {
+                                                    ConsumeConcurrentlyContext consumeConcurrentlyContext) {
         MqOeLogicService mqOeLogicService = SpringContextHolder.getBean(MqOeLogicService.class);
         try {
             long threadId = Thread.currentThread().getId();