فهرست منبع

update 虚拟设备审核

deason 1 سال پیش
والد
کامیت
c31232b654

+ 22 - 9
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/SyncExamDataCloudServiceProvider.java

@@ -170,12 +170,16 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
         boolean isFaceVerify = FaceBiopsyHelper.isFaceVerify(rootOrgId, examId, studentId);
 
         // 是否考中活体不通过强制退出
-        ExamPropertyCacheBean examProperty2 = CacheHelper.getExamProperty(examId, ExamProperties.FACE_VERIFY_FORCE_EXIT.name());
-        boolean isFaceVerifyForceExit = examProperty2 != null && StringUtil.isTrue(examProperty2.getValue());
+        ExamPropertyCacheBean faceVerifyForceExitProperty = CacheHelper.getExamProperty(examId, ExamProperties.FACE_VERIFY_FORCE_EXIT.name());
+        boolean isFaceVerifyForceExit = faceVerifyForceExitProperty != null && StringUtil.isTrue(faceVerifyForceExitProperty.getValue());
+
+        // 是否开启虚拟摄像头进入待审核
+        ExamPropertyCacheBean virtualCameraAuditEnabledProperty = CacheHelper.getExamProperty(examId, ExamProperties.VIRTUAL_CAMERA_AUDIT_ENABLED.name());
+        boolean isVirtualCameraAuditEnabled = virtualCameraAuditEnabledProperty != null && StringUtil.isTrue(virtualCameraAuditEnabledProperty.getValue());
 
         // 是否开启审核全通过
-        ExamPropertyCacheBean examProperty = CacheHelper.getExamProperty(examId, ExamProperties.AUDIT_ALL_PASS.name());
-        boolean isAuditAllPass = examProperty != null && StringUtil.isTrue(examProperty.getValue());
+        ExamPropertyCacheBean auditAllPassProperty = CacheHelper.getExamProperty(examId, ExamProperties.AUDIT_ALL_PASS.name());
+        boolean isAuditAllPass = auditAllPassProperty != null && StringUtil.isTrue(auditAllPassProperty.getValue());
 
         // 检查当前考生是否跳过人脸识别
         boolean skipFace = false;
@@ -198,14 +202,14 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
         //同步作答记录
         syncExamRecordQuestions(req.getExamRecordQuestions(), realExamRecordDataId);
 
-        //同步考试分数
-        Long examScoreId = syncExamScore(tempExamRecordData, realExamRecordDataId);
+        //同步考试过程记录
+        syncExamProcessRecords(req.getExamProcessRecords(), realExamRecordDataId);
 
         //同步断点续考记录表
         syncExamContinuedRecords(req.getExamContinuedRecords(), realExamRecordDataId);
 
-        //同步考试过程记录
-        syncExamProcessRecords(req.getExamProcessRecords(), realExamRecordDataId);
+        //同步考试分数
+        Long examScoreId = syncExamScore(tempExamRecordData, realExamRecordDataId);
 
         //同步“开考人脸识别验证”结果
         syncExamSyncCapture(req.getExamSyncCapture(), realExamRecordDataId);
@@ -268,6 +272,15 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
                 //修改为已审状态
                 examRecordDataRepo.updateExamRecordIsAuditById(realExamRecordDataId, true);
                 LOG.warn("{}_{}_{} OTHER_抓拍照片数量为0...", studentId, tempExamRecordDataId, realExamRecordDataId);
+            } else {
+                if (isVirtualCameraAuditEnabled) {
+                    //存在虚拟摄像头,则进入待审
+                    boolean hasVirtualCamera = req.getExamCaptures().stream().anyMatch(e -> e.getHasVirtualCamera() != null && e.getHasVirtualCamera());
+                    if (hasVirtualCamera) {
+                        //修改为异常状态
+                        examRecordDataRepo.updateExamRecordIsWarnById(realExamRecordDataId, true);
+                    }
+                }
             }
 
             // 若开启考中人脸活体检测 且 活检失败
@@ -312,7 +325,7 @@ public class SyncExamDataCloudServiceProvider extends ControllerSupport implemen
         //刷新考生的缓存
         examStudentCache.refresh(examStudentId);
 
-        LOG.warn("syncExamData ok, tempExamRecordDataId:{} finalExamRecordDataId:{} studentId:{} cost:{}ms",
+        LOG.warn("syncExamData finish, tempExamRecordDataId:{} finalExamRecordDataId:{} studentId:{} cost:{}ms",
                 tempExamRecordDataId, realExamRecordDataId, studentId, System.currentTimeMillis() - startTime);
 
         return new SyncExamDataResp();