From d228bbb3fc1a5c4939d81b9fd23c487d7311308e Mon Sep 17 00:00:00 2001 From: zhanglb Date: Thu, 14 Sep 2023 12:14:53 +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 --- .../java/com/docus/server/api/ocr/OcrApi.java | 6 ++-- .../server/controller/OcrController.java | 12 +++---- .../dao/impl/OcrBasicDaoImpl.java | 36 ++++++++++--------- .../service/handler/StartOcrHandler.java | 2 +- .../service/handler/StartOcrTestHandler.java | 22 +++++++----- .../service/handler/StartSegmentHandler.java | 6 +++- .../server/service/impl/OcrServiceImpl.java | 12 ++++--- pom.xml | 4 +-- 8 files changed, 56 insertions(+), 44 deletions(-) diff --git a/docus-client-interface/src/main/java/com/docus/server/api/ocr/OcrApi.java b/docus-client-interface/src/main/java/com/docus/server/api/ocr/OcrApi.java index f0d0279..f562068 100644 --- a/docus-client-interface/src/main/java/com/docus/server/api/ocr/OcrApi.java +++ b/docus-client-interface/src/main/java/com/docus/server/api/ocr/OcrApi.java @@ -20,17 +20,17 @@ public interface OcrApi { /** * 获取ocr识别回来的text */ - List getText(String path); + List getText(String path,String ocrHttpUrl); /** * 封装ocr 请求 */ - OcrResponse ocr(String path); + OcrResponse ocr(String path,String ocrHttpUrl); /** * ocr文件上传识别 */ @ApiOperation("ocr文件上传识别") - OcrResponse uploadFile(Map params); + OcrResponse uploadFile(Map params,String ocrHttpUrl); } diff --git a/docus-segmentation/src/main/java/com/docus/server/controller/OcrController.java b/docus-segmentation/src/main/java/com/docus/server/controller/OcrController.java index 2f1a13a..a83da5e 100644 --- a/docus-segmentation/src/main/java/com/docus/server/controller/OcrController.java +++ b/docus-segmentation/src/main/java/com/docus/server/controller/OcrController.java @@ -23,12 +23,12 @@ public class OcrController { @Resource private OcrApi ocrApi; - @ApiOperation("ocr") - @GetMapping("/ocr") - public void ocr() throws Exception { - List text = ocrApi.getText("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); - - } +// @ApiOperation("ocr") +// @GetMapping("/ocr") +// public void ocr() throws Exception { +// List text = ocrApi.getText("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); +// +// } } diff --git a/docus-segmentation/src/main/java/com/docus/server/infrastructure/dao/impl/OcrBasicDaoImpl.java b/docus-segmentation/src/main/java/com/docus/server/infrastructure/dao/impl/OcrBasicDaoImpl.java index 5e1f554..d8cc8d0 100644 --- a/docus-segmentation/src/main/java/com/docus/server/infrastructure/dao/impl/OcrBasicDaoImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/infrastructure/dao/impl/OcrBasicDaoImpl.java @@ -2,10 +2,12 @@ package com.docus.server.infrastructure.dao.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.docus.core.util.Func; import com.docus.infrastructure.core.db.dao.impl.BaseDaoImpl; import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.response.PageResult; import com.docus.server.entity.segmentation.OcrBasic; +import com.docus.server.entity.segmentation.OcrBasicTest; import com.docus.server.infrastructure.dao.IOcrBasicDao; import com.docus.server.infrastructure.mapper.OcrBasicMapper; import com.github.pagehelper.PageHelper; @@ -78,25 +80,25 @@ public class OcrBasicDaoImpl extends BaseDaoImpl imple //分页 PageHelper.startPage(searchDTO.getPageNum(), searchDTO.getPageSize()); LambdaQueryWrapper query = Wrappers.lambdaQuery(); - //时间范围,默认按createTime - if (searchDTO.getBeginTime() != null) { - query.ge(OcrBasic::getCreateTime, searchDTO.getBeginTime()); + + Object patientId = searchDTO.getParams("patientId"); + Object inpatientNo = searchDTO.getParams("inpatientNo"); + Object name = searchDTO.getParams("name"); + Object ocrStatue = searchDTO.getParams("ocrStatue"); + + if (Func.isNotEmpty(patientId)) { + query.like(OcrBasic::getPatientId,String.format("%s%s%s","%", patientId,"%")); } - if (searchDTO.getEndTime() != null) { - Date endTime = searchDTO.getEndTime(); - query.le(OcrBasic::getCreateTime, endTime); + if (Func.isNotEmpty(inpatientNo)) { + query.like(OcrBasic::getInpatientNo, String.format("%s%s%s","%", inpatientNo,"%")); } - //关键字比较,多个列or - //if (!StringUtils.isEmpty(searchDTO.getKeyword())) { - //单个列用like - //query. like(OcrBasic::getxxx, searchDTO.getKeyword()); - //多个列用like - //query. and(sub -> sub.like(OcrBasic::getxx1, searchDTO.getKeyword()) - // оr(). like(OcrBasic::getXX2, searchDTO.getKeyword())) - //); - //} - //默认createTime倒序排序 - query.orderByDesc(OcrBasic::getCreateTime); + if (Func.isNotEmpty(name)) { + query.like(OcrBasic::getName, String.format("%s%s%s","%", name,"%")); + } + if (Func.isNotEmpty(ocrStatue)) { + query.eq(OcrBasic::getOcrStatue, ocrStatue); + } + List list = super.find(query); return new PageResult<>(list); } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrHandler.java b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrHandler.java index 0468190..479d198 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrHandler.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/handler/StartOcrHandler.java @@ -18,6 +18,6 @@ public class StartOcrHandler { @TrackRetryListener("START_OCR") public void startOcr(String patientId) { System.out.println(patientId); - List text = ocrApi.getText("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); +// List text = ocrApi.getText("D:\\docus\\cut\\segmentation\\20230822\\c6b03e5767814895a2c155c32f174051\\麻醉.jpg"); } } 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 8264532..ab4dc96 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 @@ -3,13 +3,11 @@ 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.entity.segmentation.*; 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.IOcrBasicTestService; import com.docus.server.service.IOcrRuleTestService; import com.docus.server.service.IOcrSpecialRuleTestService; @@ -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; /** * 开始OCR处理器 @@ -34,6 +33,8 @@ public class StartOcrTestHandler { private IOcrRuleTestService iOcrRuleTestService; @Resource private IOcrBasicTestDao iOcrBasicTestDao; + @Resource + private IOcrUrlConfigTestDao iOcrUrlConfigTestDao; @TrackRetryListener("START_OCR_TEST") @@ -42,12 +43,13 @@ public class StartOcrTestHandler { OcrSpecialResult lastSpecialResul = null; //根据病案号查询文件列表 - OcrBasicTest ocrBasicTest = iOcrBasicTestDao.findBy("patientId",patientId).get(0); + 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()); + List ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl(),url); fileInfoTest.setOcrText(Func.toJson(ocrTextList)); fileInfoTest.setOcrStatus(OcrStatusEnum.COMPLETE); @@ -90,11 +92,13 @@ public class StartOcrTestHandler { } } //更新数据库表 - ocrBasicTest.setOcrFinishTime(new Date()); - ocrBasicTest.setOcrStatue(OcrStatusEnum.COMPLETE); + List collect = ocrBasicTestList.stream().peek(p -> { + p.setOcrFinishTime(new Date()); + p.setOcrStatue(OcrStatusEnum.COMPLETE); + }).collect(Collectors.toList()); iOcrFileInfoTestDao.updateBatchById(fileInfoTestList, 1000); - iOcrBasicTestDao.updateById(ocrBasicTest); + 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 4c136fd..d933f7a 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 @@ -9,6 +9,7 @@ import com.docus.server.entity.segmentation.OcrSpecialResult; import com.docus.server.entity.segmentation.OcrVersion; import com.docus.server.enums.OcrStatusEnum; import com.docus.server.infrastructure.dao.IOcrFileInfoDao; +import com.docus.server.infrastructure.dao.IOcrUrlConfigDao; import com.docus.server.infrastructure.dao.IOcrVersionDao; import com.docus.server.service.IOcrRuleService; import com.docus.server.service.IOcrSpecialRuleService; @@ -34,6 +35,8 @@ public class StartSegmentHandler { private IOcrRuleService iOcrRuleService; @Resource private IOcrVersionDao iOcrVersionDao; + @Resource + private IOcrUrlConfigDao iOcrUrlConfigDao; @TrackRetryListener("START_SEGMENT") public void startSegment(String patientId) { @@ -48,11 +51,12 @@ public class StartSegmentHandler { Integer version = ocrVersion.getVersion(); //根据病案号查询文件列表 + String url = iOcrUrlConfigDao.findAll().get(0).getUrl(); List fileInfoList = iOcrFileInfoDao.findBy("patientId",patientId); for (OcrFileInfo fileInfo:fileInfoList) { //遍历文件列表 获取ocr识别结果 - List ocrTextList = ocrApi.getText(fileInfo.getPicCutUrl()); + List ocrTextList = ocrApi.getText(fileInfo.getPicCutUrl(),url); fileInfo.setOcrText(Func.toJson(ocrTextList)); fileInfo.setOcrStatus(OcrStatusEnum.COMPLETE); diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java index 4768b93..d70644a 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrServiceImpl.java @@ -10,6 +10,7 @@ import com.docus.server.vo.ocr.Datas; import com.docus.server.vo.ocr.OcrResponse; import com.docus.server.vo.ocr.Sort; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -29,15 +30,16 @@ public class OcrServiceImpl implements OcrApi { @Value("${ocr.api-url:http://192.168.16.85:9999/uploadfile}") private String ocrHttpUrl; + private final static Lock HTTP_POST_LOCK = new ReentrantLock(); @Override - public List getText(String path) { + public List getText(String path,String ocrHttpUrl) { try { StopWatch watch = new StopWatch(); - OcrResponse response = ocr(path); + OcrResponse response = ocr(path,ocrHttpUrl); log.info("ocr请求截图耗时:{}ms,请求图片地址:{}", watch.elapsedTime(), path); @@ -73,16 +75,16 @@ public class OcrServiceImpl implements OcrApi { } @Override - public OcrResponse ocr(String path) { + public OcrResponse ocr(String path,String ocrHttpUrl) { File file = new File(path); Map data = new HashMap<>(); data.put("file", file); data.put("filetype", "jpg"); - return uploadFile(data); + return uploadFile(data,ocrHttpUrl); } @Override - public OcrResponse uploadFile(Map params) { + public OcrResponse uploadFile(Map params,String ocrHttpUrl) { HTTP_POST_LOCK.lock(); try { diff --git a/pom.xml b/pom.xml index 10ea70e..922bb77 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ pom - - docus-recovery + docus-segmentation + docus-api-common docus-client-interface