deason 4 лет назад
Родитель
Сommit
900b0e4cbd
43 измененных файлов с 843 добавлено и 757 удалено
  1. 15 16
      examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/controller/ExamCaptureController.java
  2. 65 65
      examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/controller/bean/GetExamCaptureResultDomain.java
  3. 2 0
      examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/provider/ExamCaptureCloudServiceProvider.java
  4. 5 0
      examcloud-core-oe-task-base/src/main/java/cn/com/qmth/examcloud/core/oe/task/base/ExamCaptureProcessStatisticController.java
  5. 1 0
      examcloud-core-oe-task-base/src/main/java/cn/com/qmth/examcloud/core/oe/task/base/UniqueRuleHolder.java
  6. 3 1
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamCaptureQueueRepo.java
  7. 12 10
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamCaptureRepo.java
  8. 2 0
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/ExamSyncCaptureRepo.java
  9. 6 1
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamCaptureEntity.java
  10. 4 0
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamCaptureQueueEntity.java
  11. 5 0
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/entity/ExamSyncCaptureEntity.java
  12. 1 1
      examcloud-core-oe-task-dao/src/main/java/cn/com/qmth/examcloud/core/oe/task/dao/enums/ExamCaptureQueueStatus.java
  13. 3 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamBossService.java
  14. 2 0
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamCaptureQueueService.java
  15. 35 28
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamCaptureService.java
  16. 1 0
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamRecordDataService.java
  17. 3 3
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamSyncCaptureService.java
  18. 4 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/ExamingSessionService.java
  19. 119 115
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/CalculateFaceCheckResultInfo.java
  20. 123 122
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/CompareFaceSyncInfo.java
  21. 4 0
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/ExamCaptureQueueInfo.java
  22. 53 49
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/SaveExamCaptureQueueInfo.java
  23. 18 17
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamBossServiceImpl.java
  24. 2 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamCaptureQueueServiceImpl.java
  25. 18 19
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamCaptureServiceImpl.java
  26. 4 0
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamRecordDataServiceImpl.java
  27. 3 2
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamingSessionServiceImpl.java
  28. 3 11
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/AfterHandInExamExecutor.java
  29. 4 1
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/ClearExamDataCacheExecutor.java
  30. 35 35
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/DataGainExamExecutor.java
  31. 5 0
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/HandInExamExecutor.java
  32. 12 3
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/SyncExamDataExecutor.java
  33. 54 50
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/worker/BaiduFaceLivenessWorker.java
  34. 13 10
      examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/worker/FacePPCompareWorker.java
  35. 38 38
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/OETaskApp.java
  36. 2 2
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/Tester.java
  37. 99 101
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ExamCloudResourceManager.java
  38. 29 30
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ExamCloudWebMvcConfigurer.java
  39. 6 4
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessBaiduFacelivenessTask.java
  40. 2 1
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessFaceCompareAlarmTask.java
  41. 1 0
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ProcessFaceCompareQueueTask.java
  42. 9 0
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/StreamTaskExecutor.java
  43. 18 19
      examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/SystemStartup.java

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

@@ -1,16 +1,5 @@
 package cn.com.qmth.examcloud.core.oe.task.controller;
 package cn.com.qmth.examcloud.core.oe.task.controller;
 
 
-import org.apache.commons.lang3.StringUtils;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.util.UrlUtil;
 import cn.com.qmth.examcloud.commons.util.UrlUtil;
@@ -34,6 +23,11 @@ import cn.com.qmth.examcloud.web.redis.RedisClient;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 
 
 
 /**
 /**
@@ -49,16 +43,20 @@ public class ExamCaptureController extends ControllerSupport {
 
 
     @Autowired
     @Autowired
     private ExamCaptureService examCaptureService;
     private ExamCaptureService examCaptureService;
+
     @Autowired
     @Autowired
     private ExamingSessionService examingSessionService;
     private ExamingSessionService examingSessionService;
+
     @Autowired
     @Autowired
     private ExamCaptureQueueService examCaptureQueueService;
     private ExamCaptureQueueService examCaptureQueueService;
+
     @Autowired
     @Autowired
     private RedisClient redisClient;
     private RedisClient redisClient;
+
     @Autowired
     @Autowired
     private ExamRecordDataService examRecordDataService;
     private ExamRecordDataService examRecordDataService;
 
 
-//	private static AES aes = new AES();
+    //	private static AES aes = new AES();
 
 
     @ApiOperation(value = "同步比较人脸:用于进入考试")
     @ApiOperation(value = "同步比较人脸:用于进入考试")
     @PostMapping("/compareFaceSync")
     @PostMapping("/compareFaceSync")
@@ -75,7 +73,7 @@ public class ExamCaptureController extends ControllerSupport {
         if (StringUtils.isBlank(baseFaceToken)) {
         if (StringUtils.isBlank(baseFaceToken)) {
             throw new StatusException("301002", "学生底照的faceToken为空");
             throw new StatusException("301002", "学生底照的faceToken为空");
         }
         }
-//		fileUrl = aes.decrypt(fileUrl);
+        //		fileUrl = aes.decrypt(fileUrl);
         fileUrl = UrlUtil.decode(fileUrl);
         fileUrl = UrlUtil.decode(fileUrl);
         CompareFaceSyncInfo compareFaceSyncInfo = examCaptureService.compareFaceSyncByFileUrl(user.getUserId(), baseFaceToken, fileUrl);
         CompareFaceSyncInfo compareFaceSyncInfo = examCaptureService.compareFaceSyncByFileUrl(user.getUserId(), baseFaceToken, fileUrl);
 
 
@@ -97,9 +95,9 @@ public class ExamCaptureController extends ControllerSupport {
      * @param userId         用户id
      * @param userId         用户id
      */
      */
     private void validateUpyunSign(String signIdentifier, String fileUrl, Long userId) {
     private void validateUpyunSign(String signIdentifier, String fileUrl, Long userId) {
-//		if (StringUtils.isBlank(signIdentifier)){
-//			throw new StatusException("300001", "签名标识不能为空");
-//		}
+        //		if (StringUtils.isBlank(signIdentifier)){
+        //			throw new StatusException("300001", "签名标识不能为空");
+        //		}
         if (!StringUtils.isBlank(signIdentifier)) {
         if (!StringUtils.isBlank(signIdentifier)) {
             String upyunSignRedisKey = Constants.EXAM_CAPTURE_PHOTO_UPYUN_SIGN_PREFIX + userId + "_" + signIdentifier;
             String upyunSignRedisKey = Constants.EXAM_CAPTURE_PHOTO_UPYUN_SIGN_PREFIX + userId + "_" + signIdentifier;
             YunHttpRequest upYunHttpRequest = redisClient.get(upyunSignRedisKey, YunHttpRequest.class);
             YunHttpRequest upYunHttpRequest = redisClient.get(upyunSignRedisKey, YunHttpRequest.class);
@@ -186,4 +184,5 @@ public class ExamCaptureController extends ControllerSupport {
 
 
         return examCaptureQueueService.saveExamCaptureQueue(saveExamCaptureQueueInfo, user.getUserId());
         return examCaptureQueueService.saveExamCaptureQueue(saveExamCaptureQueueInfo, user.getUserId());
     }
     }
+
 }
 }

+ 65 - 65
examcloud-core-oe-task-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/task/controller/bean/GetExamCaptureResultDomain.java

@@ -3,70 +3,70 @@ package cn.com.qmth.examcloud.core.oe.task.controller.bean;
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 
 
 public class GetExamCaptureResultDomain implements JsonSerializable {
 public class GetExamCaptureResultDomain implements JsonSerializable {
-	
-	
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -7258224010169602773L;
-	
-	/**
-	 * 是否处理完成
-	 */
-	private Boolean isCompleted;
-
-	private Long examRecordDataId;
-	
-	/**
-	 * 是否通过
-	 */
-	private Boolean isPass;
-	
-	/**
-	 * 是否有陌生人
-	 */
-	private Boolean isStranger;
-	
-	private String fileName;
-	
-	public Long getExamRecordDataId() {
-		return examRecordDataId;
-	}
-
-	public void setExamRecordDataId(Long examRecordDataId) {
-		this.examRecordDataId = examRecordDataId;
-	}
-
-	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 getFileName() {
-		return fileName;
-	}
-
-	public void setFileName(String fileName) {
-		this.fileName = fileName;
-	}
-
-	public Boolean getIsCompleted() {
-		return isCompleted;
-	}
-
-	public void setIsCompleted(Boolean isCompleted) {
-		this.isCompleted = isCompleted;
-	}
+
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7258224010169602773L;
+
+    /**
+     * 是否处理完成
+     */
+    private Boolean isCompleted;
+
+    private Long examRecordDataId;
+
+    /**
+     * 是否通过
+     */
+    private Boolean isPass;
+
+    /**
+     * 是否有陌生人
+     */
+    private Boolean isStranger;
+
+    private String fileName;
+
+    public Long getExamRecordDataId() {
+        return examRecordDataId;
+    }
+
+    public void setExamRecordDataId(Long examRecordDataId) {
+        this.examRecordDataId = examRecordDataId;
+    }
+
+    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 getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public Boolean getIsCompleted() {
+        return isCompleted;
+    }
+
+    public void setIsCompleted(Boolean isCompleted) {
+        this.isCompleted = isCompleted;
+    }
 
 
 }
 }

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

@@ -29,6 +29,7 @@ public class ExamCaptureCloudServiceProvider extends ControllerSupport
 
 
     @Autowired
     @Autowired
     private ExamSyncCaptureService examSyncCaptureService;
     private ExamSyncCaptureService examSyncCaptureService;
+
     @Autowired
     @Autowired
     private ExamCaptureQueueRepo examCaptureQueueRepo;
     private ExamCaptureQueueRepo examCaptureQueueRepo;
 
 
@@ -67,4 +68,5 @@ public class ExamCaptureCloudServiceProvider extends ControllerSupport
         resp.setExist(examCaptureQueueRepo.existsUnhandledByExamRecordDataId(req.getExamRecordDataId()) != null);
         resp.setExist(examCaptureQueueRepo.existsUnhandledByExamRecordDataId(req.getExamRecordDataId()) != null);
         return resp;
         return resp;
     }
     }
+
 }
 }

+ 5 - 0
examcloud-core-oe-task-base/src/main/java/cn/com/qmth/examcloud/core/oe/task/base/ExamCaptureProcessStatisticController.java

