1. 修复证据改造bug

topo_dev
xueqingkun 6 months ago
parent 5c0c20744b
commit 676fc2e06e

@ -51,6 +51,10 @@ public class EvidenceDirectoryDTO {
*/
private List<EvidenceFileDTO> fileInfoList = new ArrayList<>();
/**
* 使level 12 evidenceInfo3
* fileInfoList[evidenceInfo]
*/
private CaseEvidence evidenceInfo;
private int level = -1;
@ -241,4 +245,20 @@ public class EvidenceDirectoryDTO {
}
/**
*
*/
public void rePlaceEvidence(){
if (CollUtil.isNotEmpty(this.fileInfoList) && null != this.evidenceInfo){
for (EvidenceFileDTO evidenceFileDTO : this.fileInfoList) {
evidenceFileDTO.setEvidenceInfo(evidenceInfo);
}
}
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO directoryDTO : this.child) {
directoryDTO.rePlaceEvidence();
}
}
}
}

@ -19,6 +19,10 @@ public class EvidenceVerifyDTO {
private String title;
private String provider;
private String evidenceName;
private List<NotePromptExtractAttributesDto> properties;
private String directoryId;

@ -143,11 +143,6 @@ public interface CaseEvidenceService extends IService<CaseEvidence> {
EvidenceDirectory createDirectory(EvidenceDirectoryReqVO evidenceDirectory);
/**
* ocr note: word pfd
*
* @param evidenceFileList
*/
void preAsyncSubmitOCR(List<EvidenceFileDTO> evidenceFileList);
void syncEvidenceAnalysis(List<CaseEvidenceDetailDTO> evidenceList);
}

@ -57,4 +57,12 @@ public interface FileOcrProcessService extends IService<FileOcrProcess> {
void doPdfCRTask(List<FileOcrProcess> fileOcrProcesses);
/**
* ocr
* @param fileIds
* @param fileType
*/
List<FileOcrProcess> multipleTypeOcrProcess(List<String> fileIds,String fileType);
}

@ -246,17 +246,21 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
log.error("证据不存在");
return;
}
List<EvidenceFile> evidenceFiles = evidenceFileService.lambdaQuery().eq(EvidenceFile::getEvidenceId, evidenceId).list();
List<EvidenceFileDTO> evidenceFiles = evidenceFileService.listFileInfo(List.of(evidenceId));
if (evidenceFiles.isEmpty()) {
log.error("证据id:【{}】不存在证据文件", evidenceId);
return;
}
try {
// 根据rank升序排序
evidenceFiles.sort(Comparator.comparing(EvidenceFile::getRank));
log.info("OCR识别开始。证据文件ID:【{}】", evidenceFiles.stream().map(EvidenceFile::getFileId).toList());
evidenceFiles.sort(Comparator.comparing(EvidenceFileDTO::getRank));
log.info("OCR识别开始。证据文件ID:【{}】", evidenceFiles.stream().map(EvidenceFileDTO::getFileId).toList());
long ocrStart = System.currentTimeMillis();
List<FileOcrProcess> fileOcrProcesses = fileOcrProcessService.syncSubmitOCR(evidenceFiles.stream().map(EvidenceFile::getFileId).toList());
List<FileOcrProcess> fileOcrProcesses = new ArrayList<>();
for (EvidenceFileDTO evidenceFile : evidenceFiles) {
List<FileOcrProcess> fileOcrProcess = fileOcrProcessService.multipleTypeOcrProcess(List.of(evidenceFile.getEvidenceId()), evidenceFile.getFileType());
fileOcrProcesses.addAll(fileOcrProcess);
}
log.info("OCR识别完成。更新证据处理状态为【OCR识别完成】。耗时:【{}】ms", System.currentTimeMillis() - ocrStart);
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_OCR_OK);
updateById(caseEvidence);
@ -443,43 +447,47 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
String batchId = ((CaseEvidenceService) AopContext.currentProxy()).updateCaseEvidence4NewTransaction(operationalEvidenceList);
List<EvidenceFileDTO> evidenceFileDTOList = operationalEvidenceList.stream().filter(
evidenceDetail-> !evidenceDetail.getFileList().stream().allMatch(file -> StrUtil.equals(file.getUpdateStatus(), "1"))
)
.flatMap(evidenceDetailDTO -> evidenceDetailDTO.getFileList().stream().filter(file -> StrUtil.equals(file.getUpdateStatus(), "1"))).toList();
((CaseEvidenceService) AopContext.currentProxy()).preAsyncSubmitOCR(evidenceFileDTOList);
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidenceList) {
if (StrUtil.equalsAny(caseEvidenceDetailDTO.getUpdateStatus(), "-1", "1")) {
boolean match = caseEvidenceDetailDTO.getFileList().stream().allMatch(file -> StrUtil.equals(file.getUpdateStatus(), "1"));
if (match) {
// 需要分析ocr识别+标题提取)
log.info("ocrAndExtract:开始调用evidenceAnalysis接口...证据id:{},证据名:{}", caseEvidenceDetailDTO.getId(), caseEvidenceDetailDTO.getEvidenceName());
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", caseEvidenceDetailDTO.getId());
} else {
log.info("ocrAndExtract:单独识别ocr数据");
boolean success = false;
for (EvidenceFileDTO evidenceFileDTO : caseEvidenceDetailDTO.getFileList()) {
success = ocrEvidenceService.submitOrcTask(evidenceFileDTO.getFileId());
if (!success) {
this.lambdaUpdate().eq(CaseEvidence::getId, evidenceFileDTO.getEvidenceId())
.set(CaseEvidence::getProcessStatus, EvidenceConstants.PROCESS_STATUS_FAILED).update();
break;
}
}
syncEvidenceAnalysis(operationalEvidenceList);
if (success) {
this.lambdaUpdate().eq(CaseEvidence::getId, caseEvidenceDetailDTO.getId())
.set(CaseEvidence::getProcessStatus, EvidenceConstants.PROCESS_STATUS_SUCCESS).update();
}
return batchId;
}
}
}
@Async
public void syncEvidenceAnalysis(List<CaseEvidenceDetailDTO> evidenceList) {
List<EvidenceFileDTO> ocrFileDTOList = evidenceList.stream().filter(
// 当前目录下不是所有文件都是新增
evidenceDetail-> !evidenceDetail.getFileList().stream().allMatch(file -> StrUtil.equalsAny(file.getUpdateStatus(), "1", "-1"))
)
.flatMap(evidenceDetailDTO -> evidenceDetailDTO.getFileList().stream().filter(file -> StrUtil.equals(file.getUpdateStatus(), "1"))).toList();
if (CollUtil.isNotEmpty(ocrFileDTOList)){
// 在已经存在的目录下追加文件只需要重新及进行ocr识别
log.info("ocrAndExtract:开始只进行文件内容识别...");
Map<String, List<EvidenceFileDTO>> evidenceMap = ocrFileDTOList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId));
for (Map.Entry<String, List<EvidenceFileDTO>> entry : evidenceMap.entrySet()) {
String evidenceId = entry.getKey();
List<EvidenceFileDTO> value = entry.getValue();
List<FileOcrProcess> fileOcrProcesses = fileOcrProcessService.multipleTypeOcrProcess(value.stream().map(EvidenceFileDTO::getFileId).toList(), evidenceId);
boolean match = fileOcrProcesses.stream().anyMatch(fileOcrProcess -> Integer.valueOf(2).equals(fileOcrProcess.getStatus()));
this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId)
.set(CaseEvidence::getProcessStatus,
match ? EvidenceConstants.PROCESS_STATUS_FAILED : EvidenceConstants.PROCESS_STATUS_SUCCESS).update();
}
}
return batchId;
Set<String> evidenceIds = evidenceList.stream().filter(
// 当前目录下不是所有文件都是新增
evidenceDetail -> evidenceDetail.getFileList().stream().allMatch(file -> StrUtil.equalsAny(file.getUpdateStatus(), "1", "-1"))
)
.flatMap(evidenceDetailDTO -> evidenceDetailDTO.getFileList().stream().filter(file -> StrUtil.equals(file.getUpdateStatus(), "1"))
.map(EvidenceFileDTO::getEvidenceId)).collect(Collectors.toSet());
for (String evidenceId : evidenceIds) {
// 文件目录下的所有文件都是新增的,需要重新提取分析
log.info("ocrAndExtract:证据:{} 进行证据分析操作....", evidenceId);
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", evidenceId);
}
}
/**
@ -502,11 +510,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
evidence.setId(caseEvidence.getId());
for (EvidenceFileDTO evidenceFileDTO : evidence.getFileList()) {
if (StrUtil.equalsAny(evidenceFileDTO.getUpdateStatus(), "1", "2")) {
evidenceFileDTO.setEvidenceId(caseEvidence.getId());
// 新增
EvidenceFile evidenceFile = new EvidenceFile(caseEvidence.getId(), evidenceFileDTO.getFileId());
evidenceFile.setDirectoryId(evidence.getDirectoryId());
evidenceFile.setRank(evidenceFileDTO.getRank());
evidenceFile.setBatchNo(batchNo);
evidenceFile.setEvidenceId(caseEvidence.getId());
evidenceFileService.save(evidenceFile);
}/*else if (evidenceFileDTO.getUpdateStatus().equals("0")){
// 删除
@ -522,12 +532,14 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
} else if (evidence.getUpdateStatus().equals("-1")) {
for (EvidenceFileDTO evidenceFileDTO : evidence.getFileList()) {
evidenceFileDTO.setEvidenceId(evidence.getId());
if (StrUtil.equalsAny(evidenceFileDTO.getUpdateStatus(), "1", "2")) {
// 新增
EvidenceFile evidenceFile = new EvidenceFile(evidence.getId(), evidenceFileDTO.getFileId());
evidenceFile.setDirectoryId(evidence.getDirectoryId());
evidenceFile.setRank(evidenceFileDTO.getRank());
evidenceFile.setBatchNo(batchNo);
evidenceFile.setEvidenceId(evidence.getId());
evidenceFileService.save(evidenceFile);
}
}
@ -581,6 +593,9 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId)
.set(CaseEvidence::getProperty, JSONUtil.toJsonStr(CollUtil.getFirst(value).getProperties()))
.set(CaseEvidence::getTitle, CollUtil.getFirst(value).getTitle())
.set(CaseEvidence::getProvider, CollUtil.getFirst(value).getProvider())
.set(CaseEvidence::getProcessStatus, EvidenceConstants.PROCESS_STATUS_VERIFIED)// 设置状态为已核实
.set(CaseEvidence::getTitle, CollUtil.getFirst(value).getEvidenceName())
.update();
// 修改ocr内容
@ -613,15 +628,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
return;
}
// 重新把外层的信息设置到证据文件对象中
for (EvidenceDirectoryDTO directoryDTO : verifyEvidenceReqVO.getEvidenceDirectoryList()) {
CaseEvidence evidenceInfo = directoryDTO.getEvidenceInfo();
List<EvidenceFileDTO> fileInfoList = directoryDTO.getFileInfoList();
if (CollUtil.isNotEmpty(fileInfoList) && evidenceInfo != null) {
for (EvidenceFileDTO fileInfo : fileInfoList) {
fileInfo.setEvidenceInfo(evidenceInfo);
}
}
}
verifyEvidenceReqVO.getEvidenceDirectoryList().forEach(EvidenceDirectoryDTO::rePlaceEvidence);
List<EvidenceVerifyDTO> evidenceVerifyDTOS = evidenceDirectoryList.stream()
.flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.listAllFile().stream())
@ -634,6 +641,8 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
if (null != evidenceInfo) {
evidenceVerifyDTO.setProperties(evidenceInfo.getProperty());
evidenceVerifyDTO.setTitle(evidenceInfo.getTitle());
evidenceVerifyDTO.setProvider(evidenceInfo.getProvider());
evidenceVerifyDTO.setEvidenceName(evidenceInfo.getEvidenceName());
}
return evidenceVerifyDTO;
}).toList();
@ -751,22 +760,6 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
return directory;
}
@Override
@Async
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW, transactionManager = "dataSourceTransactionManager")
public void preAsyncSubmitOCR(List<EvidenceFileDTO> evidenceFileList) {
for (EvidenceFileDTO evidenceFileDTO : evidenceFileList) {
if (StrUtil.equalsAny(evidenceFileDTO.getFileType(), "doc", "docx")) {
fileOcrProcessService.syncSubmitOCR(List.of(evidenceFileDTO.getFileId()), fileOcrProcessService::doWordCRTask);
} else if (StrUtil.equalsAny(evidenceFileDTO.getFileType(), "pdf")) {
fileOcrProcessService.syncSubmitOCR(List.of(evidenceFileDTO.getFileId()), fileOcrProcessService::doPdfCRTask);
} else {
fileOcrProcessService.syncSubmitOCR(List.of(evidenceFileDTO.getFileId()), fileOcrProcessService::doOCRTask);
}
}
}
private CaseEvidenceDetailDTO findEvidenceDetail(String evidenceId, List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOS) {
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : caseEvidenceDetailDTOS) {
@ -833,6 +826,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
for (String fileId : evidenceFile.getFileIdList()) {
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
evidenceFileDTO.setFileId(fileId);
evidenceFileDTO.setEvidenceId(caseEvidenceDetailDTO.getId());
MinioFile minioFile = fileMap.get(fileId);
if (null != minioFile) {
evidenceFileDTO.setFileName(minioFile.getFilename());

@ -237,6 +237,18 @@ public class FileOcrProcessServiceImpl extends ServiceImpl<FileOcrProcessMapper,
doMcr(fileOcrProcesses, (fileId)-> PDFReadUtil.readPdfInMinio(minioService, fileId));
}
@Override
public List<FileOcrProcess> multipleTypeOcrProcess(List<String> fileIds, String fileType) {
if (StrUtil.equalsAny(fileType, "doc", "docx")){
return this.syncSubmitOCR(fileIds, this::doWordCRTask);
}else if (StrUtil.equalsAny(fileType, "pdf")){
return this.syncSubmitOCR(fileIds, this::doPdfCRTask);
}else {
return this.submitOCR(fileIds, this::doOCRTask);
}
}
private void doMcr(List<FileOcrProcess> fileOcrProcesses, Function<String, String> function) {
log.info("doMcr:开始识别文件...{}",JSONUtil.toJsonStr(fileOcrProcesses));

@ -28,6 +28,7 @@
select
ef.file_id as fileId,
ef.evidence_id as evidenceId,
ef.`rank` as rank,
mf.filename as filename,
mf.file_type as fileType,
op.ocr_text as ocrText

Loading…
Cancel
Save