From 6de2dea9c4ff065ee3279c122d112b92e7f88fdb Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Wed, 23 Oct 2024 11:35:08 +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 --- .../controller/CaseEvidenceController.java | 6 + .../police/dto/CaseEvidenceDetailDTO.java | 16 +- .../police/dto/EvidenceDirectoryDTO.java | 14 ++ .../police/dto/EvidenceVerifyDTO.java | 2 + .../police/service/CaseEvidenceService.java | 2 + .../service/impl/CaseEvidenceServiceImpl.java | 191 +++++++++++------- .../police/vo/EvidenceDirectoryReqVO.java | 8 +- .../police/vo/VerifyEvidenceReqVO.java | 5 - .../mapper/EvidenceCategoryMapper.xml | 4 +- 9 files changed, 166 insertions(+), 82 deletions(-) diff --git a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java index b733101..8e38988 100644 --- a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java +++ b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java @@ -64,6 +64,12 @@ public class CaseEvidenceController { return R.ok(pageListEvidence); } + @Operation(summary = "分析证据") + @GetMapping("/analysis") + public R analysis(@RequestParam("evidenceId") @Parameter(name = "evidenceId",description = "案件类型") String evidenceId) { + caseEvidenceService.callEvidenceAnalysis(evidenceId); + return R.ok(); + } @Operation(summary = "查询案件证据分类树") @GetMapping("/category/tree") public R> listCategoryTree(@RequestParam(name = "caseType",defaultValue = "1") diff --git a/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java b/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java index 04c7257..8488ea2 100644 --- a/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java +++ b/src/main/java/com/supervision/police/dto/CaseEvidenceDetailDTO.java @@ -90,6 +90,7 @@ public class CaseEvidenceDetailDTO { this.provider = caseEvidence.getProvider(); this.partyA = caseEvidence.getPartyA(); this.partyB = caseEvidence.getPartyB(); + this.processStatus = caseEvidence.getProcessStatus(); } this.fileList = fileList; } @@ -129,14 +130,23 @@ public class CaseEvidenceDetailDTO { } - public void setEvidenceFormatValue(EvidenceDirectoryDTO directory){ + /** + * 设置文件格式 如果目录等级为1、2,则目录格式未文件。 如果目录等级为3,则文件格式为文件夹 + * @param directory + */ + public void setEvidenceFormatValue(EvidenceDirectoryDTO directory,boolean ifFile){ + + if (ifFile){ + this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType(); + } + if (null == directory){ return; } - if (2 == directory.getLevel() && CollUtil.isNotEmpty(this.fileList)){ + if (1 == directory.getLevel() || 2 == directory.getLevel()){ this.evidenceFormat = CollUtil.getFirst(this.fileList).getFileType(); } - if (3 == directory.getLevel()){ + if (3 == directory.getLevel() && CollUtil.isNotEmpty(this.fileList)){ this.evidenceFormat = "文件夹"; } } diff --git a/src/main/java/com/supervision/police/dto/EvidenceDirectoryDTO.java b/src/main/java/com/supervision/police/dto/EvidenceDirectoryDTO.java index 0339684..dd36eae 100644 --- a/src/main/java/com/supervision/police/dto/EvidenceDirectoryDTO.java +++ b/src/main/java/com/supervision/police/dto/EvidenceDirectoryDTO.java @@ -118,6 +118,20 @@ public class EvidenceDirectoryDTO { return fileIdList; } + public List listAllFile(){ + List fileList = new ArrayList<>(); + if (CollUtil.isNotEmpty(this.fileInfoList)){ + fileList.addAll(this.fileInfoList); + } + if (CollUtil.isNotEmpty(this.child)){ + for (EvidenceDirectoryDTO child : this.getChild()) { + fileList.addAll(child.listAllFile()); + } + + } + return fileList; + } + public List listAllDirectory(){ List directoryList = new ArrayList<>(); directoryList.add(this); diff --git a/src/main/java/com/supervision/police/dto/EvidenceVerifyDTO.java b/src/main/java/com/supervision/police/dto/EvidenceVerifyDTO.java index a9f8745..acdbd56 100644 --- a/src/main/java/com/supervision/police/dto/EvidenceVerifyDTO.java +++ b/src/main/java/com/supervision/police/dto/EvidenceVerifyDTO.java @@ -17,5 +17,7 @@ public class EvidenceVerifyDTO { private String ocrText; + private String title; + private List properties; } diff --git a/src/main/java/com/supervision/police/service/CaseEvidenceService.java b/src/main/java/com/supervision/police/service/CaseEvidenceService.java index 9c59c00..25535ff 100644 --- a/src/main/java/com/supervision/police/service/CaseEvidenceService.java +++ b/src/main/java/com/supervision/police/service/CaseEvidenceService.java @@ -64,6 +64,8 @@ public interface CaseEvidenceService extends IService { */ void evidenceAnalysis(String evidenceId); + void callEvidenceAnalysis(String evidenceId); + /** * 查询案件证据目录树 * @param caseId 案件id 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 f20f6c7..c80cc56 100644 --- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; @@ -183,56 +184,79 @@ public class CaseEvidenceServiceImpl extends ServiceImpl list = this.lambdaQuery().eq(CaseEvidence::getDirectoryId, directoryId).list(); 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); - return caseEvidence; - }); - caseEvidencePage.setTotal(page.getTotal()); - caseEvidencePage.setSize(page.getSize()); - caseEvidencePage.setCurrent(page.getCurrent()); - } + 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); + } - 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 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 evidenceDirectoryDTOS = listDirectoryTree(caseId); - List recordFileDTOS = fileOcrProcessService.queryFileList(fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList()); - 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); + EvidenceDirectoryDTO directory = evidenceDirectoryService.findDirectoryById(caseEvidence.getDirectoryId(), evidenceDirectoryDTOS); + caseEvidenceDetailDTO.setEvidenceFormatValue(directory, null != queryDirectory && directory.getLevel() == 3); + return caseEvidenceDetailDTO; + }); + } - // 转换分页结果 - //查询字典 - 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); - return caseEvidenceDetailDTO; - }); - } + private List findAllDirectoryId(String directoryId,List evidenceDirectoryDTOS){ + if (StrUtil.isNotEmpty(directoryId)){ + Optional first = evidenceDirectoryDTOS.stream().filter(dto -> null != dto.findDirectory(directoryId)).findFirst(); + if (first.isPresent()){ + evidenceDirectoryDTOS = first.get().listAllDirectory(); + } + } + return evidenceDirectoryDTOS.stream() + .flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.listAllDirectory() + .stream().map(EvidenceDirectoryDTO::getId)).toList(); + } @Override public CaseEvidenceDetailDTO queryEvidenceDetail(String evidenceId) { return super.getBaseMapper().queryEvidenceDetail(evidenceId); @@ -310,6 +334,12 @@ public class CaseEvidenceServiceImpl extends ServiceImpl listCategoryTree(String caseType) { @@ -444,9 +474,13 @@ public class CaseEvidenceServiceImpl extends ServiceImpl StrUtil.equals(file.getUpdateStatus(), "1")); + if(match){ + // 需要分析(ocr识别+标题提取) + xxlJobService.executeTaskByJobHandler("evidenceAnalysis", caseEvidenceDetailDTO.getId()); + } + } } @@ -550,7 +584,10 @@ public class CaseEvidenceServiceImpl extends ServiceImpl value = entry.getValue(); // 更新证据属性 - this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId).set(CaseEvidence::getProperty, CollUtil.getFirst(value).getProperties()); + this.lambdaUpdate().eq(CaseEvidence::getId, evidenceId) + .set(CaseEvidence::getProperty, JSONUtil.toJsonStr(CollUtil.getFirst(value).getProperties())) + .set(CaseEvidence::getTitle, CollUtil.getFirst(value).getTitle()) + .update(); // 修改ocr内容 for (EvidenceVerifyDTO verifyDTO : value) { @@ -582,20 +619,22 @@ public class CaseEvidenceServiceImpl extends ServiceImpl collect = evidenceDirectoryList.stream() - .filter(evidenceDirectoryDTO -> CollUtil.isEmpty(evidenceDirectoryDTO.getFileIdList())) - .flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.getFileInfoList().stream().map(i -> { + List evidenceVerifyDTOS = evidenceDirectoryList.stream() + .flatMap(evidenceDirectoryDTO -> evidenceDirectoryDTO.listAllFile().stream()) + .map(fileDTO -> { EvidenceVerifyDTO evidenceVerifyDTO = new EvidenceVerifyDTO(); - evidenceVerifyDTO.setEvidenceId(i.getEvidenceId()); - evidenceVerifyDTO.setFileId(i.getFileId()); - evidenceVerifyDTO.setOcrText(i.getOcrText()); - if (null != i.getEvidenceInfo()) { - evidenceVerifyDTO.setProperties(i.getEvidenceInfo().getProperty()); + evidenceVerifyDTO.setEvidenceId(fileDTO.getEvidenceId()); + evidenceVerifyDTO.setFileId(fileDTO.getFileId()); + evidenceVerifyDTO.setOcrText(fileDTO.getOcrText()); + CaseEvidence evidenceInfo = fileDTO.getEvidenceInfo(); + if (null != evidenceInfo) { + evidenceVerifyDTO.setProperties(evidenceInfo.getProperty()); + evidenceVerifyDTO.setTitle(evidenceInfo.getTitle()); } return evidenceVerifyDTO; - })).toList(); + }).toList(); - this.verifyEvidence(collect, verifyEvidenceReqVO.getCaseId(), verifyEvidenceReqVO.getBatchNo()); + this.verifyEvidence(evidenceVerifyDTOS, verifyEvidenceReqVO.getCaseId(), verifyEvidenceReqVO.getBatchNo()); } @@ -670,29 +709,40 @@ public class CaseEvidenceServiceImpl extends ServiceImpl StrUtil.contains(d.getDirectoryName(), evidenceDirectory.getDirectoryName())).count(); - if (count > 0) { - evidenceDirectory.setDirectoryName(evidenceDirectory.getDirectoryName() + count + 1); + if (count > 0){ + evidenceDirectory.setDirectoryName(evidenceDirectory.getDirectoryName() + (count + 1)); } - EvidenceDirectory directory1 = new EvidenceDirectory(); - directory1.setCaseId(evidenceDirectory.getCaseId()); - directory1.setCategoryId(evidenceDirectory.getCategoryId()); - directory1.setDirectoryName(evidenceDirectory.getDirectoryName()); - directory1.setParentId(directory.getId()); - evidenceDirectoryService.save(directory1); - return directory1; + // 创建目录 + EvidenceDirectory directory = new EvidenceDirectory(); + directory.setCaseId(evidenceDirectory.getCaseId()); + directory.setCategoryId(evidenceDirectory.getCategoryId()); + directory.setDirectoryName(evidenceDirectory.getDirectoryName()); + directory.setParentId(parentDirectory.getId()); + evidenceDirectoryService.save(directory); + + + // 目录创建完成,创建证据 + CaseEvidence caseEvidence = new CaseEvidence(); + caseEvidence.setEvidenceName(evidenceDirectory.getDirectoryName()); + caseEvidence.setEvidenceType(directory.getCategoryId()); + caseEvidence.setCaseId(evidenceDirectory.getCaseId()); + caseEvidence.setDirectoryId(directory.getId()); + caseEvidence.setProvider(evidenceDirectory.getProvider()); + this.save(caseEvidence); + return directory; } @Override @@ -759,12 +809,11 @@ public class CaseEvidenceServiceImpl extends ServiceImpl evidenceVerifyList; - private List evidenceDirectoryList; } diff --git a/src/main/resources/mapper/EvidenceCategoryMapper.xml b/src/main/resources/mapper/EvidenceCategoryMapper.xml index 2b3443d..77c2b1a 100644 --- a/src/main/resources/mapper/EvidenceCategoryMapper.xml +++ b/src/main/resources/mapper/EvidenceCategoryMapper.xml @@ -27,14 +27,14 @@