@@ -9,12 +9,15 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @Version 1.0
  * @Version 1.0
  */
  */
 public class ExamCaptureProcessStatisticController {
 public class ExamCaptureProcessStatisticController {
+
     //人脸比对处理数量
     //人脸比对处理数量
     private static AtomicInteger faceCompareCount = new AtomicInteger(0);
     private static AtomicInteger faceCompareCount = new AtomicInteger(0);
+
     //人脸比对处理失败数量
     //人脸比对处理失败数量
     private static AtomicInteger faceCompareFailedCount = new AtomicInteger(0);
     private static AtomicInteger faceCompareFailedCount = new AtomicInteger(0);
 
 
     private static Object facePPLock = new Object();
     private static Object facePPLock = new Object();
+
     private static Object faceLivenessLock = new Object();
     private static Object faceLivenessLock = new Object();
 
 
     /**
     /**
@@ -83,6 +86,7 @@ public class ExamCaptureProcessStatisticController {
 
 
     //活体检测处理数量
     //活体检测处理数量
     private static AtomicInteger faceLivenessDetectCount = new AtomicInteger(0);
     private static AtomicInteger faceLivenessDetectCount = new AtomicInteger(0);
+
     //活体检测处理失败数量
     //活体检测处理失败数量
     private static AtomicInteger faceLivenessDetectFailedCount = new AtomicInteger(0);
     private static AtomicInteger faceLivenessDetectFailedCount = new AtomicInteger(0);
 
 
@@ -149,4 +153,5 @@ public class ExamCaptureProcessStatisticController {
             return faceLivenessDetectFailedCount.get() * 100 / faceLivenessDetectCount.get();
             return faceLivenessDetectFailedCount.get() * 100 / faceLivenessDetectCount.get();
         }
         }
     }
     }
+
 }
 }

+ 1 - 0
examcloud-core-oe-task-base/src/main/java/cn/com/qmth/examcloud/core/oe/task/base/UniqueRuleHolder.java

@@ -12,6 +12,7 @@ import java.util.List;
  * @Version 1.0
  * @Version 1.0
  */
  */
 public class UniqueRuleHolder {
 public class UniqueRuleHolder {
+
     private static List<UniqueRule> LIST = Lists.newArrayList();
     private static List<UniqueRule> LIST = Lists.newArrayList();
 
 
     public static List<UniqueRule> getUniqueRuleList() {
     public static List<UniqueRule> getUniqueRuleList() {

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

@@ -104,11 +104,13 @@ public interface ExamCaptureQueueRepo extends JpaRepository<ExamCaptureQueueEnti
 
 
     /**
     /**
      * 更新批次号
      * 更新批次号
+     *
      * @param captureQueueId 队列id
      * @param captureQueueId 队列id
-     * @param batchNum 批次号
+     * @param batchNum       批次号
      */
      */
     @Transactional
     @Transactional
     @Modifying
     @Modifying
     @Query(value = "update ec_oet_exam_capture_queue set process_batch_num=?2 where id=?1", nativeQuery = true)
     @Query(value = "update ec_oet_exam_capture_queue set process_batch_num=?2 where id=?1", nativeQuery = true)
     void updateProcessBatchNum(Long captureQueueId, String batchNum);
     void updateProcessBatchNum(Long captureQueueId, String batchNum);
+
 }
 }

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

@@ -17,15 +17,17 @@ import java.util.List;
  */
  */
 @Repository
 @Repository
 public interface ExamCaptureRepo extends JpaRepository<ExamCaptureEntity, Long>, JpaSpecificationExecutor<ExamCaptureEntity> {
 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);
-    
+
+    /**
+     * 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);
     ExamCaptureEntity findByExamRecordDataIdAndFileName(Long examRecordDataId, String fileName);
+
 }
 }

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

@@ -13,5 +13,7 @@ import org.springframework.stereotype.Repository;
  */
  */
 @Repository
 @Repository
 public interface ExamSyncCaptureRepo extends JpaRepository<ExamSyncCaptureEntity, Long>, JpaSpecificationExecutor<ExamSyncCaptureEntity> {
 public interface ExamSyncCaptureRepo extends JpaRepository<ExamSyncCaptureEntity, Long>, JpaSpecificationExecutor<ExamSyncCaptureEntity> {
+
     ExamSyncCaptureEntity findByExamRecordDataId(Long examRecordId);
     ExamSyncCaptureEntity findByExamRecordDataId(Long examRecordId);
+
 }
 }

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

@@ -23,13 +23,16 @@ public class ExamCaptureEntity extends JpaEntity {
      *
      *
      */
      */
     private static final long serialVersionUID = -6162329876793785782L;
     private static final long serialVersionUID = -6162329876793785782L;
+
     @Id
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     private Long id;
+
     /**
     /**
      * ec_oe_exam_record_data  ID
      * ec_oe_exam_record_data  ID
      */
      */
     private Long examRecordDataId;
     private Long examRecordDataId;
+
     /**
     /**
      * 文件URL
      * 文件URL
      */
      */
@@ -55,11 +58,13 @@ public class ExamCaptureEntity extends JpaEntity {
      */
      */
     @Column(name = "is_stranger")
     @Column(name = "is_stranger")
     private Boolean isStranger;
     private Boolean isStranger;
+
     /**
     /**
      * 百度人脸关键点坐标结果
      * 百度人脸关键点坐标结果
      */
      */
-    @Column(name = "landmark",length = 4000)
+    @Column(name = "landmark", length = 4000)
     private String landmark;
     private String landmark;
+
     /**
     /**
      * 百度在线活体检测结果
      * 百度在线活体检测结果
      */
      */

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

@@ -17,6 +17,7 @@ import javax.persistence.*;
         @Index(name = "IDX_E_O_E_C_Q_002", columnList = "status,errorNum")
         @Index(name = "IDX_E_O_E_C_Q_002", columnList = "status,errorNum")
 })
 })
 public class ExamCaptureQueueEntity extends WithIdJpaEntity {
 public class ExamCaptureQueueEntity extends WithIdJpaEntity {
+
     /**
     /**
      *
      *
      */
      */
@@ -99,6 +100,7 @@ public class ExamCaptureQueueEntity extends WithIdJpaEntity {
      */
      */
     @Column(name = "is_stranger")
     @Column(name = "is_stranger")
     private Boolean isStranger;
     private Boolean isStranger;
+
     /**
     /**
      * 比较是否通过
      * 比较是否通过
      */
      */
@@ -110,6 +112,7 @@ public class ExamCaptureQueueEntity extends WithIdJpaEntity {
      */
      */
     @Column(name = "face_compare_result", length = 2000)
     @Column(name = "face_compare_result", length = 2000)
     private String faceCompareResult;
     private String faceCompareResult;
+
     /**
     /**
      * 人脸比对开始时间
      * 人脸比对开始时间
      */
      */
@@ -264,4 +267,5 @@ public class ExamCaptureQueueEntity extends WithIdJpaEntity {
     public void setFacelivenessResult(String facelivenessResult) {
     public void setFacelivenessResult(String facelivenessResult) {
         this.facelivenessResult = facelivenessResult;
         this.facelivenessResult = facelivenessResult;
     }
     }
+
 }
 }

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

@@ -23,13 +23,16 @@ public class ExamSyncCaptureEntity extends JpaEntity {
      *
      *
      */
      */
     private static final long serialVersionUID = -6162329876793785782L;
     private static final long serialVersionUID = -6162329876793785782L;
+
     @Id
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
     private Long id;
+
     /**
     /**
      * ec_oe_exam_record_data  ID
      * ec_oe_exam_record_data  ID
      */
      */
     private Long examRecordDataId;
     private Long examRecordDataId;
+
     /**
     /**
      * 文件URL
      * 文件URL
      */
      */
@@ -55,11 +58,13 @@ public class ExamSyncCaptureEntity extends JpaEntity {
      */
      */
     @Column(name = "is_stranger")
     @Column(name = "is_stranger")
     private Boolean isStranger;
     private Boolean isStranger;
+
     /**
     /**
      * 百度人脸关键点坐标结果
      * 百度人脸关键点坐标结果
      */
      */
     @Column(name = "landmark", length = 4000)
     @Column(name = "landmark", length = 4000)
     private String landmark;
     private String landmark;
+
     /**
     /**
      * 百度在线活体检测结果
      * 百度在线活体检测结果
      */
      */

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

@@ -31,7 +31,7 @@ public enum ExamCaptureQueueStatus {
 
 
     private String desc;
     private String desc;
 
 
-    private ExamCaptureQueueStatus(String desc){
+    private ExamCaptureQueueStatus(String desc) {
         this.desc = desc;
         this.desc = desc;
     }
     }
 
 

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

@@ -11,7 +11,6 @@ import cn.com.qmth.examcloud.support.examing.ExamBoss;
 public interface ExamBossService {
 public interface ExamBossService {
 
 
     /**
     /**
-     *
      * @param examStudentId
      * @param examStudentId
      * @param eb
      * @param eb
      */
      */
@@ -19,6 +18,7 @@ public interface ExamBossService {
 
 
     /**
     /**
      * 获取
      * 获取
+     *
      * @param examStudentId
      * @param examStudentId
      * @return
      * @return
      */
      */
@@ -26,7 +26,9 @@ public interface ExamBossService {
 
 
     /**
     /**
      * 删除
      * 删除
+     *
      * @param examStudentId
      * @param examStudentId
      */
      */
     public void deleteExamBoss(Long examStudentId);
     public void deleteExamBoss(Long examStudentId);
+
 }
 }

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

@@ -13,6 +13,7 @@ public interface ExamCaptureQueueService {
 
 
     /**
     /**
      * 处理失败时,保存队列信息
      * 处理失败时,保存队列信息
+     *
      * @param captureQueueId
      * @param captureQueueId
      * @param errorMsg
      * @param errorMsg
      * @param examCaptureQueueStatus
      * @param examCaptureQueueStatus
@@ -22,6 +23,7 @@ public interface ExamCaptureQueueService {
 
 
     /**
     /**
      * 保存考试抓拍照片队列
      * 保存考试抓拍照片队列
+     *
      * @param saveExamCaptureQueueInfo
      * @param saveExamCaptureQueueInfo
      * @param studentId
      * @param studentId
      * @return
      * @return

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

@@ -14,37 +14,44 @@ import org.springframework.transaction.annotation.Transactional;
  * @Version 1.0
  * @Version 1.0
  */
  */
 public interface ExamCaptureService {
 public interface ExamCaptureService {
-	void disposeBaiDuFaceLiveness(ExamCaptureQueueInfo examCaptureQueue) throws JSONException;
+
+    void disposeBaiDuFaceLiveness(ExamCaptureQueueInfo examCaptureQueue) throws JSONException;
 
 
     @Transactional
     @Transactional
     void saveExamCaptureAndDeleteQueue(ExamCaptureQueueInfo examCaptureQueue);
     void saveExamCaptureAndDeleteQueue(ExamCaptureQueueInfo examCaptureQueue);
 
 
-	/**
-	 * 同步比较人脸:用于进入考试
-	 * @param studentId			学生ID
-	 * @param baseFaceToken		学生底照faceToken
-	 * @param fileUrl				抓拍照片Url
-	 * @return
-	 */
-	CompareFaceSyncInfo compareFaceSyncByFileUrl(Long studentId, String baseFaceToken, String fileUrl);
-
-	/**
-	 * 获取考试抓拍结果
-	 * @param examRecordDataId
-	 * @param fileName
-	 * @return
-	 */
-	ExamCaptureEntity getExamCaptureResult(Long examRecordDataId, String fileName);
-	/**
-	 * 处理单个考试抓拍照片数据
-	 * @param examCaptureQueueInfo
-	 */
-	void disposeFaceCompare(ExamCaptureQueueInfo examCaptureQueueInfo) throws JSONException;
-
-	/**
-	 * 计算人脸检测结果
-	 * @param examRecordDataId
-	 * @return
-	 */
+    /**
+     * 同步比较人脸:用于进入考试
+     *
+     * @param studentId     学生ID
+     * @param baseFaceToken 学生底照faceToken
+     * @param fileUrl       抓拍照片Url
+     * @return
+     */
+    CompareFaceSyncInfo compareFaceSyncByFileUrl(Long studentId, String baseFaceToken, String fileUrl);
+
+    /**
+     * 获取考试抓拍结果
+     *
+     * @param examRecordDataId
+     * @param fileName
+     * @return
+     */
+    ExamCaptureEntity getExamCaptureResult(Long examRecordDataId, String fileName);
+
+    /**
+     * 处理单个考试抓拍照片数据
+     *
+     * @param examCaptureQueueInfo
+     */
+    void disposeFaceCompare(ExamCaptureQueueInfo examCaptureQueueInfo) throws JSONException;
+
+    /**
+     * 计算人脸检测结果
+     *
+     * @param examRecordDataId
+     * @return
+     */
     CalculateFaceCheckResultInfo calculateFaceCheckResult(Long examRecordDataId);
     CalculateFaceCheckResultInfo calculateFaceCheckResult(Long examRecordDataId);
+
 }
 }

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

@@ -52,4 +52,5 @@ public interface ExamRecordDataService {
      * @return
      * @return
      */
      */
     ExamRecordData processAfterHandInExam(Long examRecordDataId);
     ExamRecordData processAfterHandInExam(Long examRecordDataId);
+
 }
 }

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

@@ -1,7 +1,5 @@
 package cn.com.qmth.examcloud.core.oe.task.service;
 package cn.com.qmth.examcloud.core.oe.task.service;
 
 
-import org.springframework.transaction.annotation.Transactional;
-
 /**
 /**
  * @Description 同步抓拍照片接口
  * @Description 同步抓拍照片接口
  * @Author lideyin
  * @Author lideyin
@@ -9,5 +7,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @Version 1.0
  * @Version 1.0
  */
  */
 public interface ExamSyncCaptureService {
 public interface ExamSyncCaptureService {
-	void saveExamCaptureSyncCompareResult(Long studentId, Long examRecordDataId);
+
+    void saveExamCaptureSyncCompareResult(Long studentId, Long examRecordDataId);
+
 }
 }

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

@@ -4,12 +4,12 @@ import cn.com.qmth.examcloud.support.examing.ExamingSession;
 
 
 /**
 /**
  * @author chenken
  * @author chenken
- *
  */
  */
 public interface ExamingSessionService {
 public interface ExamingSessionService {
 
 
     /**
     /**
      * 保存考试会话
      * 保存考试会话
+     *
      * @param studentId
      * @param studentId
      * @param examingSession
      * @param examingSession
      */
      */
@@ -17,6 +17,7 @@ public interface ExamingSessionService {
 
 
     /**
     /**
      * 获取
      * 获取
+     *
      * @param studentId
      * @param studentId
      * @return
      * @return
      */
      */
@@ -24,7 +25,9 @@ public interface ExamingSessionService {
 
 
     /**
     /**
      * 删除
      * 删除
+     *
      * @param studentId
      * @param studentId
      */
      */
     public void deleteExamingSession(Long studentId);
     public void deleteExamingSession(Long studentId);
+
 }
 }

+ 119 - 115
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/CalculateFaceCheckResultInfo.java

@@ -2,125 +2,129 @@ package cn.com.qmth.examcloud.core.oe.task.service.bean;
 
 
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 
 
-import javax.persistence.Column;
-
 /**
 /**
  * 人脸检测结果实体
  * 人脸检测结果实体
  */
  */
 public class CalculateFaceCheckResultInfo implements JsonSerializable {
 public class CalculateFaceCheckResultInfo implements JsonSerializable {
 
 
 
 
-	private static final long serialVersionUID = -6342079591051146307L;
-	/**
-	 * 无照片违纪
-	 */
-	private Boolean isNoPhotoAndIllegality;
-
-	/**
-	 * 是否违纪
-	 */
-	private Boolean isIllegality;
-
-	/**
-	 * 是否异常数据
-	 */
-	private Boolean isWarn;
-
-	/**
-	 * 抓拍比对成功次数
-	 */
-	private Integer faceSuccessCount;
-	/**
-	 * 抓拍比对失败次数
-	 */
-	private Integer faceFailedCount;
-	/**
-	 * 抓拍存在陌生人的次数
-	 */
-	private Integer faceStrangerCount;
-	/**
-	 * 抓拍比对总次数
-	 */
-	private Integer faceTotalCount;
-	/**
-	 * 抓拍比对成功比率
-	 */
-	private Double faceSuccessPercent;
-
-	/**
-	 * 百度人脸活体检测通过率
-	 */
-	private Double baiduFaceLivenessSuccessPercent;
-
-	public Boolean getNoPhotoAndIllegality() {
-		return isNoPhotoAndIllegality;
-	}
-
-	public void setNoPhotoAndIllegality(Boolean noPhotoAndIllegality) {
-		isNoPhotoAndIllegality = noPhotoAndIllegality;
-	}
-
-	public Boolean getIsIllegality() {
-		return isIllegality;
-	}
-
-	public void setIsIllegality(Boolean isIllegality) {
-		this.isIllegality = isIllegality;
-	}
-
-	public Boolean getIsWarn() {
-		return isWarn;
-	}
-
-	public void setIsWarn(Boolean isWarn) {
-		this.isWarn = isWarn;
-	}
-
-	public Integer getFaceSuccessCount() {
-		return faceSuccessCount;
-	}
-
-	public void setFaceSuccessCount(Integer faceSuccessCount) {
-		this.faceSuccessCount = faceSuccessCount;
-	}
-
-	public Integer getFaceFailedCount() {
-		return faceFailedCount;
-	}
-
-	public void setFaceFailedCount(Integer faceFailedCount) {
-		this.faceFailedCount = faceFailedCount;
-	}
-
-	public Integer getFaceStrangerCount() {
-		return faceStrangerCount;
-	}
-
-	public void setFaceStrangerCount(Integer faceStrangerCount) {
-		this.faceStrangerCount = faceStrangerCount;
-	}
-
-	public Integer getFaceTotalCount() {
-		return faceTotalCount;
-	}
-
-	public void setFaceTotalCount(Integer faceTotalCount) {
-		this.faceTotalCount = faceTotalCount;
-	}
-
-	public Double getFaceSuccessPercent() {
-		return faceSuccessPercent;
-	}
-
-	public void setFaceSuccessPercent(Double faceSuccessPercent) {
-		this.faceSuccessPercent = faceSuccessPercent;
-	}
-
-	public Double getBaiduFaceLivenessSuccessPercent() {
-		return baiduFaceLivenessSuccessPercent;
-	}
-
-	public void setBaiduFaceLivenessSuccessPercent(Double baiduFaceLivenessSuccessPercent) {
-		this.baiduFaceLivenessSuccessPercent = baiduFaceLivenessSuccessPercent;
-	}
+    private static final long serialVersionUID = -6342079591051146307L;
+
+    /**
+     * 无照片违纪
+     */
+    private Boolean isNoPhotoAndIllegality;
+
+    /**
+     * 是否违纪
+     */
+    private Boolean isIllegality;
+
+    /**
+     * 是否异常数据
+     */
+    private Boolean isWarn;
+
+    /**
+     * 抓拍比对成功次数
+     */
+    private Integer faceSuccessCount;
+
+    /**
+     * 抓拍比对失败次数
+     */
+    private Integer faceFailedCount;
+
+    /**
+     * 抓拍存在陌生人的次数
+     */
+    private Integer faceStrangerCount;
+
+    /**
+     * 抓拍比对总次数
+     */
+    private Integer faceTotalCount;
+
+    /**
+     * 抓拍比对成功比率
+     */
+    private Double faceSuccessPercent;
+
+    /**
+     * 百度人脸活体检测通过率
+     */
+    private Double baiduFaceLivenessSuccessPercent;
+
+    public Boolean getNoPhotoAndIllegality() {
+        return isNoPhotoAndIllegality;
+    }
+
+    public void setNoPhotoAndIllegality(Boolean noPhotoAndIllegality) {
+        isNoPhotoAndIllegality = noPhotoAndIllegality;
+    }
+
+    public Boolean getIsIllegality() {
+        return isIllegality;
+    }
+
+    public void setIsIllegality(Boolean isIllegality) {
+        this.isIllegality = isIllegality;
+    }
+
+    public Boolean getIsWarn() {
+        return isWarn;
+    }
+
+    public void setIsWarn(Boolean isWarn) {
+        this.isWarn = isWarn;
+    }
+
+    public Integer getFaceSuccessCount() {
+        return faceSuccessCount;
+    }
+
+    public void setFaceSuccessCount(Integer faceSuccessCount) {
+        this.faceSuccessCount = faceSuccessCount;
+    }
+
+    public Integer getFaceFailedCount() {
+        return faceFailedCount;
+    }
+
+    public void setFaceFailedCount(Integer faceFailedCount) {
+        this.faceFailedCount = faceFailedCount;
+    }
+
+    public Integer getFaceStrangerCount() {
+        return faceStrangerCount;
+    }
+
+    public void setFaceStrangerCount(Integer faceStrangerCount) {
+        this.faceStrangerCount = faceStrangerCount;
+    }
+
+    public Integer getFaceTotalCount() {
+        return faceTotalCount;
+    }
+
+    public void setFaceTotalCount(Integer faceTotalCount) {
+        this.faceTotalCount = faceTotalCount;
+    }
+
+    public Double getFaceSuccessPercent() {
+        return faceSuccessPercent;
+    }
+
+    public void setFaceSuccessPercent(Double faceSuccessPercent) {
+        this.faceSuccessPercent = faceSuccessPercent;
+    }
+
+    public Double getBaiduFaceLivenessSuccessPercent() {
+        return baiduFaceLivenessSuccessPercent;
+    }
+
+    public void setBaiduFaceLivenessSuccessPercent(Double baiduFaceLivenessSuccessPercent) {
+        this.baiduFaceLivenessSuccessPercent = baiduFaceLivenessSuccessPercent;
+    }
+
 }
 }

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

@@ -4,126 +4,127 @@ import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
 
 
 public class CompareFaceSyncInfo implements 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;
-	}
+    /**
+     *
+     */
+    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;
+    }
+
 }
 }

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

@@ -12,6 +12,7 @@ import java.util.Date;
  * @Version 1.0
  * @Version 1.0
  */
  */
 public class ExamCaptureQueueInfo implements JsonSerializable {
 public class ExamCaptureQueueInfo implements JsonSerializable {
+
     /**
     /**
      *
      *
      */
      */
@@ -91,6 +92,7 @@ public class ExamCaptureQueueInfo implements JsonSerializable {
      * 就是摄像头拍到不止考生一人
      * 就是摄像头拍到不止考生一人
      */
      */
     private Boolean isStranger;
     private Boolean isStranger;
+
     /**
     /**
      * 比较是否通过
      * 比较是否通过
      */
      */
@@ -100,6 +102,7 @@ public class ExamCaptureQueueInfo implements JsonSerializable {
      * 人脸比较返回信息
      * 人脸比较返回信息
      */
      */
     private String faceCompareResult;
     private String faceCompareResult;
+
     /**
     /**
      * 人脸比对开始时间
      * 人脸比对开始时间
      */
      */
@@ -293,4 +296,5 @@ public class ExamCaptureQueueInfo implements JsonSerializable {
         return "ExamCaptureQueueInfo [id=" + id + ", studentId=" + studentId + ", examRecordDataId="
         return "ExamCaptureQueueInfo [id=" + id + ", studentId=" + studentId + ", examRecordDataId="
                 + examRecordDataId + ", fileUrl=" + fileUrl + "]";
                 + examRecordDataId + ", fileUrl=" + fileUrl + "]";
     }
     }
+
 }
 }

+ 53 - 49
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/bean/SaveExamCaptureQueueInfo.java

@@ -5,79 +5,83 @@ import io.swagger.annotations.ApiModelProperty;
 
 
 public class SaveExamCaptureQueueInfo implements JsonSerializable {
 public class SaveExamCaptureQueueInfo implements JsonSerializable {
 
 
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -7434669407796418900L;
-
-	private Long examRecordDataId;
-	
-	private String fileUrl;
-	/**
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7434669407796418900L;
+
+    private Long examRecordDataId;
+
+    private String fileUrl;
+
+    /**
      * 是否存在虚拟摄像头
      * 是否存在虚拟摄像头
      */
      */
     private Boolean hasVirtualCamera;
     private Boolean hasVirtualCamera;
+
     /**
     /**
      * 摄像头信息  json字符串数组
      * 摄像头信息  json字符串数组
      */
      */
     private String cameraInfos;
     private String cameraInfos;
+
     /**
     /**
      * 其他信息
      * 其他信息
      * Json格式
      * Json格式
      * {
      * {
-     * 	"":""
+     * "":""
      * }
      * }
      */
      */
     private String extMsg;
     private String extMsg;
-	@ApiModelProperty("又拍云签名唯一标识")
-	private String signIdentifier;
 
 
-	public String getSignIdentifier() {
-		return signIdentifier;
-	}
+    @ApiModelProperty("又拍云签名唯一标识")
+    private String signIdentifier;
+
+    public String getSignIdentifier() {
+        return signIdentifier;
+    }
+
+    public void setSignIdentifier(String signIdentifier) {
+        this.signIdentifier = signIdentifier;
+    }
 
 
-	public void setSignIdentifier(String signIdentifier) {
-		this.signIdentifier = signIdentifier;
-	}
+    public Long getExamRecordDataId() {
+        return examRecordDataId;
+    }
 
 
-	public Long getExamRecordDataId() {
-		return examRecordDataId;
-	}
+    public void setExamRecordDataId(Long examRecordDataId) {
+        this.examRecordDataId = examRecordDataId;
+    }
 
 
-	public void setExamRecordDataId(Long examRecordDataId) {
-		this.examRecordDataId = examRecordDataId;
-	}
+    public String getFileUrl() {
+        return fileUrl;
+    }
 
 
-	public String getFileUrl() {
-		return fileUrl;
-	}
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
 
 
-	public void setFileUrl(String fileUrl) {
-		this.fileUrl = fileUrl;
-	}
+    public Boolean getHasVirtualCamera() {
+        return hasVirtualCamera;
+    }
 
 
-	public Boolean getHasVirtualCamera() {
-		return hasVirtualCamera;
-	}
+    public void setHasVirtualCamera(Boolean hasVirtualCamera) {
+        this.hasVirtualCamera = hasVirtualCamera;
+    }
 
 
-	public void setHasVirtualCamera(Boolean hasVirtualCamera) {
-		this.hasVirtualCamera = hasVirtualCamera;
-	}
+    public String getCameraInfos() {
+        return cameraInfos;
+    }
 
 
-	public String getCameraInfos() {
-		return cameraInfos;
-	}
+    public void setCameraInfos(String cameraInfos) {
+        this.cameraInfos = cameraInfos;
+    }
 
 
-	public void setCameraInfos(String cameraInfos) {
-		this.cameraInfos = cameraInfos;
-	}
+    public String getExtMsg() {
+        return extMsg;
+    }
 
 
-	public String getExtMsg() {
-		return extMsg;
-	}
+    public void setExtMsg(String extMsg) {
+        this.extMsg = extMsg;
+    }
 
 
-	public void setExtMsg(String extMsg) {
-		this.extMsg = extMsg;
-	}
-    
 }
 }

+ 18 - 17
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/impl/ExamBossServiceImpl.java

@@ -16,24 +16,25 @@ import org.springframework.stereotype.Service;
 @Service("examBossService")
 @Service("examBossService")
 public class ExamBossServiceImpl implements ExamBossService {
 public class ExamBossServiceImpl implements ExamBossService {
 
 
-	@Autowired
-	private RedisClient redisClient;
+    @Autowired
+    private RedisClient redisClient;
 
 
-	@Override
-	public void saveExamBoss(Long examStudentId, ExamBoss eb) {
-		String key = RedisKeyHelper.getBuilder().examBossKey(examStudentId);
-		redisClient.set(key, eb, 2592000);
-	}
+    @Override
+    public void saveExamBoss(Long examStudentId, ExamBoss eb) {
+        String key = RedisKeyHelper.getBuilder().examBossKey(examStudentId);
+        redisClient.set(key, eb, 2592000);
+    }
 
 
-	@Override
-	public ExamBoss getExamBoss(Long examStudentId) {
-		String key = RedisKeyHelper.getBuilder().examBossKey(examStudentId);
-		return redisClient.get(key, ExamBoss.class);
-	}
+    @Override
+    public ExamBoss getExamBoss(Long examStudentId) {
+        String key = RedisKeyHelper.getBuilder().examBossKey(examStudentId);
+        return redisClient.get(key, ExamBoss.class);
+    }
+
+    @Override
+    public void deleteExamBoss(Long examStudentId) {
+        String key = RedisKeyHelper.getBuilder().examBossKey(examStudentId);
+        redisClient.delete(key);
+    }
 
 
-	@Override
-	public void deleteExamBoss(Long examStudentId) {
-		String key = RedisKeyHelper.getBuilder().examBossKey(examStudentId);
-		redisClient.delete(key);
-	}
 }
 }

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

@@ -30,6 +30,7 @@ import java.util.Date;
 public class ExamCaptureQueueServiceImpl implements ExamCaptureQueueService {
 public class ExamCaptureQueueServiceImpl implements ExamCaptureQueueService {
 
 
     private static final Logger log = LoggerFactory.getLogger(ExamCaptureQueueServiceImpl.class);
     private static final Logger log = LoggerFactory.getLogger(ExamCaptureQueueServiceImpl.class);
+
     private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
     private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
 
 
     @Autowired
     @Autowired
@@ -43,7 +44,7 @@ public class ExamCaptureQueueServiceImpl implements ExamCaptureQueueService {
                     "000000", new Date());
                     "000000", new Date());
             return true;
             return true;
         } catch (Exception e) {
         } catch (Exception e) {
-            captureLog.error("[UPDATE_FAILED_CAPTURE_QUEUE] 保存照片队列处理失败数据时出现异常",e);
+            captureLog.error("[UPDATE_FAILED_CAPTURE_QUEUE] 保存照片队列处理失败数据时出现异常", e);
             return false;
             return false;
         }
         }
     }
     }

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

@@ -1,23 +1,5 @@
 package cn.com.qmth.examcloud.core.oe.task.service.impl;
 package cn.com.qmth.examcloud.core.oe.task.service.impl;
 
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.helpers.JsonHttpResponseHolder;
 import cn.com.qmth.examcloud.commons.helpers.JsonHttpResponseHolder;
 import cn.com.qmth.examcloud.core.oe.task.base.ExamCaptureProcessStatisticController;
 import cn.com.qmth.examcloud.core.oe.task.base.ExamCaptureProcessStatisticController;
@@ -43,6 +25,22 @@ import cn.com.qmth.examcloud.web.baidu.BaiduClient;
 import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 import cn.com.qmth.examcloud.web.facepp.FaceppClient;
 import cn.com.qmth.examcloud.web.facepp.FaceppClient;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.json.JSONException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Example;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * @author chenken
  * @author chenken
@@ -55,6 +53,7 @@ import cn.com.qmth.examcloud.web.redis.RedisClient;
 public class ExamCaptureServiceImpl implements ExamCaptureService {
 public class ExamCaptureServiceImpl implements ExamCaptureService {
 
 
     private static final Logger log = LoggerFactory.getLogger(ExamCaptureServiceImpl.class);
     private static final Logger log = LoggerFactory.getLogger(ExamCaptureServiceImpl.class);
+
     private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
     private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
 
 
     @Autowired
     @Autowired
@@ -259,7 +258,7 @@ public class ExamCaptureServiceImpl implements ExamCaptureService {
                 }
                 }
                 throw e;
                 throw e;
             }
             }
-//            faceLivenessResultJson = faceLivenessService.getBaiduFaceLivenessResultJson(examCaptureQueue.getFileUrl());
+            //            faceLivenessResultJson = faceLivenessService.getBaiduFaceLivenessResultJson(examCaptureQueue.getFileUrl());
 
 
             //如果百度活体检测执行失败,调用队列失败处理,程序退出,失败的数据,后续会有自动服务重新处理
             //如果百度活体检测执行失败,调用队列失败处理,程序退出,失败的数据,后续会有自动服务重新处理
             if (faceLivenessResultJson.containsKey(Constants.BAIDU_ERROR_CODE) &&
             if (faceLivenessResultJson.containsKey(Constants.BAIDU_ERROR_CODE) &&

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

@@ -32,10 +32,13 @@ public class ExamRecordDataServiceImpl implements ExamRecordDataService {
 
 
     @Autowired
     @Autowired
     private RedisClient redisClient;
     private RedisClient redisClient;
+
     @Autowired
     @Autowired
     private ExamCaptureQueueRepo examCaptureQueueRepo;
     private ExamCaptureQueueRepo examCaptureQueueRepo;
+
     @Autowired
     @Autowired
     private ExamCaptureService examCaptureService;
     private ExamCaptureService examCaptureService;
+
     @Autowired
     @Autowired
     private ExamRecordDataCloudService examRecordDataCloudService;
     private ExamRecordDataCloudService examRecordDataCloudService;
 
 
@@ -173,4 +176,5 @@ public class ExamRecordDataServiceImpl implements ExamRecordDataService {
 
 
         return examRecordData;
         return examRecordData;
     }
     }
+
 }
 }

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

@@ -22,13 +22,13 @@ public class ExamingSessionServiceImpl implements ExamingSessionService {
     @Override
     @Override
     public void saveExamingSession(Long studentId, ExamingSession examingSession) {
     public void saveExamingSession(Long studentId, ExamingSession examingSession) {
         String key = RedisKeyHelper.getBuilder().examingSessionKey(studentId);
         String key = RedisKeyHelper.getBuilder().examingSessionKey(studentId);
-        redisClient.set(key,examingSession,2592000);
+        redisClient.set(key, examingSession, 2592000);
     }
     }
 
 
     @Override
     @Override
     public ExamingSession getExamingSession(Long studentId) {
     public ExamingSession getExamingSession(Long studentId) {
         String key = RedisKeyHelper.getBuilder().examingSessionKey(studentId);
         String key = RedisKeyHelper.getBuilder().examingSessionKey(studentId);
-        return redisClient.get(key,ExamingSession.class);
+        return redisClient.get(key, ExamingSession.class);
     }
     }
 
 
     @Override
     @Override
@@ -36,4 +36,5 @@ public class ExamingSessionServiceImpl implements ExamingSessionService {
         String key = RedisKeyHelper.getBuilder().examingSessionKey(studentId);
         String key = RedisKeyHelper.getBuilder().examingSessionKey(studentId);
         redisClient.delete(key);
         redisClient.delete(key);
     }
     }
+
 }
 }

+ 3 - 11
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/AfterHandInExamExecutor.java

@@ -1,32 +1,21 @@
 package cn.com.qmth.examcloud.core.oe.task.service.pipeline;
 package cn.com.qmth.examcloud.core.oe.task.service.pipeline;
 
 
-import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.commons.helpers.KeyValuePair;
 import cn.com.qmth.examcloud.commons.helpers.KeyValuePair;
 import cn.com.qmth.examcloud.commons.helpers.ObjectHolder;
 import cn.com.qmth.examcloud.commons.helpers.ObjectHolder;
 import cn.com.qmth.examcloud.commons.helpers.pipeline.NodeExecuter;
 import cn.com.qmth.examcloud.commons.helpers.pipeline.NodeExecuter;
 import cn.com.qmth.examcloud.commons.helpers.pipeline.TaskContext;
 import cn.com.qmth.examcloud.commons.helpers.pipeline.TaskContext;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLog;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLog;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLogFactory;
 import cn.com.qmth.examcloud.commons.logging.ExamCloudLogFactory;
-import cn.com.qmth.examcloud.core.oe.student.api.ExamRecordDataCloudService;
-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.task.service.ExamCaptureService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 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.support.Constants;
 import cn.com.qmth.examcloud.support.Constants;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.bean.SysPropertyCacheBean;
 import cn.com.qmth.examcloud.support.cache.bean.SysPropertyCacheBean;
 import cn.com.qmth.examcloud.support.enums.ExamRecordStatus;
 import cn.com.qmth.examcloud.support.enums.ExamRecordStatus;
-import cn.com.qmth.examcloud.support.enums.HandInExamType;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.web.helpers.SequenceLockHelper;
 import cn.com.qmth.examcloud.web.helpers.SequenceLockHelper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -40,7 +29,9 @@ public class AfterHandInExamExecutor implements NodeExecuter<Long, ExamRecordDat
 
 
     @Autowired
     @Autowired
     private ExamRecordDataService examRecordDataService;
     private ExamRecordDataService examRecordDataService;
+
     private static Long DEFAULT_MAX_PROCESS_SECONDS = 30L;
     private static Long DEFAULT_MAX_PROCESS_SECONDS = 30L;
+
     @Autowired
     @Autowired
     private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(AfterHandInExamExecutor.class);
     private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(AfterHandInExamExecutor.class);
 
 
@@ -129,4 +120,5 @@ public class AfterHandInExamExecutor implements NodeExecuter<Long, ExamRecordDat
             LOG.debug("[AFTER-HAND-IN-EXAM-EXECUTOR-" + examRecordDataId + "]:" + msg);
             LOG.debug("[AFTER-HAND-IN-EXAM-EXECUTOR-" + examRecordDataId + "]:" + msg);
         }
         }
     }
     }
