From b384eab44a504bd35d3a22a175dd98a927cb3795 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Tue, 12 Sep 2023 17:08:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=93=E7=B3=BB=E6=A0=91=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=A8=A1=E7=B3=8A=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LawsTreeNodeController.java | 12 ++-- .../service/ILawsTreeNodeService.java | 2 +- .../service/impl/LawsTreeNodeServiceImpl.java | 59 ++++++++++++++++--- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsTreeNodeController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsTreeNodeController.java index 418fd5ea..7ac1ab96 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsTreeNodeController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsTreeNodeController.java @@ -40,11 +40,11 @@ public class LawsTreeNodeController extends JeroController> queryENTreeList() { + public Result> queryENTreeList(@RequestParam(required = false) String nodeName) { String moduleCode = "EN"; Result> result = new Result<>(); try { - List list = lawsTreeNodeService.queryTreeNodeList(moduleCode); + List list = lawsTreeNodeService.queryTreeNodeList(moduleCode, nodeName); result.setResult(list); result.setSuccess(true); } catch (Exception e) { @@ -133,11 +133,11 @@ public class LawsTreeNodeController extends JeroController> queryGBTreeList() { + public Result> queryGBTreeList(@RequestParam(required = false) String nodeName) { String moduleCode = "GB"; Result> result = new Result<>(); try { - List list = lawsTreeNodeService.queryTreeNodeList(moduleCode); + List list = lawsTreeNodeService.queryTreeNodeList(moduleCode, nodeName); result.setResult(list); result.setSuccess(true); } catch (Exception e) { @@ -226,11 +226,11 @@ public class LawsTreeNodeController extends JeroController> queryFBTreeList() { + public Result> queryFBTreeList(@RequestParam(required = false) String nodeName) { String moduleCode = "FB"; Result> result = new Result<>(); try { - List list = lawsTreeNodeService.queryTreeNodeList(moduleCode); + List list = lawsTreeNodeService.queryTreeNodeList(moduleCode, nodeName); result.setResult(list); result.setSuccess(true); } catch (Exception e) { diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsTreeNodeService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsTreeNodeService.java index 96df0b2e..c42cba29 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsTreeNodeService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsTreeNodeService.java @@ -19,7 +19,7 @@ public interface ILawsTreeNodeService extends IService { * * @return */ - List queryTreeNodeList(String moduleCode); + List queryTreeNodeList(String moduleCode, String nodeName); /** * 新增 diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsTreeNodeServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsTreeNodeServiceImpl.java index 5745e494..f3d9379b 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsTreeNodeServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/impl/LawsTreeNodeServiceImpl.java @@ -1,5 +1,6 @@ package com.jero.modules.laws.standard.service.impl; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.constant.CommonConstant; @@ -16,10 +17,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jero.common.exception.JeroBootException; -import java.util.ArrayList; -import java.util.List; -import java.util.Date; -import java.util.UUID; +import java.util.*; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -39,14 +38,60 @@ public class LawsTreeNodeServiceImpl extends ServiceImpl queryTreeNodeList(String moduleCode) { + public List queryTreeNodeList(String moduleCode, String nodeName) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(LawsTreeNode::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); query.eq(LawsTreeNode::getModuleCode, moduleCode); query.orderByAsc(LawsTreeNode::getNodeOrder); - List list = this.list(query); + List allNodes = this.list(query); + + Set nodesSet = new HashSet<>(); + + List matchedNodes = allNodes.stream() + .filter(node -> node.getNodeName().contains(nodeName)) + .collect(Collectors.toList()); + + for (LawsTreeNode matchedNode : matchedNodes) { + nodesSet.addAll(findPathToRoot(allNodes, matchedNode)); + nodesSet.addAll(findAllChildren(allNodes, matchedNode)); + } + // 如果没有任何匹配或者只匹配到了跟节点,则只返回根节点 + List lawsTreeNodes = new ArrayList<>(); + if (nodesSet.size() <= 1) { + LawsTreeNode parentNode = allNodes.stream().filter(node -> node.getParentCode() == null).collect(Collectors.toList()).get(0); + lawsTreeNodes.add(parentNode); + } else { + lawsTreeNodes = new ArrayList<>(nodesSet); + } + // 调用wrapTreeDataToTreeList方法生成树状数据 - return FindsTreeNodeChildrenUtil.wrapTreeDataToTreeList(list); + return FindsTreeNodeChildrenUtil.wrapTreeDataToTreeList(lawsTreeNodes); + } + + private Set findPathToRoot(List allNodes, LawsTreeNode node) { + Set pathNodes = new HashSet<>(); + LawsTreeNode[] currentHolder = new LawsTreeNode[1]; + currentHolder[0] = node; + while (currentHolder[0] != null) { + pathNodes.add(currentHolder[0]); + currentHolder[0] = allNodes.stream() + .filter(n -> n.getId().equals(currentHolder[0].getParentId())) + .findFirst().orElse(null); + } + return pathNodes; + } + + private Set findAllChildren(List allNodes, LawsTreeNode node) { + Set childrenSet = new HashSet<>(); + List directChildren = allNodes.stream() + .filter(n -> n.getParentId().equals(node.getId())) + .collect(Collectors.toList()); + + for (LawsTreeNode child : directChildren) { + childrenSet.add(child); + childrenSet.addAll(findAllChildren(allNodes, child)); + } + return childrenSet; } @Override