|
|
|
@ -36,6 +36,8 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
|
|
|
|
|
private final EvidenceFileService evidenceFileService;
|
|
|
|
|
|
|
|
|
|
private final CaseEvidenceService caseEvidenceService;
|
|
|
|
|
|
|
|
|
|
private final OcrExtractService ocrExtractService;
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean submitOrcTask(String fileId) {
|
|
|
|
|
Assert.notEmpty(fileId, "文件id不能为空");
|
|
|
|
@ -44,6 +46,13 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 识别文件信息 由于识别文件标题需要通过组文件进行上下文分析,所以废弃单个文件识别的方式
|
|
|
|
|
* @param evidenceId
|
|
|
|
|
* @param fileId
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Deprecated
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
|
|
|
|
|
public List<FileEvidenceProperty> doOrcTask(String evidenceId,String fileId) {
|
|
|
|
@ -93,7 +102,7 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
|
|
|
|
|
@Async
|
|
|
|
|
@Override
|
|
|
|
|
public void asyncDoOrcTask(String evidenceId, String fileId) {
|
|
|
|
|
doOrcTask(evidenceId, fileId);
|
|
|
|
|
ocrProcessService.syncSubmitOCR(CollUtil.newArrayList(fileId));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -122,7 +131,11 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
|
|
|
|
|
List<EvidenceFileOCRDTO> collect = ocrEvidencePropertyDTOS.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId))
|
|
|
|
|
.values().stream()
|
|
|
|
|
.map(EvidenceFileOCRDTO::new)
|
|
|
|
|
.map(EvidenceFileOCRDTO::new).peek(evidenceFileOCRDTO -> {
|
|
|
|
|
if (StrUtil.isNotEmpty(evidenceFileOCRDTO.getEvidenceId())){
|
|
|
|
|
evidenceFileOCRDTO.setEvidenceType("1");// 默认为书证
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
return sortByIdOrder(fileIdList, collect);
|
|
|
|
@ -152,6 +165,87 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
|
|
|
|
|
return CollUtil.getFirst(evidencePropertyList).getEvidenceId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean retrieveTitle(List<String> fileIdList) {
|
|
|
|
|
if (CollUtil.isEmpty(fileIdList)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
((OCREvidenceService)(AopContext.currentProxy())).asyncRetrieveTitle(fileIdList);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean retrieveTitleProcess(List<String> fileIdList) {
|
|
|
|
|
if (CollUtil.isEmpty(fileIdList)){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
List<EvidenceFile> evidenceFiles = evidenceFileService.listByFileIds(fileIdList);
|
|
|
|
|
for (String fileId : fileIdList) {
|
|
|
|
|
if (!evidenceFilesExist(fileId, evidenceFiles)){
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
|
|
|
|
|
public List<String> batchSaveEvidence(List<EvidenceFileOCRDTO> evidenceFileOCRDTOS) {
|
|
|
|
|
|
|
|
|
|
List<String> evidenceList = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isEmpty(evidenceFileOCRDTOS)){
|
|
|
|
|
return evidenceList;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
for (EvidenceFileOCRDTO evidenceFileOCRDTO : evidenceFileOCRDTOS) {
|
|
|
|
|
String evidence = saveEvidence(evidenceFileOCRDTO);
|
|
|
|
|
evidenceList.add(evidence);
|
|
|
|
|
}
|
|
|
|
|
return evidenceList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Async
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
|
|
|
|
|
public void asyncRetrieveTitle(List<String> fileIdList) {
|
|
|
|
|
doRetrieveTitle(fileIdList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
|
|
|
|
|
public void doRetrieveTitle(List<String> fileIdList) {
|
|
|
|
|
|
|
|
|
|
List<RecordFileDTO> recordFileDTOS = ocrProcessService.queryFileListWithIdSort(fileIdList);
|
|
|
|
|
if (CollUtil.isEmpty(recordFileDTOS)){
|
|
|
|
|
log.warn("doRetrieveTitle:文件id:{} 未查询到文件信息...", StrUtil.join(",", fileIdList));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<OcrExtractDto> dtoList = recordFileDTOS.stream().map(recordFileDTO -> {
|
|
|
|
|
OcrExtractDto dto = new OcrExtractDto();
|
|
|
|
|
dto.setId(recordFileDTO.getFileId());
|
|
|
|
|
dto.setText(recordFileDTO.getOcrText());
|
|
|
|
|
return dto;
|
|
|
|
|
}).toList();
|
|
|
|
|
List<OcrExtractDto> result = ocrExtractService.extractTitle(dtoList);
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isEmpty(result)){
|
|
|
|
|
log.warn("retrieveTitle:文件id:{} 提取标题失败", StrUtil.join(",", fileIdList));
|
|
|
|
|
}
|
|
|
|
|
for (OcrExtractDto dto : result) {
|
|
|
|
|
this.saveEvidenceProperty(null, dto.getId(),
|
|
|
|
|
Map.of(EvidencePropertyName.TITLE.getName(), dto.getTitle()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean evidenceFilesExist(String fileId,List<EvidenceFile> evidenceFiles){
|
|
|
|
|
for (EvidenceFile evidenceFile : evidenceFiles) {
|
|
|
|
|
if (StrUtil.equals(fileId, evidenceFile.getFileId())){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<EvidenceFileOCRDTO> sortByIdOrder(List<String> fileIdList, List<EvidenceFileOCRDTO> evidenceFileOCRDTOS){
|
|
|
|
|
|
|
|
|
|