+
 }
 }

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

@@ -33,7 +33,9 @@ public class ClearExamDataCacheExecutor implements NodeExecuter<Long, ExamRecord
 
 
     @Autowired
     @Autowired
     private RedisClient redisClient;
     private RedisClient redisClient;
+
     private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(ClearExamDataCacheExecutor.class);
     private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(ClearExamDataCacheExecutor.class);
+
     @Autowired
     @Autowired
     private ExamingSessionService examingSessionService;
     private ExamingSessionService examingSessionService;
 
 
@@ -97,7 +99,7 @@ public class ClearExamDataCacheExecutor implements NodeExecuter<Long, ExamRecord
 
 
                 //清除考试记录缓存(设置缓存的过期时间)
                 //清除考试记录缓存(设置缓存的过期时间)
                 Long defaultExpiredSeconds = PropertyHolder.getLong("oe.student.cache.expiredSeconds", 60);//缓存默认过期时间
                 Long defaultExpiredSeconds = PropertyHolder.getLong("oe.student.cache.expiredSeconds", 60);//缓存默认过期时间
-//                redisClient.delete(RedisKeyHelper.getBuilder().examRecordDataKey(examRecordDataId));
+                //                redisClient.delete(RedisKeyHelper.getBuilder().examRecordDataKey(examRecordDataId));
                 redisClient.expire(RedisKeyHelper.getBuilder().examRecordDataKey(examRecordDataId),
                 redisClient.expire(RedisKeyHelper.getBuilder().examRecordDataKey(examRecordDataId),
                         defaultExpiredSeconds, TimeUnit.SECONDS);
                         defaultExpiredSeconds, TimeUnit.SECONDS);
 
 
