You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fu-hsi-service/src/main/java/com/supervision/police/dto/EvidenceDirectoryDTO.java

269 lines
8.2 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
import java.util.stream.Collectors;
/**
* 案件证据目录
*/
@Data
public class EvidenceDirectoryDTO {
/**
* 目录id
*/
private String id;
/**
* 目录名
*/
private String directoryName;
/**
* 父级目录id
*/
private String parentId;
/**
* 目录分类
*/
private String categoryId;
/**
* 子目录
*/
private List<EvidenceDirectoryDTO> child;
/**
* 文件信息
*/
private List<EvidenceFileDTO> fileInfoList = new ArrayList<>();
/**
* 证据信息供前端使用。level为 1、2 级时evidenceInfo为空。为3级时不为空
* 且与fileInfoList[evidenceInfo]保持一致
*/
private CaseEvidence evidenceInfo;
private int level = -1;
public EvidenceDirectoryDTO() {
}
public EvidenceDirectoryDTO(List<EvidenceDirectoryDTO> children) {
this.child = 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<String> findDirectoryIdList(String categoryId){
List<String> 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<String> listAllFileId(){
List<String> fileIdList = new ArrayList<>();
if (CollUtil.isNotEmpty(this.fileInfoList)){
fileIdList.addAll(this.fileInfoList.stream().map(EvidenceFileDTO::getFileId).toList());
}
if (CollUtil.isNotEmpty(this.child)){
for (EvidenceDirectoryDTO child : this.getChild()) {
fileIdList.addAll(child.listAllFileId());
}
}
return fileIdList;
}
public List<EvidenceFileDTO> listAllFile(){
List<EvidenceFileDTO> 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<EvidenceDirectoryDTO> listAllDirectory(){
List<EvidenceDirectoryDTO> 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<String,List<EvidenceFileDTO>> fileMap){
List<EvidenceFileDTO> 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<String, CaseEvidence> caseEvidenceMap,Map<String, CategoryPromptDTO> 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();
}
}
}
public List<String> getFileIdList() {
if (CollUtil.isNotEmpty(this.fileInfoList)){
return this.fileInfoList.stream().map(EvidenceFileDTO::getFileId).collect(Collectors.toList());
}else {
return new ArrayList<>();
}
}
}