wangliang 4 年 前
コミット
cd6f5f1222

+ 24 - 0
themis-business/src/main/java/com/qmth/themis/business/cache/ExamRecordCacheUtil.java

@@ -396,6 +396,18 @@ public class ExamRecordCacheUtil {
         redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorRandom", faceCompareErrorRandom);
     }
 
+    public static void setMultipleFaceCountErrorNum(Long recordId, Integer multipleFaceCountErrorNum) {
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), "multipleFaceCountErrorNum", multipleFaceCountErrorNum);
+    }
+
+    public static void setNoFaceCountErrorNum(Long recordId, Integer noFaceCountErrorNum) {
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), "noFaceCountErrorNum", noFaceCountErrorNum);
+    }
+
+    public static void setFaceCompareErrorNum(Long recordId, Integer faceCompareErrorNum) {
+        redisUtil.set(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorNum", faceCompareErrorNum);
+    }
+
     public static String getMultipleFaceCountErrorRandom(Long recordId) {
         return (String) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "multipleFaceCountErrorRandom");
     }
@@ -407,4 +419,16 @@ public class ExamRecordCacheUtil {
     public static String getFaceCompareErrorRandom(Long recordId) {
         return (String) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorRandom");
     }
+
+    public static Integer getMultipleFaceCountErrorNum(Long recordId) {
+        return Objects.nonNull(redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "multipleFaceCountErrorNum")) ? (Integer) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "multipleFaceCountErrorNum") : 0;
+    }
+
+    public static Integer getNoFaceCountErrorNum(Long recordId) {
+        return Objects.nonNull(redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "noFaceCountErrorNum")) ? (Integer) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "noFaceCountErrorNum") : 0;
+    }
+
+    public static Integer getFaceCompareErrorNum(Long recordId) {
+        return Objects.nonNull(redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorNum")) ? (Integer) redisUtil.get(RedisKeyHelper.examRecordCacheKey(recordId), "faceCompareErrorNum") : 0;
+    }
 }

+ 0 - 7
themis-business/src/main/java/com/qmth/themis/business/service/impl/WarningServiceImpl.java

@@ -36,9 +36,6 @@ public class WarningServiceImpl implements WarningService {
     @Resource
     TEConfigService teConfigService;
 
-    @Resource
-    RedisUtil redisUtil;
-
     @Resource
     TOeFaceVerifyHistoryService faceVerifyHistoryService;
 
@@ -78,7 +75,6 @@ public class WarningServiceImpl implements WarningService {
                     tIeInvigilateWarnInfoService.saveOrUpdate(tIeInvigilateWarnInfo);
                     this.setWarningCount(recordId);
                     this.setPhotoUrls(map, photoUrl, tIeInvigilateWarnInfo, examStudentCacheBean, recordId);
-                    ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
                 }
             }
         } else if (faceCount <= 0) {//未检测到人脸
@@ -91,7 +87,6 @@ public class WarningServiceImpl implements WarningService {
                     tIeInvigilateWarnInfoService.saveOrUpdate(tIeInvigilateWarnInfo);
                     this.setWarningCount(recordId);
                     this.setPhotoUrls(map, photoUrl, tIeInvigilateWarnInfo, examStudentCacheBean, recordId);
-                    ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
                 }
             }
         }
@@ -122,14 +117,12 @@ public class WarningServiceImpl implements WarningService {
                 tIeInvigilateWarnInfoService.saveOrUpdate(tIeInvigilateWarnInfo);
                 this.setWarningCount(recordId);
                 this.setPhotoUrls(map, photoUrl, tIeInvigilateWarnInfo, examStudentCacheBean, recordId);
-                ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
             }
             if (count >= teConfig.getTotalFaceCompareErrorCount()) {
                 TIeInvigilateWarnInfo tIeInvigilateWarnInfo = new TIeInvigilateWarnInfo(examId, examActivityId, recordId, examStudentId, warningEnum.getLevel().get(1), WarningLevelEnum.valueOf(warningEnum.getLevel().get(1)).getDesc(), warningEnum, photoUrl);
                 tIeInvigilateWarnInfoService.saveOrUpdate(tIeInvigilateWarnInfo);
                 this.setWarningCount(recordId);
                 this.setPhotoUrls(map, photoUrl, tIeInvigilateWarnInfo, examStudentCacheBean, recordId);
-                ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
             }
         }
     }

+ 1 - 1
themis-business/src/main/resources/mapper/TBTaskHistoryMapper.xml

@@ -9,7 +9,7 @@
             tbth.entity_id as entityId,
             tbth.status,
             tbth.summary,
-            tbth.progress,
+            TRUNCATE(tbth.progress,2),
             if(ISNULL(tbth.result_file_path),0,1) as hasResultFile,
             if(ISNULL(tbth.report_file_path),0,1) as hasReportFile,
             tbth.create_time as createTime,

+ 1 - 1
themis-business/src/main/resources/mapper/TEExamMapper.xml

