Browse Source

merge from release_v4.1.1

deason 3 năm trước cách đây
mục cha
commit
001186b3bf
26 tập tin đã thay đổi với 98 bổ sung1142 xóa
  1. 2 3
      examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/controller/ExamCaptureController.java
  2. 1 1
      examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/provider/ExamCaptureCloudServiceProvider.java
  3. 0 116
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamCaptureQueueRepo.java
  4. 0 33
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamCaptureRepo.java
  5. 0 19
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamSyncCaptureRepo.java
  6. 0 223
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamCaptureEntity.java
  7. 0 271
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamCaptureQueueEntity.java
  8. 0 223
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamSyncCaptureEntity.java
  9. 0 45
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/enums/ExamCaptureQueueStatus.java
  10. 1 0
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ignore
  11. 1 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamCaptureQueueService.java
  12. 2 2
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamCaptureService.java
  13. 0 130
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/CompareFaceSyncInfo.java
  14. 1 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/ExamCaptureQueueInfo.java
  15. 10 8
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamCaptureQueueServiceImpl.java
  16. 10 10
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamCaptureServiceImpl.java
  17. 1 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamRecordDataServiceImpl.java
  18. 3 4
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamSyncCaptureServiceImpl.java
  19. 37 27
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/SyncExamDataExecutor.java
  20. 1 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/worker/BaiduFaceLivenessWorker.java
  21. 1 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/worker/FacePPCompareWorker.java
  22. 4 4
      examcloud-core-oe-task-starter/shell/start.sh
  23. 2 1
      examcloud-core-oe-task-starter/shell/stop.sh
  24. 2 2
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessBaiduFacelivenessTask.java
  25. 2 2
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessFaceCompareQueueTask.java
  26. 17 13
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/SwaggerConfig.java

+ 2 - 3
examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/controller/ExamCaptureController.java

@@ -3,13 +3,13 @@ package cn.com.qmth.examcloud.core.oe.task.controller;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.util.UrlUtil;
+import cn.com.qmth.examcloud.core.oe.student.base.bean.CompareFaceSyncInfo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureEntity;
 import cn.com.qmth.examcloud.core.oe.task.controller.bean.GetExamCaptureResultDomain;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureEntity;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureQueueService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamingSessionService;
-import cn.com.qmth.examcloud.core.oe.task.service.bean.CompareFaceSyncInfo;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.SaveExamCaptureQueueInfo;
 import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
@@ -29,7 +29,6 @@ import org.json.JSONException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-
 /**
  * @author chenken
  * @date 2018年9月6日 上午10:14:23

+ 1 - 1
examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/provider/ExamCaptureCloudServiceProvider.java

@@ -6,7 +6,7 @@ import cn.com.qmth.examcloud.core.oe.task.api.request.ExistUnhandledCaptureQueue
 import cn.com.qmth.examcloud.core.oe.task.api.request.SaveExamCaptureSyncCompareResultReq;
 import cn.com.qmth.examcloud.core.oe.task.api.request.UpdateExamCaptureQueuePriorityReq;
 import cn.com.qmth.examcloud.core.oe.task.api.response.ExistUnhandledCaptureQueueResp;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureQueueRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureQueueRepo;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamSyncCaptureService;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.ApiOperation;

+ 0 - 116
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamCaptureQueueRepo.java

@@ -1,116 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao;
-
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureQueueEntity;
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.stereotype.Repository;
-
-import javax.transaction.Transactional;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @Description 抓拍照片队列
- * @Author lideyin
- * @Date 2019/12/10 14:04
- * @Version 1.0
- */
-@Repository
-public interface ExamCaptureQueueRepo extends JpaRepository<ExamCaptureQueueEntity, Long>, JpaSpecificationExecutor<ExamCaptureQueueEntity> {
-
-    /**
-     * @param limit           一次取值数量
-     * @param processBatchNum 批次号
-     * @return List<ExamCaptureQueueEntity>
-     * @description 根据处理批次号查询没有处理过的数据或者是处理失败的数据,按优先级倒序,创建时间升序
-     * @author lideyin
-     * @date 2019/7/31 16:40
-     */
-    @Query(value = "select * from ec_oet_exam_capture_queue "
-            + " where status IN ('PENDING','PROCESS_FACE_COMPARE_FAILED')  " +
-            " and (process_batch_num is null or (process_batch_num is not null and process_batch_num!=?2))"
-            + " order by priority desc,id asc limit ?1", nativeQuery = true)
-    List<ExamCaptureQueueEntity> findNeedFaceCompareExamCaptureQueuesLimitByProcessBatchNum(Integer limit, String processBatchNum);
-
-    /**
-     * 查询人脸比对处理完成,需要百度活体检测的数据,按优先级倒序,创建时间升序
-     *
-     * @param limit           数量
-     * @param processBatchNum 批次号
-     * @return List<ExamCaptureQueueEntity>
-     */
-    @Query(value = "select * from ec_oet_exam_capture_queue "
-            + " where status IN ('PROCESS_FACE_COMPARE_COMPLETE','PROCESS_FACELIVENESS_FAILED') and process_batch_num!=?2  "
-            + " order by priority desc,id asc limit ?1", nativeQuery = true)
-    List<ExamCaptureQueueEntity> findNeedFacelivenessDetectExamCaptureQueuesLimit(Integer limit, String processBatchNum);
-
-    List<ExamCaptureQueueEntity> findByStatusOrderByCreationTimeAsc(ExamCaptureQueueStatus status);
-
-    List<ExamCaptureQueueEntity> findByExamRecordDataId(Long examRecordDataId);
-
-    /**
-     * 是否存在未处理的图片抓拍队列(处理完成的队列数据都会清理掉)
-     *
-     * @param examRecordDataId
-     * @return
-     */
-    @Query(value = "select * from ec_oet_exam_capture_queue where exam_record_data_id=?1 limit 1", nativeQuery = true)
-    ExamCaptureQueueEntity existsUnhandledByExamRecordDataId(Long examRecordDataId);
-
-    /**
-     * 修改数据状态为处理中
-     *
-     * @param id 主键ID
-     */
-    @Transactional
-    @Modifying
-    @Query(value = "update ec_oet_exam_capture_queue set status = 'PROCESSING' where id = ?1", nativeQuery = true)
-    void updateExamCaptureQueueStatusWithProcessing(Long id);
-
-
-    /**
-     * @param priority         优先级(值越大,优先级越高)
-     * @param examRecordDataId 考试记录id
-     * @description 更新考试抓拍队列优先级
-     * @date 2019/7/31 16:46
-     * @author lideyin
-     */
-    @Transactional
-    @Modifying
-    @Query(value = "update ec_oet_exam_capture_queue set priority=?1 where exam_record_data_id=?2", nativeQuery = true)
-    void updateExamCaptureQueuePriority(int priority, Long examRecordDataId);
-
-    /**
-     * @param captureQueueId
-     * @param errorMsg
-     * @param status
-     * @param batchNumber
-     * @param updateDate
-     */
-    @Transactional
-    @Modifying
-    @Query(value = "update ec_oet_exam_capture_queue set error_msg=?2,`status`=?3,process_batch_num=?4,error_num=error_num+1,update_time=?5 where id=?1", nativeQuery = true)
-    void saveExamCaptureQueueEntityByFailed(Long captureQueueId, String errorMsg, String status, String batchNumber,
-                                            Date updateDate);
-
-    @Transactional
-    @Modifying
-    @Query(value = "update ec_oet_exam_capture_queue set is_pass=?2,is_stranger=?3,`status`=?4,face_compare_result=?5,face_compare_start_time=?6,update_time=?7 where id=?1", nativeQuery = true)
-    void saveExamCaptureQueueEntityBySuccessful(Long captureQueueId, Boolean isPass, Boolean isStranger, String status,
-                                                String faceCompareResult, Long faceCompareStartTime, Date updateDate);
-
-    /**
-     * 更新批次号
-     *
-     * @param captureQueueId 队列id
-     * @param batchNum       批次号
-     */
-    @Transactional
-    @Modifying
-    @Query(value = "update ec_oet_exam_capture_queue set process_batch_num=?2 where id=?1", nativeQuery = true)
-    void updateProcessBatchNum(Long captureQueueId, String batchNum);
-
-}

