1. ocr 功能接口联调调整

topo_dev
xueqingkun 9 months ago
parent 029a8a636d
commit 90e9223ea6

@ -27,16 +27,27 @@ public class OCREvidenceController {
return R.ok(success); return R.ok(success);
} }
@PostMapping("/retrieveTitle")
public R<Boolean> retrieveTitle(@RequestBody List<String> fileIdList) {
Boolean success = ocrEvidenceService.retrieveTitle(fileIdList);
return R.ok(success);
}
@PostMapping("/retrieveTitleProcess")
public R<Boolean> retrieveTitleProcess(@RequestBody List<String> fileIdList) {
Boolean finished = ocrEvidenceService.retrieveTitleProcess(fileIdList);
return R.ok(finished);
}
@PostMapping("/queryFileList") @PostMapping("/queryFileList")
public R<List<EvidenceFileOCRDTO>> queryFileList(@RequestBody List<String> fileIdList) { public R<List<EvidenceFileOCRDTO>> queryFileList(@RequestBody List<String> fileIdList) {
List<EvidenceFileOCRDTO> evidenceFileOCRDTOList = ocrEvidenceService.queryFileList(fileIdList); List<EvidenceFileOCRDTO> evidenceFileOCRDTOList = ocrEvidenceService.queryFileList(fileIdList);
return R.ok(evidenceFileOCRDTOList); return R.ok(evidenceFileOCRDTOList);
} }
@PostMapping("/saveEvidence") @PostMapping("/batchSaveEvidence")
public R<String> saveEvidence(@RequestBody EvidenceFileOCRDTO evidenceFileOCRDTO) { public R<List<String>> saveEvidence(@RequestBody List<EvidenceFileOCRDTO> evidenceFileOCRDTOS) {
String evidenceId = ocrEvidenceService.saveEvidence(evidenceFileOCRDTO);
return R.ok(evidenceId); List<String> evidenceIds = ocrEvidenceService.batchSaveEvidence(evidenceFileOCRDTOS);;
return R.ok(evidenceIds);
} }
} }

@ -14,4 +14,6 @@ import java.util.List;
public interface EvidenceFileService extends IService<EvidenceFile> { public interface EvidenceFileService extends IService<EvidenceFile> {
List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds); List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds);
List<EvidenceFile> listByFileIds(List<String> fileIds);
} }

@ -39,6 +39,9 @@ public interface FileOcrProcessService extends IService<FileOcrProcess> {
List<RecordFileDTO> queryFileList(List<String> fileIdList); List<RecordFileDTO> queryFileList(List<String> fileIdList);
List<RecordFileDTO> queryFileListWithIdSort(List<String> fileIdList);
List<RecordFileDTO> queryFileList(String status,List<String> fileIdList); List<RecordFileDTO> queryFileList(String status,List<String> fileIdList);

@ -26,4 +26,16 @@ public interface OCREvidenceService {
List<EvidenceFileOCRDTO> queryFileList(List<String> fileIdList); List<EvidenceFileOCRDTO> queryFileList(List<String> fileIdList);
String saveEvidence(EvidenceFileOCRDTO evidenceFileOCRDTO); String saveEvidence(EvidenceFileOCRDTO evidenceFileOCRDTO);
Boolean retrieveTitle(List<String> fileIdList);
Boolean retrieveTitleProcess(List<String> fileIdList);
List<String> batchSaveEvidence(List<EvidenceFileOCRDTO> evidenceFileOCRDTOS);
void asyncRetrieveTitle(List<String> fileIdList);
void doRetrieveTitle(List<String> fileIdList);
} }

@ -1,5 +1,6 @@
package com.supervision.police.service.impl; package com.supervision.police.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.police.domain.EvidenceFile; import com.supervision.police.domain.EvidenceFile;
import com.supervision.police.service.EvidenceFileService; import com.supervision.police.service.EvidenceFileService;
@ -7,6 +8,7 @@ import com.supervision.police.dto.EvidenceFileDTO;
import com.supervision.police.mapper.EvidenceFileMapper; import com.supervision.police.mapper.EvidenceFileMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -22,6 +24,14 @@ public class EvidenceFileServiceImpl extends ServiceImpl<EvidenceFileMapper, Evi
public List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds) { public List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds) {
return super.getBaseMapper().listFileInfo(evidenceIds); return super.getBaseMapper().listFileInfo(evidenceIds);
} }
@Override
public List<EvidenceFile> listByFileIds(List<String> fileIds) {
if (CollUtil.isEmpty(fileIds)){
return new ArrayList<>(1);
}
return super.lambdaQuery().in(EvidenceFile::getFileId, fileIds).list();
}
} }

