deason 10 ヶ月 前
コミット
b846065257

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

@@ -4,13 +4,14 @@ import cn.com.qmth.examcloud.core.oe.student.dao.entity.ExamCaptureQueueEntity;
 import cn.com.qmth.examcloud.core.oe.task.service.bean.FaceApiParam;
 
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 处理考试抓拍队列
  */
 public interface ExamCaptureQueueService {
 
-    void handlerExamCaptureQueuesByExamRecordDataId(Long examRecordDataId, List<ExamCaptureQueueEntity> queues, FaceApiParam param) throws Exception;
+    void handlerExamCaptureQueuesByExamRecordDataId(Long examRecordDataId, List<ExamCaptureQueueEntity> queues, FaceApiParam param, AtomicInteger successCount);
 
     List<Long> findQueuesGroupByExamRecordDataId(int shardTotal, int shardIndex, int batchSize, int maxErrorNum, boolean examHandInFirst);
 

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

@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * 处理考试抓拍队列
@@ -55,7 +56,8 @@ public class ExamCaptureQueueServiceImpl implements ExamCaptureQueueService {
     private FaceVerifyService faceVerifyService;
 
     @Override
-    public void handlerExamCaptureQueuesByExamRecordDataId(Long examRecordDataId, List<ExamCaptureQueueEntity> queues, FaceApiParam param) throws Exception {
+    public void handlerExamCaptureQueuesByExamRecordDataId(Long examRecordDataId, List<ExamCaptureQueueEntity> queues
+            , FaceApiParam param, AtomicInteger successCount) {
         if (CollectionUtils.isEmpty(queues)) {
             return;
         }
@@ -125,6 +127,7 @@ public class ExamCaptureQueueServiceImpl implements ExamCaptureQueueService {
             if (compareFinished && verifyFinished) {
                 // 保存最终结果并删除该队列记录
                 this.saveExamCaptureAndDeleteQueue(queue);
+                successCount.incrementAndGet();
             } else {
                 examCaptureQueueRepo.save(queue);
             }

+ 7 - 7
examcloud-core-oe-task-service/src/main/java/cn/com/qmth/examcloud/core/oe/task/service/job/FaceVerifyJobHandler.java

@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 
@@ -77,6 +78,7 @@ public class FaceVerifyJobHandler {
 
         // 创建线程池
         ExecutorService executorService = Executors.newFixedThreadPool(param.getMaxThreadNum());
+        AtomicInteger successCount = new AtomicInteger();
         for (Map.Entry<Long, List<ExamCaptureQueueEntity>> entry : maps.entrySet()) {
             executorService.execute(() -> {
                 // 分别按“考试记录ID”集中处理该“考试记录ID”下的抓拍照片队列记录(通常只有几条)
@@ -85,12 +87,9 @@ public class FaceVerifyJobHandler {
 
                 try {
                     SequenceLockHelper.getLockSimple(lockKey);
-                    examCaptureQueueService.handlerExamCaptureQueuesByExamRecordDataId(examRecordDataId, entry.getValue(), param);
+                    examCaptureQueueService.handlerExamCaptureQueuesByExamRecordDataId(examRecordDataId, entry.getValue(), param, successCount);
                 } catch (Exception e) {
-                    if (e instanceof InterruptedException) {
-                        // 若线程终止,则抛出交由任务调度中心处理
-                        log.warn("当前人脸比对任务线程被终止!examRecordDataId:{}, error:{}", examRecordDataId, e.getMessage());
-                    } else if (e instanceof SequenceLockException) {
+                    if (e instanceof SequenceLockException) {
                         // 若锁问题,下次会继续执行
                         log.warn("当前人脸比对任务获取锁失败!examRecordDataId:{}, redisKey:{}", examRecordDataId, lockKey);
                     } else {
@@ -110,8 +109,9 @@ public class FaceVerifyJobHandler {
         }
 
         long allCost = Math.max((System.currentTimeMillis() - startTime) / 1000, 1);
-        log.warn("分片任务_FACE_{}_{} 本次处理比对照片数:{} 约{}个每秒 threadNum:{} cost:{}s", shardTotal, shardIndex,
-                todoQueues.size(), (double) todoQueues.size() / allCost, param.getMaxThreadNum(), allCost);
+        log.warn("分片任务_FACE_{}_{} 本次处理比对照片数:{} 成功数:{} 约{}个每秒 threadNum:{} cost:{}s",
+                shardTotal, shardIndex, todoQueues.size(), successCount.get(), (float) todoQueues.size() / allCost,
+                param.getMaxThreadNum(), allCost);
     }
 
     private FaceApiParam parseJobParam(String jobParam) {