+ 0 - 33
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamCaptureRepo.java

@@ -1,33 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao;
-
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
- * @Description 照片处理结果
- * @Author lideyin
- * @Date 2019/12/10 14:04
- * @Version 1.0
- */
-@Repository
-public interface ExamCaptureRepo extends JpaRepository<ExamCaptureEntity, Long>, JpaSpecificationExecutor<ExamCaptureEntity> {
-
-    /**
-     * propagation = Propagation.REQUIRES_NEW
-     * 原因:A事务运行中,B事务插入数据,A事务会出现不能读取最新数据的问题
-     *
-     * @param examRecordDataId
-     * @return
-     */
-    @Transactional(propagation = Propagation.REQUIRES_NEW)
-    List<ExamCaptureEntity> findByExamRecordDataId(Long examRecordDataId);
-
-    ExamCaptureEntity findByExamRecordDataIdAndFileName(Long examRecordDataId, String fileName);
-
-}

+ 0 - 19
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamSyncCaptureRepo.java

@@ -1,19 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao;
-
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamSyncCaptureEntity;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.stereotype.Repository;
-
-/**
- * @Description 同步抓拍照片
- * @Author lideyin
- * @Date 2019/12/10 14:05
- * @Version 1.0
- */
-@Repository
-public interface ExamSyncCaptureRepo extends JpaRepository<ExamSyncCaptureEntity, Long>, JpaSpecificationExecutor<ExamSyncCaptureEntity> {
-
-    ExamSyncCaptureEntity findByExamRecordDataId(Long examRecordId);
-
-}

+ 0 - 223
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamCaptureEntity.java

