Ver código fonte

fix 考试会话处于“非正式状态”场景

deason 2 anos atrás
pai
commit
a7fb5d5785

+ 1 - 1
examcloud-core-oe-student-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/student/api/controller/ExamCaptureController.java

@@ -188,7 +188,7 @@ public class ExamCaptureController extends ControllerSupport {
 
         ExamingSession examingSession = examingSessionService.getExamingSession(user.getUserId());
         //不存在考试会话,或者会话状态不正确,不允许上传图片直接返回
-        if (null == examingSession || examingSession.getExamingStatus() == ExamingStatus.INFORMAL) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             return null;
         }
 

+ 4 - 3
examcloud-core-oe-student-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/student/api/controller/FaceBiopsyController.java

@@ -16,6 +16,7 @@ import cn.com.qmth.examcloud.support.enums.HandInExamType;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.support.examing.ExamingHeartbeat;
 import cn.com.qmth.examcloud.support.examing.ExamingSession;
+import cn.com.qmth.examcloud.support.examing.ExamingStatus;
 import cn.com.qmth.examcloud.support.helper.FaceBiopsyHelper;
 import cn.com.qmth.examcloud.support.redis.RedisKeyHelper;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
@@ -88,7 +89,7 @@ public class FaceBiopsyController extends ControllerSupport {
 
         // 获取考试会话,判断考生是否已结束考试
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("200104", "考试会话已过期");
         }
 
@@ -114,7 +115,7 @@ public class FaceBiopsyController extends ControllerSupport {
             faceVerifyMinute = faceBiopsyService.calculateFaceBiopsyStartMinute(examRecordDataId);
         } else {
             // FaceID活体检测方案
-            String examingHeartbeatKey = RedisKeyHelper.getBuilder().examingHeartbeatKey(examSessionInfo.getExamRecordDataId());
+            String examingHeartbeatKey = RedisKeyHelper.getBuilder().examingHeartbeatKey(examRecordDataId);
             ExamingHeartbeat examingHeartbeat = redisClient.get(examingHeartbeatKey, ExamingHeartbeat.class);
 
             int usedMinute = null == examingHeartbeat ? 0 : examingHeartbeat.getCost().intValue() / 60;
@@ -149,7 +150,7 @@ public class FaceBiopsyController extends ControllerSupport {
 
         // 获取考试会话,判断考生是否已结束考试
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("200103", "考试会话已过期");
         }
 

+ 2 - 1
examcloud-core-oe-student-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/student/api/controller/client/ExamProcessController.java

@@ -14,6 +14,7 @@ import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.support.examing.ExamQuestion;
 import cn.com.qmth.examcloud.support.examing.ExamRecordPaperStruct;
 import cn.com.qmth.examcloud.support.examing.ExamingSession;
+import cn.com.qmth.examcloud.support.examing.ExamingStatus;
 import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
 import cn.com.qmth.examcloud.support.filestorage.UploadResult;
 import cn.com.qmth.examcloud.support.handler.richtext2.RichTextConverter;
@@ -159,7 +160,7 @@ public class ExamProcessController extends ControllerSupport {
     public void discipline(@RequestParam(required = false) String reason) {
         User user = getAccessUser();
         ExamingSession examingSession = examingSessionService.getExamingSession(user.getUserId());
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             return;
         }
 

+ 8 - 11
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/service/impl/ExamControlServiceImpl.java

@@ -548,8 +548,7 @@ public class ExamControlServiceImpl implements ExamControlService {
      */
     private long calcUsedExamSeconds(Long studentId) {
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null
-                || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             return 0;
         }
 
@@ -835,7 +834,7 @@ public class ExamControlServiceImpl implements ExamControlService {
         SequenceLockHelper.getLock(sequenceLockKey);
 
         ExamingSession examingSession = examingSessionService.getExamingSession(studentId);
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             throw new StatusException("8010", "无效的会话,请离开考试");
         }
 
@@ -1023,7 +1022,7 @@ public class ExamControlServiceImpl implements ExamControlService {
 
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(examStudent.getStudentId());
         // 判断考试是否结束
-        if (examSessionInfo == null) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("100006", "考试已结束");
         }
         if (examSessionInfo.getExamRecordDataId().longValue() != Long.valueOf(examRecordDataId).longValue()
@@ -1231,7 +1230,7 @@ public class ExamControlServiceImpl implements ExamControlService {
             if (!user.getUserId().equals(examStudent.getStudentId())) {
                 throw new StatusException("100013", "无效的请求");
             }
-            if (examSessionInfo == null) {
+            if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
                 throw new StatusException("100006", "考试已结束");
             }
             if (examSessionInfo.getExamRecordDataId().longValue() != req.getExamRecordDataId().longValue()
@@ -1282,8 +1281,7 @@ public class ExamControlServiceImpl implements ExamControlService {
         }
 
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(examRecordData.getStudentId());
-        if (examSessionInfo == null
-                || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("101001", "无效的会话,请离开考试");
         }
 
@@ -1923,8 +1921,7 @@ public class ExamControlServiceImpl implements ExamControlService {
     public long examHeartbeat(User user, String ip) {
         Long studentId = user.getUserId();
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null
-                || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("101001", "无效的会话,请离开考试");
         }
 
@@ -2041,8 +2038,8 @@ public class ExamControlServiceImpl implements ExamControlService {
     private Long checkAndComputeExamDuration(Long studentId, Boolean forceEndExam) {
         // 获取考试会话,判断考生是否已结束考试(二次校验)
         ExamingSession examingSession = examingSessionService.getExamingSession(studentId);
-        if (examingSession == null) {
-            throw new StatusException("oestudent-100100", "考试会话已过期");
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
+            throw new StatusException("100100", "考试会话已过期");
         }
 
         //交卷时重新计算考试已用时间

+ 4 - 3
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/service/impl/ExamFaceLiveVerifyServiceImpl.java

@@ -20,6 +20,7 @@ import cn.com.qmth.examcloud.support.enums.IsSuccess;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.support.examing.ExamingHeartbeat;
 import cn.com.qmth.examcloud.support.examing.ExamingSession;
+import cn.com.qmth.examcloud.support.examing.ExamingStatus;
 import cn.com.qmth.examcloud.support.helper.ExamCacheTransferHelper;
 import cn.com.qmth.examcloud.support.helper.FaceBiopsyHelper;
 import cn.com.qmth.examcloud.support.redis.RedisKeyHelper;
@@ -63,7 +64,7 @@ public class ExamFaceLiveVerifyServiceImpl implements ExamFaceLiveVerifyService
         }
 
         ExamingSession examingSession = examingSessionService.getExamingSession(studentId);
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             throw new StatusException("考试会话已过期");
         }
 
@@ -133,7 +134,7 @@ public class ExamFaceLiveVerifyServiceImpl implements ExamFaceLiveVerifyService
         }
 
         ExamingSession examingSession = examingSessionService.getExamingSession(req.getStudentId());
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             log.warn("考试会话已过期!examRecordDataId = {}, studentId = {}", req.getExamRecordDataId(), req.getStudentId());
             return;
         }
@@ -183,7 +184,7 @@ public class ExamFaceLiveVerifyServiceImpl implements ExamFaceLiveVerifyService
         }
 
         ExamingSession examingSession = examingSessionService.getExamingSession(examRecordData.getStudentId());
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             throw new StatusException("考试会话已过期");
         }
 

+ 4 - 7
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/service/impl/ExamRecordQuestionsServiceImpl.java

@@ -153,7 +153,7 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
     @Override
     public List<ExamQuestion> findExamQuestionList(Long studentId) {
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("1001", "考试会话已过期,请重新开考");
         }
 
@@ -222,8 +222,7 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
         Check.isBlank(questionId, "questionId不能为空");
 
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null
-                || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("2001", "考试已结束,不允许获取试题内容");
         }
 
@@ -262,8 +261,7 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
         Check.isNull(studentId, "studentId不能为空");
 
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null
-                || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("2001", "考试已结束,不允许获取试题内容");
         }
 
@@ -313,8 +311,7 @@ public class ExamRecordQuestionsServiceImpl implements ExamRecordQuestionsServic
         }
 
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null
-                || examSessionInfo.getExamingStatus().equals(ExamingStatus.INFORMAL)) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("3001", "考试会话已过期");
         }
         long examRecordDataId = examSessionInfo.getExamRecordDataId();

