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 e4a6443..4bc0d40 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 @@ -3,8 +3,10 @@ package com.docus.server.controller; import com.docus.server.common.event.FlowEvent; import com.docus.server.common.service.IFileUploadService; import com.docus.server.dto.segmentation.UploadBatchFileRequest; +import com.docus.server.entity.segmentation.OcrFileInfoTest; import com.docus.server.service.IOcrCutConfigService; import com.docus.server.service.IOcrCutConfigTestService; +import com.docus.server.service.IOcrFileInfoTestService; import com.docus.server.service.IPublishEventService; import com.docus.server.service.impl.CommonService; import com.docus.server.service.impl.PlatformServiceImpl; @@ -50,6 +52,8 @@ public class FileController { private CommonService commonService; @Resource private IPublishEventService iPublishEventService; + @Resource + private IOcrFileInfoTestService iOcrFileInfoTestService; @ApiOperation("文件下载") @GetMapping("/download") @@ -98,6 +102,35 @@ public class FileController { return result; } + @ApiOperation("单张文件上传") + @PostMapping("/singleUpload") + @ApiImplicitParams({ + @ApiImplicitParam(name = "files", value = "文件", required = true, dataTypeClass = MultipartFile.class) + }) + public OcrFileInfoTest singleUpload(@RequestPart("files") MultipartFile[] files, @Validated UploadBatchFileRequest request) throws Exception { + int testData = request.getTestData(); + Double height; + Double widthStart; + Double widthEnd; + + if (testData == 1) { + OcrCutConfigTestVO ocrCutConfigTestVO = iOcrCutConfigTestService.findAll().get(0); + height = ocrCutConfigTestVO.getHeight(); + widthStart = ocrCutConfigTestVO.getWidthStart(); + widthEnd = ocrCutConfigTestVO.getWidthEnd(); + } else { + OcrCutConfigVO ocrCutConfigVO = iOcrCutConfigService.findAll().get(0); + height = ocrCutConfigVO.getHeight(); + widthStart = ocrCutConfigVO.getWidthStart(); + widthEnd = ocrCutConfigVO.getWidthEnd(); + } + + List segmentation = iFileUploadService.uploadFile(files, "singleSegmentation", height, widthStart, widthEnd); + + return commonService.getOcr(segmentation.get(0), request); + } + + /** * 下载平台 * diff --git a/docus-segmentation/src/main/java/com/docus/server/service/IOcrFileInfoTestService.java b/docus-segmentation/src/main/java/com/docus/server/service/IOcrFileInfoTestService.java index e2fc522..0987ba8 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/IOcrFileInfoTestService.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/IOcrFileInfoTestService.java @@ -5,7 +5,9 @@ import com.docus.infrastructure.web.response.PageResult; import com.docus.server.dto.segmentation.ocrfileinfotest.AddOcrFileInfoTestDTO; import com.docus.server.dto.segmentation.ocrfileinfotest.DeleteOcrFileInfoTestDTO; import com.docus.server.dto.segmentation.ocrfileinfotest.EditOcrFileInfoTestDTO; +import com.docus.server.entity.segmentation.OcrFileInfoTest; import com.docus.server.vo.segmentation.ocrfileinfotest.OcrFileInfoTestVO; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -31,6 +33,9 @@ public interface IOcrFileInfoTestService { */ List findAll(); + @Transactional(rollbackFor = Exception.class) + Long saveOrUpdate(AddOcrFileInfoTestDTO files); + /** * 新增 * @@ -64,4 +69,6 @@ public interface IOcrFileInfoTestService { PageResult search(SearchDTO searchDTO); void addBatch(List files); + + OcrFileInfoTest findOneBy(String patientId); } 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 365b783..34b133a 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 @@ -32,13 +32,13 @@ public class StartOcrTestHandler { @TrackRetryListener("START_OCR_TEST") - public List startOcr(String patientId) { + public List startOcr(String patientId) { boolean isSpecialFile = false; OcrSpecialResult lastSpecialResul = null; //根据病案号查询文件列表 - List fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId",patientId); - for (OcrFileInfoTest fileInfoTest:fileInfoTestList) { + List fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId", patientId); + for (OcrFileInfoTest fileInfoTest : fileInfoTestList) { //遍历文件列表 获取ocr识别结果 List ocrTextList = ocrApi.getText(fileInfoTest.getPicCutUrl()); @@ -47,12 +47,12 @@ public class StartOcrTestHandler { fileInfoTest.setOcrStatus(OcrStatusEnum.COMPLETE); fileInfoTest.setOcrFinishTime(new Date()); //判断上次是否特殊文件开始 需要判断是否特殊文件结尾 - if (isSpecialFile){ + if (isSpecialFile) { fileInfoTest.setAssortId(lastSpecialResul.getAssortId()); fileInfoTest.setAssortName(lastSpecialResul.getAssortName()); fileInfoTest.setRuleId(lastSpecialResul.getRuleId()); boolean b = iOcrSpecialRuleTestService.handleSpecialRuleEnd(lastSpecialResul, ocrTextList); - if (b){ + if (b) { //当前分段为特殊分段结尾 isSpecialFile = false; lastSpecialResul = null; @@ -62,7 +62,7 @@ public class StartOcrTestHandler { //优先判断是否特殊规则开始 OcrSpecialResult ocrSpecialResult = iOcrSpecialRuleTestService.handleSpecialRule(ocrTextList); //判断是否属于某个分段 - if (ocrSpecialResult!=null){ + if (ocrSpecialResult != null) { fileInfoTest.setAssortId(ocrSpecialResult.getAssortId()); fileInfoTest.setAssortName(ocrSpecialResult.getAssortName()); fileInfoTest.setRuleId(ocrSpecialResult.getRuleId()); @@ -75,7 +75,7 @@ public class StartOcrTestHandler { } OcrRuleResult ocrRuleResult = iOcrRuleTestService.handleRule(ocrTextList); //更新文件数据的分段 - if (ocrRuleResult!=null){ + if (ocrRuleResult != null) { fileInfoTest.setAssortId(ocrRuleResult.getAssortId()); fileInfoTest.setAssortName(ocrRuleResult.getAssortName()); fileInfoTest.setRuleId(ocrRuleResult.getRuleId()); @@ -84,7 +84,7 @@ public class StartOcrTestHandler { } } //更新数据库表 - iOcrFileInfoTestDao.updateBatchById(fileInfoTestList,1000); + iOcrFileInfoTestDao.updateBatchById(fileInfoTestList, 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 97dde3b..24bd7f8 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 @@ -1,17 +1,24 @@ package com.docus.server.service.impl; +import cn.hutool.core.io.FileUtil; +import com.docus.core.util.Func; import com.docus.core.util.json.JSON; +import com.docus.server.api.ocr.OcrApi; import com.docus.server.dto.segmentation.UploadBatchFileRequest; import com.docus.server.dto.segmentation.ocrbasic.AddOcrBasicDTO; import com.docus.server.dto.segmentation.ocrbasictest.AddOcrBasicTestDTO; import com.docus.server.dto.segmentation.ocrfileinfo.AddOcrFileInfoDTO; import com.docus.server.dto.segmentation.ocrfileinfotest.AddOcrFileInfoTestDTO; +import com.docus.server.dto.segmentation.ocrfileinfotest.DeleteOcrFileInfoTestDTO; +import com.docus.server.entity.segmentation.OcrFileInfoTest; import com.docus.server.enums.OcrStatusEnum; import com.docus.server.service.IOcrBasicService; 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.vo.scheduling.management.schcollectorversionfile.UploadFileVO; +import com.google.common.collect.Lists; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,6 +38,10 @@ public class CommonService { private IOcrBasicTestService iOcrBasicTestService; @Resource private IOcrFileInfoTestService iOcrFileInfoTestService; + @Resource + private OcrApi ocrApi; + @Resource + private StartOcrTestHandler startOcrTestHandler; @Transactional(rollbackFor = Exception.class) public Object add(List segmentation, UploadBatchFileRequest request) { @@ -109,4 +120,60 @@ public class CommonService { } } + + @Transactional(rollbackFor = Exception.class) + public AddOcrFileInfoTestDTO add(UploadFileVO uploadFileVO, UploadBatchFileRequest request) { + + AddOcrFileInfoTestDTO addOcrFileInfoDTO = new AddOcrFileInfoTestDTO(); + +// addOcrFileInfoDTO.setPatientId(request.getPatientId()); + addOcrFileInfoDTO.setFileTitle(uploadFileVO.getFileTitle()); + addOcrFileInfoDTO.setPicName(uploadFileVO.getFileName()); + addOcrFileInfoDTO.setFileType(2); + addOcrFileInfoDTO.setSerialNumber(UUID.randomUUID().toString().replace("-", "")); + addOcrFileInfoDTO.setPicUrl(uploadFileVO.getSaveFilePath() + uploadFileVO.getFilePath()); + addOcrFileInfoDTO.setPicCompressUrl(uploadFileVO.getSaveCompressFilePath() + uploadFileVO.getFilePath()); + addOcrFileInfoDTO.setPicCutUrl(uploadFileVO.getSaveCutFilePath() + uploadFileVO.getFilePath()); + addOcrFileInfoDTO.setFileSize(uploadFileVO.getFileSize()); + addOcrFileInfoDTO.setHeight(uploadFileVO.getHeight()); + addOcrFileInfoDTO.setWidth(uploadFileVO.getWidth()); + addOcrFileInfoDTO.setX(uploadFileVO.getX()); + addOcrFileInfoDTO.setY(uploadFileVO.getY()); + addOcrFileInfoDTO.setJsonStr(JSON.toJSON(uploadFileVO.getParams())); + addOcrFileInfoDTO.setOcrStatus(OcrStatusEnum.NO_START); + + Long id = iOcrFileInfoTestService.saveOrUpdate(addOcrFileInfoDTO); + addOcrFileInfoDTO.setPatientId(String.valueOf(id)); + addOcrFileInfoDTO.setId(id); + + return addOcrFileInfoDTO; + } + + public OcrFileInfoTest getOcr(UploadFileVO uploadFileVO, UploadBatchFileRequest request) { + + //上一份 + String patientId = request.getPatientId(); + if (Func.isNotBlank(patientId)) { + OcrFileInfoTest ocrFileInfoTest = iOcrFileInfoTestService.findOneBy(patientId); + + if (null != ocrFileInfoTest) { + iOcrFileInfoTestService.delete(DeleteOcrFileInfoTestDTO.builder().ids(Lists.newArrayList(ocrFileInfoTest.getId())).build()); + + FileUtil.del(ocrFileInfoTest.getPicUrl()); + FileUtil.del(ocrFileInfoTest.getPicCompressUrl()); + FileUtil.del(ocrFileInfoTest.getPicCutUrl()); + } + } + + //当前 + AddOcrFileInfoTestDTO addOcrFileInfoTestDTO = this.add(uploadFileVO, request); + + List ocrFileInfoTests = startOcrTestHandler.startOcr(addOcrFileInfoTestDTO.getPatientId()); + + if (Func.isNotEmpty(ocrFileInfoTests)) { + return ocrFileInfoTests.get(0); + } else { + return null; + } + } } diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrFileInfoTestServiceImpl.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrFileInfoTestServiceImpl.java index d9ff89f..0d9a6ba 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrFileInfoTestServiceImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrFileInfoTestServiceImpl.java @@ -72,6 +72,22 @@ public class OcrFileInfoTestServiceImpl implements IOcrFileInfoTestService { iOcrFileInfoTestDao.saveBatch(ocrFileInfos, 500); } + @Override + public OcrFileInfoTest findOneBy(String patientId) { + return iOcrFileInfoTestDao.findOneBy("patientId", patientId); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Long saveOrUpdate(AddOcrFileInfoTestDTO files) { + OcrFileInfoTest ocrFileInfos = OcrFileInfoTestConvert.INSTANCE.convertDO(files); + ocrFileInfos.setId(idService.getDateSeq()); + ocrFileInfos.setPatientId(String.valueOf(ocrFileInfos.getId())); + + iOcrFileInfoTestDao.saveOrUpdate(ocrFileInfos); + + return ocrFileInfos.getId(); + } /** * 新增 diff --git a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java index 8b55e2c..99c4251 100644 --- a/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java +++ b/docus-segmentation/src/main/java/com/docus/server/service/impl/OcrRuleTestServiceImpl.java @@ -8,7 +8,10 @@ import com.docus.server.convert.OcrRuleTestConvert; import com.docus.server.dto.segmentation.ocrruletest.AddOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.DeleteOcrRuleTestDTO; import com.docus.server.dto.segmentation.ocrruletest.EditOcrRuleTestDTO; -import com.docus.server.entity.segmentation.*; +import com.docus.server.entity.segmentation.OcrRuleJson; +import com.docus.server.entity.segmentation.OcrRuleResult; +import com.docus.server.entity.segmentation.OcrRuleSecondJson; +import com.docus.server.entity.segmentation.OcrRuleTest; import com.docus.server.infrastructure.dao.IOcrRuleTestDao; import com.docus.server.service.IOcrRuleTestService; import com.docus.server.vo.segmentation.ocrruletest.OcrRuleTestVO; @@ -53,13 +56,13 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService { //判断二级是否启用 if (ocrRuleTest.getIsUseSecond() && Func.isNotEmpty(ocrRuleTest.getJson())) { List ocrRuleList = Func.parseJsonArray(ocrRuleTest.getJson(), OcrRuleJson.class) - .stream().sorted(Comparator.comparing(OcrRuleJson::getSort)) - .collect(Collectors.toList()); + .stream().sorted(Comparator.comparing(OcrRuleJson::getSort)) + .collect(Collectors.toList()); for (OcrRuleJson ruleJson : ocrRuleList) { //匹配二级的关键词列表 assortId = ruleJson.getAssortId(); List ocrRuleSecondJsonList = ruleJson.getKeyWordList(); - for (OcrRuleSecondJson ocrRuleSecondJson:ocrRuleSecondJsonList) { + for (OcrRuleSecondJson ocrRuleSecondJson : ocrRuleSecondJsonList) { keyWordList = ocrRuleSecondJson.getKeyWord().split("#"); score = ocrRuleSecondJson.getMatchRatio(); for (int j = 0; j < keyWordList.length; j++) { @@ -146,15 +149,15 @@ public class OcrRuleTestServiceImpl implements IOcrRuleTestService { @Override public void deleteAndAdd(List editOcrRuleTestDTOList) { - List ruleTestList = editOcrRuleTestDTOList.stream().map(m->{ + List ruleTestList = editOcrRuleTestDTOList.stream().map(m -> { OcrRuleTest ocrRuleTest = OcrRuleTestConvert.INSTANCE.convertDO(m); - ocrRuleTest.setId(ocrRuleTest.getId()==null?idService.getDateSeq():ocrRuleTest.getId()); + ocrRuleTest.setId(ocrRuleTest.getId() == null ? idService.getDateSeq() : ocrRuleTest.getId()); return ocrRuleTest; }).collect(Collectors.toList()); String assortId = ruleTestList.get(0).getAssortId(); - iOcrRuleTestDao.deleteBy("assortId",assortId); - iOcrRuleTestDao.saveBatch(ruleTestList,1000); + iOcrRuleTestDao.deleteBy("assortId", assortId); + iOcrRuleTestDao.saveBatch(ruleTestList, 1000); } /**