deason пре 2 година
родитељ
комит
aba55d0d58

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

@@ -164,9 +164,9 @@ public class ExamControlController extends ControllerSupport {
     @Deprecated
     @ApiOperation(value = "结束考试:交卷(待废弃)")
     @GetMapping("/endExam")
-    public void endExam(HttpServletRequest request) {
+    public void endExam(@RequestParam(required = false) Boolean force, HttpServletRequest request) {
         User user = getAccessUser();
-        examControlService.manualEndExam(user.getUserId(), getIp(request));
+        examControlService.manualEndExam(user.getUserId(), getIp(request), force);
     }
 
     /**

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

@@ -219,7 +219,7 @@ public class FaceBiopsyController extends ControllerSupport {
 
         //如果活检满足交卷条件,则系统自动交卷,自动交卷逻辑不应该影响活检保存结果,所以不能放一个事务中
         if (resp.getEndExam()) {
-            examControlService.handInExam(req.getExamRecordDataId(), HandInExamType.AUTO, null);
+            examControlService.handInExam(req.getExamRecordDataId(), HandInExamType.AUTO, null, true);
         }
         return resp;
     }

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

@@ -94,9 +94,9 @@ public class ExamProcessController extends ControllerSupport {
 
     @ApiOperation(value = "结束考试:交卷")
     @PostMapping("/endExam")
-    public void endExam(HttpServletRequest request) {
+    public void endExam(@RequestParam(required = false) Boolean force, HttpServletRequest request) {
         User user = getAccessUser();
-        examControlService.manualEndExam(user.getUserId(), getIp(request));
+        examControlService.manualEndExam(user.getUserId(), getIp(request), force);
     }
 
     @ApiOperation(value = "获取考试记录信息")

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

@@ -292,8 +292,7 @@ public class ExamRecordDataCloudServiceProvider extends ControllerSupport implem
     @PostMapping("/handInExam")
     @Override
     public HandInExamResp handInExam(@RequestBody HandInExamReq req) {
-        examControlService.handInExam(req.getExamRecordDataId(), req.getHandInExamType(), req.getIp());
-
+        examControlService.handInExam(req.getExamRecordDataId(), req.getHandInExamType(), req.getIp(), true);
         return new HandInExamResp();
     }
 

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

@@ -32,7 +32,7 @@ public interface ExamControlService {
     /**
      * 手动交卷
      */
-    void manualEndExam(Long studentId, String ip);
+    void manualEndExam(Long studentId, String ip, Boolean force);
 
     /**
      * 手动交卷(新)
@@ -47,7 +47,7 @@ public interface ExamControlService {
      * @param handInExamType   交卷类型
      * @param ip               请求ip,可以为空
      */
-    void handInExam(Long examRecordDataId, HandInExamType handInExamType, String ip);
+    void handInExam(Long examRecordDataId, HandInExamType handInExamType, String ip, Boolean force);
 
     /**
      * 断点续考:检查正在进行中的考试

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

@@ -776,22 +776,21 @@ public class ExamControlServiceImpl implements ExamControlService {
             throw new StatusException("400X01", CryptoConstant.REQUEST_PARAM_ERROR);
         }
 
-        this.manualEndExam(user.getUserId(), requestIP);
+        this.manualEndExam(user.getUserId(), requestIP, false);
     }
 
     @Override
-    public void manualEndExam(Long studentId, String ip) {
+    public void manualEndExam(Long studentId, String ip, Boolean force) {
         String sequenceLockKey = Constants.EXAM_CONTROL_LOCK_PREFIX + studentId;
         //系统在请求结束后会,自动释放锁,无需手动解锁
         SequenceLockHelper.getLock(sequenceLockKey);
 
-        long startTime = System.currentTimeMillis();
         ExamingSession examingSession = examingSessionService.getExamingSession(studentId);
         if (examingSession == null) {
             throw new StatusException("8010", "无效的会话,请离开考试");
         }
 
-        this.handInExam(examingSession.getExamRecordDataId(), HandInExamType.MANUAL, ip);
+        this.handInExam(examingSession.getExamRecordDataId(), HandInExamType.MANUAL, ip, force);
     }
 
     /**
@@ -802,7 +801,7 @@ public class ExamControlServiceImpl implements ExamControlService {
      */
     @Transactional
     @Override
-    public void handInExam(Long examRecordDataId, HandInExamType handInExamType, String ip) {
+    public void handInExam(Long examRecordDataId, HandInExamType handInExamType, String ip, Boolean force) {
         // 此锁是为了避免自动交卷服务与断点续考交卷或活检失败交卷,同一时刻交卷争抢资源导致死锁
         String sequenceLockKey = Constants.HAND_IN_EXAM_LOCK_PREFIX + examRecordDataId;
         // 系统在请求结束后会,自动释放锁,无需手动解锁
@@ -1855,7 +1854,7 @@ public class ExamControlServiceImpl implements ExamControlService {
      */
     private void delayHandInExamIfLocked(Long examRecordDataId) {
         try {
-            handInExam(examRecordDataId, HandInExamType.AUTO, null);
+            this.handInExam(examRecordDataId, HandInExamType.AUTO, null, true);
         } catch (SequenceLockException e) {
             // 如果发现自动服务正在交卷,则重试1500毫秒获取考试记录状态,判断是否已交卷
             int loopTimes = 0;

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

@@ -239,7 +239,7 @@ public class ExamFaceLivenessVerifyServiceImpl implements ExamFaceLivenessVerify
 
         //如果活体检失败,需要清除会话并自动交卷
         if (IsSuccess.strToEnum(result) == IsSuccess.FAILED) {
-            examControlService.handInExam(examRecordDataId, HandInExamType.AUTO, null);
+            examControlService.handInExam(examRecordDataId, HandInExamType.AUTO, null, true);
         }
     }