|
@@ -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();
|