From 6d4c605891e5ddaec59fd2afdfa955a3e8e29f9d Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Wed, 23 Oct 2024 15:50:44 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=AF=81=E6=8D=AE=E6=94=B9=E9=80=A0?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../police/dto/CaseEvidenceDetailDTO.java | 8 +- .../police/dto/EvidenceFileDTO.java | 26 ++++ .../police/dto/EvidenceProcessDTO.java | 6 +- .../police/mapper/EvidenceFileMapper.java | 5 +- .../police/service/EvidenceFileService.java | 3 +- .../service/impl/CaseEvidenceServiceImpl.java | 140 +++++++----------- .../service/impl/EvidenceFileServiceImpl.java | 5 +- .../mapper/EvidenceDirectoryMapper.xml | 4 +- .../resources/mapper/EvidenceFileMapper.xml | 26 +++- 9 files changed, 125 insertions(+), 98 deletions(-) diff --git a/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java b/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java index 8488ea2..9f7c24c 100644 --- a/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java +++ b/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java @@ -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 = "文件夹"; diff --git a/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java b/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java index 5c83076..83b9653 100644 --- a/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java +++ b/src/main/java/com/supervision/police/dto/EvidenceFileDTO.java @@ -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; + } } diff --git a/src/main/java/com/supervision/police/dto/EvidenceProcessDTO.java b/src/main/java/com/supervision/police/dto/EvidenceProcessDTO.java index 747e521..4ce9b82 100644 --- a/src/main/java/com/supervision/police/dto/EvidenceProcessDTO.java +++ b/src/main/java/com/supervision/police/dto/EvidenceProcessDTO.java @@ -91,7 +91,7 @@ public class EvidenceProcessDTO { } - public void setTemplateInfo(List directoryList, List categoryList, List notePrompts) { + public void setTemplateInfo(List directoryList, List categoryList) { if (CollUtil.isEmpty(directoryList)) { return; @@ -110,9 +110,7 @@ public class EvidenceProcessDTO { Map 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(); diff --git a/src/main/java/com/supervision/police/mapper/EvidenceFileMapper.java b/src/main/java/com/supervision/police/mapper/EvidenceFileMapper.java index 065abb5..c3a2c7f 100644 --- a/src/main/java/com/supervision/police/mapper/EvidenceFileMapper.java +++ b/src/main/java/com/supervision/police/mapper/EvidenceFileMapper.java @@ -19,7 +19,10 @@ public interface EvidenceFileMapper extends BaseMapper { List listFileInfo(List evidenceIds); - Page pageListFileInfo(@Param("evidenceIds") List evidenceIds,@Param("page") Page page); + Page pageListFileInfo(@Param("evidenceIds") List evidenceIds, + @Param("caseId") String caseId,@Param("evidenceName") String evidenceName, + @Param("directoryIds") List directoryIds, + @Param("page") Page page); List queryFileInfoList(@Param("caseId")String caseId, @Param("batchNo") String batchNo, @Param("evidenceId")String evidenceId, @Param("directoryId") String directoryId); diff --git a/src/main/java/com/supervision/police/service/EvidenceFileService.java b/src/main/java/com/supervision/police/service/EvidenceFileService.java index f86ca75..edd4344 100644 --- a/src/main/java/com/supervision/police/service/EvidenceFileService.java +++ b/src/main/java/com/supervision/police/service/EvidenceFileService.java @@ -16,7 +16,8 @@ public interface EvidenceFileService extends IService { List listFileInfo(List evidenceIds); - Page pageListFileInfo(List evidenceIds, Page page); + Page pageListFileInfo(List evidenceIds,String caseId,String evidenceName, + List directoryIds, Page page); List listByFileIds(List fileIds); diff --git a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java index c80cc56..9ef4ed3 100644 --- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java @@ -162,89 +162,64 @@ public class CaseEvidenceServiceImpl extends ServiceImpl directoryIds = new ArrayList<>(); - if (StrUtil.isNotEmpty(directoryId)) { - List evidenceDirectoryDTOS = listDirectoryTree(caseId); - EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS); - if (null != directory) { - if (directory.getLevel() == 1 || directory.getLevel() == 2) { - directoryIds.addAll(directory.listAllFileId()); - } - } - } - IPage 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 list = this.lambdaQuery().eq(CaseEvidence::getDirectoryId, directoryId).list(); - if (CollUtil.isNotEmpty(list)) { - Map caseEvidenceMap = list.stream().collect(Collectors.toMap(CaseEvidence::getId, Function.identity())); - if (CollUtil.isNotEmpty(list)) { - Page 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 evidenceIds = caseEvidencePage.getRecords().stream().map(CaseEvidence::getId).distinct().toList(); - List fileInfoList = evidenceFileService.listFileInfo(evidenceIds); - Map> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId)); + List evidenceDirectoryDTOS = listDirectoryTree(caseId); + EvidenceDirectoryDTO queryDirectory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS); + + IPage caseEvidencePage = pageListCaseEvidence(queryDirectory, caseId, directoryId, + evidenceName, new Page<>(pageNum, pageSize)); + + if (caseEvidencePage.getTotal() == 0) { + return PageDTO.of(pageNum, pageSize, 0); + } + + // 查询文件信息 + List evidenceIds = caseEvidencePage.getRecords().stream().map(CaseEvidence::getId).distinct().toList(); + List fileInfoList = evidenceFileService.listFileInfo(evidenceIds); + Map> evidenceFileMap = fileInfoList.stream().collect(Collectors.groupingBy(EvidenceFileDTO::getEvidenceId)); + List recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList()); + + // 转换分页结果 + //查询字典 + List 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 recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList()); + private IPage pageListCaseEvidence(EvidenceDirectoryDTO queryDirectory, + String caseId, String directoryId, String evidenceName, + Page page) { - List evidenceDirectoryDTOS = listDirectoryTree(caseId); - // 转换分页结果 - //查询字典 - EvidenceDirectoryDTO queryDirectory = evidenceDirectoryService.findDirectoryById(directoryId, evidenceDirectoryDTOS); - List 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 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 pageListFileInfo = evidenceFileService.pageListFileInfo( + null, caseId,evidenceName,List.of(directoryId), Page.of(page.getCurrent(), page.getSize())); + return pageListFileInfo.convert(file -> file.toCaseEvidence(caseId)); } - + } private List findAllDirectoryId(String directoryId,List evidenceDirectoryDTOS){ if (StrUtil.isNotEmpty(directoryId)){ @@ -306,15 +281,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl().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 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 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 evidenceDirectoryDTOS = evidenceDirectoryService.listDirectoryTree(caseId); List categoryList = evidenceCategoryService.lambdaQuery().eq(EvidenceCategory::getCaseType, modelCase.getCaseType()).list(); - List 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 categoryPromptDTOS = evidenceDirectoryService.listCategoryPrompt(caseId); Map caseEvidenceMap = caseEvidenceList.stream().collect(Collectors.toMap(CaseEvidence::getId, Function.identity())); - Map categoryPromptMap = categoryPromptDTOS.stream().collect(Collectors.toMap(CategoryPromptDTO::getDirectoryId, Function.identity())); + Map categoryPromptMap = categoryPromptDTOS.stream().collect(Collectors.toMap(CategoryPromptDTO::getDirectoryId,k->k,(v1,v2)->v1)); Iterator iterator = evidenceDirectoryDTOS.iterator(); while (iterator.hasNext()) { @@ -797,6 +770,7 @@ public class CaseEvidenceServiceImpl extends ServiceImpl pageListFileInfo(List evidenceIds, Page page) { - return super.getBaseMapper().pageListFileInfo(evidenceIds, page); + public Page pageListFileInfo(List evidenceIds,String caseId,String evidenceName, + List directoryIds, Page page) { + return super.getBaseMapper().pageListFileInfo(evidenceIds,caseId, evidenceName,directoryIds, page); } @Override diff --git a/src/main/resources/mapper/EvidenceDirectoryMapper.xml b/src/main/resources/mapper/EvidenceDirectoryMapper.xml index a6d7b6a..6dc776e 100644 --- a/src/main/resources/mapper/EvidenceDirectoryMapper.xml +++ b/src/main/resources/mapper/EvidenceDirectoryMapper.xml @@ -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} diff --git a/src/main/resources/mapper/EvidenceFileMapper.xml b/src/main/resources/mapper/EvidenceFileMapper.xml index 2c0f704..5b7d862 100644 --- a/src/main/resources/mapper/EvidenceFileMapper.xml +++ b/src/main/resources/mapper/EvidenceFileMapper.xml @@ -73,12 +73,18 @@