更新容器获取
This commit is contained in:
@@ -4,6 +4,8 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.jeesite.modules.app.dao.file.FolderItem;
|
||||
import com.jeesite.modules.app.utils.MyUtils;
|
||||
@@ -160,51 +162,49 @@ public class BizFoldersController extends BaseController {
|
||||
@RequestMapping(value = "foldersAll")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> foldersAll(BizFolders bizFolders) {
|
||||
// 构建根节点
|
||||
List<Map<String, Object>> treeData = new ArrayList<>();
|
||||
Map<String, Object> rootNode = new HashMap<>();
|
||||
rootNode.put("id", "0");
|
||||
rootNode.put("name", "根目录");
|
||||
rootNode.put("disabled", false);
|
||||
rootNode.put("children", new ArrayList<>());
|
||||
bizFolders.setParentId("0");
|
||||
bizFolders.setIsDeleted(0);
|
||||
List<BizFolders> firstLevelFolders = bizFoldersService.findList(bizFolders);
|
||||
List<Map<String, Object>> firstNodeList = new ArrayList<>();
|
||||
for (BizFolders firstFolder : firstLevelFolders) {
|
||||
Map<String, Object> firstNode = MyUtils.convertToTreeNode(firstFolder, "根目录");
|
||||
BizFolders secondQuery = new BizFolders();
|
||||
secondQuery.setParentId(firstFolder.getFolderId());
|
||||
secondQuery.setIsDeleted(0);
|
||||
List<BizFolders> secondLevelFolders = bizFoldersService.findList(secondQuery);
|
||||
List<Map<String, Object>> secondNodeList = new ArrayList<>();
|
||||
for (BizFolders secondFolder : secondLevelFolders) {
|
||||
Map<String, Object> secondNode = MyUtils.convertToTreeNode(secondFolder, firstFolder.getFolderName());
|
||||
BizFolders thirdQuery = new BizFolders();
|
||||
thirdQuery.setParentId(secondFolder.getFolderId());
|
||||
thirdQuery.setIsDeleted(0);
|
||||
List<BizFolders> thirdLevelFolders = bizFoldersService.findList(thirdQuery);
|
||||
List<Map<String, Object>> thirdNodeList = new ArrayList<>();
|
||||
for (BizFolders thirdFolder : thirdLevelFolders) {
|
||||
Map<String, Object> thirdNode = MyUtils.convertToTreeNode(thirdFolder, secondFolder.getFolderName());
|
||||
BizFolders fourthQuery = new BizFolders();
|
||||
fourthQuery.setParentId(thirdFolder.getFolderId());
|
||||
fourthQuery.setIsDeleted(0);
|
||||
List<BizFolders> fourthLevelFolders = bizFoldersService.findList(fourthQuery);
|
||||
List<Map<String, Object>> fourthNodeList = new ArrayList<>();
|
||||
for (BizFolders fourthFolder : fourthLevelFolders) {
|
||||
Map<String, Object> fourthNode = MyUtils.convertToTreeNode(fourthFolder, thirdFolder.getFolderName());
|
||||
fourthNodeList.add(fourthNode);
|
||||
}
|
||||
thirdNode.put("children", fourthNodeList);
|
||||
thirdNodeList.add(thirdNode);
|
||||
// 1. 一次性查询所有未删除的文件夹
|
||||
BizFolders query = new BizFolders();
|
||||
query.setIsDeleted(0);
|
||||
List<BizFolders> allFolders = bizFoldersService.findList(query);
|
||||
// 2. 按parentId分组,构建映射Map
|
||||
Map<String, List<BizFolders>> folderMap = allFolders.stream()
|
||||
.collect(Collectors.groupingBy(BizFolders::getParentId, Collectors.toList()));
|
||||
// 3. 递归构建树形结构的核心逻辑(内部递归方法)
|
||||
Function<String, List<Map<String, Object>>> buildTree = new Function<String, List<Map<String, Object>>>() {
|
||||
@Override
|
||||
public List<Map<String, Object>> apply(String parentId) {
|
||||
List<Map<String, Object>> nodeList = new ArrayList<>();
|
||||
List<BizFolders> childFolders = folderMap.getOrDefault(parentId, new ArrayList<>());
|
||||
for (BizFolders folder : childFolders) {
|
||||
// 转换为节点
|
||||
Map<String, Object> node = MyUtils.convertToTreeNode(folder,
|
||||
parentId.equals("0") ? "根目录" : getFolderNameById(folderMap, parentId));
|
||||
// 递归获取子节点
|
||||
node.put("children", this.apply(folder.getFolderId()));
|
||||
nodeList.add(node);
|
||||
}
|
||||
secondNode.put("children", thirdNodeList);
|
||||
secondNodeList.add(secondNode);
|
||||
return nodeList;
|
||||
}
|
||||
firstNode.put("children", secondNodeList);
|
||||
firstNodeList.add(firstNode);
|
||||
}
|
||||
rootNode.put("children", firstNodeList);
|
||||
// 辅助方法:根据folderId获取文件夹名称
|
||||
private String getFolderNameById(Map<String, List<BizFolders>> folderMap, String folderId) {
|
||||
for (List<BizFolders> folders : folderMap.values()) {
|
||||
for (BizFolders f : folders) {
|
||||
if (folderId.equals(f.getFolderId())) {
|
||||
return f.getFolderName();
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
};
|
||||
// 4. 构建根节点的子节点并返回
|
||||
rootNode.put("children", buildTree.apply("0"));
|
||||
treeData.add(rootNode);
|
||||
return treeData;
|
||||
}
|
||||
@@ -213,53 +213,47 @@ public class BizFoldersController extends BaseController {
|
||||
@RequestMapping(value = "treeData")
|
||||
@ResponseBody
|
||||
public List<Map<String, Object>> treeFoldersData(BizFolders bizFolders) {
|
||||
// 1. 构建根节点
|
||||
List<Map<String, Object>> treeData = new ArrayList<>();
|
||||
Map<String, Object> rootNode = new HashMap<>();
|
||||
rootNode.put("id", "0");
|
||||
rootNode.put("name", "根目录");
|
||||
rootNode.put("disabled", false);
|
||||
rootNode.put("children", new ArrayList<>());
|
||||
bizFolders.setParentId("0");
|
||||
bizFolders.setIsDeleted(0);
|
||||
List<BizFolders> firstLevelFolders = bizFoldersService.findList(bizFolders);
|
||||
List<Map<String, Object>> firstNodeList = new ArrayList<>();
|
||||
for (BizFolders firstFolder : firstLevelFolders) {
|
||||
Map<String, Object> firstNode = MyUtils.convertToTreeNode(firstFolder, false);
|
||||
BizFolders secondQuery = new BizFolders();
|
||||
secondQuery.setParentId(firstFolder.getFolderId());
|
||||
secondQuery.setIsDeleted(0);
|
||||
List<BizFolders> secondLevelFolders = bizFoldersService.findList(secondQuery);
|
||||
List<Map<String, Object>> secondNodeList = new ArrayList<>();
|
||||
for (BizFolders secondFolder : secondLevelFolders) {
|
||||
Map<String, Object> secondNode = MyUtils.convertToTreeNode(secondFolder, false);
|
||||
BizFolders thirdQuery = new BizFolders();
|
||||
thirdQuery.setParentId(secondFolder.getFolderId());
|
||||
thirdQuery.setIsDeleted(0);
|
||||
List<BizFolders> thirdLevelFolders = bizFoldersService.findList(thirdQuery);
|
||||
List<Map<String, Object>> thirdNodeList = new ArrayList<>();
|
||||
for (BizFolders thirdFolder : thirdLevelFolders) {
|
||||
Map<String, Object> thirdNode = MyUtils.convertToTreeNode(thirdFolder, false);
|
||||
BizFolders fourthQuery = new BizFolders();
|
||||
fourthQuery.setParentId(thirdFolder.getFolderId());
|
||||
fourthQuery.setIsDeleted(0);
|
||||
List<BizFolders> fourthLevelFolders = bizFoldersService.findList(fourthQuery);
|
||||
List<Map<String, Object>> fourthNodeList = new ArrayList<>();
|
||||
for (BizFolders fourthFolder : fourthLevelFolders) {
|
||||
Map<String, Object> fourthNode = MyUtils.convertToTreeNode(fourthFolder, bizFolders.getDescription().equals("add") ? true : false);
|
||||
fourthNode.put("children", new ArrayList<>());
|
||||
fourthNodeList.add(fourthNode);
|
||||
}
|
||||
thirdNode.put("children", fourthNodeList);
|
||||
thirdNodeList.add(thirdNode);
|
||||
// 2. 一次性查询所有未删除的文件夹(仅1次数据库查询)
|
||||
BizFolders query = new BizFolders();
|
||||
query.setIsDeleted(0);
|
||||
List<BizFolders> allFolders = bizFoldersService.findList(query);
|
||||
// 3. 按parentId分组,快速查找子节点
|
||||
Map<String, List<BizFolders>> folderMap = allFolders.stream()
|
||||
.collect(Collectors.groupingBy(BizFolders::getParentId, Collectors.toList()));
|
||||
final List<java.util.function.BiFunction<String, Integer, List<Map<String, Object>>>> recursiveHolder = new ArrayList<>();
|
||||
// 匿名内部类实现递归逻辑(BiFunction:入参parentId+level,出参节点列表)
|
||||
java.util.function.BiFunction<String, Integer, List<Map<String, Object>>> buildTree = new java.util.function.BiFunction<String, Integer, List<Map<String, Object>>>() {
|
||||
@Override
|
||||
public List<Map<String, Object>> apply(String parentId, Integer level) {
|
||||
List<Map<String, Object>> nodeList = new ArrayList<>();
|
||||
// 空值保护:获取当前父ID下的子文件夹
|
||||
List<BizFolders> childFolders = folderMap.getOrDefault(parentId, new ArrayList<>());
|
||||
for (BizFolders folder : childFolders) {
|
||||
// 原业务逻辑:四级节点特殊处理,其他传false
|
||||
boolean flag = level == 4 ? "add".equals(bizFolders.getDescription()) : false;
|
||||
Map<String, Object> node = MyUtils.convertToTreeNode(folder, flag);
|
||||
// 递归调用自身(通过holder获取)
|
||||
List<Map<String, Object>> children = recursiveHolder.get(0).apply(folder.getFolderId(), level + 1);
|
||||
// 无子节点时设为空列表(和原代码一致)
|
||||
node.put("children", children.isEmpty() ? new ArrayList<>() : children);
|
||||
nodeList.add(node);
|
||||
}
|
||||
secondNode.put("children", thirdNodeList);
|
||||
secondNodeList.add(secondNode);
|
||||
return nodeList;
|
||||
}
|
||||
firstNode.put("children", secondNodeList);
|
||||
firstNodeList.add(firstNode);
|
||||
}
|
||||
rootNode.put("children", firstNodeList);
|
||||
};
|
||||
|
||||
// 将递归逻辑放入holder,供内部调用
|
||||
recursiveHolder.add(buildTree);
|
||||
// 5. 从根节点(parentId=0,层级1)开始构建
|
||||
rootNode.put("children", buildTree.apply("0", 1));
|
||||
treeData.add(rootNode);
|
||||
|
||||
return treeData;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user