|
@@ -101,12 +101,18 @@ public class DiskFolderService {
|
|
|
return diskFileList.get(0).getFileId();
|
|
return diskFileList.get(0).getFileId();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * elementui 的 el-tree
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param
|
|
|
|
|
+ * @return
|
|
|
|
|
+ * @date 2025-09-05 16:29:33
|
|
|
|
|
+ */
|
|
|
public List<FolderTree> getFolderTree() {
|
|
public List<FolderTree> getFolderTree() {
|
|
|
DiskFile root = diskFileMapper.findRoot();
|
|
DiskFile root = diskFileMapper.findRoot();
|
|
|
if (root == null) {
|
|
if (root == null) {
|
|
|
return Collections.emptyList();
|
|
return Collections.emptyList();
|
|
|
}
|
|
}
|
|
|
- FolderTree treeRoot = new FolderTree(root);
|
|
|
|
|
|
|
|
|
|
long loginUser = UserContext.getUserId();
|
|
long loginUser = UserContext.getUserId();
|
|
|
DiskQuery diskQuery = new DiskQuery.Builder()
|
|
DiskQuery diskQuery = new DiskQuery.Builder()
|
|
@@ -116,16 +122,43 @@ public class DiskFolderService {
|
|
|
|
|
|
|
|
Page page = new Page(1, 1000);
|
|
Page page = new Page(1, 1000);
|
|
|
List<DiskFile> diskFileList = diskFileMapper.findDiskQueryByPage(page, diskQuery);
|
|
List<DiskFile> diskFileList = diskFileMapper.findDiskQueryByPage(page, diskQuery);
|
|
|
- Map<String, List<FolderTree>> map = diskFileList.stream()
|
|
|
|
|
|
|
+ List<FolderTree> topChildren = getCollapsedTree(diskFileList);
|
|
|
|
|
+
|
|
|
|
|
+ FolderTree treeRoot = new FolderTree(root);
|
|
|
|
|
+ treeRoot.setChildren(topChildren);
|
|
|
|
|
+ return List.of(treeRoot);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取一棵收拢的树
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param
|
|
|
|
|
+ * @return
|
|
|
|
|
+ * @date 2025-09-05 16:27:03
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<FolderTree> getCollapsedTree(List<DiskFile> folderList) {
|
|
|
|
|
+ Map<String, FolderTree> map = folderList.stream()
|
|
|
.map(FolderTree::new)
|
|
.map(FolderTree::new)
|
|
|
- .collect(Collectors.groupingBy(FolderTree::getPid));
|
|
|
|
|
|
|
+ .collect(Collectors.groupingBy(FolderTree::getLabel,
|
|
|
|
|
+ Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
|
|
|
|
|
+
|
|
|
|
|
+ // 按 path 长度降序
|
|
|
|
|
+ List<String> list = map.keySet().stream()
|
|
|
|
|
+ .sorted((o1, o2) -> o2.length()-o1.length())
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ // 对于一棵树, 从最下面的节点往上收拢
|
|
|
|
|
+ for (String path : list) {
|
|
|
|
|
+ int idx = path.lastIndexOf("/");
|
|
|
|
|
+ String parentPath = path.substring(0, idx);
|
|
|
|
|
+ if (parentPath.isBlank()) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- String rootId = treeRoot.getFileId();
|
|
|
|
|
- List<FolderTree> list = map.get(rootId);
|
|
|
|
|
- if (list != null) {
|
|
|
|
|
- treeRoot.setChildren(list);
|
|
|
|
|
|
|
+ FolderTree folderTree = map.get(path);
|
|
|
|
|
+ map.get(parentPath).getChildren().add(folderTree);
|
|
|
|
|
+ map.remove(path);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- return List.of(treeRoot);
|
|
|
|
|
|
|
+ return new ArrayList<>(map.values());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|