package com.supervision.police.dto; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.supervision.police.domain.CaseEvidence; import com.supervision.police.domain.EvidenceDirectory; import lombok.Data; import java.util.*; import java.util.List; /** * 案件证据目录 */ @Data public class EvidenceDirectoryDTO { /** * 目录id */ private String id; /** * 目录名 */ private String directoryName; /** * 父级目录id */ private String parentId; /** * 目录分类 */ private String categoryId; /** * 子目录 */ private List child; /** * 文件id,接收前端传入的参数 */ private List fileIdList = new ArrayList<>(); /** * 文件信息 */ private List fileInfoList = new ArrayList<>(); /** * 证据信息,供前端使用。level为 1、2 级时evidenceInfo为空。为3级时不为空, * 且与fileInfoList[evidenceInfo]保持一致 */ private CaseEvidence evidenceInfo; private int level = -1; public EvidenceDirectoryDTO() { } public EvidenceDirectoryDTO(List children) { } public EvidenceDirectoryDTO(EvidenceDirectory directory){ if (directory == null){ return; } this.id = directory.getId(); this.directoryName = directory.getDirectoryName(); this.categoryId = directory.getCategoryId(); this.parentId = directory.getParentId(); this.child = new ArrayList<>(); } public EvidenceDirectoryDTO findDirectory(String directoryId){ if (StrUtil.isEmpty(directoryId)){ return null; } if (StrUtil.equals(this.id, directoryId)){ return this; } if (CollUtil.isNotEmpty(this.getChild())){ for (EvidenceDirectoryDTO evidenceDirectoryDTO : this.getChild()) { EvidenceDirectoryDTO directoryDTO = evidenceDirectoryDTO.findDirectory(directoryId); if (directoryDTO != null){ return directoryDTO; } } } return null; } public List findDirectoryIdList(String categoryId){ List list = new ArrayList<>(); if (StrUtil.equals(this.categoryId, categoryId)){ list.add(this.id); } if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO directoryDTO : this.child) { if (StrUtil.equals(directoryDTO.getCategoryId(), categoryId)){ list.addAll(directoryDTO.findDirectoryIdList(categoryId)); } } } return list; } public List listAllFileId(){ List fileIdList = new ArrayList<>(); if (CollUtil.isNotEmpty(this.fileIdList)){ fileIdList.addAll(this.fileIdList); } if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO child : this.getChild()) { fileIdList.addAll(child.listAllFileId()); } } 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); if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO child : this.getChild()) { directoryList.addAll(child.listAllDirectory()); } } return directoryList; } public int evalLevel(String id, int currentLevel) { if (StrUtil.isEmpty(id)){ return -1; } if (StrUtil.equals(this.id, id)){ return currentLevel; } if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO evidenceCategoryDTO : child) { int level = evidenceCategoryDTO.evalLevel(id, currentLevel + 1); if (level != -1){ return level; } } } return -1; } public void setDirectoryLevel(int currentLevel){ this.level = currentLevel; if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO directoryDTO : this.getChild()) { directoryDTO.setDirectoryLevel(currentLevel + 1); } } } public void appendChildDirectory(){ if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO directoryDTO : child) { EvidenceFileDTO evidenceFileDTO = new EvidenceFileDTO(); evidenceFileDTO.setFileId(directoryDTO.getId()); evidenceFileDTO.setDirectoryId(this.id); evidenceFileDTO.setDirectoryFlag("1"); evidenceFileDTO.setFileName(directoryDTO.getDirectoryName()); this.fileInfoList.add(evidenceFileDTO); // 递归子级目录 directoryDTO.appendChildDirectory(); } } } public void appendChildFile(Map> fileMap){ List evidenceFileDTOS = fileMap.get(this.id); if (CollUtil.isNotEmpty(evidenceFileDTOS)){ evidenceFileDTOS.sort(Comparator.comparingInt(EvidenceFileDTO::getRank)); this.fileInfoList.addAll(evidenceFileDTOS); }else { if (CollUtil.isNotEmpty(this.getChild())){ for (EvidenceDirectoryDTO directoryDTO : this.child) { directoryDTO.appendChildFile(fileMap); } } } } public void setFileEvidence(Map caseEvidenceMap,Map categoryPromptMap){ if (CollUtil.isNotEmpty(this.getChild())){ for (EvidenceDirectoryDTO directoryDTO : this.child) { directoryDTO.setFileEvidence(caseEvidenceMap,categoryPromptMap); } } if (CollUtil.isEmpty(this.getFileInfoList())){ return; } for (EvidenceFileDTO evidenceFileDTO : this.getFileInfoList()) { evidenceFileDTO.setPrompt(categoryPromptMap.get(evidenceFileDTO.getDirectoryId())); if (StrUtil.isNotEmpty(evidenceFileDTO.getEvidenceId())){ evidenceFileDTO.setEvidenceInfo(caseEvidenceMap.get(evidenceFileDTO.getEvidenceId())); } } if (this.level == 3 ){ if (CollUtil.isNotEmpty(this.getFileInfoList())){ this.evidenceInfo = caseEvidenceMap.get(CollUtil.getFirst(this.getFileInfoList()).getEvidenceId()); } } } public void removeEmptyDirectory(){ if (CollUtil.isEmpty(this.child)){ return; } for (EvidenceDirectoryDTO directoryDTO : this.child) { directoryDTO.removeEmptyDirectory(); } this.getChild().removeIf(next -> CollUtil.isEmpty(next.getChild()) && CollUtil.isEmpty(next.getFileInfoList())); } /** * 重新防止证据信息 */ public void rePlaceEvidence(){ if (CollUtil.isNotEmpty(this.fileInfoList) && null != this.evidenceInfo){ for (EvidenceFileDTO evidenceFileDTO : this.fileInfoList) { evidenceFileDTO.setEvidenceInfo(evidenceInfo); } } if (CollUtil.isNotEmpty(this.child)){ for (EvidenceDirectoryDTO directoryDTO : this.child) { directoryDTO.rePlaceEvidence(); } } } }