|
|
|
@ -33,6 +33,7 @@ import java.util.Map;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
@ -433,21 +434,20 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
public String ocrAndExtract(String caseId, List<EvidenceDirectoryDTO> evidenceFileDTOS) {
|
|
|
|
|
|
|
|
|
|
List<CaseEvidenceDetailDTO> oldEvidences = this.queryEvidenceList(caseId);
|
|
|
|
|
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listFileTree(caseId);
|
|
|
|
|
List<EvidenceDirectoryDTO> oldEvidenceDirectoryDTOS = listFileTree(caseId);
|
|
|
|
|
|
|
|
|
|
List<CaseEvidenceDetailDTO> newEvidences = toCaseCaseEvidenceDetailDTO(evidenceFileDTOS, evidenceDirectoryDTOS);
|
|
|
|
|
List<CaseEvidenceDetailDTO> newEvidences = toCaseCaseEvidenceDetailDTO(evidenceFileDTOS, oldEvidenceDirectoryDTOS);
|
|
|
|
|
newEvidences.forEach(caseEvidenceDetailDTO -> caseEvidenceDetailDTO.setCaseId(caseId));
|
|
|
|
|
|
|
|
|
|
List<CaseEvidenceDetailDTO> operationalEvidence = findChangedEvidence(oldEvidences, newEvidences);
|
|
|
|
|
List<CaseEvidenceDetailDTO> operationalEvidenceList = findChangedEvidence(oldEvidences, newEvidences);
|
|
|
|
|
|
|
|
|
|
String batchId = ((CaseEvidenceService)AopContext.currentProxy()).updateCaseEvidence(operationalEvidence);
|
|
|
|
|
String batchId = ((CaseEvidenceService)AopContext.currentProxy()).updateCaseEvidence4NewTransaction(operationalEvidenceList);
|
|
|
|
|
|
|
|
|
|
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidence) {
|
|
|
|
|
if (StrUtil.equalsAny(caseEvidenceDetailDTO.getUpdateStatus(),"-1","0")){
|
|
|
|
|
// 只需要识别即可
|
|
|
|
|
fileOcrProcessService.syncSubmitOCR(List.of(caseEvidenceDetailDTO.getId()));
|
|
|
|
|
// todo:是否需要提取标题
|
|
|
|
|
}
|
|
|
|
|
List<EvidenceFileDTO> evidenceFileDTOList = operationalEvidenceList.stream()
|
|
|
|
|
.flatMap(evidenceDetailDTO -> evidenceDetailDTO.getFileList().stream().filter(file -> StrUtil.equals(file.getUpdateStatus(),"1"))).toList();
|
|
|
|
|
((CaseEvidenceService)AopContext.currentProxy()).preSyncSubmitOCR(evidenceFileDTOList);
|
|
|
|
|
|
|
|
|
|
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidenceList) {
|
|
|
|
|
if (StrUtil.equals(caseEvidenceDetailDTO.getUpdateStatus(),"1")){
|
|
|
|
|
// 需要分析(ocr识别+标题提取)
|
|
|
|
|
xxlJobService.executeTaskByJobHandler("evidenceAnalysis", caseEvidenceDetailDTO.getId());
|
|
|
|
@ -458,9 +458,14 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 更新案件证据信息 note:这个方法中的事务是一个新的事务,不会与之前的事务保持原子操作
|
|
|
|
|
* @param caseEvidenceDetailDTOList 新旧证据信息
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(transactionManager = "dataSourceTransactionManager",propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
|
|
|
|
|
public String updateCaseEvidence(List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOList) {
|
|
|
|
|
public String updateCaseEvidence4NewTransaction(List<CaseEvidenceDetailDTO> caseEvidenceDetailDTOList) {
|
|
|
|
|
|
|
|
|
|
String batchNo = DateTime.now().toString("yyyyMMddHHmmss");
|
|
|
|
|
for (CaseEvidenceDetailDTO evidence : caseEvidenceDetailDTOList) {
|
|
|
|
@ -471,7 +476,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
this.save(caseEvidence);
|
|
|
|
|
evidence.setId(caseEvidence.getId());
|
|
|
|
|
for (EvidenceFileDTO evidenceFileDTO : evidence.getFileList()) {
|
|
|
|
|
if (evidenceFileDTO.getUpdateStatus().equals("1")){
|
|
|
|
|
if (StrUtil.equalsAny(evidenceFileDTO.getUpdateStatus(),"1","2")){
|
|
|
|
|
// 新增
|
|
|
|
|
EvidenceFile evidenceFile = new EvidenceFile(caseEvidence.getId(), evidenceFileDTO.getFileId());
|
|
|
|
|
evidenceFile.setDirectoryId(evidence.getDirectoryId());
|
|
|
|
@ -490,6 +495,17 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
}*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}else if (evidence.getUpdateStatus().equals("-1")){
|
|
|
|
|
for (EvidenceFileDTO evidenceFileDTO : evidence.getFileList()) {
|
|
|
|
|
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);
|
|
|
|
|
evidenceFileService.save(evidenceFile);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}/*else if (evidence.getUpdateStatus().equals("0")){
|
|
|
|
|
// 删除
|
|
|
|
|
this.removeById(evidence.getId());
|
|
|
|
@ -667,6 +683,21 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
return directory1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class, propagation= Propagation.REQUIRES_NEW, transactionManager = "dataSourceTransactionManager")
|
|
|
|
|
public void preSyncSubmitOCR(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) {
|
|
|
|
@ -677,8 +708,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<CaseEvidenceDetailDTO> toCaseCaseEvidenceDetailDTO(List<EvidenceDirectoryDTO> newDirectoryDTOS,
|
|
|
|
|
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS) {
|
|
|
|
|
private List<CaseEvidenceDetailDTO> toCaseCaseEvidenceDetailDTO(List<EvidenceDirectoryDTO> newDirectoryDTOS,List<EvidenceDirectoryDTO> oldEvidenceDirectoryDTOS) {
|
|
|
|
|
if (CollUtil.isEmpty(newDirectoryDTOS)){
|
|
|
|
|
return new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
@ -692,7 +722,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
for (EvidenceDirectoryDTO evidenceFile : floatNewDirectoryDTOS) {
|
|
|
|
|
|
|
|
|
|
String directoryId = evidenceFile.getId();
|
|
|
|
|
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS);
|
|
|
|
|
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(directoryId, oldEvidenceDirectoryDTOS);
|
|
|
|
|
if (null == directory){
|
|
|
|
|
log.warn("toCaseCaseEvidenceDetailDTO:目录id:{}不存在对应的目录分类信息",directoryId);
|
|
|
|
|
continue;
|
|
|
|
@ -701,20 +731,28 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
if (directory.getLevel() == 1 || directory.getLevel() == 2){
|
|
|
|
|
for (String fileId : evidenceFile.getFileIdList()) {
|
|
|
|
|
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO();
|
|
|
|
|
if (null != fileMap.get(fileId)){
|
|
|
|
|
// 证据名为文件名
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceName(fileMap.get(fileId).getFilename());
|
|
|
|
|
}
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceType(directory.getCategoryId());
|
|
|
|
|
caseEvidenceDetailDTO.setDirectoryId(directoryId);
|
|
|
|
|
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
|
|
|
|
|
evidenceFileDTO.setFileId(fileId);
|
|
|
|
|
|
|
|
|
|
MinioFile minioFile = fileMap.get(fileId);
|
|
|
|
|
if (null != minioFile){
|
|
|
|
|
// 证据名为文件名
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceName(minioFile.getFilename());
|
|
|
|
|
evidenceFileDTO.setFileType(minioFile.getFileType());
|
|
|
|
|
evidenceFileDTO.setFileName(minioFile.getFilename());
|
|
|
|
|
}
|
|
|
|
|
caseEvidenceDetailDTO.setFileList(List.of(evidenceFileDTO));
|
|
|
|
|
caseEvidenceDetailDTOS.add(caseEvidenceDetailDTO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (directory.getLevel() == 3){
|
|
|
|
|
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO();
|
|
|
|
|
if (CollUtil.isNotEmpty(directory.getFileInfoList())){
|
|
|
|
|
String evidenceId = CollUtil.getFirst(directory.getFileInfoList()).getEvidenceId();
|
|
|
|
|
caseEvidenceDetailDTO.setId(evidenceId);
|
|
|
|
|
}
|
|
|
|
|
// 证据名为目录名
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceName(evidenceFile.getDirectoryName());
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceType(directory.getCategoryId());
|
|
|
|
@ -723,6 +761,12 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
for (String fileId : evidenceFile.getFileIdList()) {
|
|
|
|
|
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
|
|
|
|
|
evidenceFileDTO.setFileId(fileId);
|
|
|
|
|
MinioFile minioFile = fileMap.get(fileId);
|
|
|
|
|
if (null != minioFile){
|
|
|
|
|
evidenceFileDTO.setFileName(minioFile.getFilename());
|
|
|
|
|
evidenceFileDTO.setFileType(minioFile.getFileType());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
evidenceFileDTOS.add(evidenceFileDTO);
|
|
|
|
|
}
|
|
|
|
|
caseEvidenceDetailDTO.setFileList(evidenceFileDTOS);
|
|
|
|
@ -772,6 +816,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isNotEmpty(oldEvidenceList) && CollUtil.isNotEmpty(newEvidenceFileList)){
|
|
|
|
|
// 数据库中和新数据都存在
|
|
|
|
|
Map<String, EvidenceFileDTO> fileCache = Stream.of(newEvidenceFileList, oldEvidenceList)
|
|
|
|
|
.flatMap(Collection::stream)
|
|
|
|
|
.flatMap(evidenceDetailDTO -> evidenceDetailDTO.getFileList().stream())
|
|
|
|
|
.collect(Collectors.toMap(EvidenceFileDTO::getFileId, Function.identity()));
|
|
|
|
|
|
|
|
|
|
for (CaseEvidenceDetailDTO oldEvidence : oldEvidenceList) {
|
|
|
|
|
boolean isFind = false;
|
|
|
|
|
for (CaseEvidenceDetailDTO newEvidence : newEvidenceFileList) {
|
|
|
|
@ -780,7 +829,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
oldEvidence.setUpdateStatus("-1");
|
|
|
|
|
List<String> oldFileIds = oldEvidence.getFileList().stream().map(EvidenceFileDTO::getFileId).toList();
|
|
|
|
|
List<String> newFileIds = newEvidence.getFileList().stream().map(EvidenceFileDTO::getFileId).toList();
|
|
|
|
|
TupleIdRecord tupleIdRecord = compareFileList(oldFileIds, newFileIds);
|
|
|
|
|
TupleIdRecord tupleIdRecord = compareFileList(newFileIds,oldFileIds);
|
|
|
|
|
|
|
|
|
|
List<EvidenceFileDTO> updateFileList = new ArrayList<>();
|
|
|
|
|
// 新增的文件顺序排在原有文件的后面
|
|
|
|
@ -789,6 +838,10 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
|
|
|
|
|
evidenceFileDTO.setFileId(addFileId);
|
|
|
|
|
evidenceFileDTO.setUpdateStatus("1");
|
|
|
|
|
if (null != fileCache.get(addFileId)){
|
|
|
|
|
evidenceFileDTO.setFileType(fileCache.get(addFileId).getFileType());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
evidenceFileDTO.setRank(initOrder + findRank(newFileIds, addFileId));
|
|
|
|
|
updateFileList.add(evidenceFileDTO);
|
|
|
|
|
}
|
|
|
|
@ -796,6 +849,9 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
|
|
|
|
|
evidenceFileDTO.setFileId(deleteFileId);
|
|
|
|
|
evidenceFileDTO.setUpdateStatus("0");
|
|
|
|
|
if (null != fileCache.get(deleteFileId)){
|
|
|
|
|
evidenceFileDTO.setFileType(fileCache.get(deleteFileId).getFileType());
|
|
|
|
|
}
|
|
|
|
|
evidenceFileDTO.setRank(findRank(oldFileIds, deleteFileId));
|
|
|
|
|
updateFileList.add(evidenceFileDTO);
|
|
|
|
|
}
|
|
|
|
@ -804,6 +860,9 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
|
|
|
|
|
evidenceFileDTO.setFileId(updateFileId);
|
|
|
|
|
evidenceFileDTO.setUpdateStatus("2");
|
|
|
|
|
if (null != fileCache.get(updateFileId)){
|
|
|
|
|
evidenceFileDTO.setFileType(fileCache.get(updateFileId).getFileType());
|
|
|
|
|
}
|
|
|
|
|
evidenceFileDTO.setRank(findRank(oldFileIds, updateFileId));
|
|
|
|
|
updateFileList.add(evidenceFileDTO);
|
|
|
|
|
}
|
|
|
|
|