@@ -147,4 +149,5 @@ public class ClearExamDataCacheExecutor implements NodeExecuter<Long, ExamRecord
             LOG.info("[CLEAR-EXAM-DATA-CACHE-EXECUTOR-" + examRecordDataId + "]:" + msg);
             LOG.info("[CLEAR-EXAM-DATA-CACHE-EXECUTOR-" + examRecordDataId + "]:" + msg);
         }
         }
     }
     }
+
 }
 }

+ 35 - 35
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/DataGainExamExecutor.java

@@ -1,12 +1,5 @@
 package cn.com.qmth.examcloud.core.oe.task.service.pipeline;
 package cn.com.qmth.examcloud.core.oe.task.service.pipeline;
 
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
 import cn.com.qmth.examcloud.commons.helpers.KeyValuePair;
 import cn.com.qmth.examcloud.commons.helpers.KeyValuePair;
 import cn.com.qmth.examcloud.commons.helpers.ObjectHolder;
 import cn.com.qmth.examcloud.commons.helpers.ObjectHolder;
 import cn.com.qmth.examcloud.commons.helpers.pipeline.NodeExecuter;
 import cn.com.qmth.examcloud.commons.helpers.pipeline.NodeExecuter;
@@ -21,6 +14,12 @@ import cn.com.qmth.examcloud.core.oe.student.api.response.GetExamRecordDataIdsRe
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 import cn.com.qmth.examcloud.core.oe.task.service.ExamRecordDataService;
 import cn.com.qmth.examcloud.support.enums.ExamRecordStatus;
 import cn.com.qmth.examcloud.support.enums.ExamRecordStatus;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
 import cn.com.qmth.examcloud.support.examing.ExamRecordData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * @Description 获取待处理数据
  * @Description 获取待处理数据
