Parcourir la source

优化跳过逻辑 20231124

donggaosheng il y a 2 ans
Parent
commit
e161bdd39f

+ 91 - 77
zd-modules/zd-algorithm/src/main/java/com/zd/alg/forward/serivce/CheckService.java

@@ -121,49 +121,46 @@ public class CheckService {
             String[] checkItem = labCheckIn.split(",");
             File toFile = multipartFileToFile(file);
             for (String code : checkItem) {
-                //========= 获取算法INFO ===========
-                AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
-                MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
-                HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile, params);
-                //添加一条算法请求记录
-                R alg = insertRequestRecordLog(orgImgUrl, subId, checkValid);
-                logger.info("【调用算法服务】 添加算法调用日志,添加结果:"+JSONObject.toJSONString(alg));
-
-                //请求算法服务
-                ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
-                AlgorithmResponseResult responseResult = getResponseResult(send);
-                //添加成功,更新算法日志记录
-                if (alg.getCode() == 200) {
-                    updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, responseResult);
-                    logger.info("【调用算法服务】 更新算法调用日志记录");
-                }
-                //判断算法
-                if (responseResult.getCode() == 1000) {
-                    //通过
-                    if (responseResult.getIsPass()) {
-                        alarmNum++;
+                try {
+                    //========= 获取算法INFO ===========
+                    AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
+                    MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
+                    HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile, params);
+                    //添加一条算法请求记录
+                    R alg = insertRequestRecordLog(orgImgUrl, subId, checkValid);
+                    logger.info("【调用算法服务】 添加算法调用日志,添加结果:"+JSONObject.toJSONString(alg));
+
+                    //请求算法服务
+                    ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
+                    AlgorithmResponseResult responseResult = getResponseResult(send);
+                    //添加成功,更新算法日志记录
+                    if (alg.getCode() == 200) {
+                        updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, responseResult);
+                        logger.info("【调用算法服务】 更新算法调用日志记录");
+                    }
+                    //判断算法
+                    if (responseResult.getCode() == 1000) {
+                        //通过
+                        if (responseResult.getIsPass()) {
+                            alarmNum++;
+                        } else {
+                            //不跳过
+                            if (executeSkipped(id, labSkipped, labCheckCount, code)) return R.fail(700, "符合跳过条件执行跳过");
+                            return R.fail(300, "算法识别未通过", code);
+                        }
+                        Boolean f = send.getStatus_code() == 1000;
+                        String msg = f ? "解析成功!" : "解析失败!";
+                        send(code, id, f, msg);
                     } else {
                         //不跳过
-                        if (StringUtils.isNotEmpty(labSkipped) && labSkipped.equals("1")) {
-                            //如果没有通过则次数加一
-                            //键为前缀+签到id +下划线+验证类型
-                            String key = BaseConstants.SINGIN_CHECK_JUMP_KEY  +id+ "_" + code;
-                            Long increment = redisTemplate.opsForValue().increment(key);
-                            redisService.expire(key, BaseConstants.SINGIN_OUT_TIME);
-                            if (increment != null && increment >= Integer.parseInt(labCheckCount)) {
-                                //黎晨这里让把跳过时状态码改为700,所以700的含义为检查失败并且跳过
-                                return R.fail(700, "符合跳过条件执行跳过");
-                            }
-                        }
-                        return R.fail(300, "算法识别未通过", code);
+                        if (executeSkipped(id, labSkipped, labCheckCount, code)) return R.fail(700, "符合跳过条件执行跳过");
+                        assert send != null;
+                        logger.error("【调用算法服务】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
+                        return R.fail("算法服务错误,请重试!");
                     }
-                    Boolean f = send.getStatus_code() == 1000;
-                    String msg = f ? "解析成功!" : "解析失败!";
-                    send(code, id, f, msg);
-                } else {
-                    assert send != null;
-                    logger.error("【调用算法服务】 算法服务调用失败,响应信息:"+ JSONObject.toJSONString(send));
-                    return R.fail("算法服务错误,请重试!");
+                }catch (Exception e){
+                    //不跳过
+                    if (executeSkipped(id, labSkipped, labCheckCount, code)) return R.fail(700, "符合跳过条件执行跳过");
                 }
             }
             if (alarmNum == checkItem.length) {
@@ -175,6 +172,29 @@ public class CheckService {
         return R.fail();
     }
 
+    /**
+     * 跳过公用方法
+     * @param id
+     * @param labSkipped
+     * @param labCheckCount
+     * @param code
+     * @return
+     */
+    private boolean executeSkipped(Long id, String labSkipped, String labCheckCount, String code) {
+        if (StringUtils.isNotEmpty(labSkipped) && labSkipped.equals("1")) {
+            //如果没有通过则次数加一
+            //键为前缀+签到id +下划线+验证类型
+            String key = BaseConstants.SINGIN_CHECK_JUMP_KEY  +id+ "_" + code;
+            Long increment = redisTemplate.opsForValue().increment(key);
+            redisService.expire(key, BaseConstants.SINGIN_OUT_TIME);
+            if (increment != null && increment >= Integer.parseInt(labCheckCount)) {
+                //黎晨这里让把跳过时状态码改为700,所以700的含义为检查失败并且跳过
+                return true;
+            }
+        }
+        return false;
+    }
+
 
     /**
      * 合并检查 三合一套餐
@@ -212,45 +232,39 @@ public class CheckService {
             String[] checkItem = labCheckIn.split(",");
             File toFile = multipartFileToFile(file);
             for (String code : checkItem) {
-                //========= 获取算法INFO ===========
-                AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
-                MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
-                HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile, params);
-                //添加一条算法请求记录
-                R alg = insertRequestRecordLog(orgImgUrl, subId, checkValid);
-                logger.info("【调用算法服务】 添加算法调用日志,添加结果:"+JSONObject.toJSONString(alg));
-
-                //请求算法服务
-                ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
-                AlgorithmResponseResult responseResult = getResponseResult(send);
-                //添加成功,更新算法日志记录
-                if (alg.getCode() == 200) {
-                    updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, responseResult);
-                    logger.info("【调用算法服务】 更新算法调用日志记录");
-                }
-                //判断算法
-                if (responseResult.getCode() == 1000) {
-                    //通过
-                    if (responseResult.getIsPass()) {
-                        alarmNum++;
-                    } else {
-                        //不跳过
-                        if (StringUtils.isNotEmpty(labSkipped) && labSkipped.equals("1")) {
-                            //如果没有通过则次数加一
-                            //键为前缀+签到id +下划线+验证类型
-                            String key = BaseConstants.SINGIN_CHECK_JUMP_KEY + id + "_" + code;
-                            Long increment = redisTemplate.opsForValue().increment(key);
-                            redisService.expire(key, BaseConstants.SINGIN_OUT_TIME);
-                            if (increment != null && increment >= Integer.parseInt(labCheckCount)) {
-                                //黎晨这里让把跳过时状态码改为700,所以700的含义为检查失败并且跳过
-                                return R.fail(700, "符合跳过条件执行跳过");
-                            }
+                try {
+                    //========= 获取算法INFO ===========
+                    AlgorithmYml.CheckValid checkValid = algorithmYml.getCheckValid(Integer.valueOf(code));
+                    MultiValueMap<String, Object> params = getStringObjectMultiValueMap(checkValid, String.valueOf(id));
+                    HttpEntity<MultiValueMap<String, Object>> files = getHttpEntityMap(toFile, params);
+                    //添加一条算法请求记录
+                    R alg = insertRequestRecordLog(orgImgUrl, subId, checkValid);
+                    logger.info("【调用算法服务】 添加算法调用日志,添加结果:"+JSONObject.toJSONString(alg));
+                    //请求算法服务
+                    ImgPostResponse<AnalysisReturnData> send = HttpUtils.sendV5(restTemplateLocal, files, algorithmYml);
+                    AlgorithmResponseResult responseResult = getResponseResult(send);
+                    //添加成功,更新算法日志记录
+                    if (alg.getCode() == 200) {
+                        updateRequestRecordLog(alg.getData() != null?Long.valueOf(alg.getData()+""):null, responseResult);
+                        logger.info("【调用算法服务】 更新算法调用日志记录");
+                    }
+                    //判断算法
+                    if (responseResult.getCode() == 1000) {
+                        //通过
+                        if (responseResult.getIsPass()) {
+                            alarmNum++;
+                        } else {
+                            //不跳过
+                            if (executeSkipped(Long.parseLong(id), labSkipped, labCheckCount, code)) return R.fail(700, "符合跳过条件执行跳过");
+                            return R.fail(300, "算法识别未通过", code);
                         }
-                        return R.fail(300, "算法识别未通过", code);
+                    } else {
+                        if (executeSkipped(Long.parseLong(id), labSkipped, labCheckCount, code)) return R.fail(700, "符合跳过条件执行跳过");
+                        assert send != null;
+                        return R.fail("算法服务错误,请重试!");
                     }
-                } else {
-                    assert send != null;
-                    return R.fail("算法服务错误,请重试!");
+                }catch (Exception e){
+                    if (executeSkipped(Long.parseLong(id), labSkipped, labCheckCount, code)) return R.fail(700, "符合跳过条件执行跳过");
                 }
             }
             if (alarmNum == checkItem.length) {