1. 证据改造代码提交

topo_dev
xueqingkun 8 months ago
parent 76981c9be2
commit 6d4c605891

@ -138,13 +138,19 @@ public class CaseEvidenceDetailDTO {
if (ifFile){
this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType();
return;
}
if (null == directory){
return;
}
if (1 == directory.getLevel() || 2 == directory.getLevel()){
this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType();
if (CollUtil.isNotEmpty(this.fileList)){
this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType();
}else {
this.evidenceFormat = "文件夹";
}
}
if (3 == directory.getLevel() && CollUtil.isNotEmpty(this.fileList)){
this.evidenceFormat = "文件夹";

@ -1,5 +1,7 @@
package com.supervision.police.dto;
import cn.hutool.core.util.StrUtil;
import com.supervision.common.constant.EvidenceConstants;
import com.supervision.police.domain.CaseEvidence;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -56,5 +58,29 @@ public class EvidenceFileDTO {
*/
private CategoryPromptDTO prompt;
private String evidenceName;
private String processStatus;
private String provider;
private String evidenceType;
public CaseEvidence toCaseEvidence(String caseId) {
CaseEvidence caseEvidence = new CaseEvidence();
caseEvidence.setId(this.evidenceId);
caseEvidence.setCaseId(caseId);
caseEvidence.setEvidenceName(this.fileName);
caseEvidence.setEvidenceType(this.evidenceType);
caseEvidence.setProvider(this.provider);
caseEvidence.setDirectoryId(this.directoryId);
if (StrUtil.isNotEmpty(this.processStatus)){
caseEvidence.setProcessStatus(EvidenceConstants.PROCESS_STATUS_MAPPING.get(this.processStatus));
}
caseEvidence.setProvider(this.getProvider());
return caseEvidence;
}
}

@ -91,7 +91,7 @@ public class EvidenceProcessDTO {
}
public void setTemplateInfo(List<EvidenceDirectoryDTO> directoryList, List<EvidenceCategory> categoryList, List<NotePrompt> notePrompts) {
public void setTemplateInfo(List<EvidenceDirectoryDTO> directoryList, List<EvidenceCategory> categoryList) {
if (CollUtil.isEmpty(directoryList)) {
return;
@ -110,9 +110,7 @@ public class EvidenceProcessDTO {
Map<String, EvidenceCategory> categoryMap = categoryList.stream().collect(Collectors.toMap(EvidenceCategory::getId, v -> v));
EvidenceCategory category = categoryMap.get(directory.getCategoryId());
NotePrompt notePrompt = notePrompts.stream().filter(v -> StrUtil.equals(v.getEvidenceCategoryId(),category.getId())).findFirst().orElse(null);
if (null != category && notePrompt != null) {
this.templateId = notePrompt.getId();
if (null != category) {
this.templateName = category.getCategoryName();
if (directory.getLevel() == 2) {
this.evidenceTypeName = category.getCategoryName();

@ -19,7 +19,10 @@ public interface EvidenceFileMapper extends BaseMapper<EvidenceFile> {
List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds);
Page<EvidenceFileDTO> pageListFileInfo(@Param("evidenceIds") List<String> evidenceIds,@Param("page") Page<EvidenceFileDTO> page);
Page<EvidenceFileDTO> pageListFileInfo(@Param("evidenceIds") List<String> evidenceIds,
@Param("caseId") String caseId,@Param("evidenceName") String evidenceName,
@Param("directoryIds") List<String> directoryIds,
@Param("page") Page<EvidenceFileDTO> page);
List<EvidenceFileDTO> queryFileInfoList(@Param("caseId")String caseId, @Param("batchNo") String batchNo,
@Param("evidenceId")String evidenceId, @Param("directoryId") String directoryId);

@ -16,7 +16,8 @@ public interface EvidenceFileService extends IService<EvidenceFile> {
List<EvidenceFileDTO> listFileInfo(List<String> evidenceIds);
Page<EvidenceFileDTO> pageListFileInfo(List<String> evidenceIds, Page<EvidenceFileDTO> page);
Page<EvidenceFileDTO> pageListFileInfo(List<String> evidenceIds,String caseId,String evidenceName,
List<String> directoryIds, Page<EvidenceFileDTO> page);
List<EvidenceFile> listByFileIds(List<String> fileIds);

@ -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) {

@ -27,8 +27,9 @@ public class EvidenceFileServiceImpl extends ServiceImpl<EvidenceFileMapper, Evi
}
@Override
public Page<EvidenceFileDTO> pageListFileInfo(List<String> evidenceIds, Page<EvidenceFileDTO> page) {
return super.getBaseMapper().pageListFileInfo(evidenceIds, page);
public Page<EvidenceFileDTO> pageListFileInfo(List<String> evidenceIds,String caseId,String evidenceName,
List<String> directoryIds, Page<EvidenceFileDTO> page) {
return super.getBaseMapper().pageListFileInfo(evidenceIds,caseId, evidenceName,directoryIds, page);
}
@Override

@ -26,13 +26,13 @@
ed.directory_name as directoryName,
ed.category_id as categoryId,
ec.category_name as categoryName,
ec.prompt_id as promptId,
np.id as promptId,
np.name as promptName,
np.type as promptType,
np.prompt
from evidence_directory ed
left join evidence_category ec on ed.category_id = ec.id
left join note_prompt np on ec.prompt_id = np.id
left join note_prompt np on ec.id = np.evidence_category_id
where case_id = #{caseId}
</select>
</mapper>

@ -73,12 +73,18 @@
</select>
<select id="pageListFileInfo" resultType="com.supervision.police.dto.EvidenceFileDTO">
select
ef.file_id as fileId,
ef.evidence_id as evidenceId,
mf.filename as filename,
mf.file_type as fileType
ef.file_id as fileId,
ef.evidence_id as evidenceId,
ef.directory_id as directoryId,
mf.filename as filename,
mf.file_type as fileType,
ce.evidence_name as evidenceName,
ce.process_status as processStatus,
ce.provider as provider,
ce.evidence_type as evidenceType
from evidence_file ef
left join minio_file mf on ef.file_id = mf.id
left join case_evidence ce on ef.evidence_id = ce.id
<where>
<if test="evidenceIds != null and evidenceIds.size > 0">
ef.evidence_id in
@ -86,6 +92,18 @@
#{evidenceId}
</foreach>
</if>
<if test="caseId != null and caseId != ''">
and ce.case_id = #{caseId}
</if>
<if test="evidenceName != null and evidenceName !=''">
and ce.evidence_name like concat('%',#{evidenceName},'%')
</if>
<if test="directoryIds != null and directoryIds.size > 0">
and ce.directory_id in
<foreach item="directoryId" collection="directoryIds" open="(" separator="," close=")">
#{directoryId}
</foreach>
</if>
</where>
</select>
</mapper>

Loading…
Cancel
Save