@@ -45,41 +44,41 @@ public class DataGainExamExecutor implements NodeExecuter<Long, ExamRecordData,
 
 
     @Override
     @Override
     public void execute(Long key, ExamRecordData value, List<KeyValuePair<Long, ExamRecordData>> outList,
     public void execute(Long key, ExamRecordData value, List<KeyValuePair<Long, ExamRecordData>> outList,
-            ObjectHolder<Boolean> removable, TaskContext context) throws Exception {
-    	LOG.debug("[DataGainExamExecutor]开始获取数据");
-    	Date start=new Date();
+                        ObjectHolder<Boolean> removable, TaskContext context) throws Exception {
+        LOG.debug("[DataGainExamExecutor]开始获取数据");
+        Date start = new Date();
         // 获取考试信息id
         // 获取考试信息id
         Long startId = 0l;
         Long startId = 0l;
         GetExamRecordDataIdsReq req = new GetExamRecordDataIdsReq();
         GetExamRecordDataIdsReq req = new GetExamRecordDataIdsReq();
         req.setBatchNum(batchNum);
         req.setBatchNum(batchNum);
         req.setSize(batchSize);
         req.setSize(batchSize);
-        for (;;) {
-        	List<KeyValuePair<Long, ExamRecordData>> tempList=new ArrayList<KeyValuePair<Long, ExamRecordData>>();
+        for (; ; ) {
+            List<KeyValuePair<Long, ExamRecordData>> tempList = new ArrayList<KeyValuePair<Long, ExamRecordData>>();
             req.setStartId(startId);
             req.setStartId(startId);
-            GetExamRecordDataIdsResp res=null;
-			try {
-				res = examRecordDataCloudService.getExamRecordDataIds(req);
-			} catch (Exception e) {
-				Date end=new Date();
-				long times=end.getTime()-start.getTime();
-				LOG.error("[DataGainExamExecutor]获取数据库中考试信息出错 startId:"+startId+" 获取数据条数:"+outList.size()+" 耗时:"+times+"ms",e );
-				return;
-			}
+            GetExamRecordDataIdsResp res = null;
+            try {
+                res = examRecordDataCloudService.getExamRecordDataIds(req);
+            } catch (Exception e) {
+                Date end = new Date();
+                long times = end.getTime() - start.getTime();
+                LOG.error("[DataGainExamExecutor]获取数据库中考试信息出错 startId:" + startId + " 获取数据条数:" + outList.size() + " 耗时:" + times + "ms", e);
+                return;
+            }
             List<Long> ids = res.getExamRecordDataIds();
             List<Long> ids = res.getExamRecordDataIds();
             if (ids == null || ids.size() == 0) {
             if (ids == null || ids.size() == 0) {
-            	Date end=new Date();
-				long times=end.getTime()-start.getTime();
-				LOG.debug("[DataGainExamExecutor]获取数据条数:"+outList.size() +" 耗时:"+times+"ms");
+                Date end = new Date();
+                long times = end.getTime() - start.getTime();
+                LOG.debug("[DataGainExamExecutor]获取数据条数:" + outList.size() + " 耗时:" + times + "ms");
                 return;
                 return;
             }
             }
             for (Long id : ids) {
             for (Long id : ids) {
                 // 根据id获取考试信息缓存
                 // 根据id获取考试信息缓存
                 ExamRecordData erd = examRecordDataService.getExamRecordDataCache(id);
                 ExamRecordData erd = examRecordDataService.getExamRecordDataCache(id);
                 if (erd == null) {
                 if (erd == null) {
-                    LOG.error("[DataGainExamExecutor]获取Redis中考试信息为空 examRecordDataId:"+id);
+                    LOG.error("[DataGainExamExecutor]获取Redis中考试信息为空 examRecordDataId:" + id);
                     updateExamRecordStatusError(id);
                     updateExamRecordStatusError(id);
-                }else {
-                	tempList.add(new KeyValuePair<Long, ExamRecordData>(id, erd));
+                } else {
+                    tempList.add(new KeyValuePair<Long, ExamRecordData>(id, erd));
                 }
                 }
             }
             }
 
 
@@ -88,13 +87,13 @@ public class DataGainExamExecutor implements NodeExecuter<Long, ExamRecordData,
             ureq.setBatchNum(batchNum);
             ureq.setBatchNum(batchNum);
             ureq.setIds(ids);
             ureq.setIds(ids);
             try {
             try {
-				examRecordDataCloudService.updateExamRecordDataBatchNum(ureq);
-			} catch (Exception e) {
-				Date end=new Date();
-				long times=end.getTime()-start.getTime();
-				LOG.error("[DataGainExamExecutor]修改考试记录batchNum出错 startId:"+startId+" 获取数据条数:"+outList.size() +" 耗时:"+times+"ms",e);
-				return;
-			}
+                examRecordDataCloudService.updateExamRecordDataBatchNum(ureq);
+            } catch (Exception e) {
+                Date end = new Date();
+                long times = end.getTime() - start.getTime();
+                LOG.error("[DataGainExamExecutor]修改考试记录batchNum出错 startId:" + startId + " 获取数据条数:" + outList.size() + " 耗时:" + times + "ms", e);
+                return;
+            }
             outList.addAll(tempList);
             outList.addAll(tempList);
             startId = ids.get(ids.size() - 1);
             startId = ids.get(ids.size() - 1);
         }
         }
@@ -107,7 +106,8 @@ public class DataGainExamExecutor implements NodeExecuter<Long, ExamRecordData,
             ureq.setId(id);
             ureq.setId(id);
             examRecordDataCloudService.updateExamRecordStatus(ureq);
             examRecordDataCloudService.updateExamRecordStatus(ureq);
         } catch (Exception e) {
         } catch (Exception e) {
-            LOG.error("[DataGainExamExecutor]修改考试记录状态失败 examRecordDataId:"+id,e);
+            LOG.error("[DataGainExamExecutor]修改考试记录状态失败 examRecordDataId:" + id, e);
         }
         }
     }
     }
+
 }
 }

+ 5 - 0
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/pipeline/HandInExamExecutor.java

@@ -39,12 +39,16 @@ public class HandInExamExecutor implements NodeExecuter<Long, ExamRecordData, Lo
 
 
     @Autowired
     @Autowired
     private ExamingSessionService examingSessionService;
     private ExamingSessionService examingSessionService;
+
     @Autowired
     @Autowired
     private ExamRecordDataService examRecordDataService;
     private ExamRecordDataService examRecordDataService;
+
     @Autowired
     @Autowired
     private RedisClient redisClient;
     private RedisClient redisClient;
+
     @Autowired
     @Autowired
     private ExamRecordDataCloudService examRecordDataCloudService;
     private ExamRecordDataCloudService examRecordDataCloudService;
+
     @Autowired
     @Autowired
     private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(HandInExamExecutor.class);
     private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(HandInExamExecutor.class);
 
 
@@ -212,4 +216,5 @@ public class HandInExamExecutor implements NodeExecuter<Long, ExamRecordData, Lo
             LOG.error("[HAND-IN-EXAM-EXECUTOR-" + examRecordDataId + "]:" + msg, e);
             LOG.error("[HAND-IN-EXAM-EXECUTOR-" + examRecordDataId + "]:" + msg, e);
         }
         }
     }
     }
