在目录的查询逻辑中,增加对软连接目录的查询逻辑

master
guoxin 1 year ago
parent 776191c004
commit 9c61ebc81d
  1. 31
      shandan-system/src/main/java/com/keyware/shandan/bianmu/service/DirectoryTreeService.java

@ -1,5 +1,6 @@
package com.keyware.shandan.bianmu.service; package com.keyware.shandan.bianmu.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.keyware.shandan.bianmu.entity.DirectoryResource; import com.keyware.shandan.bianmu.entity.DirectoryResource;
@ -153,7 +154,7 @@ public class DirectoryTreeService {
} }
Set<String> allowDirIds = dirPermissionService.getByReadPermis(SecurityUtil.getLoginSysUser()); Set<String> allowDirIds = dirPermissionService.getByReadPermis(SecurityUtil.getLoginSysUser());
Set<String> dirIds = allDir.stream().map(DirectoryVo::getId).filter(allowDirIds::contains).collect(Collectors.toSet()); Set<String> dirIds = allDir.stream().map(DirectoryVo::getId).filter(allowDirIds::contains).collect(Collectors.toSet());
//dirIds.add(DirectoryType.LINK_DIR == parent.getDirectoryType() ? parent.getResourceId() : parentId);
QueryWrapper<DirectoryResource> query = new QueryWrapper<>(); QueryWrapper<DirectoryResource> query = new QueryWrapper<>();
query.in("PARENT_ID", dirIds); query.in("PARENT_ID", dirIds);
if (StringUtils.hasText(text)) { if (StringUtils.hasText(text)) {
@ -168,20 +169,30 @@ public class DirectoryTreeService {
} }
private void allDirectoryByParent(DirectoryVo parent, HashSet<DirectoryVo> result) { private void allDirectoryByParent(DirectoryVo parent, HashSet<DirectoryVo> result) {
String parentId = DirectoryType.LINK_DIR == parent.getDirectoryType() ? parent.getResourceId() : parent.getId(); if (DirectoryType.LINK_DIR == parent.getDirectoryType()) {
if(DirectoryType.LINK_DIR == parent.getDirectoryType()){
DirectoryVo linkDir = directoryService.getById(parent.getResourceId()); DirectoryVo linkDir = directoryService.getById(parent.getResourceId());
if(linkDir != null){ if (linkDir != null) {
result.add(linkDir); result.add(linkDir);
} }
}else{ } else {
result.add(parent); result.add(parent);
} }
List<DirectoryVo> children = directoryService.childrenListByParent(parentId); // 查询普通目录数据
children.forEach(dir -> { result.addAll(dirListByParent(parent));
result.add(dir);
allDirectoryByParent(dir, result); // 查询软连接目录数据
}); LambdaQueryWrapper<DirectoryVo> query = new LambdaQueryWrapper<>();
query.eq(DirectoryVo::getDirectoryType, DirectoryType.LINK_DIR)
.likeRight(DirectoryVo::getDirectoryPath, parent.getDirectoryPath() + "/");
directoryService.list(query).forEach(dir -> result.addAll(dirListByParent(dir)));
}
private List<DirectoryVo> dirListByParent(DirectoryVo parent) {
LambdaQueryWrapper<DirectoryVo> query = new LambdaQueryWrapper<>();
query.eq(DirectoryVo::getDirectoryType, DirectoryType.DIRECTORY)
.likeRight(DirectoryVo::getDirectoryPath, parent.getDirectoryPath() + "/");
return directoryService.list(query);
} }
private static class DirectoryParentBuilder { private static class DirectoryParentBuilder {