Browse Source

saveFaceCaptureResult

deason 3 years ago
parent
commit
3614d9874f

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

@@ -194,7 +194,7 @@ public class ExamProcessController extends ControllerSupport {
         return new UploadResult(file.getOriginalFilename(), result.getRelativePath(), result.getUrl());
     }
 
-    @ApiOperation(value = "保存人脸识别验证结果")
+    @ApiOperation(value = "保存人脸识别比对验证结果")
     @PostMapping("/saveFaceCompareResult")
     public void saveFaceCompareResult(@RequestBody FaceCompareResult req) {
         User user = getAccessUser();
@@ -202,4 +202,12 @@ public class ExamProcessController extends ControllerSupport {
         faceProcessService.saveFaceCompareResult(req);
     }
 
+    @ApiOperation(value = "保存人脸抓拍比对验证结果")
+    @PostMapping("/saveFaceCaptureResult")
+    public void saveFaceCaptureResult(@RequestBody FaceCaptureResult req) {
+        User user = getAccessUser();
+        req.setStudentId(user.getUserId());
+        faceProcessService.saveFaceCaptureResult(req);
+    }
+
 }

+ 134 - 0
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/bean/FaceCaptureResult.java

@@ -0,0 +1,134 @@
+package cn.com.qmth.examcloud.core.oe.student.bean;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 人脸抓拍比对验证结果
+ */
+public class FaceCaptureResult implements JsonSerializable {
+
+    private static final long serialVersionUID = 3567311334163339241L;
+
+    @ApiModelProperty(value = "学生ID", hidden = true)
+    private Long studentId;
+
+    @ApiModelProperty(value = "考试记录ID")
+    private Long examRecordDataId;
+
+    @ApiModelProperty(value = "人脸比对是否通过")
+    private Boolean pass;
+
+    @ApiModelProperty(value = "是否有陌生人")
+    private Boolean stranger;
+
+    @ApiModelProperty(value = "是否存在虚拟摄像头")
+    private Boolean hasVirtualCamera;
+
+    @ApiModelProperty(value = "图片地址")
+    private String fileUrl;
+
+    @ApiModelProperty(value = "人脸比对结果")
+    private String faceCompareResult;
+
+    @ApiModelProperty(value = "人脸活体结果")
+    private String facelivenessResult;
+
+    @ApiModelProperty(value = "摄像头信息")
+    private String cameraInfos;
+
+    @ApiModelProperty(value = "人脸比对处理耗时(毫秒)")
+    private Long processTime;
+
+    @ApiModelProperty(value = "附加信息")
+    private String extMsg;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public Long getExamRecordDataId() {
+        return examRecordDataId;
+    }
+
+    public void setExamRecordDataId(Long examRecordDataId) {
+        this.examRecordDataId = examRecordDataId;
+    }
+
+    public Boolean getPass() {
+        return pass;
+    }
+
+    public void setPass(Boolean pass) {
+        this.pass = pass;
+    }
+
+    public Boolean getStranger() {
+        return stranger;
+    }
+
+    public void setStranger(Boolean stranger) {
+        this.stranger = stranger;
+    }
+
+    public Boolean getHasVirtualCamera() {
+        return hasVirtualCamera;
+    }
+
+    public void setHasVirtualCamera(Boolean hasVirtualCamera) {
+        this.hasVirtualCamera = hasVirtualCamera;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public String getFaceCompareResult() {
+        return faceCompareResult;
+    }
+
+    public void setFaceCompareResult(String faceCompareResult) {
+        this.faceCompareResult = faceCompareResult;
+    }
+
+    public String getFacelivenessResult() {
+        return facelivenessResult;
+    }
+
+    public void setFacelivenessResult(String facelivenessResult) {
+        this.facelivenessResult = facelivenessResult;
+    }
+
+    public String getCameraInfos() {
+        return cameraInfos;
+    }
+
+    public void setCameraInfos(String cameraInfos) {
+        this.cameraInfos = cameraInfos;
+    }
+
+    public Long getProcessTime() {
+        return processTime;
+    }
+
+    public void setProcessTime(Long processTime) {
+        this.processTime = processTime;
+    }
+
+    public String getExtMsg() {
+        return extMsg;
+    }
+
+    public void setExtMsg(String extMsg) {
+        this.extMsg = extMsg;
+    }
+
+}

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

@@ -4,7 +4,7 @@ import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
- * 人脸识别验证结果
+ * 人脸识别比对验证结果
  */
 public class FaceCompareResult implements JsonSerializable {
 

+ 3 - 0
examcloud-core-oe-student-service/src/main/java/cn/com/qmth/examcloud/core/oe/student/service/FaceProcessService.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.examcloud.core.oe.student.service;
 
+import cn.com.qmth.examcloud.core.oe.student.bean.FaceCaptureResult;
 import cn.com.qmth.examcloud.core.oe.student.bean.FaceCompareResult;
 
 /**
@@ -9,4 +10,6 @@ public interface FaceProcessService {
 
     void saveFaceCompareResult(FaceCompareResult req);
 
+    void saveFaceCaptureResult(FaceCaptureResult req);
+
 }

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

@@ -3,10 +3,14 @@ package cn.com.qmth.examcloud.core.oe.student.service.impl;
 import cn.com.qmth.examcloud.commons.util.FileUtil;
 import cn.com.qmth.examcloud.core.oe.student.base.bean.CompareFaceSyncInfo;
 import cn.com.qmth.examcloud.core.oe.student.base.utils.Check;
+import cn.com.qmth.examcloud.core.oe.student.bean.FaceCaptureResult;
 import cn.com.qmth.examcloud.core.oe.student.bean.FaceCompareResult;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureEntity;
 import cn.com.qmth.examcloud.core.oe.student.service.FaceProcessService;
 import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +24,9 @@ public class FaceProcessServiceImpl implements FaceProcessService {
 
     private static final Logger log = LoggerFactory.getLogger(FaceProcessServiceImpl.class);
 
+    @Autowired
+    private ExamCaptureRepo examCaptureRepo;
+
     @Autowired
     private RedisClient redisClient;
 
@@ -30,15 +37,45 @@ public class FaceProcessServiceImpl implements FaceProcessService {
         Check.isBlank(req.getFileUrl(), "图片地址不能为空");
 
         CompareFaceSyncInfo info = new CompareFaceSyncInfo();
+        info.setStudentId(req.getStudentId());
         info.setIsPass(req.getPass());
         info.setIsStranger(req.getStranger());
-        info.setStudentId(req.getStudentId());
-        info.setProcessTime(req.getProcessTime() != null ? req.getProcessTime() : 1L);
         info.setFileName(FileUtil.getFileName(req.getFileUrl()));
         info.setFileUrl(req.getFileUrl());
         info.setFaceCompareResult(req.getFaceCompareResult());
+        info.setProcessTime(req.getProcessTime() != null ? req.getProcessTime() : 1L);
 
         redisClient.set(Constants.FACE_SYNC_COMPARE_RESULT_PREFIX + req.getStudentId(), info, 5 * 60);
     }
 
+    @Override
+    public void saveFaceCaptureResult(FaceCaptureResult req) {
+        Check.isNull(req.getStudentId(), "学生ID不能为空");
+        Check.isNull(req.getExamRecordDataId(), "考试记录ID不能为空");
+        Check.isNull(req.getPass(), "人脸比对是否通过不能为空");
+        Check.isBlank(req.getFileUrl(), "图片地址不能为空");
+
+        ExamCaptureEntity entity = new ExamCaptureEntity();
+        entity.setExamRecordDataId(req.getExamRecordDataId());
+        entity.setIsPass(req.getPass());
+        entity.setIsStranger(req.getStranger());
+        entity.setHasVirtualCamera(req.getHasVirtualCamera());
+        entity.setFileName(FileUtil.getFileName(req.getFileUrl()));
+        entity.setFileUrl(req.getFileUrl());
+        entity.setFaceCompareResult(req.getFaceCompareResult());
+        entity.setFacelivenessResult(req.getFacelivenessResult());
+        entity.setProcessTime(req.getProcessTime() != null ? req.getProcessTime() : 1L);
+        entity.setUsedTime(req.getProcessTime() != null ? req.getProcessTime() : 1L);
+        entity.setExtMsg(req.getExtMsg());
+
+        if (StringUtils.length(req.getCameraInfos()) >= Constants.VM_CAMERA_SIZE_LIMIT) {
+            entity.setCameraInfos(Constants.VM_CAMERA_WARN);
+            log.warn("虚拟摄像头信息超长! " + req.getExamRecordDataId());
+        } else {
+            entity.setCameraInfos(req.getCameraInfos());
+        }
+
+        examCaptureRepo.save(entity);
+    }
+
 }