+
 }
 }

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

@@ -55,20 +55,28 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
 
 
     @Autowired
     @Autowired
     private SyncExamDataCloudService syncExamDataCloudService;
     private SyncExamDataCloudService syncExamDataCloudService;
+
     @Autowired
     @Autowired
     private ExamRecordDataService examRecordDataService;
     private ExamRecordDataService examRecordDataService;
+
     @Autowired
     @Autowired
     private ExamCaptureRepo examCaptureRepo;
     private ExamCaptureRepo examCaptureRepo;
+
     @Autowired
     @Autowired
     private ExamSyncCaptureRepo examSyncCaptureRepo;
     private ExamSyncCaptureRepo examSyncCaptureRepo;
+
     @Autowired
     @Autowired
     private ExamRecordDataCloudService examRecordDataCloudService;
     private ExamRecordDataCloudService examRecordDataCloudService;
+
     @Autowired
     @Autowired
     private ExamScoreNoticeQueueCloudService examScoreNoticeQueueCloudService;
     private ExamScoreNoticeQueueCloudService examScoreNoticeQueueCloudService;
+
     @Autowired
     @Autowired
     private ExamBossService examBossService;
     private ExamBossService examBossService;
+
     @Autowired
     @Autowired
     private ExamContinuedRecordRepo examContinuedRecordRepo;
     private ExamContinuedRecordRepo examContinuedRecordRepo;
+
     @Autowired
     @Autowired
     private ExamProcessRecordRepo examProcessRecordRepo;
     private ExamProcessRecordRepo examProcessRecordRepo;
 
 
@@ -519,7 +527,7 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
             uperReq.setSyncStatus(SyncStatus.SYNCED.name());
             uperReq.setSyncStatus(SyncStatus.SYNCED.name());
             examRecordDataCloudService.updatePartialExamRecord(uperReq);
             examRecordDataCloudService.updatePartialExamRecord(uperReq);
         } catch (Exception e) {
         } catch (Exception e) {
-            this.errorLog("更新数据库表中的同步状态失败",examRecordDataId,e);
+            this.errorLog("更新数据库表中的同步状态失败", examRecordDataId, e);
         }
         }
     }
     }
 
 
@@ -529,9 +537,10 @@ public class SyncExamDataExecutor implements NodeExecuter<Long, ExamRecordData,
         }
         }
     }
     }
 
 
-    private void errorLog(String msg, Long examRecordDataId,Exception e) {
+    private void errorLog(String msg, Long examRecordDataId, Exception e) {
         if (LOG.isErrorEnabled()) {
         if (LOG.isErrorEnabled()) {
-            LOG.error("[SYNC-EXAM-DATA-EXECUTOR-" + examRecordDataId + "]:" + msg,e);
+            LOG.error("[SYNC-EXAM-DATA-EXECUTOR-" + examRecordDataId + "]:" + msg, e);
         }
         }
     }
     }
+
 }
 }

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

@@ -23,55 +23,59 @@ import java.util.concurrent.TimeUnit;
  * @author lideyin 20190620
  * @author lideyin 20190620
  */
  */
 public class BaiduFaceLivenessWorker implements Worker<ExamCaptureQueueInfo> {
 public class BaiduFaceLivenessWorker implements Worker<ExamCaptureQueueInfo> {
-	private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
 
 
-	@Override
-	public void process(WorkerController controller, ExamCaptureQueueInfo element) {
-		ThreadContext.put("TRACE_ID", "Q_" + element.getId());
-		ThreadContext.put("CALLER", "BAIDU_WORKER");
-		ExamCaptureProcessStatisticController.increaseFaceLivenessDetectCount();
-		if (captureLog.isDebugEnabled()) {
-			captureLog.debug("[BAIDU_FACELIVENESS_WORKER.] 图片处理数量+1,count= "
-					+ ExamCaptureProcessStatisticController.getFaceLivenessDetectCount());
-		}
-		ExamCaptureService examCaptureService = SpringContextHolder
-				.getBean(ExamCaptureService.class);
-		ExamCaptureQueueService examCaptureQueueService = SpringContextHolder
-				.getBean(ExamCaptureQueueService.class);
-		try {
-			examCaptureService.disposeBaiDuFaceLiveness(element);
-		} catch (StatusException e) {
-			while (true){
-				// 异常处理
-				if(examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(),e.getDesc(),
-						ExamCaptureQueueStatus.PROCESS_FACELIVENESS_FAILED)){
-					break;
-				};
-				Util.sleep(TimeUnit.MILLISECONDS,500);
-			}
-			if ((e.getCode().equals(Constants.BAIDU_FACELIVENESS_QPS_LIMIT_EXCEEDED_CODE))) {
-				// 如果超过并发次数,则添加异常次数
-				controller.addConcurrencyWarn();
-				captureLog.error("[BAIDU_FACELIVENESS_WORKER.] 超过并发次数 " );
-			} else {
-				ExamCaptureProcessStatisticController.increaseFaceLivenessDetectCount();
-				captureLog.error("[BAIDU_FACELIVENESS_WORKER.] 自定义异常 " + e.getDesc(), e);
-			}
-			Util.sleep(TimeUnit.MICROSECONDS, 50);
-		} catch (Exception e) {
-			ExamCaptureProcessStatisticController.increaseFaceLivenessDetectCount();
-			while (true){
-				// 异常处理
-				if(examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(),"系统异常",
-						ExamCaptureQueueStatus.PROCESS_FACELIVENESS_FAILED)){
-					break;
-				};
-				Util.sleep(TimeUnit.MILLISECONDS,500);
-			}
-			captureLog.error("[BAIDU_FACELIVENESS_WORKER.] 系统异常 " + e.getMessage(), e);
-			Util.sleep(TimeUnit.MICROSECONDS, 50);
-		}finally {
-			ThreadContext.clearAll();
-		}
-	}
+    private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
+
+    @Override
+    public void process(WorkerController controller, ExamCaptureQueueInfo element) {
+        ThreadContext.put("TRACE_ID", "Q_" + element.getId());
+        ThreadContext.put("CALLER", "BAIDU_WORKER");
+        ExamCaptureProcessStatisticController.increaseFaceLivenessDetectCount();
+        if (captureLog.isDebugEnabled()) {
+            captureLog.debug("[BAIDU_FACELIVENESS_WORKER.] 图片处理数量+1,count= "
+                    + ExamCaptureProcessStatisticController.getFaceLivenessDetectCount());
+        }
+        ExamCaptureService examCaptureService = SpringContextHolder
+                .getBean(ExamCaptureService.class);
+        ExamCaptureQueueService examCaptureQueueService = SpringContextHolder
+                .getBean(ExamCaptureQueueService.class);
+        try {
+            examCaptureService.disposeBaiDuFaceLiveness(element);
+        } catch (StatusException e) {
+            while (true) {
+                // 异常处理
+                if (examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(), e.getDesc(),
+                        ExamCaptureQueueStatus.PROCESS_FACELIVENESS_FAILED)) {
+                    break;
+                }
+                ;
+                Util.sleep(TimeUnit.MILLISECONDS, 500);
+            }
+            if ((e.getCode().equals(Constants.BAIDU_FACELIVENESS_QPS_LIMIT_EXCEEDED_CODE))) {
+                // 如果超过并发次数,则添加异常次数
+                controller.addConcurrencyWarn();
+                captureLog.error("[BAIDU_FACELIVENESS_WORKER.] 超过并发次数 ");
+            } else {
+                ExamCaptureProcessStatisticController.increaseFaceLivenessDetectCount();
+                captureLog.error("[BAIDU_FACELIVENESS_WORKER.] 自定义异常 " + e.getDesc(), e);
+            }
+            Util.sleep(TimeUnit.MICROSECONDS, 50);
+        } catch (Exception e) {
+            ExamCaptureProcessStatisticController.increaseFaceLivenessDetectCount();
+            while (true) {
+                // 异常处理
+                if (examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(), "系统异常",
+                        ExamCaptureQueueStatus.PROCESS_FACELIVENESS_FAILED)) {
+                    break;
+                }
+                ;
+                Util.sleep(TimeUnit.MILLISECONDS, 500);
+            }
+            captureLog.error("[BAIDU_FACELIVENESS_WORKER.] 系统异常 " + e.getMessage(), e);
+            Util.sleep(TimeUnit.MICROSECONDS, 50);
+        } finally {
+            ThreadContext.clearAll();
+        }
+    }
+
 }
 }

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

@@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit;
  * @author lideyin 20190620
  * @author lideyin 20190620
  */
  */
 public class FacePPCompareWorker implements Worker<ExamCaptureQueueInfo> {
 public class FacePPCompareWorker implements Worker<ExamCaptureQueueInfo> {
+
     private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
     private final Log captureLog = LogFactory.getLog("PROCESS_EXAM_CAPTURE_TASK_LOGGER");
 
 
     @Override
     @Override
@@ -43,13 +44,14 @@ public class FacePPCompareWorker implements Worker<ExamCaptureQueueInfo> {
         try {
         try {
             examCaptureService.disposeFaceCompare(element);
             examCaptureService.disposeFaceCompare(element);
         } catch (StatusException e) {
         } catch (StatusException e) {
-            while (true){
+            while (true) {
                 // 异常处理
                 // 异常处理
-                if(examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(),e.getDesc(),
-                        ExamCaptureQueueStatus.PROCESS_FACE_COMPARE_FAILED)){
+                if (examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(), e.getDesc(),
+                        ExamCaptureQueueStatus.PROCESS_FACE_COMPARE_FAILED)) {
                     break;
                     break;
-                };
-                Util.sleep(TimeUnit.MILLISECONDS,500);
+                }
+                ;
+                Util.sleep(TimeUnit.MILLISECONDS, 500);
             }
             }
 
 
             if ((e.getCode().equals(Constants.FACE_COMPARE_CONCURRENCY_LIMIT_EXCEEDED))) {
             if ((e.getCode().equals(Constants.FACE_COMPARE_CONCURRENCY_LIMIT_EXCEEDED))) {
@@ -66,19 +68,20 @@ public class FacePPCompareWorker implements Worker<ExamCaptureQueueInfo> {
         } catch (Exception e) {
         } catch (Exception e) {
             ExamCaptureProcessStatisticController.increaseFaceCompareFailedCount();
             ExamCaptureProcessStatisticController.increaseFaceCompareFailedCount();
             // 异常处理
             // 异常处理
-            while (true){
+            while (true) {
                 // 异常处理
                 // 异常处理
-                if(examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(),"系统异常",
-                        ExamCaptureQueueStatus.PROCESS_FACE_COMPARE_FAILED)){
+                if (examCaptureQueueService.saveExamCaptureQueueEntityByFailed(element.getId(), "系统异常",
+                        ExamCaptureQueueStatus.PROCESS_FACE_COMPARE_FAILED)) {
                     break;
                     break;
                 }
                 }
-                Util.sleep(TimeUnit.MILLISECONDS,500);
+                Util.sleep(TimeUnit.MILLISECONDS, 500);
             }
             }
-            captureLog.error("[FACEPP_COMPARE_WORKER.] 系统异常 "  +
+            captureLog.error("[FACEPP_COMPARE_WORKER.] 系统异常 " +
                     ",failedCount=" + ExamCaptureProcessStatisticController.getFaceCompareFailedCount(), e);
                     ",failedCount=" + ExamCaptureProcessStatisticController.getFaceCompareFailedCount(), e);
             Util.sleep(TimeUnit.MICROSECONDS, 50);
             Util.sleep(TimeUnit.MICROSECONDS, 50);
         } finally {
         } finally {
             ThreadContext.clearAll();
             ThreadContext.clearAll();
         }
         }
     }
     }
+
 }
 }