@ -106,7 +106,7 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
List<OCRReqDTO> ocrReqDTOS = buildOCRReqDTO(fileIdList); List<OCRReqDTO> ocrReqDTOS = buildOCRReqDTO(fileIdList);
for (OCRReqDTO ocrReqDTO : ocrReqDTOS) { for (OCRReqDTO ocrReqDTO : ocrReqDTOS) {
log.info("ocr:开始识别文件:{}", JSONUtil.toJsonStr(ocrReqDTO)); log.info("ocr:开始识别文件:{}", JSONUtil.toJsonStr(ocrReqDTO));
this.updateOCrStatus(ocrReqDTO.getFile_ids(),0); this.updateOCrStatus(ocrReqDTO.getFile_ids(),OcrProcessStatus.PROCESSING.getCode());
try { try {
List<OCRResDTO> ocrRes = ocrService.ocr(ocrReqDTO); List<OCRResDTO> ocrRes = ocrService.ocr(ocrReqDTO);
log.info("ocr:识别结果:{}", JSONUtil.toJsonStr(ocrRes)); log.info("ocr:识别结果:{}", JSONUtil.toJsonStr(ocrRes));
@ -158,6 +158,12 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
@Override @Override
public Boolean updateByOcrRes(OCRResDTO ocrResDTO) { public Boolean updateByOcrRes(OCRResDTO ocrResDTO) {
// code码转换
if (Integer.valueOf(0).equals(ocrResDTO.getStatus())){
ocrResDTO.setStatus(1);
}
return super.lambdaUpdate().eq(FileOcrProcess::getFileId, ocrResDTO.getFile_id()) return super.lambdaUpdate().eq(FileOcrProcess::getFileId, ocrResDTO.getFile_id())
.set(FileOcrProcess::getOcrText, ocrResDTO.getOcr_text()) .set(FileOcrProcess::getOcrText, ocrResDTO.getOcr_text())
.set(FileOcrProcess::getStatus, ocrResDTO.getStatus()) .set(FileOcrProcess::getStatus, ocrResDTO.getStatus())
@ -173,6 +179,12 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
return super.baseMapper.queryFileList(null,fileIdList); return super.baseMapper.queryFileList(null,fileIdList);
} }
@Override
public List<RecordFileDTO> queryFileListWithIdSort(List<String> fileIdList) {
List<RecordFileDTO> recordFileDTOS = this.queryFileList(fileIdList);
return sortByIdOrder(fileIdList, recordFileDTOS);
}
@Override @Override
public List<RecordFileDTO> queryFileList(String status, List<String> fileIdList) { public List<RecordFileDTO> queryFileList(String status, List<String> fileIdList) {
if (CollUtil.isEmpty(fileIdList)){ if (CollUtil.isEmpty(fileIdList)){
@ -202,6 +214,17 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
private List<RecordFileDTO> sortByIdOrder(List<String> fileIdList,List<RecordFileDTO> recordFileDTOList){
if (CollUtil.size(fileIdList) < 2 || CollUtil.size(recordFileDTOList) < 2) {
return recordFileDTOList;
}
Map<String, RecordFileDTO> recordFileDTOMap = recordFileDTOList.stream()
.collect(Collectors.toMap(RecordFileDTO::getFileId,recordFileDTO -> recordFileDTO, (k1, k2) -> k1));
return fileIdList.stream().map(recordFileDTOMap::get).filter(Objects::nonNull).collect(Collectors.toList());
}
} }

@ -36,6 +36,8 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
private final EvidenceFileService evidenceFileService; private final EvidenceFileService evidenceFileService;
private final CaseEvidenceService caseEvidenceService; private final CaseEvidenceService caseEvidenceService;
private final OcrExtractService ocrExtractService;
@Override @Override
public Boolean submitOrcTask(String fileId) { public Boolean submitOrcTask(String fileId) {
Assert.notEmpty(fileId, "文件id不能为空"); Assert.notEmpty(fileId, "文件id不能为空");
@ -44,6 +46,13 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
return true; return true;
} }
/**
*
* @param evidenceId
* @param fileId
* @return
*/
@Deprecated
@Override @Override
@Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager") @Transactional(rollbackFor = Exception.class,transactionManager = "dataSourceTransactionManager")
public List<FileEvidenceProperty> doOrcTask(String evidenceId,String fileId) { public List<FileEvidenceProperty> doOrcTask(String evidenceId,String fileId) {
@ -93,7 +102,7 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
@Async @Async
@Override @Override
public void asyncDoOrcTask(String evidenceId, String fileId) { public void asyncDoOrcTask(String evidenceId, String fileId) {
doOrcTask(evidenceId, fileId); ocrProcessService.syncSubmitOCR(CollUtil.newArrayList(fileId));
} }
@Override @Override
@ -122,7 +131,11 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
List<EvidenceFileOCRDTO> collect = ocrEvidencePropertyDTOS.stream() List<EvidenceFileOCRDTO> collect = ocrEvidencePropertyDTOS.stream()
.collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId)) .collect(Collectors.groupingBy(OCREvidencePropertyDTO::getFileId))
.values().stream() .values().stream()
.map(EvidenceFileOCRDTO::new) .map(EvidenceFileOCRDTO::new).peek(evidenceFileOCRDTO -> {
if (StrUtil.isNotEmpty(evidenceFileOCRDTO.getEvidenceId())){
evidenceFileOCRDTO.setEvidenceType("1");// 默认为书证
}
})
.collect(Collectors.toList()); .collect(Collectors.toList());
return sortByIdOrder(fileIdList, collect); return sortByIdOrder(fileIdList, collect);
@ -152,6 +165,87 @@ public class OCREvidenceServiceImpl implements OCREvidenceService {
return CollUtil.getFirst(evidencePropertyList).getEvidenceId(); 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){ private List<EvidenceFileOCRDTO> sortByIdOrder(List<String> fileIdList, List<EvidenceFileOCRDTO> evidenceFileOCRDTOS){

@ -74,8 +74,7 @@ public class OCRRecordServiceImpl implements OCRRecordService {
} }
List<String> fileIdList = Arrays.stream(fileIds.split(",")).toList(); List<String> fileIdList = Arrays.stream(fileIds.split(",")).toList();
List<RecordFileDTO> recordFileDTOS = fileOcrProcessService.queryFileList(fileIdList); List<RecordFileDTO> recordFileDTOS = fileOcrProcessService.queryFileListWithIdSort(fileIdList);
recordFileDTOS = sortByIdOrder(fileIdList, recordFileDTOS);
recordFileDTOS.forEach(record->{ recordFileDTOS.forEach(record->{
record.formatFileSize(); record.formatFileSize();
record.setDefaultEvidenceTypeDesc(); record.setDefaultEvidenceTypeDesc();
@ -163,14 +162,4 @@ public class OCRRecordServiceImpl implements OCRRecordService {
return splitList; return splitList;
} }
private List<RecordFileDTO> sortByIdOrder(List<String> fileIdList,List<RecordFileDTO> recordFileDTOList){
if (CollUtil.size(fileIdList) < 2 || CollUtil.size(recordFileDTOList) < 2) {
return recordFileDTOList;
}
Map<String, RecordFileDTO> recordFileDTOMap = recordFileDTOList.stream()
.collect(Collectors.toMap(RecordFileDTO::getFileId,recordFileDTO -> recordFileDTO, (k1, k2) -> k1));
return fileIdList.stream().map(recordFileDTOMap::get).filter(Objects::nonNull).collect(Collectors.toList());
}
} }

@ -10,6 +10,7 @@
p.id_card as casePersonIdCard, p.id_card as casePersonIdCard,
r.record_name as recordName, r.record_name as recordName,
r.file_ids as fileIds, r.file_ids as fileIds,
r.index_num as indexNum,
p.name as name, p.name as name,
p.role_code as role, p.role_code as role,
r.law_asker as lawAsker, r.law_asker as lawAsker,

Loading…
Cancel
Save