From 65dde6aca26b3a25b016c44443cc4d7f1b11b11a Mon Sep 17 00:00:00 2001 From: zhanglb Date: Mon, 18 Sep 2023 08:36:57 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FileUploadServiceImpl.java | 5 +- .../server/controller/FileController.java | 2 +- .../controller/OcrRuleTestController.java | 5 +- .../service/handler/StartOcrTestHandler.java | 75 +-------------- .../service/handler/StartSegmentHandler.java | 22 ++++- .../handler/StartSegmentTestHandler.java | 95 ++++++++++++++++++- .../server/service/impl/CommonService.java | 5 +- 7 files changed, 122 insertions(+), 87 deletions(-) diff --git a/docus-api-common/src/main/java/com/docus/server/common/service/impl/FileUploadServiceImpl.java b/docus-api-common/src/main/java/com/docus/server/common/service/impl/FileUploadServiceImpl.java index ce32330..f47621a 100644 --- a/docus-api-common/src/main/java/com/docus/server/common/service/impl/FileUploadServiceImpl.java +++ b/docus-api-common/src/main/java/com/docus/server/common/service/impl/FileUploadServiceImpl.java @@ -150,8 +150,11 @@ public class FileUploadServiceImpl implements IFileUploadService { int minX = image.getMinX(); int minY = image.getMinY(); + int startY = height * widthStart.intValue(); + int endY = height * (heightStart.intValue() - widthStart.intValue()); + //剪切 - ImgUtil.cut(image, FileUtil.file(cutDest), new Rectangle(0, 0, widthStart.intValue(), heightStart.intValue())); + ImgUtil.cut(image, FileUtil.file(cutDest), new Rectangle(0, startY, width, endY)); uploadFileVO.setWidth(width); uploadFileVO.setHeight(height); diff --git a/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java b/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java index 4bc0d40..edf3da6 100644 --- a/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java +++ b/docus-segmentation/src/main/java/com/docus/server/controller/FileController.java @@ -97,7 +97,7 @@ public class FileController { //将基础信息存到库表里面,后面自动分段后,需要上传到归档系统 Object result = commonService.add(segmentation, request); - iPublishEventService.publishEvent(request.getPatientId(), FlowEvent.FlowTypeEnum.START_OCR_TEST); + iPublishEventService.publishEvent(request.getPatientId(), FlowEvent.FlowTypeEnum.START_SEGMENT_TEST); return result; } diff --git a/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java b/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java index dba26a6..31d6671 100644 --- a/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java +++ b/docus-segmentation/src/main/java/com/docus/server/controller/OcrRuleTestController.java @@ -9,6 +9,7 @@ import com.docus.server.dto.segmentation.ocrruletest.EditOcrRuleTestDTO; import com.docus.server.entity.segmentation.OcrFileInfoTest; import com.docus.server.service.IOcrRuleTestService; import com.docus.server.service.handler.StartOcrTestHandler; +import com.docus.server.service.handler.StartSegmentTestHandler; import com.docus.server.vo.segmentation.ocrruletest.OcrRuleTestVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -29,13 +30,13 @@ public class OcrRuleTestController implements OcrRuleTestApi { @Resource private IOcrRuleTestService iOcrRuleTestService; @Resource - private StartOcrTestHandler startOcrTestHandler; + private StartSegmentTestHandler startSegmentTestHandler; @ApiOperation("开始分类ocr") @Override public List start(String id) { - return startOcrTestHandler.startOcr(id); + return startSegmentTestHandler.startSegment(id); } /** diff --git a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java index ab4dc96..4bf846f 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrTestHandler.java @@ -23,83 +23,10 @@ import java.util.stream.Collectors; */ @Component public class StartOcrTestHandler { - @Resource - private OcrApi ocrApi; - @Resource - private IOcrFileInfoTestDao iOcrFileInfoTestDao; - @Resource - private IOcrSpecialRuleTestService iOcrSpecialRuleTestService; - @Resource - private IOcrRuleTestService iOcrRuleTestService; - @Resource - private IOcrBasicTestDao iOcrBasicTestDao; - @Resource - private IOcrUrlConfigTestDao iOcrUrlConfigTestDao; @TrackRetryListener("START_OCR_TEST") - public List startOcr(String patientId) { - boolean isSpecialFile = false; - OcrSpecialResult lastSpecialResul = null; + public void startOcr(String patientId) { - //根据病案号查询文件列表 - List ocrBasicTestList = iOcrBasicTestDao.findBy("patientId",patientId); - List fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId", patientId); - String url = iOcrUrlConfigTestDao.findAll().get(0).getUrl(); - for (OcrFileInfoTest fileInfoTest : fileInfoTestList) { - - //遍历文件列表 获取ocr识别结果 - List ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl(),url); - - fileInfoTest.setOcrText(Func.toJson(ocrTextList)); - fileInfoTest.setOcrStatus(OcrStatusEnum.COMPLETE); - fileInfoTest.setOcrFinishTime(new Date()); - //判断上次是否特殊文件开始 需要判断是否特殊文件结尾 - if (isSpecialFile) { - fileInfoTest.setAssortId(lastSpecialResul.getAssortId()); - fileInfoTest.setAssortName(lastSpecialResul.getAssortName()); - fileInfoTest.setRuleId(lastSpecialResul.getRuleId()); - boolean b = iOcrSpecialRuleTestService.handleSpecialRuleEnd(lastSpecialResul, ocrTextList); - if (b) { - //当前分段为特殊分段结尾 - isSpecialFile = false; - lastSpecialResul = null; - } - continue; - } - //优先判断是否特殊规则开始 - OcrSpecialResult ocrSpecialResult = iOcrSpecialRuleTestService.handleSpecialRule(ocrTextList); - //判断是否属于某个分段 - if (ocrSpecialResult != null) { - fileInfoTest.setAssortId(ocrSpecialResult.getAssortId()); - fileInfoTest.setAssortName(ocrSpecialResult.getAssortName()); - fileInfoTest.setRuleId(ocrSpecialResult.getRuleId()); - fileInfoTest.setHitKey(ocrSpecialResult.getHitKey()); - fileInfoTest.setRate(ocrSpecialResult.getRate()); - - isSpecialFile = true; - lastSpecialResul = ocrSpecialResult; - continue; - } - OcrRuleResult ocrRuleResult = iOcrRuleTestService.handleRule(ocrTextList); - //更新文件数据的分段 - if (ocrRuleResult != null) { - fileInfoTest.setAssortId(ocrRuleResult.getAssortId()); - fileInfoTest.setAssortName(ocrRuleResult.getAssortName()); - fileInfoTest.setRuleId(ocrRuleResult.getRuleId()); - fileInfoTest.setHitKey(ocrRuleResult.getHitKey()); - fileInfoTest.setRate(ocrRuleResult.getRate()); - } - } - //更新数据库表 - List collect = ocrBasicTestList.stream().peek(p -> { - p.setOcrFinishTime(new Date()); - p.setOcrStatue(OcrStatusEnum.COMPLETE); - }).collect(Collectors.toList()); - - iOcrFileInfoTestDao.updateBatchById(fileInfoTestList, 1000); - iOcrBasicTestDao.updateBatchById(collect,1000); - - return fileInfoTestList; } } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentHandler.java b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentHandler.java index b625282..36ab1c8 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentHandler.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentHandler.java @@ -3,11 +3,9 @@ package com.docus.server.service.handler; import com.docus.core.util.Func; import com.docus.log.annotation.TrackRetryListener; import com.docus.server.api.ocr.OcrApi; -import com.docus.server.entity.segmentation.OcrFileInfo; -import com.docus.server.entity.segmentation.OcrRuleResult; -import com.docus.server.entity.segmentation.OcrSpecialResult; -import com.docus.server.entity.segmentation.OcrVersion; +import com.docus.server.entity.segmentation.*; import com.docus.server.enums.OcrStatusEnum; +import com.docus.server.infrastructure.dao.IOcrBasicDao; import com.docus.server.infrastructure.dao.IOcrFileInfoDao; import com.docus.server.infrastructure.dao.IOcrUrlConfigDao; import com.docus.server.infrastructure.dao.IOcrVersionDao; @@ -18,6 +16,7 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 开始分段处理器 @@ -37,6 +36,8 @@ public class StartSegmentHandler { private IOcrVersionDao iOcrVersionDao; @Resource private IOcrUrlConfigDao iOcrUrlConfigDao; + @Resource + private IOcrBasicDao iOcrBasicDao; @TrackRetryListener("START_SEGMENT") public void startSegment(String patientId) { @@ -44,6 +45,7 @@ public class StartSegmentHandler { boolean isSpecialFile = false; OcrSpecialResult lastSpecialResul = null; + OcrVersion ocrVersion = iOcrVersionDao.findOneBy("isEnable", "1"); if (ocrVersion==null){ throw new RuntimeException("当前没有启用的版本号"); @@ -51,6 +53,7 @@ public class StartSegmentHandler { Integer version = ocrVersion.getVersion(); //根据病案号查询文件列表 + List ocrBasicList = iOcrBasicDao.findBy("patientId",patientId); String url = iOcrUrlConfigDao.findBy("version",version).get(0).getUrl(); List fileInfoList = iOcrFileInfoDao.findBy("patientId",patientId); for (OcrFileInfo fileInfo:fileInfoList) { @@ -99,6 +102,15 @@ public class StartSegmentHandler { } } //更新数据库表 - iOcrFileInfoDao.updateBatchById(fileInfoList,1000); + List collect = ocrBasicList.stream().peek(p -> { + p.setOcrFinishTime(new Date()); + p.setOcrStatue(OcrStatusEnum.COMPLETE); + }).collect(Collectors.toList()); + + iOcrBasicDao.updateBatchById(collect,iOcrBasicDao.DEFAULT_BATCH_SIZE); + iOcrFileInfoDao.updateBatchById(fileInfoList,iOcrFileInfoDao.DEFAULT_BATCH_SIZE); + + //数据上传到3.0 + } } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentTestHandler.java b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentTestHandler.java index c02866e..dddd5af 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentTestHandler.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartSegmentTestHandler.java @@ -1,16 +1,107 @@ package com.docus.server.service.handler; +import com.docus.core.util.Func; import com.docus.log.annotation.TrackRetryListener; +import com.docus.server.api.ocr.OcrApi; +import com.docus.server.entity.segmentation.OcrBasicTest; +import com.docus.server.entity.segmentation.OcrFileInfoTest; +import com.docus.server.entity.segmentation.OcrRuleResult; +import com.docus.server.entity.segmentation.OcrSpecialResult; +import com.docus.server.enums.OcrStatusEnum; +import com.docus.server.infrastructure.dao.IOcrBasicTestDao; +import com.docus.server.infrastructure.dao.IOcrFileInfoTestDao; +import com.docus.server.infrastructure.dao.IOcrUrlConfigTestDao; +import com.docus.server.service.IOcrRuleTestService; +import com.docus.server.service.IOcrSpecialRuleTestService; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + /** * 开始分段处理器 */ @Component public class StartSegmentTestHandler { + @Resource + private OcrApi ocrApi; + @Resource + private IOcrFileInfoTestDao iOcrFileInfoTestDao; + @Resource + private IOcrSpecialRuleTestService iOcrSpecialRuleTestService; + @Resource + private IOcrRuleTestService iOcrRuleTestService; + @Resource + private IOcrBasicTestDao iOcrBasicTestDao; + @Resource + private IOcrUrlConfigTestDao iOcrUrlConfigTestDao; + @TrackRetryListener("START_SEGMENT_TEST") - public void startSegment(String patientId) { - System.out.println(patientId); + public List startSegment(String patientId) { + boolean isSpecialFile = false; + OcrSpecialResult lastSpecialResul = null; + + //根据病案号查询文件列表 + List ocrBasicTestList = iOcrBasicTestDao.findBy("patientId",patientId); + List fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId", patientId); + String url = iOcrUrlConfigTestDao.findAll().get(0).getUrl(); + for (OcrFileInfoTest fileInfoTest : fileInfoTestList) { + + //遍历文件列表 获取ocr识别结果 + List ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl(),url); + + fileInfoTest.setOcrText(Func.toJson(ocrTextList)); + fileInfoTest.setOcrStatus(OcrStatusEnum.COMPLETE); + fileInfoTest.setOcrFinishTime(new Date()); + //判断上次是否特殊文件开始 需要判断是否特殊文件结尾 + if (isSpecialFile) { + fileInfoTest.setAssortId(lastSpecialResul.getAssortId()); + fileInfoTest.setAssortName(lastSpecialResul.getAssortName()); + fileInfoTest.setRuleId(lastSpecialResul.getRuleId()); + boolean b = iOcrSpecialRuleTestService.handleSpecialRuleEnd(lastSpecialResul, ocrTextList); + if (b) { + //当前分段为特殊分段结尾 + isSpecialFile = false; + lastSpecialResul = null; + } + continue; + } + //优先判断是否特殊规则开始 + OcrSpecialResult ocrSpecialResult = iOcrSpecialRuleTestService.handleSpecialRule(ocrTextList); + //判断是否属于某个分段 + if (ocrSpecialResult != null) { + fileInfoTest.setAssortId(ocrSpecialResult.getAssortId()); + fileInfoTest.setAssortName(ocrSpecialResult.getAssortName()); + fileInfoTest.setRuleId(ocrSpecialResult.getRuleId()); + fileInfoTest.setHitKey(ocrSpecialResult.getHitKey()); + fileInfoTest.setRate(ocrSpecialResult.getRate()); + + isSpecialFile = true; + lastSpecialResul = ocrSpecialResult; + continue; + } + OcrRuleResult ocrRuleResult = iOcrRuleTestService.handleRule(ocrTextList); + //更新文件数据的分段 + if (ocrRuleResult != null) { + fileInfoTest.setAssortId(ocrRuleResult.getAssortId()); + fileInfoTest.setAssortName(ocrRuleResult.getAssortName()); + fileInfoTest.setRuleId(ocrRuleResult.getRuleId()); + fileInfoTest.setHitKey(ocrRuleResult.getHitKey()); + fileInfoTest.setRate(ocrRuleResult.getRate()); + } + } + //更新数据库表 + List collect = ocrBasicTestList.stream().peek(p -> { + p.setOcrFinishTime(new Date()); + p.setOcrStatue(OcrStatusEnum.COMPLETE); + }).collect(Collectors.toList()); + + iOcrFileInfoTestDao.updateBatchById(fileInfoTestList, 1000); + iOcrBasicTestDao.updateBatchById(collect,1000); + + return fileInfoTestList; } } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/CommonService.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/CommonService.java index 24bd7f8..63afb70 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/CommonService.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/CommonService.java @@ -17,6 +17,7 @@ import com.docus.server.service.IOcrBasicTestService; import com.docus.server.service.IOcrFileInfoService; import com.docus.server.service.IOcrFileInfoTestService; import com.docus.server.service.handler.StartOcrTestHandler; +import com.docus.server.service.handler.StartSegmentTestHandler; import com.docus.server.vo.scheduling.management.schcollectorversionfile.UploadFileVO; import com.google.common.collect.Lists; import org.springframework.stereotype.Service; @@ -41,7 +42,7 @@ public class CommonService { @Resource private OcrApi ocrApi; @Resource - private StartOcrTestHandler startOcrTestHandler; + private StartSegmentTestHandler startSegmentTestHandler; @Transactional(rollbackFor = Exception.class) public Object add(List segmentation, UploadBatchFileRequest request) { @@ -168,7 +169,7 @@ public class CommonService { //当前 AddOcrFileInfoTestDTO addOcrFileInfoTestDTO = this.add(uploadFileVO, request); - List ocrFileInfoTests = startOcrTestHandler.startOcr(addOcrFileInfoTestDTO.getPatientId()); + List ocrFileInfoTests = startSegmentTestHandler.startSegment(addOcrFileInfoTestDTO.getPatientId()); if (Func.isNotEmpty(ocrFileInfoTests)) { return ocrFileInfoTests.get(0);