@@ -1,223 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao.entity;
-
-import cn.com.qmth.examcloud.web.jpa.JpaEntity;
-import org.hibernate.annotations.DynamicInsert;
-
-import javax.persistence.*;
-
-/**
- * @Description 照片处理结果队列
- * @Author lideyin
- * @Date 2019/12/10 14:01
- * @Version 1.0
- */
-@Entity
-@Table(name = "ec_oet_exam_capture", indexes = {
-        @Index(name = "IDX_E_O_E_C_001", columnList = "examRecordDataId, fileName", unique = true),
-        @Index(name = "IDX_E_O_E_C_002", columnList = "examRecordDataId")
-})
-@DynamicInsert
-public class ExamCaptureEntity extends JpaEntity {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = -6162329876793785782L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    /**
-     * ec_oe_exam_record_data  ID
-     */
-    private Long examRecordDataId;
-
-    /**
-     * 文件URL
-     */
-    private String fileUrl;
-
-    private String fileName;
-
-    /**
-     * 比较是否通过
-     */
-    @Column(name = "is_pass")
-    private Boolean isPass;
-
-    /**
-     * 人脸比较返回信息
-     */
-    @Column(name = "face_compare_result", length = 2000)
-    private String faceCompareResult;
-
-    /**
-     * 是否有陌生人
-     * 就是摄像头拍到不止考生一人
-     */
-    @Column(name = "is_stranger")
-    private Boolean isStranger;
-
-    /**
-     * 百度人脸关键点坐标结果
-     */
-    @Column(name = "landmark", length = 4000)
-    private String landmark;
-
-    /**
-     * 百度在线活体检测结果
-     */
-    @Column(name = "faceliveness_result", length = 2000)
-    private String facelivenessResult;
-
-    /**
-     * 从进入队列到处理完成的时间
-     */
-    private Long usedTime;
-
-    /**
-     * 从开始处理到处理完成的时间
-     */
-    private Long processTime;
-
-
-    /**
-     * 是否存在虚拟摄像头
-     */
-    @Column(name = "has_virtual_camera")
-    private Boolean hasVirtualCamera;
-
-    /**
-     * 摄像头信息
-     */
-    @Column(name = "camera_infos", length = 800)
-    private String cameraInfos;
-
-    /**
-     * 其他信息
-     */
-    @Column(name = "ext_msg", length = 800)
-    private String extMsg;
-
-    public ExamCaptureEntity() {
-    }
-
-    public ExamCaptureEntity(ExamCaptureQueueEntity examCaptureQueueEntity) {
-        this.examRecordDataId = examCaptureQueueEntity.getExamRecordDataId();
-        this.fileUrl = examCaptureQueueEntity.getFileUrl();
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getExamRecordDataId() {
-        return examRecordDataId;
-    }
-
-    public void setExamRecordDataId(Long examRecordDataId) {
-        this.examRecordDataId = examRecordDataId;
-    }
-
-    public String getFileUrl() {
-        return fileUrl;
-    }
-
-    public void setFileUrl(String fileUrl) {
-        this.fileUrl = fileUrl;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    public String getFaceCompareResult() {
-        return faceCompareResult;
-    }
-
-    public void setFaceCompareResult(String faceCompareResult) {
-        this.faceCompareResult = faceCompareResult;
-    }
-
-    public Boolean getIsPass() {
-        return isPass;
-    }
-
-    public void setIsPass(Boolean isPass) {
-        this.isPass = isPass;
-    }
-
-    public Boolean getIsStranger() {
-        return isStranger;
-    }
-
-    public void setIsStranger(Boolean isStranger) {
-        this.isStranger = isStranger;
-    }
-
-    public String getLandmark() {
-        return landmark;
-    }
-
-    public void setLandmark(String landmark) {
-        this.landmark = landmark;
-    }
-
-    public Long getUsedTime() {
-        return usedTime;
-    }
-
-    public void setUsedTime(Long usedTime) {
-        this.usedTime = usedTime;
-    }
-
-    public String getFacelivenessResult() {
-        return facelivenessResult;
-    }
-
-    public void setFacelivenessResult(String facelivenessResult) {
-        this.facelivenessResult = facelivenessResult;
-    }
-
-    public Long getProcessTime() {
-        return processTime;
-    }
-
-    public void setProcessTime(Long processTime) {
-        this.processTime = processTime;
-    }
-
-    public Boolean getHasVirtualCamera() {
-        return hasVirtualCamera;
-    }
-
-    public void setHasVirtualCamera(Boolean hasVirtualCamera) {
-        this.hasVirtualCamera = hasVirtualCamera;
-    }
-
-    public String getCameraInfos() {
-        return cameraInfos;
-    }
-
-    public void setCameraInfos(String cameraInfos) {
-        this.cameraInfos = cameraInfos;
-    }
-
-    public String getExtMsg() {
-        return extMsg;
-    }
-
-    public void setExtMsg(String extMsg) {
-        this.extMsg = extMsg;
-    }
-
-}

+ 0 - 271
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamCaptureQueueEntity.java

@@ -1,271 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao.entity;
-
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
-import cn.com.qmth.examcloud.web.jpa.WithIdJpaEntity;
-
-import javax.persistence.*;
-
-/**
- * @Description 照片抓拍队列
- * @Author lideyin
- * @Date 2019/12/10 14:00
- * @Version 1.0
- */
-@Entity
-@Table(name = "ec_oet_exam_capture_queue", indexes = {
-        @Index(name = "IDX_E_O_E_C_Q_001", columnList = "examRecordDataId,fileName", unique = true),
-        @Index(name = "IDX_E_O_E_C_Q_002", columnList = "status,errorNum")
-})
-public class ExamCaptureQueueEntity extends WithIdJpaEntity {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 4094671807731989565L;
-
-    private Long studentId;
-
-    /**
-     * ec_oe_exam_record_data  ID
-     */
-    private Long examRecordDataId;
-
-
-    /**
-     * 底照Token
-     */
-    private String baseFaceToken;
-
-    /**
-     * 文件URL
-     */
-    private String fileUrl;
-
-    /**
-     * 文件名称
-     */
-    private String fileName;
-
-    /**
-     * 状态
-     */
-    @Enumerated(EnumType.STRING)
-    private ExamCaptureQueueStatus status;
-
-    /**
-     * 错误信息
-     */
-    private String errorMsg;
-
-    /**
-     * 错误次数
-     */
-    private Integer errorNum;
-
-    /**
-     * 是否存在虚拟摄像头
-     */
-    @Column(name = "has_virtual_camera")
-    private Boolean hasVirtualCamera;
-
-    /**
-     * 摄像头信息  json字符串数组
-     */
-    @Column(name = "camera_infos", length = 800)
-    private String cameraInfos;
-
-    /**
-     * 其他信息
-     * Json格式
-     * {
-     * "":""
-     * }
-     */
-    @Column(name = "ext_msg", length = 800)
-    private String extMsg;
-
-    /**
-     * 队列处理批次号(用户判断某一条数据处理状态)
-     */
-    private String processBatchNum;
-
-    /**
-     * 队列处理的优先级,默认值为0
-     */
-    private int priority = 0;
-
-    /**
-     * 是否有陌生人
-     * 就是摄像头拍到不止考生一人
-     */
-    @Column(name = "is_stranger")
-    private Boolean isStranger;
-
-    /**
-     * 比较是否通过
-     */
-    @Column(name = "is_pass")
-    private Boolean isPass;
-
-    /**
-     * 人脸比较返回信息
-     */
-    @Column(name = "face_compare_result", length = 2000)
-    private String faceCompareResult;
-
-    /**
-     * 人脸比对开始时间
-     */
-    private Long faceCompareStartTime;
-
-    /**
-     * 百度在线活体检测结果
-     */
-    @Column(name = "faceliveness_result", length = 2000)
-    private String facelivenessResult;
-
-    public Long getExamRecordDataId() {
-        return examRecordDataId;
-    }
-
-    public void setExamRecordDataId(Long examRecordDataId) {
-        this.examRecordDataId = examRecordDataId;
-    }
-
-    public String getFileUrl() {
-        return fileUrl;
-    }
-
-    public void setFileUrl(String fileUrl) {
-        this.fileUrl = fileUrl;
-    }
-
-    public ExamCaptureQueueStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(ExamCaptureQueueStatus status) {
-        this.status = status;
-    }
-
-    public String getErrorMsg() {
-        return errorMsg;
-    }
-
-    public void setErrorMsg(String errorMsg) {
-        this.errorMsg = errorMsg;
-    }
-
-    public String getBaseFaceToken() {
-        return baseFaceToken;
-    }
-
-    public void setBaseFaceToken(String baseFaceToken) {
-        this.baseFaceToken = baseFaceToken;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    public Integer getErrorNum() {
-        return errorNum;
-    }
-
-    public void setErrorNum(Integer errorNum) {
-        this.errorNum = errorNum;
-    }
-
-    public Long getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Long studentId) {
-        this.studentId = studentId;
-    }
-
-    public Boolean getHasVirtualCamera() {
-        return hasVirtualCamera;
-    }
-
-    public void setHasVirtualCamera(Boolean hasVirtualCamera) {
-        this.hasVirtualCamera = hasVirtualCamera;
-    }
-
-    public String getCameraInfos() {
-        return cameraInfos;
-    }
-
-    public void setCameraInfos(String cameraInfos) {
-        this.cameraInfos = cameraInfos;
-    }
-
-    public String getExtMsg() {
-        return extMsg;
-    }
-
-    public void setExtMsg(String extMsg) {
-        this.extMsg = extMsg;
-    }
-
-    public String getProcessBatchNum() {
-        return processBatchNum;
-    }
-
-    public void setProcessBatchNum(String processBatchNum) {
-        this.processBatchNum = processBatchNum;
-    }
-
-    public int getPriority() {
-        return priority;
-    }
-
-    public void setPriority(int priority) {
-        this.priority = priority;
-    }
-
-    public Boolean getIsStranger() {
-        return isStranger;
-    }
-
-    public void setIsStranger(Boolean stranger) {
-        isStranger = stranger;
-    }
-
-    public Boolean getIsPass() {
-        return isPass;
-    }
-
-    public void setIsPass(Boolean pass) {
-        isPass = pass;
-    }
-
-    public String getFaceCompareResult() {
-        return faceCompareResult;
-    }
-
-    public void setFaceCompareResult(String faceCompareResult) {
-        this.faceCompareResult = faceCompareResult;
-    }
-
-    public Long getFaceCompareStartTime() {
-        return faceCompareStartTime;
-    }
-
-    public void setFaceCompareStartTime(Long faceCompareStartTime) {
-        this.faceCompareStartTime = faceCompareStartTime;
-    }
-
-    public String getFacelivenessResult() {
-        return facelivenessResult;
-    }
-
-    public void setFacelivenessResult(String facelivenessResult) {
-        this.facelivenessResult = facelivenessResult;
-    }
-
-}

+ 0 - 223
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamSyncCaptureEntity.java

@@ -1,223 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao.entity;
-
-import cn.com.qmth.examcloud.web.jpa.JpaEntity;
-import org.hibernate.annotations.DynamicInsert;
-
-import javax.persistence.*;
-
-/**
- * @Description 网考同步抓拍表
- * @Author lideyin
- * @Date 2019/12/6 16:07
- * @Version 1.0
- */
-@Entity
-@Table(name = "ec_oet_exam_sync_capture", indexes = {
-        @Index(name = "IDX_E_O_E_C_001", columnList = "examRecordDataId, fileName", unique = true),
-        @Index(name = "IDX_E_O_E_C_002", columnList = "examRecordDataId")
-})
-@DynamicInsert
-public class ExamSyncCaptureEntity extends JpaEntity {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = -6162329876793785782L;
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-
-    /**
-     * ec_oe_exam_record_data  ID
-     */
-    private Long examRecordDataId;
-
-    /**
-     * 文件URL
-     */
-    private String fileUrl;
-
-    private String fileName;
-
-    /**
-     * 比较是否通过
-     */
-    @Column(name = "is_pass")
-    private Boolean isPass;
-
-    /**
-     * 人脸比较返回信息
-     */
-    @Column(name = "face_compare_result", length = 2000)
-    private String faceCompareResult;
-
-    /**
-     * 是否有陌生人
-     * 就是摄像头拍到不止考生一人
-     */
-    @Column(name = "is_stranger")
-    private Boolean isStranger;
-
-    /**
-     * 百度人脸关键点坐标结果
-     */
-    @Column(name = "landmark", length = 4000)
-    private String landmark;
-
-    /**
-     * 百度在线活体检测结果
-     */
-    @Column(name = "faceliveness_result", length = 2000)
-    private String facelivenessResult;
-
-    /**
-     * 从进入队列到处理完成的时间
-     */
-    private Long usedTime;
-
-    /**
-     * 从开始处理到处理完成的时间
-     */
-    private Long processTime;
-
-
-    /**
-     * 是否存在虚拟摄像头
-     */
-    @Column(name = "has_virtual_camera")
-    private Boolean hasVirtualCamera;
-
-    /**
-     * 摄像头信息
-     */
-    @Column(name = "camera_infos", length = 800)
-    private String cameraInfos;
-
-    /**
-     * 其他信息
-     */
-    @Column(name = "ext_msg", length = 800)
-    private String extMsg;
-
-    public ExamSyncCaptureEntity() {
-    }
-
-    public ExamSyncCaptureEntity(ExamCaptureQueueEntity examCaptureQueueEntity) {
-        this.examRecordDataId = examCaptureQueueEntity.getExamRecordDataId();
-        this.fileUrl = examCaptureQueueEntity.getFileUrl();
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getExamRecordDataId() {
-        return examRecordDataId;
-    }
-
-    public void setExamRecordDataId(Long examRecordDataId) {
-        this.examRecordDataId = examRecordDataId;
-    }
-
-    public String getFileUrl() {
-        return fileUrl;
-    }
-
-    public void setFileUrl(String fileUrl) {
-        this.fileUrl = fileUrl;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    public String getFaceCompareResult() {
-        return faceCompareResult;
-    }
-
-    public void setFaceCompareResult(String faceCompareResult) {
-        this.faceCompareResult = faceCompareResult;
-    }
-
-    public Boolean getIsPass() {
-        return isPass;
-    }
-
-    public void setIsPass(Boolean isPass) {
-        this.isPass = isPass;
-    }
-
-    public Boolean getIsStranger() {
-        return isStranger;
-    }
-
-    public void setIsStranger(Boolean isStranger) {
-        this.isStranger = isStranger;
-    }
-
-    public String getLandmark() {
-        return landmark;
-    }
-
-    public void setLandmark(String landmark) {
-        this.landmark = landmark;
-    }
-
-    public Long getUsedTime() {
-        return usedTime;
-    }
-
-    public void setUsedTime(Long usedTime) {
-        this.usedTime = usedTime;
-    }
-
-    public String getFacelivenessResult() {
-        return facelivenessResult;
-    }
-
-    public void setFacelivenessResult(String facelivenessResult) {
-        this.facelivenessResult = facelivenessResult;
-    }
-
-    public Long getProcessTime() {
-        return processTime;
-    }
-
-    public void setProcessTime(Long processTime) {
-        this.processTime = processTime;
-    }
-
-    public Boolean getHasVirtualCamera() {
-        return hasVirtualCamera;
-    }
-
-    public void setHasVirtualCamera(Boolean hasVirtualCamera) {
-        this.hasVirtualCamera = hasVirtualCamera;
-    }
-
-    public String getCameraInfos() {
-        return cameraInfos;
-    }
-
-    public void setCameraInfos(String cameraInfos) {
-        this.cameraInfos = cameraInfos;
-    }
-
-    public String getExtMsg() {
-        return extMsg;
-    }
-
-    public void setExtMsg(String extMsg) {
-        this.extMsg = extMsg;
-    }
-
-}

+ 0 - 45
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/enums/ExamCaptureQueueStatus.java

@@ -1,45 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.dao.enums;
-
-/**
- * @Description 抓拍照片处理状态
- * @Author lideyin
- * @Date 2019/12/10 13:59
- * @Version 1.0
- */
-public enum ExamCaptureQueueStatus {
-
-    /**
-     * 待处理
-     */
-    PENDING("待处理"),
-    /**
-     * 处理中
-     */
-    PROCESSING("处理中"),
-    /**
-     * 人脸比对处理完成
-     */
-    PROCESS_FACE_COMPARE_COMPLETE("人脸比对处理完成"),
-    /**
-     * 人脸比对处理失败
-     */
-    PROCESS_FACE_COMPARE_FAILED("人脸比对处理失败"),
-    /**
-     * 活体检测处理失败
-     */
-    PROCESS_FACELIVENESS_FAILED("活体检测处理失败");
-
-    private String desc;
-
-    private ExamCaptureQueueStatus(String desc) {
-        this.desc = desc;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-
-    public void setDesc(String desc) {
-        this.desc = desc;
-    }
-}

+ 1 - 0
examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ignore

@@ -0,0 +1 @@
+ignore...

+ 1 - 1
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamCaptureQueueService.java

@@ -1,6 +1,6 @@
 package cn.com.qmth.examcloud.core.oe.task.service;
 
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
+import cn.com.qmth.examcloud.core.oe.student.dao.enums.ExamCaptureQueueStatus;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.SaveExamCaptureQueueInfo;
 
 /**

+ 2 - 2
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamCaptureService.java

@@ -1,8 +1,8 @@
 package cn.com.qmth.examcloud.core.oe.task.service;
 
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureEntity;
+import cn.com.qmth.examcloud.core.oe.student.base.bean.CompareFaceSyncInfo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureEntity;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.CalculateFaceCheckResultInfo;
-import cn.com.qmth.examcloud.core.oe.task.service.bean.CompareFaceSyncInfo;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.ExamCaptureQueueInfo;
 import org.json.JSONException;
 import org.springframework.transaction.annotation.Transactional;

+ 0 - 130
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/CompareFaceSyncInfo.java

@@ -1,130 +0,0 @@
-package cn.com.qmth.examcloud.core.oe.task.service.bean;
-
-import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
-
-public class CompareFaceSyncInfo implements JsonSerializable {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 802462624028077528L;
-
-
-    /**
-     * 人脸比对是否通过
-     */
-    private Boolean isPass;
-
-    /**
-     * 学生ID
-     */
-    private Long studentId;
-
-    /**
-     * 是否有陌生人
-     */
-    private Boolean isStranger;
-
-    /**
-     * 是否存在系统错误
-     */
-    private boolean existsSystemError;
-
-    /**
-     * 错误信息
-     */
-    private String errorMsg;
-
-    /**
-     * 文件名称(无需返回给前台)
-     */
-    private transient String fileName;
-
-    /**
-     * 文件路径(无需返回给前台)
-     */
-    private transient String fileUrl;
-
-    /**
-     * 人脸比对结果(无需返回给前台)
-     */
-    private transient String faceCompareResult;
-
-    /**
-     * 人脸比对的处理时间(无需返回给前台)
-     */
-    private transient Long processTime;
-
-    public Boolean getIsPass() {
-        return isPass;
-    }
-
-    public void setIsPass(Boolean isPass) {
-        this.isPass = isPass;
-    }
-
-    public Long getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Long studentId) {
-        this.studentId = studentId;
-    }
-
-    public String getErrorMsg() {
-        return errorMsg;
-    }
-
-    public void setErrorMsg(String errorMsg) {
-        this.errorMsg = errorMsg;
-    }
-
-    public Boolean getIsStranger() {
-        return isStranger;
-    }
-
-    public void setIsStranger(Boolean isStranger) {
-        this.isStranger = isStranger;
-    }
-
-    public Boolean getExistsSystemError() {
-        return existsSystemError;
-    }
-
-    public void setExistsSystemError(boolean existsSystemError) {
-        this.existsSystemError = existsSystemError;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    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 Long getProcessTime() {
-        return processTime;
-    }
-
-    public void setProcessTime(Long processTime) {
-        this.processTime = processTime;
-    }
-
-}

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

@@ -1,7 +1,7 @@
 package cn.com.qmth.examcloud.core.oe.task.service.bean;
 
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
+import cn.com.qmth.examcloud.core.oe.student.dao.enums.ExamCaptureQueueStatus;
 
 import java.util.Date;
 

+ 10 - 8
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamCaptureQueueServiceImpl.java

@@ -3,11 +3,12 @@ package cn.com.qmth.examcloud.core.oe.task.service.impl;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.util.StringUtil;
 import cn.com.qmth.examcloud.commons.util.UrlUtil;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureQueueRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureQueueEntity;
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureQueueRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureQueueEntity;
+import cn.com.qmth.examcloud.core.oe.student.dao.enums.ExamCaptureQueueStatus;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureQueueService;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.SaveExamCaptureQueueInfo;
+import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.bean.StudentCacheBean;
 import org.apache.commons.lang3.StringUtils;
@@ -69,12 +70,13 @@ public class ExamCaptureQueueServiceImpl implements ExamCaptureQueueService {
         examCaptureQueue.setExamRecordDataId(saveExamCaptureQueueInfo.getExamRecordDataId());
         examCaptureQueue.setHasVirtualCamera(saveExamCaptureQueueInfo.getHasVirtualCamera());
 
-        String cameraInfos = saveExamCaptureQueueInfo.getCameraInfos();
-        if (StringUtils.isNotBlank(cameraInfos) && cameraInfos.length() >= 800) {
-            cameraInfos = "[{\"name\":\"虚拟摄像头信息超长!\",\"pid\":\"\",\"vid\":\"\"}]";
-            log.error("虚拟摄像头信息超长!");
+        if (StringUtils.length(saveExamCaptureQueueInfo.getCameraInfos()) >= Constants.VM_CAMERA_SIZE_LIMIT) {
+            examCaptureQueue.setCameraInfos(Constants.VM_CAMERA_WARN);
+            log.warn("虚拟摄像头信息超长! " + saveExamCaptureQueueInfo.getExamRecordDataId());
+        } else {
+            examCaptureQueue.setCameraInfos(saveExamCaptureQueueInfo.getCameraInfos());
         }
-        examCaptureQueue.setCameraInfos(cameraInfos);
+
         examCaptureQueue.setExtMsg(saveExamCaptureQueueInfo.getExtMsg());
         examCaptureQueue.setStatus(ExamCaptureQueueStatus.PENDING);
         examCaptureQueue.setErrorNum(0);

+ 10 - 10
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamCaptureServiceImpl.java

@@ -2,16 +2,16 @@ package cn.com.qmth.examcloud.core.oe.task.service.impl;
 
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.helpers.JsonHttpResponseHolder;
+import cn.com.qmth.examcloud.core.oe.student.base.bean.CompareFaceSyncInfo;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureQueueRepo;
+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.dao.enums.ExamCaptureQueueStatus;
 import cn.com.qmth.examcloud.core.oe.task.base.ExamCaptureProcessStatisticController;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureQueueRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureEntity;
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureQueueService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.CalculateFaceCheckResultInfo;
-import cn.com.qmth.examcloud.core.oe.task.service.bean.CompareFaceSyncInfo;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.ExamCaptureQueueInfo;
 import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
@@ -603,13 +603,13 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
 
         ExamCaptureEntity resultEntity = new ExamCaptureEntity();
 
-        String cameraInfos = queue.getCameraInfos();
-        if (StringUtils.isNotBlank(cameraInfos) && cameraInfos.length() >= 800) {
-            cameraInfos = "[{\"name\":\"虚拟摄像头信息超长!\",\"pid\":\"\",\"vid\":\"\"}]";
-            log.error("虚拟摄像头信息超长!");
+        if (StringUtils.length(queue.getCameraInfos()) >= Constants.VM_CAMERA_SIZE_LIMIT) {
+            resultEntity.setCameraInfos(Constants.VM_CAMERA_WARN);
+            log.warn("虚拟摄像头信息超长! " + queue.getExamRecordDataId());
+        } else {
+            resultEntity.setCameraInfos(queue.getCameraInfos());
         }
 
-        resultEntity.setCameraInfos(cameraInfos);
         resultEntity.setExamRecordDataId(queue.getExamRecordDataId());
         resultEntity.setExtMsg(queue.getExtMsg());
         resultEntity.setFaceCompareResult(queue.getFaceCompareResult());

+ 1 - 1
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamRecordDataServiceImpl.java

@@ -6,7 +6,7 @@ import cn.com.qmth.examcloud.core.oe.student.api.request.CalcExamScoreReq;
 import cn.com.qmth.examcloud.core.oe.student.api.request.CalcFaceBiopsyResultReq;
 import cn.com.qmth.examcloud.core.oe.student.api.response.CalcExamScoreResp;
 import cn.com.qmth.examcloud.core.oe.student.api.response.CalcFaceBiopsyResultResp;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureQueueRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureQueueRepo;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.CalculateFaceCheckResultInfo;

+ 3 - 4
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamSyncCaptureServiceImpl.java

@@ -1,9 +1,9 @@
 package cn.com.qmth.examcloud.core.oe.task.service.impl;
 
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamSyncCaptureRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamSyncCaptureEntity;
+import cn.com.qmth.examcloud.core.oe.student.base.bean.CompareFaceSyncInfo;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamSyncCaptureRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamSyncCaptureEntity;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamSyncCaptureService;
-import cn.com.qmth.examcloud.core.oe.task.service.bean.CompareFaceSyncInfo;
 import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +21,6 @@ import org.springframework.transaction.annotation.Transactional;
 @Service("examSyncCaptureService")
 public class ExamSyncCaptureServiceImpl implements ExamSyncCaptureService {
 
-
     @Autowired
     private ExamSyncCaptureRepo examSyncCaptureRepo;
 

+ 37 - 27
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/SyncExamDataExecutor.java

@@ -7,39 +7,18 @@ import cn.com.qmth.examcloud.commons.helpers.pipeline.TaskContext;
 import cn.com.qmth.examcloud.commons.util.JsonUtil;
 import cn.com.qmth.examcloud.core.oe.admin.api.ExamScoreNoticeQueueCloudService;
 import cn.com.qmth.examcloud.core.oe.admin.api.SyncExamDataCloudService;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamCaptureBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamContinuedRecordBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamFaceLivenessVerifyBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamProcessRecordBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamQuestionBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamRecordDataBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamRecordPaperStructBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamRecordQuestionsBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamSyncCaptureBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.FaceBiopsyBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.FaceBiopsyItemBean;
-import cn.com.qmth.examcloud.core.oe.admin.api.bean.FaceBiopsyItemStepBean;
+import cn.com.qmth.examcloud.core.oe.admin.api.bean.*;
 import cn.com.qmth.examcloud.core.oe.admin.api.request.AddExamScoreNoticeQueueReq;
 import cn.com.qmth.examcloud.core.oe.admin.api.request.SyncExamDataReq;
 import cn.com.qmth.examcloud.core.oe.student.api.ExamRecordDataCloudService;
 import cn.com.qmth.examcloud.core.oe.student.api.bean.StuExamQuestionBean;
-import cn.com.qmth.examcloud.core.oe.student.api.request.GetExamFaceLivenessVerifiesReq;
-import cn.com.qmth.examcloud.core.oe.student.api.request.GetExamRecordPaperStructReq;
-import cn.com.qmth.examcloud.core.oe.student.api.request.GetExamRecordQuestionsReq;
-import cn.com.qmth.examcloud.core.oe.student.api.request.GetFaceBiopsyReq;
-import cn.com.qmth.examcloud.core.oe.student.api.request.UpdatePartialExamRecordReq;
+import cn.com.qmth.examcloud.core.oe.student.api.request.*;
 import cn.com.qmth.examcloud.core.oe.student.api.response.GetExamFaceLivenessVerifiesResp;
 import cn.com.qmth.examcloud.core.oe.student.api.response.GetExamRecordPaperStructResp;
 import cn.com.qmth.examcloud.core.oe.student.api.response.GetExamRecordQuestionsResp;
 import cn.com.qmth.examcloud.core.oe.student.api.response.GetFaceBiopsyResp;
-import cn.com.qmth.examcloud.core.oe.student.dao.ExamContinuedRecordRepo;
-import cn.com.qmth.examcloud.core.oe.student.dao.ExamProcessRecordRepo;
-import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamContinuedRecordEntity;
-import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamProcessRecordEntity;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamSyncCaptureRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureEntity;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamSyncCaptureEntity;
+import cn.com.qmth.examcloud.core.oe.student.dao.*;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.*;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamBossService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 import cn.com.qmth.examcloud.support.Constants;
@@ -55,6 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -77,6 +57,9 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
     @Autowired
     private ExamCaptureRepo examCaptureRepo;
 
+    @Autowired
+    private ExamFaceLiveVerifyRepo examFaceLiveVerifyRepo;
+
     @Autowired
     private ExamSyncCaptureRepo examSyncCaptureRepo;
 
@@ -177,7 +160,7 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
                     syncReq.setExamSyncCapture(syncCapture);
 
                     //虚拟摄像头进入待审核,且有虚拟摄像头的或者同步没有照片的,更新缓存
-                    boolean hasVirtualCamera = captures.stream().anyMatch(e->e.getHasVirtualCamera()!=null&&e.getHasVirtualCamera());
+                    boolean hasVirtualCamera = captures.stream().anyMatch(e -> e.getHasVirtualCamera() != null && e.getHasVirtualCamera());
                     if (examRecordDataService.isVirtualToWaiting(examId) && hasVirtualCamera || syncCapture == null) {
                         examRecordData.setIsWarn(true);
                         examRecordDataService.saveExamRecordDataCache(examRecordDataId, examRecordData);
@@ -187,6 +170,8 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
                         syncReq.setExamFaceLivenessVerifies(getExamFaceLivenessVerifies(examRecordDataId));
 
                         syncReq.setFaceBiopsy(getFaceBiopsy(examRecordDataId));
+
+                        syncReq.setFaceLiveVerifyRecords(loadFaceLiveVerifyRecords(examRecordDataId));
                     }
                 }
 
@@ -348,6 +333,31 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
 
     }
 
+    private List<FaceLiveVerifyBean> loadFaceLiveVerifyRecords(Long examRecordDataId) {
+        List<ExamFaceLiveVerifyEntity> entities = examFaceLiveVerifyRepo.findByExamRecordDataIdAndFinished(examRecordDataId, true);
+        if (CollectionUtils.isEmpty(entities)) {
+            return null;
+        }
+
+        List<FaceLiveVerifyBean> faceLiveVerifyRecords = new ArrayList<>();
+        for (ExamFaceLiveVerifyEntity entity : entities) {
+            FaceLiveVerifyBean bean = new FaceLiveVerifyBean();
+            bean.setExamRecordDataId(entity.getExamRecordDataId());
+            bean.setStatus(entity.getStatus().name());
+            bean.setFaceCount(entity.getFaceCount());
+            bean.setSimilarity(entity.getSimilarity());
+            bean.setRealness(entity.getRealness());
+            bean.setErrorMsg(entity.getErrorMsg());
+            bean.setProcessTime(entity.getProcessTime());
+            bean.setActions(entity.getActions());
+            bean.setCreationTime(entity.getCreationTime());
+            bean.setUpdateTime(entity.getUpdateTime());
+            faceLiveVerifyRecords.add(bean);
+        }
+
+        return faceLiveVerifyRecords;
+    }
+
     private ExamSyncCaptureBean getExamSyncCapture(Long examRecordDataId) {
         ExamSyncCaptureEntity entity = examSyncCaptureRepo.findByExamRecordDataId(examRecordDataId);
         if (null == entity) {
@@ -527,7 +537,7 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
         data.setContinuedTime(examRecordData.getContinuedTime());
         data.setEnterExamTime(examRecordData.getEnterExamTime());
         data.setSwitchScreenCount(examRecordData.getSwitchScreenCount());
-
+        data.setExceedMaxSwitchScreenCount(examRecordData.getExceedMaxSwitchScreenCount());
         return data;
     }
 

+ 1 - 1
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/worker/BaiduFaceLivenessWorker.java

@@ -5,7 +5,7 @@ import cn.com.qmth.examcloud.commons.helpers.concurrency.simple.Worker;
 import cn.com.qmth.examcloud.commons.helpers.concurrency.simple.WorkerController;
 import cn.com.qmth.examcloud.commons.util.Util;
 import cn.com.qmth.examcloud.core.oe.task.base.ExamCaptureProcessStatisticController;
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
+import cn.com.qmth.examcloud.core.oe.student.dao.enums.ExamCaptureQueueStatus;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureQueueService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureService;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.ExamCaptureQueueInfo;

+ 1 - 1
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/worker/FacePPCompareWorker.java

@@ -5,7 +5,7 @@ import cn.com.qmth.examcloud.commons.helpers.concurrency.simple.Worker;
 import cn.com.qmth.examcloud.commons.helpers.concurrency.simple.WorkerController;
 import cn.com.qmth.examcloud.commons.util.Util;
 import cn.com.qmth.examcloud.core.oe.task.base.ExamCaptureProcessStatisticController;
-import cn.com.qmth.examcloud.core.oe.task.dao.enums.ExamCaptureQueueStatus;
+import cn.com.qmth.examcloud.core.oe.student.dao.enums.ExamCaptureQueueStatus;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureQueueService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamCaptureService;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.ExamCaptureQueueInfo;

+ 4 - 4
examcloud-core-oe-task-starter/shell/start.sh

@@ -1,13 +1,13 @@
 #!/bin/bash
 
-PROJECT_JAR="examcloud-core-oe-task-starter-v4.1.0-RELEASE.jar"
-
-PROJECT_JVM_ARGS=`cat start.vmoptions`
+PROJECT_JAR=`find . -name "examcloud-core-oe-task-starter*.jar"`
+PROJECT_JAR=${PROJECT_JAR:6}
 
 PROJECT_ARGS=`cat start.args`
-
 PROJECT_ARGS=$PROJECT_ARGS" --sys.config.center.secretKey="$1
 
+PROJECT_JVM_ARGS=`cat start.vmoptions`
+
 PID_LIST=`ps -ef | grep $PROJECT_JAR | grep java | awk '{print $2}'`
 if [ ! -z "$PID_LIST" ]; then
     echo "$PROJECT_JAR is already running..."

+ 2 - 1
examcloud-core-oe-task-starter/shell/stop.sh

@@ -1,6 +1,7 @@
 #!/bin/bash
 
-PROJECT_JAR="examcloud-core-oe-task-starter-v4.1.0-RELEASE.jar"
+PROJECT_JAR=`find . -name "examcloud-core-oe-task-starter*.jar"`
+PROJECT_JAR=${PROJECT_JAR:6}
 
 ps -ef | grep $PROJECT_JAR | grep java | awk '{printf("kill -15 %s\n",$2)}' | sh
 BUILD_ID=DONTKILLME

+ 2 - 2
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessBaiduFacelivenessTask.java

@@ -2,8 +2,8 @@ package cn.com.qmth.examcloud.core.oe.task.starter.config;
 
 import cn.com.qmth.examcloud.commons.helpers.concurrency.simple.ConcurrentTask;
 import cn.com.qmth.examcloud.commons.util.Util;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureQueueRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureQueueEntity;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureQueueRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureQueueEntity;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.ExamCaptureQueueInfo;
 import cn.com.qmth.examcloud.core.oe.task.service.worker.BaiduFaceLivenessWorker;
 import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;

+ 2 - 2
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessFaceCompareQueueTask.java

@@ -2,8 +2,8 @@ package cn.com.qmth.examcloud.core.oe.task.starter.config;
 
 import cn.com.qmth.examcloud.commons.helpers.concurrency.simple.ConcurrentTask;
 import cn.com.qmth.examcloud.commons.util.Util;
-import cn.com.qmth.examcloud.core.oe.task.dao.ExamCaptureQueueRepo;
-import cn.com.qmth.examcloud.core.oe.task.dao.entity.ExamCaptureQueueEntity;
+import cn.com.qmth.examcloud.core.oe.student.dao.ExamCaptureQueueRepo;
+import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureQueueEntity;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.ExamCaptureQueueInfo;
 import cn.com.qmth.examcloud.core.oe.task.service.worker.FacePPCompareWorker;
 import cn.com.qmth.examcloud.exchange.inner.api.SmsCloudService;

+ 17 - 13
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/SwaggerConfig.java

@@ -1,44 +1,48 @@
-/*
- * *************************************************
- * Copyright (c) 2018 QMTH. All Rights Reserved.
- * Created by Deason on 2018-08-15 16:17:41.
- * *************************************************
- */
-
 package cn.com.qmth.examcloud.core.oe.task.starter.config;
 
-import io.swagger.annotations.ApiOperation;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
 import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Parameter;
 import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
 import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Configuration
 @EnableSwagger2WebMvc
 public class SwaggerConfig {
 
     @Bean
     public Docket buildDocket() {
+        List<Parameter> parameters = new ArrayList<>();
+        parameters.add(new ParameterBuilder().name("key").modelRef(new ModelRef("String")).parameterType("header").required(false).build());
+        parameters.add(new ParameterBuilder().name("token").modelRef(new ModelRef("String")).parameterType("header").required(false).build());
+
         return new Docket(DocumentationType.SWAGGER_2)
-                .groupName("Version 3.0")
+                .groupName("default")
                 .apiInfo(buildApiInfo())
+                .globalOperationParameters(parameters)
                 .useDefaultResponseMessages(false)
                 .select()
-                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .apis(RequestHandlerSelectors.basePackage("cn.com.qmth.examcloud.core.oe.task.api.controller"))
                 .paths(PathSelectors.any())
                 .build();
     }
 
     public ApiInfo buildApiInfo() {
         return new ApiInfoBuilder()
-                .title("网考学生端照片抓拍处理接口文档")
-                .version("3.0")
+                .title("考试云平台接口文档")
+                .version("v4.x.x")
                 .build();
     }
 
-}
+}