From 575ba029182ca1efa5c7cd2f933612ae221f12ee Mon Sep 17 00:00:00 2001 From: zhouwentao <1577701412@qq.com> Date: Mon, 7 Aug 2023 11:44:22 +0800 Subject: [PATCH] updates --- .../ocr/controller/OcrIdentifyController.java | 31 +++--------- .../jeecg/modules/ocr/entity/OcrIdentify.java | 2 +- .../ocr/service/IOcrIdentifyService.java | 3 +- .../service/impl/OcrIdentifyServiceImpl.java | 48 +++++++++++++++++++ 4 files changed, 58 insertions(+), 26 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java index 4ddfd39..4cf49c3 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java @@ -91,6 +91,12 @@ public class OcrIdentifyController extends JeecgController page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); Map ocrRuleCheckMap = ocrRuleCheckService.listToMap(null); Map metadataConfigMap = ocrMetadataConfigService.listToMap(null); Map taskNameMap = ocrTaskTypeService.listNameToMap(null); IPage pageList = ocrIdentifyService.page(page, queryWrapper); - if (pageList != null && pageList.getRecords() != null) { - List idList = pageList.getRecords().stream().map(p -> p.getId()).collect(Collectors.toList()); - List ocrIdentifyDetailList = null; - if (idList.size()>0) { - ocrIdentifyDetailList = ocrIdentifyDetailService.list(new LambdaQueryWrapper().in(OcrIdentifyDetail::getIdentifyId, idList)); - } - - List identifyDetailList = new ArrayList<>(); for (OcrIdentify record : pageList.getRecords()) { - if ("1".equals(record.getStatus()) &&ocrIdentifyDetailList!=null&&ocrIdentifyDetailList.size()>0) { - //判断明细是否识别成功 - identifyDetailList = ocrIdentifyDetailList.stream().filter(o -> o.getIdentifyId().equals(record.getId())).collect(Collectors.toList()); - if (identifyDetailList.size()>0) { - long errorCount = identifyDetailList.stream().filter(i -> i.getStatus().equals("1")).count(); - //errorCount>0,说明有失败的明细 - record.setTaskResult(errorCount>0?"0":"1"); - }else{ - //失败 - record.setTaskResult("0"); - } - } OcrRuleCheckVo ocrRuleCheckVo = ocrRuleCheckMap.get(record.getRuleCheck()); if (ocrRuleCheckVo!=null && StringUtils.isNotBlank(ocrRuleCheckVo.getMetadataConfigId())) { record.setMetadataConfigId(ocrRuleCheckVo.getMetadataConfigId()); @@ -337,9 +323,6 @@ public class OcrIdentifyController extends JeecgController { */ @Async public void callbackWly(String ocrIdentifyId); - + public void updateTaskResultInfo(String id); /** * 解析 请求 ocr识别接口的 结果 diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java index 8f43905..d5b7fdb 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java @@ -289,6 +289,54 @@ public class OcrIdentifyServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper(); + updateWrapper.eq(OcrIdentify::getId, id); + List identifyDetailList = ocrIdentifyDetailService.listByIdentifyId(id); + if(true) { + if (identifyDetailList != null && identifyDetailList.size() > 0) { + Map fieldRightMap = new LinkedHashMap<>(); + String tag = null; + boolean ruleValidation = false; + /////明细中,如果有字段成功的,则会覆盖其他明细的匹配失败的情况,如果全都是失败的,会获取第一次失败的. + for (OcrIdentifyDetail ocrIdentifyDetail : identifyDetailList) { + String dataStructured = ocrIdentifyDetail.getDataStructured(); + if (org.apache.commons.lang.StringUtils.isNotBlank(dataStructured)) { + JSONArray jsonArray = JSONObject.parseArray(dataStructured); + List resultList = jsonArray.toJavaList(OcrResult.class); + for (OcrResult result : resultList) { + tag = result.getTag(); + ruleValidation = result.getRuleValidation(); + OcrResult lastResult = fieldRightMap.get(tag); + if (ruleValidation) { + fieldRightMap.put(tag, result); + } else if (lastResult == null || !lastResult.getRuleValidation()) { + fieldRightMap.put(tag, result); + } + } + } + } + //如果明细合并一起,都是成功,则主任务 匹配成功, 否则匹配失败 + List errorResults = fieldRightMap.values().stream().filter(f -> !f.getRuleValidation()).collect(Collectors.toList()); + List ocrResults = fieldRightMap.values().stream().collect(Collectors.toList()); + String taskResultInfo = JSONArray.toJSONString(ocrResults); + updateWrapper.set(OcrIdentify::getTaskResultInfo,taskResultInfo); + if (errorResults.size() > 0) { + //匹配失败. + String errorMsg = errorResults.stream().map(e -> e.getFailureReason()).collect(Collectors.joining(";")); + updateWrapper.set(OcrIdentify::getErrorMsg, errorMsg); + updateWrapper.set(OcrIdentify::getTaskResult, 0); + } else { + //匹配成功. + updateWrapper.set(OcrIdentify::getTaskResult, 1); + } + } + } + super.update(updateWrapper); + } @Override @Async