+ 38 - 38
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/OETaskApp.java

@@ -1,5 +1,10 @@
 package cn.com.qmth.examcloud.core.oe.task.starter;
 package cn.com.qmth.examcloud.core.oe.task.starter;
 
 
+import cn.com.qmth.examcloud.core.oe.task.base.UniqueRuleHolder;
+import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
+import cn.com.qmth.examcloud.web.bootstrap.AppBootstrap;
+import cn.com.qmth.examcloud.web.jpa.DataIntegrityViolationTransverter;
+import cn.com.qmth.examcloud.web.support.SpringContextHolder;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
@@ -15,12 +20,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.web.multipart.MultipartResolver;
 import org.springframework.web.multipart.MultipartResolver;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
 
-import cn.com.qmth.examcloud.core.oe.task.base.UniqueRuleHolder;
-import cn.com.qmth.examcloud.support.filestorage.FileStorageUtil;
-import cn.com.qmth.examcloud.web.bootstrap.AppBootstrap;
-import cn.com.qmth.examcloud.web.jpa.DataIntegrityViolationTransverter;
-import cn.com.qmth.examcloud.web.support.SpringContextHolder;
-
 @SpringBootApplication
 @SpringBootApplication
 @Configuration
 @Configuration
 @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
 @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
@@ -33,39 +32,40 @@ import cn.com.qmth.examcloud.web.support.SpringContextHolder;
 @EnableJpaRepositories(basePackages = {"cn.com.qmth"})
 @EnableJpaRepositories(basePackages = {"cn.com.qmth"})
 public class OETaskApp {
 public class OETaskApp {
 
 
-	static {
-		String runtimeLevel = System.getProperty("log.commonLevel");
-		if (null == runtimeLevel) {
-			System.setProperty("log.commonLevel", "DEBUG");
-		}
-		System.setProperty("hibernate.dialect.storage_engine", "innodb");
-		DataIntegrityViolationTransverter.setUniqueRules(UniqueRuleHolder.getUniqueRuleList());
-	}
+    static {
+        String runtimeLevel = System.getProperty("log.commonLevel");
+        if (null == runtimeLevel) {
+            System.setProperty("log.commonLevel", "DEBUG");
+        }
+        System.setProperty("hibernate.dialect.storage_engine", "innodb");
+        DataIntegrityViolationTransverter.setUniqueRules(UniqueRuleHolder.getUniqueRuleList());
+    }
+
+    /**
+     * main
+     *
+     * @param args
+     * @throws Exception
+     */
+    public static void main(String[] args) throws Exception {
+        AppBootstrap.run(OETaskApp.class, args);
+        FileStorageUtil.initYunClient();
+        test();
+    }
 
 
-	/**
-	 * main
-	 * 
-	 * @param args
-	 * @throws Exception
-	 */
-	public static void main(String[] args) throws Exception {
-		AppBootstrap.run(OETaskApp.class, args);
-		FileStorageUtil.initYunClient();
-		test();
-	}
+    private static void test() {
+        Tester tester = SpringContextHolder.getBean(Tester.class);
+        tester.test();
+    }
 
 
-	private static void test() {
-		Tester tester = SpringContextHolder.getBean(Tester.class);
-		tester.test();
-	}
+    @Bean(name = "multipartResolver")
+    public MultipartResolver multipartResolver() {
+        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
+        resolver.setDefaultEncoding("UTF-8");
+        resolver.setResolveLazily(true);
+        resolver.setMaxInMemorySize(2);
+        resolver.setMaxUploadSize(200 * 1024 * 1024);
+        return resolver;
+    }
 
 
-	@Bean(name = "multipartResolver")
-	public MultipartResolver multipartResolver() {
-		CommonsMultipartResolver resolver = new CommonsMultipartResolver();
-		resolver.setDefaultEncoding("UTF-8");
-		resolver.setResolveLazily(true);
-		resolver.setMaxInMemorySize(2);
-		resolver.setMaxUploadSize(200 * 1024 * 1024);
-		return resolver;
-	}
 }
 }

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

@@ -5,8 +5,8 @@ import org.springframework.stereotype.Component;
 @Component
 @Component
 public class Tester {
 public class Tester {
 
 
-	public void test() {
+    public void test() {
 
 
-	}
+    }
 
 
 }
 }

+ 99 - 101
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ExamCloudResourceManager.java

@@ -1,15 +1,5 @@
 package cn.com.qmth.examcloud.core.oe.task.starter.config;
 package cn.com.qmth.examcloud.core.oe.task.starter.config;
 
 
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.google.common.collect.Sets;
-
 import cn.com.qmth.examcloud.api.commons.security.bean.AccessApp;
 import cn.com.qmth.examcloud.api.commons.security.bean.AccessApp;
 import cn.com.qmth.examcloud.api.commons.security.bean.Role;
 import cn.com.qmth.examcloud.api.commons.security.bean.Role;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
@@ -23,6 +13,14 @@ import cn.com.qmth.examcloud.support.cache.bean.AppCacheBean;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import cn.com.qmth.examcloud.web.security.ResourceManager;
 import cn.com.qmth.examcloud.web.security.ResourceManager;
 import cn.com.qmth.examcloud.web.support.ApiInfo;
 import cn.com.qmth.examcloud.web.support.ApiInfo;
+import com.google.common.collect.Sets;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * Demo资源管理器
  * Demo资源管理器
