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