diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java index 3a85d25d..d12c4c97 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/PartNameServiceImpl.java @@ -184,61 +184,114 @@ public class PartNameServiceImpl extends ServiceImpl @Override public List queryList(String nodeName) { + // 查询所有节点 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PartName::getParentCode, "Part"); - if (nodeName != null && !nodeName.isEmpty()) { - queryWrapper.like(PartName::getName, nodeName); - } - List list = list(queryWrapper); + List allNodes = list(queryWrapper); - List codes = list.stream().map(PartName::getCode).collect(Collectors.toList()); - // 判断有没有子级 - queryWrapper.clear(); - queryWrapper.in(PartName::getParentCode, codes); - if (nodeName != null && !nodeName.isEmpty()) { - queryWrapper.like(PartName::getName, nodeName); - } - List childList = list(queryWrapper); + // 通过 nodeName 过滤符合条件的节点 + List matchedNodes = allNodes.stream() + .filter(node -> node.getName() != null && node.getName().contains(nodeName)) + .collect(Collectors.toList()); - if (childList.isEmpty()) { - list.forEach(e -> e.setLeafFlag(true)); - return list; + if (matchedNodes.isEmpty()) { + return Collections.emptyList(); } - Map> childMap = childList.stream().collect(Collectors.groupingBy(PartName::getParentCode)); - list.forEach(item -> { - List partNames = childMap.get(item.getCode()); - item.setLeafFlag(partNames == null || partNames.isEmpty()); - }); - return list; + + // 用于存储一级节点 + Set rootNodes = new HashSet<>(); + + // 查找每个匹配节点的一级父节点 + for (PartName matchedNode : matchedNodes) { + PartName currentNode = matchedNode; + while (currentNode != null && !currentNode.getParentCode().equals("Part")) { + // 查找当前节点的父节点 + String parentCode = currentNode.getParentCode(); + currentNode = allNodes.stream() + .filter(node -> node.getCode().equals(parentCode)) + .findFirst() + .orElse(null); + } + // 添加一级节点到结果集 + if (currentNode != null) { + rootNodes.add(currentNode); + } + } + + // 设置叶子标志的逻辑调整 + for (PartName node : rootNodes) { + Set descendantCodes = getAllDescendantCodes(node.getCode(), allNodes); // 获取所有子孙节点的ID + boolean isLeaf = true; // 默认设置为叶子节点 + + for (PartName matchedNode : matchedNodes) { + if (descendantCodes.contains(matchedNode.getCode())) { + isLeaf = false; + break; // 如果在子孙节点中找到匹配节点,当前根节点不是叶子节点 + } + } + node.setLeafFlag(isLeaf); // 设置叶子标志 + } + + return new ArrayList<>(rootNodes); + } + + // 方法:获取给定节点ID的所有子孙节点ID + private Set getAllDescendantCodes(String parentCode, List allNodes) { + Set descendantCodes = new HashSet<>(); + List directChildren = allNodes.stream() + .filter(node -> node.getParentCode().equals(parentCode)) + .collect(Collectors.toList()); + + for (PartName child : directChildren) { + descendantCodes.add(child.getCode()); + descendantCodes.addAll(getAllDescendantCodes(child.getCode(), allNodes)); // 递归获取子孙节点 + } + + return descendantCodes; } @Override public List getChild(String parentCode, String nodeName) { + // 查询所有节点 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PartName::getParentCode, parentCode); - if (nodeName != null && !nodeName.isEmpty()) { - queryWrapper.like(PartName::getName, nodeName); - } - List list = list(queryWrapper); + List allNodes = list(queryWrapper); - List codes = list.stream().map(PartName::getCode).collect(Collectors.toList()); - // 判断有没有子级 - queryWrapper.clear(); - queryWrapper.in(PartName::getParentCode, codes); - if (nodeName != null && !nodeName.isEmpty()) { - queryWrapper.like(PartName::getName, nodeName); + // 通过 nodeName 过滤符合条件的节点 + List matchedNodes = allNodes.stream() + .filter(node -> node.getName() != null && node.getName().contains(nodeName)) + .collect(Collectors.toList()); + + if (matchedNodes.isEmpty()) { + return Collections.emptyList(); } - List childList = list(queryWrapper); - if (childList.isEmpty()) { - list.forEach(e -> e.setLeafFlag(true)); - return list; + + // 用于存储一级节点 + Set rootNodes = new HashSet<>(); + + // 查找每个匹配节点的一级父节点 + for (PartName matchedNode : matchedNodes) { + PartName currentNode = matchedNode; + while (currentNode != null && !currentNode.getParentCode().equals(parentCode)) { + // 查找当前节点的父节点 + String pCode = currentNode.getParentCode(); + currentNode = allNodes.stream() + .filter(node -> node.getCode().equals(pCode)) + .findFirst() + .orElse(null); + } + // 添加一级节点到结果集 + if (currentNode != null) { + rootNodes.add(currentNode); + } } - Map> childMap = childList.stream().collect(Collectors.groupingBy(PartName::getParentCode)); - list.forEach(item -> { - List partNames = childMap.get(item.getCode()); - item.setLeafFlag(partNames == null || partNames.isEmpty()); + + // 设置叶子标志 + Set rootNodeCodes = rootNodes.stream().map(PartName::getCode).collect(Collectors.toSet()); + rootNodes.forEach(node -> { + node.setLeafFlag(matchedNodes.stream() + .noneMatch(n -> rootNodeCodes.contains(n.getParentCode()))); }); - return list; + + return new ArrayList<>(rootNodes); } private PartName getFirstLevelNode(PartName node, Map nodeMap) {