@@ -34,96 +32,96 @@ import cn.com.qmth.examcloud.web.support.ApiInfo;
 @Component
 @Component
 public class ExamCloudResourceManager implements ResourceManager {
 public class ExamCloudResourceManager implements ResourceManager {
 
 
-	@Autowired
-	RedisClient redisClient;
-
-	static {
-		PropertiesUtil.loadFromPath(PathUtil.getResoucePath("security.properties"));
-	}
-
-	@Override
-	public AccessApp getAccessApp(Long appId) {
-		AppCacheBean appCacheBean = CacheHelper.getApp(appId);
-		AccessApp app = new AccessApp();
-		app.setAppId(appCacheBean.getId());
-		app.setAppCode(appCacheBean.getCode());
-		app.setAppName(appCacheBean.getName());
-		app.setSecretKey(appCacheBean.getSecretKey());
-		app.setTimeRange(appCacheBean.getTimeRange());
-		return app;
-	}
-
-	@Override
-	public boolean isNaked(ApiInfo apiInfo, String mapping) {
-		if (null == apiInfo) {
-			return true;
-		}
-
-		if (null != apiInfo) {
-			if (apiInfo.isNaked()) {
-				return true;
-			}
-		}
-		if(mapping.matches(".*swagger.*")) {
-			return true;
-		}
-		return false;
-	}
-
-	@Override
-	public boolean hasPermission(User user, ApiInfo apiInfo, String mapping) {
-
-		// 学生鉴权
-		if (user.getUserType().equals(UserType.STUDENT)) {
-			return true;
-		}
-
-		List<Role> roleList = user.getRoleList();
-
-		if (CollectionUtils.isEmpty(roleList)) {
-			return false;
-		}
-
-		for (Role role : roleList) {
-			if (role.getRoleCode().equals(RoleMeta.SUPER_ADMIN.name())) {
-				return true;
-			}
-		}
-
-		// 权限组集合
-		String privilegeGroups = PropertiesUtil.getString(mapping);
-		if (StringUtils.isBlank(privilegeGroups)) {
-			return true;
-		}
-
-		// 用户权限集合
-		Set<String> rolePrivilegeList = Sets.newHashSet();
-		Long rootOrgId = user.getRootOrgId();
-		for (Role role : roleList) {
-			String key = "$_P_" + rootOrgId + "_" + role.getRoleId();
-			String rolePrivileges = redisClient.get(key, String.class);
-
-			List<String> rpList = RegExpUtil.findAll(rolePrivileges, "\\w+");
-			rolePrivilegeList.addAll(rpList);
-		}
-
-		List<String> privilegeGroupList = RegExpUtil.findAll(privilegeGroups, "[^\\;]+");
-
-		for (String pg : privilegeGroupList) {
-			pg = pg.trim();
-			if (StringUtils.isBlank(pg)) {
-				continue;
-			}
-
-			List<String> pList = RegExpUtil.findAll(pg, "[^\\,]+");
-			if (rolePrivilegeList.containsAll(pList)) {
-				return true;
-			} else {
-				continue;
-			}
-		}
-
-		return false;
-	}
+    @Autowired
+    RedisClient redisClient;
+
+    static {
+        PropertiesUtil.loadFromPath(PathUtil.getResoucePath("security.properties"));
+    }
+
+    @Override
+    public AccessApp getAccessApp(Long appId) {
+        AppCacheBean appCacheBean = CacheHelper.getApp(appId);
+        AccessApp app = new AccessApp();
+        app.setAppId(appCacheBean.getId());
+        app.setAppCode(appCacheBean.getCode());
+        app.setAppName(appCacheBean.getName());
+        app.setSecretKey(appCacheBean.getSecretKey());
+        app.setTimeRange(appCacheBean.getTimeRange());
+        return app;
+    }
+
+    @Override
+    public boolean isNaked(ApiInfo apiInfo, String mapping) {
+        if (null == apiInfo) {
+            return true;
+        }
+
+        if (null != apiInfo) {
+            if (apiInfo.isNaked()) {
+                return true;
+            }
+        }
+        if (mapping.matches(".*swagger.*")) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasPermission(User user, ApiInfo apiInfo, String mapping) {
+
+        // 学生鉴权
+        if (user.getUserType().equals(UserType.STUDENT)) {
+            return true;
+        }
+
+        List<Role> roleList = user.getRoleList();
+
+        if (CollectionUtils.isEmpty(roleList)) {
+            return false;
+        }
+
+        for (Role role : roleList) {
+            if (role.getRoleCode().equals(RoleMeta.SUPER_ADMIN.name())) {
+                return true;
+            }
+        }
+
+        // 权限组集合
+        String privilegeGroups = PropertiesUtil.getString(mapping);
+        if (StringUtils.isBlank(privilegeGroups)) {
+            return true;
+        }
+
+        // 用户权限集合
+        Set<String> rolePrivilegeList = Sets.newHashSet();
+        Long rootOrgId = user.getRootOrgId();
+        for (Role role : roleList) {
+            String key = "$_P_" + rootOrgId + "_" + role.getRoleId();
+            String rolePrivileges = redisClient.get(key, String.class);
+
+            List<String> rpList = RegExpUtil.findAll(rolePrivileges, "\\w+");
+            rolePrivilegeList.addAll(rpList);
+        }
+
+        List<String> privilegeGroupList = RegExpUtil.findAll(privilegeGroups, "[^\\;]+");
+
+        for (String pg : privilegeGroupList) {
+            pg = pg.trim();
+            if (StringUtils.isBlank(pg)) {
+                continue;
+            }
+
+            List<String> pList = RegExpUtil.findAll(pg, "[^\\,]+");
+            if (rolePrivilegeList.containsAll(pList)) {
+                return true;
+            } else {
+                continue;
+            }
+        }
+
+        return false;
+    }
 
 
 }
 }

+ 29 - 30
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/ExamCloudWebMvcConfigurer.java

@@ -2,19 +2,18 @@ package cn.com.qmth.examcloud.core.oe.task.starter.config;
 
 
 import cn.com.qmth.examcloud.web.interceptor.ApiFlowLimitedInterceptor;
 import cn.com.qmth.examcloud.web.interceptor.ApiFlowLimitedInterceptor;
 import cn.com.qmth.examcloud.web.interceptor.ApiStatisticInterceptor;
 import cn.com.qmth.examcloud.web.interceptor.ApiStatisticInterceptor;
+import cn.com.qmth.examcloud.web.interceptor.FirstInterceptor;
 import cn.com.qmth.examcloud.web.interceptor.SeqlockInterceptor;
 import cn.com.qmth.examcloud.web.interceptor.SeqlockInterceptor;
+import cn.com.qmth.examcloud.web.redis.RedisClient;
+import cn.com.qmth.examcloud.web.security.RequestPermissionInterceptor;
+import cn.com.qmth.examcloud.web.security.ResourceManager;
+import cn.com.qmth.examcloud.web.security.RpcInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 
-import cn.com.qmth.examcloud.web.interceptor.FirstInterceptor;
-import cn.com.qmth.examcloud.web.redis.RedisClient;
-import cn.com.qmth.examcloud.web.security.RequestPermissionInterceptor;
-import cn.com.qmth.examcloud.web.security.ResourceManager;
-import cn.com.qmth.examcloud.web.security.RpcInterceptor;
-
 /**
 /**
  * WebMvcConfigurer
  * WebMvcConfigurer
  *
  *
@@ -25,29 +24,29 @@ import cn.com.qmth.examcloud.web.security.RpcInterceptor;
 @Configuration
 @Configuration
 public class ExamCloudWebMvcConfigurer implements WebMvcConfigurer {
 public class ExamCloudWebMvcConfigurer implements WebMvcConfigurer {
 
 
-	@Autowired
-	ResourceManager resourceManager;
-
-	@Autowired
-	RedisClient redisClient;
-
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		registry.addInterceptor(new FirstInterceptor()).addPathPatterns("/**");
-		registry.addInterceptor(new ApiFlowLimitedInterceptor()).addPathPatterns("/**");
-		registry.addInterceptor(new RpcInterceptor(resourceManager)).addPathPatterns("/**");
-		RequestPermissionInterceptor permissionInterceptor = new RequestPermissionInterceptor(
-				resourceManager, redisClient);
-		registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");
-		registry.addInterceptor(new SeqlockInterceptor(redisClient)).addPathPatterns("/**");
-		registry.addInterceptor(new ApiStatisticInterceptor()).addPathPatterns("/**");
-
-	}
-
-	@Override
-	public void addCorsMappings(CorsRegistry registry) {
-		registry.addMapping("/**").allowedOrigins("*").allowCredentials(false).allowedMethods("*")
-				.maxAge(3600);
-	}
+    @Autowired
+    ResourceManager resourceManager;
+
+    @Autowired
+    RedisClient redisClient;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(new FirstInterceptor()).addPathPatterns("/**");
+        registry.addInterceptor(new ApiFlowLimitedInterceptor()).addPathPatterns("/**");
+        registry.addInterceptor(new RpcInterceptor(resourceManager)).addPathPatterns("/**");
+        RequestPermissionInterceptor permissionInterceptor = new RequestPermissionInterceptor(
+                resourceManager, redisClient);
+        registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");
+        registry.addInterceptor(new SeqlockInterceptor(redisClient)).addPathPatterns("/**");
+        registry.addInterceptor(new ApiStatisticInterceptor()).addPathPatterns("/**");
+
+    }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**").allowedOrigins("*").allowCredentials(false).allowedMethods("*")
+                .maxAge(3600);
+    }
 
 
 }
 }

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

@@ -49,7 +49,7 @@ public class ProcessBaiduFacelivenessTask implements ApplicationRunner {
 
 
         for (ExamCaptureQueueEntity offeredQueueEntity : examCaptureQueueList) {
         for (ExamCaptureQueueEntity offeredQueueEntity : examCaptureQueueList) {
             while (true) {
             while (true) {
-                try{
+                try {
                     ThreadContext.put("TRACE_ID", "Q_" + offeredQueueEntity.getId());
                     ThreadContext.put("TRACE_ID", "Q_" + offeredQueueEntity.getId());
                     ThreadContext.put("CALLER", "BAIDU_TASK");
                     ThreadContext.put("CALLER", "BAIDU_TASK");
 
 
@@ -65,7 +65,7 @@ public class ProcessBaiduFacelivenessTask implements ApplicationRunner {
                             + "] 向工作队列中添加数据失败,30秒后重试:fileUrl=" + offeredQueueEntity.getFileUrl());
                             + "] 向工作队列中添加数据失败,30秒后重试:fileUrl=" + offeredQueueEntity.getFileUrl());
 
 
                     Util.sleep(PropertyHolder.getInt("$capture.queue.offer.sleepSeconds.", 30));
                     Util.sleep(PropertyHolder.getInt("$capture.queue.offer.sleepSeconds.", 30));
-                }finally {
+                } finally {
                     ThreadContext.clearAll();
                     ThreadContext.clearAll();
                 }
                 }
 
 
@@ -115,8 +115,9 @@ public class ProcessBaiduFacelivenessTask implements ApplicationRunner {
         thread.setDaemon(true);
         thread.setDaemon(true);
         thread.start();
         thread.start();
     }
     }
-    private ExamCaptureQueueInfo copyExamCaptureQueueInfoFrom(ExamCaptureQueueEntity entity){
-        ExamCaptureQueueInfo info =new ExamCaptureQueueInfo();
+
+    private ExamCaptureQueueInfo copyExamCaptureQueueInfoFrom(ExamCaptureQueueEntity entity) {
+        ExamCaptureQueueInfo info = new ExamCaptureQueueInfo();
         info.setFaceCompareResult(entity.getFaceCompareResult());
         info.setFaceCompareResult(entity.getFaceCompareResult());
         info.setFacelivenessResult(entity.getFacelivenessResult());
         info.setFacelivenessResult(entity.getFacelivenessResult());
         info.setPass(entity.getIsPass());
         info.setPass(entity.getIsPass());
@@ -140,4 +141,5 @@ public class ProcessBaiduFacelivenessTask implements ApplicationRunner {
         info.setUpdateTime(entity.getUpdateTime());
         info.setUpdateTime(entity.getUpdateTime());
         return info;
         return info;
     }
     }
+
 }
 }

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

@@ -31,6 +31,7 @@ import java.util.Map;
 @Component
 @Component
 @Order(202)
 @Order(202)
 public class ProcessFaceCompareAlarmTask implements ApplicationRunner {
 public class ProcessFaceCompareAlarmTask implements ApplicationRunner {
+
     @Autowired
     @Autowired
     SmsCloudService smsCloudService;
     SmsCloudService smsCloudService;
 
 
@@ -133,7 +134,7 @@ public class ProcessFaceCompareAlarmTask implements ApplicationRunner {
      * @return boolean
      * @return boolean
      */
      */
     private boolean needSmsAlarm() {
     private boolean needSmsAlarm() {
-        if (ExamCaptureProcessStatisticController.getFaceCompareCount()==0){
+        if (ExamCaptureProcessStatisticController.getFaceCompareCount() == 0) {
             return false;
             return false;
         }
         }
         SysPropertyCacheBean expressionProperty = CacheHelper.getSysProperty("capture.faceCompare.expression.alarm");
         SysPropertyCacheBean expressionProperty = CacheHelper.getSysProperty("capture.faceCompare.expression.alarm");

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

@@ -143,4 +143,5 @@ public class ProcessFaceCompareQueueTask implements ApplicationRunner {
         info.setUpdateTime(entity.getUpdateTime());
         info.setUpdateTime(entity.getUpdateTime());
         return info;
         return info;
     }
     }
+
 }
 }

+ 9 - 0
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/StreamTaskExecutor.java

@@ -21,21 +21,30 @@ import org.springframework.stereotype.Component;
 @Component
 @Component
 @Order(300)
 @Order(300)
 public class StreamTaskExecutor implements ApplicationRunner {
 public class StreamTaskExecutor implements ApplicationRunner {
+
     @Autowired
     @Autowired
     private DataGainExamExecutor dataGainExamExecutor;
     private DataGainExamExecutor dataGainExamExecutor;
+
     @Autowired
     @Autowired
     private HandInExamExecutor handInExamExecutor;
     private HandInExamExecutor handInExamExecutor;
+
     @Autowired
     @Autowired
     private AfterHandInExamExecutor afterHandInExamExecutor;
     private AfterHandInExamExecutor afterHandInExamExecutor;
+
     @Autowired
     @Autowired
     private SyncExamDataExecutor syncExamDataExecutor;
     private SyncExamDataExecutor syncExamDataExecutor;
+
     @Autowired
     @Autowired
     private ClearExamDataCacheExecutor clearExamDataCacheExecutor;
     private ClearExamDataCacheExecutor clearExamDataCacheExecutor;
 
 
     private static Integer DEFAULT_GAIN_EXAM_DATA_EXECUTOR_SLEEP_SECONDS = 2;
     private static Integer DEFAULT_GAIN_EXAM_DATA_EXECUTOR_SLEEP_SECONDS = 2;
+
     private static Integer DEFAULT_HAND_IN_EXAM_EXECUTOR_SLEEP_SECONDS = 2;
     private static Integer DEFAULT_HAND_IN_EXAM_EXECUTOR_SLEEP_SECONDS = 2;
+
     private static Integer DEFAULT_AFTER_HAND_IN_EXAM_EXECUTOR_SLEEP_SECONDS = 1;
     private static Integer DEFAULT_AFTER_HAND_IN_EXAM_EXECUTOR_SLEEP_SECONDS = 1;
+
     private static Integer DEFAULT_SYNC_EXAM_DATA_EXECUTOR_SLEEP_SECONDS = 1;
     private static Integer DEFAULT_SYNC_EXAM_DATA_EXECUTOR_SLEEP_SECONDS = 1;
+
     private static Integer DEFAULT_CLEAR_EXAM_DATA_CACHE_EXECUTOR_SLEEP_SECONDS = 1;
     private static Integer DEFAULT_CLEAR_EXAM_DATA_CACHE_EXECUTOR_SLEEP_SECONDS = 1;
 
 
     @Override
     @Override

+ 18 - 19
examcloud-core-oe-task-starter/src/main/java/cn/com/qmth/examcloud/core/oe/task/starter/config/SystemStartup.java

@@ -1,7 +1,7 @@
 package cn.com.qmth.examcloud.core.oe.task.starter.config;
 package cn.com.qmth.examcloud.core.oe.task.starter.config;
 
 
-import java.util.List;
-
+import cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException;
+import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationArguments;
@@ -11,8 +11,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
 import org.springframework.core.annotation.Order;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException;
-import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
+import java.util.List;
 
 
 /**
 /**
  * 系统启动
  * 系统启动
@@ -25,25 +24,25 @@ import cn.com.qmth.examcloud.web.bootstrap.PropertyHolder;
 @Order(99)
 @Order(99)
 public class SystemStartup implements ApplicationRunner {
 public class SystemStartup implements ApplicationRunner {
 
 
-	@Autowired
-	private DiscoveryClient discoveryClient;
+    @Autowired
+    private DiscoveryClient discoveryClient;
 
 
-	public void start() {
+    public void start() {
 
 
-		String appName = PropertyHolder.getString("spring.application.name");
+        String appName = PropertyHolder.getString("spring.application.name");
 
 
-		if (StringUtils.isNotBlank(appName)) {
-			List<ServiceInstance> instances = discoveryClient.getInstances(appName);
-			if (!instances.isEmpty()) {
-				throw new ExamCloudRuntimeException("multiple instances!");
-			}
-		}
+        if (StringUtils.isNotBlank(appName)) {
+            List<ServiceInstance> instances = discoveryClient.getInstances(appName);
+            if (!instances.isEmpty()) {
+                throw new ExamCloudRuntimeException("multiple instances!");
+            }
+        }
 
 
-	}
+    }
 
 
-	@Override
-	public void run(ApplicationArguments args) throws Exception {
-		start();
-	}
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        start();
+    }
 
 
 }
 }