bug修复

segment2.0
zhanglb 2 years ago
parent 9aa132bbbd
commit 65dde6aca2

@ -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);

@ -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;
}

@ -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<OcrFileInfoTest> start(String id) {
return startOcrTestHandler.startOcr(id);
return startSegmentTestHandler.startSegment(id);
}
/**

@ -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<OcrFileInfoTest> startOcr(String patientId) {
boolean isSpecialFile = false;
OcrSpecialResult lastSpecialResul = null;
public void startOcr(String patientId) {
//根据病案号查询文件列表
List<OcrBasicTest> ocrBasicTestList = iOcrBasicTestDao.findBy("patientId",patientId);
List<OcrFileInfoTest> fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId", patientId);
String url = iOcrUrlConfigTestDao.findAll().get(0).getUrl();
for (OcrFileInfoTest fileInfoTest : fileInfoTestList) {
//遍历文件列表 获取ocr识别结果
List<String> 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<OcrBasicTest> 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;
}
}

@ -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<OcrBasic> ocrBasicList = iOcrBasicDao.findBy("patientId",patientId);
String url = iOcrUrlConfigDao.findBy("version",version).get(0).getUrl();
List<OcrFileInfo> fileInfoList = iOcrFileInfoDao.findBy("patientId",patientId);
for (OcrFileInfo fileInfo:fileInfoList) {
@ -99,6 +102,15 @@ public class StartSegmentHandler {
}
}
//更新数据库表
iOcrFileInfoDao.updateBatchById(fileInfoList,1000);
List<OcrBasic> 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
}
}

@ -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<OcrFileInfoTest> startSegment(String patientId) {
boolean isSpecialFile = false;
OcrSpecialResult lastSpecialResul = null;
//根据病案号查询文件列表
List<OcrBasicTest> ocrBasicTestList = iOcrBasicTestDao.findBy("patientId",patientId);
List<OcrFileInfoTest> fileInfoTestList = iOcrFileInfoTestDao.findBy("patientId", patientId);
String url = iOcrUrlConfigTestDao.findAll().get(0).getUrl();
for (OcrFileInfoTest fileInfoTest : fileInfoTestList) {
//遍历文件列表 获取ocr识别结果
List<String> 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<OcrBasicTest> 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;
}
}

@ -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<UploadFileVO> segmentation, UploadBatchFileRequest request) {
@ -168,7 +169,7 @@ public class CommonService {
//当前
AddOcrFileInfoTestDTO addOcrFileInfoTestDTO = this.add(uploadFileVO, request);
List<OcrFileInfoTest> ocrFileInfoTests = startOcrTestHandler.startOcr(addOcrFileInfoTestDTO.getPatientId());
List<OcrFileInfoTest> ocrFileInfoTests = startSegmentTestHandler.startSegment(addOcrFileInfoTestDTO.getPatientId());
if (Func.isNotEmpty(ocrFileInfoTests)) {
return ocrFileInfoTests.get(0);

Loading…
Cancel
Save