+ 3 - 2
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/service/impl/FaceBiopsyServiceImpl.java

@@ -24,6 +24,7 @@ import cn.com.qmth.examcloud.support.enums.IsSuccess;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.support.examing.ExamingHeartbeat;
 import cn.com.qmth.examcloud.support.examing.ExamingSession;
+import cn.com.qmth.examcloud.support.examing.ExamingStatus;
 import cn.com.qmth.examcloud.support.helper.ExamCacheTransferHelper;
 import cn.com.qmth.examcloud.support.helper.FaceBiopsyHelper;
 import cn.com.qmth.examcloud.support.redis.RedisKeyHelper;
@@ -698,7 +699,7 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
      */
     private Integer getFreezeTime(Long studentId) {
         ExamingSession examSessionInfo = examingSessionService.getExamingSession(studentId);
-        if (examSessionInfo == null) {
+        if (examSessionInfo == null || ExamingStatus.INFORMAL.equals(examSessionInfo.getExamingStatus())) {
             throw new StatusException("201002", "考试会话已过期");
         }
 
@@ -839,7 +840,7 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
      */
     private Integer getExamUsedMinutes(Long studentId) {
         ExamingSession examingSession = examingSessionService.getExamingSession(studentId);
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             throw new StatusException("201002", "考试会话已过期");
         }
 

+ 2 - 1
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/service/impl/FaceProcessServiceImpl.java

@@ -16,6 +16,7 @@ import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.support.enums.ExamRecordStatus;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.support.examing.ExamingSession;
+import cn.com.qmth.examcloud.support.examing.ExamingStatus;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import org.apache.commons.lang3.StringUtils;
 import org.json.JSONArray;
@@ -77,7 +78,7 @@ public class FaceProcessServiceImpl implements FaceProcessService {
         }
 
         ExamingSession examingSession = examingSessionService.getExamingSession(req.getStudentId());
-        if (examingSession == null) {
+        if (examingSession == null || ExamingStatus.INFORMAL.equals(examingSession.getExamingStatus())) {
             log.warn("考试会话已过期!examRecordDataId = {}, studentId = {}", req.getExamRecordDataId(), req.getStudentId());
             return;
         }