@@ -53,7 +53,7 @@
         t.end_time as endTime,
         t.create_time as createTime,
         t.update_time as updateTime,
-        t.progress,
+        TRUNCATE(t.progress,2) as progress,
         (
         select
         t1.name

+ 1 - 1
themis-business/src/main/resources/mapper/TOeExamRecordMapper.xml

@@ -96,7 +96,7 @@
 		s.course_code courseCode,
 		IFNULL(t.paper_download,1) paperDownload,
 		t.status statusCode,
-		t.answer_progress progress,
+	    TRUNCATE(t.answer_progress,2) progress,
 		IFNULL(t.client_current_ip,'无') clientCurrentIp,
 		IFNULL(t.warning_count,0) as warningCount,
 		IFNULL(t.breach_status,1) as breachStatus,

+ 52 - 4
themis-mq/src/main/java/com/qmth/themis/mq/service/impl/MqLogicServiceImpl.java

@@ -108,6 +108,9 @@ public class MqLogicServiceImpl implements MqLogicService {
     @Resource
     MqDtoService mqDtoService;
 
+    @Resource
+    TEConfigService teConfigService;
+
     /**
      * mq最大重试次数逻辑
      *
@@ -321,6 +324,7 @@ public class MqLogicServiceImpl implements MqLogicService {
         Double realness = (Double) param.get("realness");
         Long time = (Long) param.get("time");
         String exception = (String) param.get("exception");
+        TEConfig teConfig = teConfigService.getGlobalConfig();
         if (Objects.equals(type.toUpperCase(), ExamTypeEnum.IN_PROCESS.name())) {
             VerifyExceptionEnum warningEnum = VerifyExceptionEnum.valueOf(exception);
             WarningDto warningDto = new WarningDto(warningEnum, faceCount, realness, recordId, photoUrl);
@@ -340,27 +344,46 @@ public class MqLogicServiceImpl implements MqLogicService {
                             multipleFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
                             ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, multipleFaceRandom);
                         }
+                        ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId, ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId) + 1);
                         warningDto.setRandom(multipleFaceRandom);
                         faceVerifyHistoryService.save(id, recordId, type, photoUrl, faceCount, similarity, realness, time, exception, multipleFaceRandom);
+                        Integer count = ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId);
+                        if (count >= teConfig.getMultipleFaceCountError()) {
+                            ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                            ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId, 0);
+                            warningService.faceCountError(warningDto);
+                        }
                     } else if (faceCount <= 0) {
                         String noFaceRandom = ExamRecordCacheUtil.getNoFaceCountErrorRandom(recordId);
                         if (Objects.isNull(noFaceRandom)) {
                             noFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
                             ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, noFaceRandom);
                         }
+                        ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId, ExamRecordCacheUtil.getNoFaceCountErrorNum(recordId) + 1);
                         warningDto.setRandom(noFaceRandom);
                         faceVerifyHistoryService.save(id, recordId, type, photoUrl, faceCount, similarity, realness, time, exception, noFaceRandom);
+                        Integer count = ExamRecordCacheUtil.getNoFaceCountErrorNum(recordId);
+                        if (count >= teConfig.getNoFaceCountError()) {
+                            ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                            ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId, 0);
+                            warningService.faceCountError(warningDto);
+                        }
                     }
-                    warningService.faceCountError(warningDto);
                 } else if (Objects.equals(VerifyExceptionEnum.FACE_COMPARE_ERROR, warningEnum)) {//人脸比对异常
                     String faceCompareErrorRandom = ExamRecordCacheUtil.getFaceCompareErrorRandom(recordId);
                     if (Objects.isNull(faceCompareErrorRandom)) {
                         faceCompareErrorRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
                         ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId, faceCompareErrorRandom);
                     }
+                    ExamRecordCacheUtil.setFaceCompareErrorNum(recordId, ExamRecordCacheUtil.getFaceCompareErrorNum(recordId) + 1);
                     warningDto.setRandom(faceCompareErrorRandom);
                     faceVerifyHistoryService.save(id, recordId, type, photoUrl, faceCount, similarity, realness, time, exception, null);
-                    warningService.faceCompareError(warningDto);
+                    Integer count = ExamRecordCacheUtil.getFaceCompareErrorNum(recordId);
+                    if (count >= teConfig.getTotalFaceCompareErrorCount()) {
+                        ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                        ExamRecordCacheUtil.setFaceCompareErrorNum(recordId, 0);
+                        warningService.faceCountError(warningDto);
+                    }
                 } else {
                     faceVerifyHistoryService.save(id, recordId, type, photoUrl, faceCount, similarity, realness, time, exception, null);
                     if (realness.intValue() == 0) {//真实性异常
@@ -368,6 +391,8 @@ public class MqLogicServiceImpl implements MqLogicService {
                     }
                 }
             }
+        } else {
+            faceVerifyHistoryService.save(id, recordId, type, photoUrl, faceCount, similarity, realness, time, exception, null);
         }
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
@@ -395,6 +420,7 @@ public class MqLogicServiceImpl implements MqLogicService {
         Long startTime = (Long) param.get("startTime");
         Long finishTime = (Long) param.get("finishTime");
         String exception = (String) param.get("exception");
+        TEConfig teConfig = teConfigService.getGlobalConfig();
         if (Objects.equals(type.toUpperCase(), ExamTypeEnum.IN_PROCESS.name())) {
             VerifyExceptionEnum warningEnum = VerifyExceptionEnum.valueOf(exception);
             JSONArray jsonArray = JSONArray.parseArray(actions);
@@ -418,18 +444,31 @@ public class MqLogicServiceImpl implements MqLogicService {
                                 multipleFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
                                 ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, multipleFaceRandom);
                             }
+                            ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId, ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId) + 1);
                             warningDto.setRandom(multipleFaceRandom);
                             livenessVerifyHistoryService.save(id, recordId, type, actions, retry, startTime, finishTime, exception, multipleFaceRandom);
+                            Integer count = ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId);
+                            if (count >= teConfig.getMultipleFaceCountError()) {
+                                ExamRecordCacheUtil.setMultipleFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                ExamRecordCacheUtil.setMultipleFaceCountErrorNum(recordId, 0);
+                                warningService.faceCountError(warningDto);
+                            }
                         } else if (faceCount <= 0) {
                             String noFaceRandom = ExamRecordCacheUtil.getNoFaceCountErrorRandom(recordId);
                             if (Objects.isNull(noFaceRandom)) {
                                 noFaceRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
                                 ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, noFaceRandom);
                             }
+                            ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId, ExamRecordCacheUtil.getMultipleFaceCountErrorNum(recordId) + 1);
                             warningDto.setRandom(noFaceRandom);
                             livenessVerifyHistoryService.save(id, recordId, type, actions, retry, startTime, finishTime, exception, noFaceRandom);
+                            Integer count = ExamRecordCacheUtil.getNoFaceCountErrorNum(recordId);
+                            if (count >= teConfig.getNoFaceCountError()) {
+                                ExamRecordCacheUtil.setNoFaceCountErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                                ExamRecordCacheUtil.setNoFaceCountErrorNum(recordId, 0);
+                                warningService.faceCountError(warningDto);
+                            }
                         }
-                        warningService.faceCountError(warningDto);
                     } else if (Objects.equals(VerifyExceptionEnum.FACE_COMPARE_ERROR, warningEnum)) {//人脸比对异常
                         WarningDto warningDto = new WarningDto(warningEnum, null, null, recordId, String.valueOf(jsonObject.get("photoUrl")));
                         String faceCompareErrorRandom = ExamRecordCacheUtil.getFaceCompareErrorRandom(recordId);
@@ -437,12 +476,20 @@ public class MqLogicServiceImpl implements MqLogicService {
                             faceCompareErrorRandom = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
                             ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId, faceCompareErrorRandom);
                         }
+                        ExamRecordCacheUtil.setFaceCompareErrorNum(recordId, ExamRecordCacheUtil.getFaceCompareErrorNum(recordId) + 1);
                         warningDto.setRandom(faceCompareErrorRandom);
                         livenessVerifyHistoryService.save(id, recordId, type, actions, retry, startTime, finishTime, exception, faceCompareErrorRandom);
-                        warningService.faceCompareError(warningDto);
+                        Integer count = ExamRecordCacheUtil.getFaceCompareErrorNum(recordId);
+                        if (count >= teConfig.getTotalFaceCompareErrorCount()) {
+                            ExamRecordCacheUtil.setFaceCompareErrorRandom(recordId, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+                            ExamRecordCacheUtil.setFaceCompareErrorNum(recordId, 0);
+                            warningService.faceCountError(warningDto);
+                        }
                     }
                 }
             }
+        } else {
+            livenessVerifyHistoryService.save(id, recordId, type, actions, retry, startTime, finishTime, exception, null);
         }
         mqDto.setAck(SystemConstant.STANDARD_ACK_TYPE);
         TMRocketMessage tmRocketMessage = gson.fromJson(gson.toJson(mqDto), TMRocketMessage.class);
@@ -544,6 +591,7 @@ public class MqLogicServiceImpl implements MqLogicService {
             tIeExamInvigilateCallLog.setExamId(examId);
             tIeExamInvigilateCallLog.setExamActivityId(examActivityId);
             tIeExamInvigilateCallLog.setExamStudentId(examStudentId);
+
             QueryWrapper<TIeExamInvigilateCall> tIeExamInvigilateCallQueryWrapper = new QueryWrapper<>();
             tIeExamInvigilateCallQueryWrapper.lambda().eq(TIeExamInvigilateCall::getExamRecordId, tIeExamInvigilateCallLog.getExamRecordId()).eq(TIeExamInvigilateCall::getSource, tIeExamInvigilateCallLog.getSource());
             TIeExamInvigilateCall tIeExamInvigilateCall = tIeExamInvigilateCallService.getOne(tIeExamInvigilateCallQueryWrapper);