diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java index a0120d11..24d2da42 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsPartNameController.java @@ -40,7 +40,7 @@ public class LawsPartNameController { @GetMapping("/queryFirstList") public Result> queryFirstList( @RequestParam(name = "nodeName", required = false, defaultValue = "") @ApiParam("节点名称") String nodeName) { - List list = IPartNameService.queryList(nodeName); + List list = IPartNameService.getTree("Part", nodeName); return Result.OK(list); } @@ -57,7 +57,7 @@ public class LawsPartNameController { @GetMapping("/getChild") public Result> getChild(@RequestParam("parentCode") String parentCode, @RequestParam("nodeName") String nodeName) { - return Result.OK(IPartNameService.getChild(parentCode, nodeName)); + return Result.OK(IPartNameService.getTree(parentCode, nodeName)); } @AutoLog(value = "企业标准-零部件树历史数据处理") diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsPartNameService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsPartNameService.java index 6f271979..98f04101 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsPartNameService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsPartNameService.java @@ -32,7 +32,8 @@ public interface ILawsPartNameService extends IService { */ void fixFirstNodeCode(); - List queryList(String nodeName); - - List getChild(String parentCode, String nodeName); + /** + * 零部件树懒加载 + */ + List getTree(String parentCode, String nodeName); } 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 595d5059..02096607 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 @@ -140,71 +140,35 @@ public class PartNameServiceImpl extends ServiceImpl } @Override - public List queryList(String nodeName) { + public List getTree(String parentCode, String nodeName) { // 查询所有节点 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - List allNodes = list(queryWrapper); - - // 通过 nodeName 过滤符合条件的节点 - Map nodeMap = allNodes.parallelStream() - .collect(Collectors.toConcurrentMap(PartName::getCode, Function.identity())); - Map> parentChildMap = allNodes.parallelStream() - .collect(Collectors.groupingByConcurrent(PartName::getParentCode)); + List allNodes = list(); + // 过滤符合条件的节点 List matchedNodes = allNodes.parallelStream() .filter(node -> node.getName() != null && node.getName().contains(nodeName)) .collect(Collectors.toList()); + // 构建节点映射,以及父子关系映射 + Map nodeMap = allNodes.parallelStream() + .collect(Collectors.toConcurrentMap(PartName::getCode, Function.identity())); + Map> parentChildMap = matchedNodes.parallelStream() + .collect(Collectors.groupingByConcurrent(PartName::getParentCode)); + if (matchedNodes.isEmpty()) { return Collections.emptyList(); } // 查找每个匹配节点的一级父节点 Set rootNodes = ConcurrentHashMap.newKeySet(); - matchedNodes.parallelStream().forEach(matchedNode -> { - PartName currentNode = matchedNode; - while (currentNode != null && !currentNode.getParentCode().equals("Part")) { - currentNode = nodeMap.get(currentNode.getParentCode()); - } - if (currentNode != null) { - rootNodes.add(currentNode); - } - }); - - // 设置叶子标志 - rootNodes.parallelStream().forEach(rootNode -> { - List children = parentChildMap.get(rootNode.getCode()); - rootNode.setLeafFlag(children == null || children.isEmpty()); - }); - - return rootNodes.stream() - .sorted(Comparator.comparing(PartName::getName)) - .collect(Collectors.toList()); - } - - @Override - public List getChild(String parentCode, String nodeName) { - // 查询所有节点 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - List allNodes = list(queryWrapper); - - // 构建节点映射,以及父子关系映射 - Map nodeMap = allNodes.parallelStream() - .collect(Collectors.toConcurrentMap(PartName::getCode, Function.identity())); - Map> parentChildMap = allNodes.parallelStream() - .collect(Collectors.groupingByConcurrent(PartName::getParentCode)); - - // 过滤符合条件的节点 - List matchedNodes = allNodes.parallelStream() - .filter(node -> node.getName() != null && node.getName().contains(nodeName)) - .collect(Collectors.toList()); - - // 查找每个匹配节点的一级父节点 - Set rootNodes = ConcurrentHashMap.newKeySet(); + Set allParentNodeCodes = ConcurrentHashMap.newKeySet(); matchedNodes.parallelStream().forEach(matchedNode -> { PartName currentNode = matchedNode; while (currentNode != null && !currentNode.getParentCode().equals(parentCode)) { currentNode = nodeMap.get(currentNode.getParentCode()); + if (currentNode != null) { + allParentNodeCodes.add(currentNode.getCode()); + } } if (currentNode != null) { rootNodes.add(currentNode); @@ -214,7 +178,14 @@ public class PartNameServiceImpl extends ServiceImpl // 设置叶子标志 rootNodes.parallelStream().forEach(rootNode -> { List children = parentChildMap.get(rootNode.getCode()); - rootNode.setLeafFlag(children == null || children.isEmpty()); + boolean hasNoChildren = (children == null || children.isEmpty()); + + if (StrUtil.isBlank(nodeName)) { + rootNode.setLeafFlag(hasNoChildren); + } else { + boolean isNotInAllParents = !allParentNodeCodes.contains(rootNode.getCode()); + rootNode.setLeafFlag(hasNoChildren && isNotInAllParents); + } }); // 按名字排序