|
|
|
@ -162,89 +162,64 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
|
|
|
|
|
Assert.notEmpty(caseId, "案件id不能为空");
|
|
|
|
|
|
|
|
|
|
List<String> directoryIds = new ArrayList<>();
|
|
|
|
|
if (StrUtil.isNotEmpty(directoryId)) {
|
|
|
|
|
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
|
|
|
|
|
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS);
|
|
|
|
|
if (null != directory) {
|
|
|
|
|
if (directory.getLevel() == 1 || directory.getLevel() == 2) {
|
|
|
|
|
directoryIds.addAll(directory.listAllFileId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
IPage<CaseEvidence> caseEvidencePage = new Page<>(pageNum, pageSize);
|
|
|
|
|
if (StrUtil.isEmpty(directoryId) || CollUtil.isNotEmpty(directoryIds)) {
|
|
|
|
|
// 全部 或者一级目录 或者 二级目录查询证据
|
|
|
|
|
caseEvidencePage = super.lambdaQuery().eq(CaseEvidence::getCaseId, caseId)
|
|
|
|
|
.in(CollUtil.isNotEmpty(directoryIds), CaseEvidence::getDirectoryId, directoryIds)
|
|
|
|
|
.like(StrUtil.isNotEmpty(evidenceName), CaseEvidence::getEvidenceName, evidenceName)
|
|
|
|
|
.orderBy(true, false, CaseEvidence::getUpdateTime)
|
|
|
|
|
.page(new Page<>(pageNum, pageSize));
|
|
|
|
|
} else {
|
|
|
|
|
// 三级目录查询证据文件
|
|
|
|
|
List<CaseEvidence> list = this.lambdaQuery().eq(CaseEvidence::getDirectoryId, directoryId).list();
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
Map<String, CaseEvidence> caseEvidenceMap = list.stream().collect(Collectors.toMap(CaseEvidence::getId, Function.identity()));
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
Page<EvidenceFileDTO> page = evidenceFileService.pageListFileInfo(
|
|
|
|
|
list.stream().map(CaseEvidence::getId).toList(), Page.of(pageNum, pageSize));
|
|
|
|
|
caseEvidencePage = page.convert(file -> {
|
|
|
|
|
CaseEvidence caseEvidence = new CaseEvidence();
|
|
|
|
|
caseEvidence.setId(file.getEvidenceId());
|
|
|
|
|
caseEvidence.setCaseId(caseId);
|
|
|
|
|
caseEvidence.setEvidenceName(file.getFileName());
|
|
|
|
|
caseEvidence.setEvidenceType(CollUtil.getFirst(list).getEvidenceType());
|
|
|
|
|
caseEvidence.setProvider(CollUtil.getFirst(list).getProvider());
|
|
|
|
|
caseEvidence.setDirectoryId(directoryId);
|
|
|
|
|
CaseEvidence evidence = caseEvidenceMap.get(file.getEvidenceId());
|
|
|
|
|
if (null != evidence) {
|
|
|
|
|
if (StrUtil.isNotEmpty(evidence.getProcessStatus())) {
|
|
|
|
|
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_MAPPING.get(evidence.getProcessStatus()));
|
|
|
|
|
}
|
|
|
|
|
caseEvidence.setProvider(evidence.getProvider());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return caseEvidence;
|
|
|
|
|
});
|
|
|
|
|
caseEvidencePage.setTotal(page.getTotal());
|
|
|
|
|
caseEvidencePage.setSize(page.getSize());
|
|
|
|
|
caseEvidencePage.setCurrent(page.getCurrent());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (caseEvidencePage.getTotal() == 0) {
|
|
|
|
|
return PageDTO.of(pageNum, pageSize, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询文件信息
|
|
|
|
|
List<String> evidenceIds = caseEvidencePage.getRecords().stream().map(CaseEvidence::getId).distinct().toList();
|
|
|
|
|
List<EvidenceFileDTO> fileInfoList = evidenceFileService.listFileInfo(evidenceIds);
|
|
|
|
|
Map<String, List<EvidenceFileDTO>> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId));
|
|
|
|
|
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
|
|
|
|
|
EvidenceDirectoryDTO queryDirectory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS);
|
|
|
|
|
|
|
|
|
|
IPage<CaseEvidence> caseEvidencePage = pageListCaseEvidence(queryDirectory, caseId, directoryId,
|
|
|
|
|
evidenceName, new Page<>(pageNum, pageSize));
|
|
|
|
|
|
|
|
|
|
if (caseEvidencePage.getTotal() == 0) {
|
|
|
|
|
return PageDTO.of(pageNum, pageSize, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询文件信息
|
|
|
|
|
List<String> evidenceIds = caseEvidencePage.getRecords().stream().map(CaseEvidence::getId).distinct().toList();
|
|
|
|
|
List<EvidenceFileDTO> fileInfoList = evidenceFileService.listFileInfo(evidenceIds);
|
|
|
|
|
Map<String, List<EvidenceFileDTO>> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId));
|
|
|
|
|
List<RecordFileDTO> recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList());
|
|
|
|
|
|
|
|
|
|
// 转换分页结果
|
|
|
|
|
//查询字典
|
|
|
|
|
List<ComDictionary> evidenceTypeDic = comDictionaryService.lambdaQuery().eq(ComDictionary::getType, "evidence_type").list();
|
|
|
|
|
return caseEvidencePage.convert(caseEvidence -> {
|
|
|
|
|
|
|
|
|
|
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO(caseEvidence, evidenceFileMap.get(caseEvidence.getId()));
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceTypeDesc(
|
|
|
|
|
comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType()));
|
|
|
|
|
caseEvidenceDetailDTO.setContentTypeValue(recordFileDTOS);
|
|
|
|
|
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(caseEvidence.getDirectoryId(), evidenceDirectoryDTOS);
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceFormatValue(directory, null != queryDirectory && queryDirectory.getLevel() == 3);
|
|
|
|
|
return caseEvidenceDetailDTO;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<RecordFileDTO> recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList());
|
|
|
|
|
private IPage<CaseEvidence> pageListCaseEvidence(EvidenceDirectoryDTO queryDirectory,
|
|
|
|
|
String caseId, String directoryId, String evidenceName,
|
|
|
|
|
Page<CaseEvidence> page) {
|
|
|
|
|
|
|
|
|
|
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = listDirectoryTree(caseId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 转换分页结果
|
|
|
|
|
//查询字典
|
|
|
|
|
EvidenceDirectoryDTO queryDirectory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS);
|
|
|
|
|
List<ComDictionary> evidenceTypeDic = comDictionaryService.lambdaQuery().eq(ComDictionary::getType, "evidence_type").list();
|
|
|
|
|
return caseEvidencePage.convert(caseEvidence -> {
|
|
|
|
|
CaseEvidenceDetailDTO caseEvidenceDetailDTO = new CaseEvidenceDetailDTO(caseEvidence, evidenceFileMap.get(caseEvidence.getId()));
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceTypeDesc(
|
|
|
|
|
comDictionaryService.getName(evidenceTypeDic, "evidence_type", caseEvidence.getEvidenceType()));
|
|
|
|
|
caseEvidenceDetailDTO.setContentTypeValue(recordFileDTOS);
|
|
|
|
|
if ( null == queryDirectory || queryDirectory.getLevel() != 3){
|
|
|
|
|
|
|
|
|
|
EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(caseEvidence.getDirectoryId(), evidenceDirectoryDTOS);
|
|
|
|
|
caseEvidenceDetailDTO.setEvidenceFormatValue(directory, null != queryDirectory && directory.getLevel() == 3);
|
|
|
|
|
return caseEvidenceDetailDTO;
|
|
|
|
|
});
|
|
|
|
|
/*if (null != queryDirectory && CollUtil.isEmpty(queryDirectory.listAllFileId())){
|
|
|
|
|
return PageDTO.of(page.getCurrent(), page.getSize(), 0);
|
|
|
|
|
}*/
|
|
|
|
|
List<String> directoryIds = null == queryDirectory ? new ArrayList<>() :
|
|
|
|
|
queryDirectory.listAllDirectory().stream().map(EvidenceDirectoryDTO::getId).toList();
|
|
|
|
|
// 全部 或者一级目录 或者 二级目录查询证据
|
|
|
|
|
return super.lambdaQuery().eq(CaseEvidence::getCaseId, caseId)
|
|
|
|
|
.in(CollUtil.isNotEmpty(directoryIds), CaseEvidence::getDirectoryId, directoryIds)
|
|
|
|
|
.like(StrUtil.isNotEmpty(evidenceName), CaseEvidence::getEvidenceName, evidenceName)
|
|
|
|
|
.orderBy(true, false, CaseEvidence::getUpdateTime)
|
|
|
|
|
.page(page);
|
|
|
|
|
}else {
|
|
|
|
|
// 三级目录查询证据文件
|
|
|
|
|
Page<EvidenceFileDTO> pageListFileInfo = evidenceFileService.pageListFileInfo(
|
|
|
|
|
null, caseId,evidenceName,List.of(directoryId), Page.of(page.getCurrent(), page.getSize()));
|
|
|
|
|
return pageListFileInfo.convert(file -> file.toCaseEvidence(caseId));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private List<String> findAllDirectoryId(String directoryId,List<EvidenceDirectoryDTO> evidenceDirectoryDTOS){
|
|
|
|
|
|
|
|
|
|
if (StrUtil.isNotEmpty(directoryId)){
|
|
|
|
@ -306,15 +281,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
updateById(caseEvidence);
|
|
|
|
|
// 根据证据目录id查询提示词
|
|
|
|
|
EvidenceDirectory directory = evidenceDirectoryService.getById(caseEvidence.getDirectoryId());
|
|
|
|
|
NotePrompt notePrompt = notePromptService.getOne(new QueryWrapper<NotePrompt>().eq("evidence_category_id", directory.getCategoryId()));
|
|
|
|
|
NotePrompt notePrompt = notePromptService.lambdaQuery().eq(NotePrompt::getEvidenceCategoryId, directory.getCategoryId()).one();
|
|
|
|
|
if (notePrompt != null) {
|
|
|
|
|
log.info("属性提取开始。");
|
|
|
|
|
long attrStart = System.currentTimeMillis();
|
|
|
|
|
llmExtractDto.setPrompt(notePrompt.getPrompt());
|
|
|
|
|
llmExtractDto.setExtractAttributes(notePrompt.getExtractAttributes());
|
|
|
|
|
llmExtractDto = llmExtractService.extractAttribute(Collections.singletonList(llmExtractDto)).get(0);
|
|
|
|
|
// Map<String, String> map = new HashMap<>();
|
|
|
|
|
// llmExtractDto.getExtractAttributes().forEach(notePromptExtractAttribute -> map.put(notePromptExtractAttribute.getAttrName(), notePromptExtractAttribute.getAttrValue()));
|
|
|
|
|
caseEvidence.setProperty(llmExtractDto.getExtractAttributes());
|
|
|
|
|
log.info("属性提取完成。更新证据处理状态为【属性提取完成】。属性:【{}】。耗时:【{}】", caseEvidence.getProperty(), System.currentTimeMillis() - attrStart);
|
|
|
|
|
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_ATTR_EXTRACT_OK);
|
|
|
|
@ -474,10 +447,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
((CaseEvidenceService) AopContext.currentProxy()).preSyncSubmitOCR(evidenceFileDTOList);
|
|
|
|
|
|
|
|
|
|
for (CaseEvidenceDetailDTO caseEvidenceDetailDTO : operationalEvidenceList) {
|
|
|
|
|
if (StrUtil.equals(caseEvidenceDetailDTO.getUpdateStatus(),"-1")){
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -563,9 +537,8 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
.map(EvidenceProcessDTO::new).collect(Collectors.toList());
|
|
|
|
|
List<EvidenceDirectoryDTO> evidenceDirectoryDTOS = evidenceDirectoryService.listDirectoryTree(caseId);
|
|
|
|
|
List<EvidenceCategory> categoryList = evidenceCategoryService.lambdaQuery().eq(EvidenceCategory::getCaseType, modelCase.getCaseType()).list();
|
|
|
|
|
List<NotePrompt> notePrompts = notePromptService.list();
|
|
|
|
|
for (EvidenceProcessDTO evidenceProcessDTO : processDTOList) {
|
|
|
|
|
evidenceProcessDTO.setTemplateInfo(evidenceDirectoryDTOS, categoryList, notePrompts);
|
|
|
|
|
evidenceProcessDTO.setTemplateInfo(evidenceDirectoryDTOS, categoryList);
|
|
|
|
|
evidenceProcessDTO.setEvidenceTypeName(categoryList);
|
|
|
|
|
}
|
|
|
|
|
return processDTOList;
|
|
|
|
@ -661,7 +634,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
List<CategoryPromptDTO> categoryPromptDTOS = evidenceDirectoryService.listCategoryPrompt(caseId);
|
|
|
|
|
|
|
|
|
|
Map<String, CaseEvidence> caseEvidenceMap = caseEvidenceList.stream().collect(Collectors.toMap(CaseEvidence::getId, Function.identity()));
|
|
|
|
|
Map<String, CategoryPromptDTO> categoryPromptMap = categoryPromptDTOS.stream().collect(Collectors.toMap(CategoryPromptDTO::getDirectoryId, Function.identity()));
|
|
|
|
|
Map<String, CategoryPromptDTO> categoryPromptMap = categoryPromptDTOS.stream().collect(Collectors.toMap(CategoryPromptDTO::getDirectoryId,k->k,(v1,v2)->v1));
|
|
|
|
|
|
|
|
|
|
Iterator<EvidenceDirectoryDTO> iterator = evidenceDirectoryDTOS.iterator();
|
|
|
|
|
while (iterator.hasNext()) {
|
|
|
|
@ -797,6 +770,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl<CaseEvidenceMapper, Cas
|
|
|
|
|
caseEvidenceDetailDTO.setDirectoryId(directoryId);
|
|
|
|
|
EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO();
|
|
|
|
|
evidenceFileDTO.setFileId(fileId);
|
|
|
|
|
evidenceFileDTO.setProcessStatus(EvidenceConstants.PROCESS_STATUS_UNPROCESSED);
|
|
|
|
|
|
|
|
|
|
MinioFile minioFile = fileMap.get(fileId);
|
|
|
|
|
if (null != minioFile) {
|
|
|
|
|