lideyin 5 anni fa
parent
commit
881dc91417

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

@@ -3,7 +3,6 @@ package cn.com.qmth.examcloud.core.oe.student.service.impl;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.util.JsonUtil;
 import cn.com.qmth.examcloud.core.oe.common.base.Constants;
-import cn.com.qmth.examcloud.core.oe.common.helper.ExamCacheTransferHelper;
 import cn.com.qmth.examcloud.core.oe.common.base.utils.CommonUtil;
 import cn.com.qmth.examcloud.core.oe.common.entity.ExamRecordDataEntity;
 import cn.com.qmth.examcloud.core.oe.common.entity.FaceBiopsyEntity;
@@ -13,6 +12,7 @@ import cn.com.qmth.examcloud.core.oe.common.enums.ExamProperties;
 import cn.com.qmth.examcloud.core.oe.common.enums.FaceBiopsyAction;
 import cn.com.qmth.examcloud.core.oe.common.enums.FaceBiopsyType;
 import cn.com.qmth.examcloud.core.oe.common.enums.IsSuccess;
+import cn.com.qmth.examcloud.core.oe.common.helper.ExamCacheTransferHelper;
 import cn.com.qmth.examcloud.core.oe.common.helper.FaceBiopsyHelper;
 import cn.com.qmth.examcloud.core.oe.common.repository.ExamRecordDataRepo;
 import cn.com.qmth.examcloud.core.oe.common.repository.FaceBiopsyItemRepo;
@@ -151,7 +151,7 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
     @Transactional
     public SaveFaceBiopsyResultResp saveFaceBiopsyResult(SaveFaceBiopsyResultReq req, Long studentId) {
         //构建业务实体
-        SaveFaceBiopsyResultResp resp = buildSaveFaceBiopsyResultResp(req.getExamRecordDataId(), req.getVerifySteps());
+        SaveFaceBiopsyResultResp resp = buildSaveFaceBiopsyResultResp(req);
 
         //更新人脸活体检测结果至数据库
         updateFaceBiopsyResult(req.getExamRecordDataId(), req.getFaceBiopsyItemId(), req.getVerifySteps(),
@@ -261,12 +261,12 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
     /**
      * 构建保存人脸检测结果的业务实体
      *
-     * @param examRecordDataId
-     * @param verifySteps
+     * @param req
      * @return
      */
-    private SaveFaceBiopsyResultResp buildSaveFaceBiopsyResultResp(Long examRecordDataId,
-                                                                   List<FaceBiopsyStepInfo> verifySteps) {
+    private SaveFaceBiopsyResultResp buildSaveFaceBiopsyResultResp(SaveFaceBiopsyResultReq req) {
+        Long examRecordDataId = req.getExamRecordDataId();
+        List<FaceBiopsyStepInfo> verifySteps = req.getVerifySteps();
         //本次检测的最终结果是否成功(检测步骤中只要有一项检测失败,则认为检测失败)
         boolean finalIsSuccess = true;
         String errorMsg = null;
@@ -279,8 +279,6 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
         boolean isEndExam = false;
         //检测次数
         int verifyTimes = getVerifyTimes(examRecordDataId);
-        //是否在冻结时间内
-        boolean isInFreezeTime = calculateIsInFreezeTime(examRecordDataId);
 
         // 检测结果至少有一条检测结果不允许为空
         if (!verifySteps.stream().anyMatch(p -> null != p.getResult())) {
@@ -323,7 +321,6 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
                     Boolean existsSystemError = Boolean.valueOf(faceCompareResult.get("existsSystemError").toString());
                     //case1.1.有陌生人(即多人脸),不管是否比对成功,直接结束考试
                     if (isStranger) {
-
                         isEndExam = true;
                     }
                     //case1.2.无陌生人且检测失败且不是系统错误(即照片非本人),也直接结束考试
@@ -337,7 +334,13 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
                 case SERIOUS:
                     //如果此前步骤已判断为需要结束考试则不作任何处理
                     if (!isEndExam) {
-                        if (isInFreezeTime) {
+                        //本次检测步骤是否在冻结时间内生成
+                        FaceBiopsyItemEntity faceBiopsyItem = GlobalHelper.getEntity(faceBiopsyItemRepo,
+                                req.getFaceBiopsyItemId(), FaceBiopsyItemEntity.class);
+                        Boolean isCurStepInFreezeTime = faceBiopsyItem.getInFreezeTime();
+
+                        //如果本次活检步骤是在冻结时间内生成,则按冻结时间内的逻辑来处理
+                        if (null != isCurStepInFreezeTime && isCurStepInFreezeTime) {
                             //如果冻结时间内第2次检测失败,则需要结束考试
                             if (verifyTimes > 1 && !stepInfo.getResult()) {
                                 isEndExam = true;
@@ -357,7 +360,7 @@ public class FaceBiopsyServiceImpl implements FaceBiopsyService {
         SaveFaceBiopsyResultResp resp = new SaveFaceBiopsyResultResp();
         resp.setEndExam(isEndExam);
         resp.setNeedNextVerify(calculateNeedNextVerify(
-                isEndExam, isInFreezeTime, finalIsSuccess, verifyTimes, examRecordDataId));
+                isEndExam, calculateIsInFreezeTime(examRecordDataId), finalIsSuccess, verifyTimes, examRecordDataId));
         resp.setVerifyResult(finalIsSuccess);
         resp.setErrorMessage(errorMsg);
         return resp;