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