feat: 体系树支持模糊查询

This commit is contained in:
2023-09-12 17:08:50 +08:00
parent f1eeb1b247
commit b384eab44a
3 changed files with 59 additions and 14 deletions
@@ -40,11 +40,11 @@ public class LawsTreeNodeController extends JeroController<LawsTreeNode, ILawsTr
@AutoLog(value = "企业标准-体系树")
@ApiOperation(value = "企业标准-体系树", notes = "企业标准-体系树")
@GetMapping("/enterprise")
public Result<List<LawsTreeNodeModel>> queryENTreeList() {
public Result<List<LawsTreeNodeModel>> queryENTreeList(@RequestParam(required = false) String nodeName) {
String moduleCode = "EN";
Result<List<LawsTreeNodeModel>> result = new Result<>();
try {
List<LawsTreeNodeModel> list = lawsTreeNodeService.queryTreeNodeList(moduleCode);
List<LawsTreeNodeModel> list = lawsTreeNodeService.queryTreeNodeList(moduleCode, nodeName);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
@@ -133,11 +133,11 @@ public class LawsTreeNodeController extends JeroController<LawsTreeNode, ILawsTr
@AutoLog(value = "国内标准-体系树")
@ApiOperation(value = "国内标准-体系树", notes = "国内标准-体系树")
@GetMapping("/domestic")
public Result<List<LawsTreeNodeModel>> queryGBTreeList() {
public Result<List<LawsTreeNodeModel>> queryGBTreeList(@RequestParam(required = false) String nodeName) {
String moduleCode = "GB";
Result<List<LawsTreeNodeModel>> result = new Result<>();
try {
List<LawsTreeNodeModel> list = lawsTreeNodeService.queryTreeNodeList(moduleCode);
List<LawsTreeNodeModel> list = lawsTreeNodeService.queryTreeNodeList(moduleCode, nodeName);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
@@ -226,11 +226,11 @@ public class LawsTreeNodeController extends JeroController<LawsTreeNode, ILawsTr
@AutoLog(value = "海外标准-体系树")
@ApiOperation(value = "海外标准-体系树", notes = "海外标准-体系树")
@GetMapping("/overseas")
public Result<List<LawsTreeNodeModel>> queryFBTreeList() {
public Result<List<LawsTreeNodeModel>> queryFBTreeList(@RequestParam(required = false) String nodeName) {
String moduleCode = "FB";
Result<List<LawsTreeNodeModel>> result = new Result<>();
try {
List<LawsTreeNodeModel> list = lawsTreeNodeService.queryTreeNodeList(moduleCode);
List<LawsTreeNodeModel> list = lawsTreeNodeService.queryTreeNodeList(moduleCode, nodeName);
result.setResult(list);
result.setSuccess(true);
} catch (Exception e) {
@@ -19,7 +19,7 @@ public interface ILawsTreeNodeService extends IService<LawsTreeNode> {
*
* @return
*/
List<LawsTreeNodeModel> queryTreeNodeList(String moduleCode);
List<LawsTreeNodeModel> queryTreeNodeList(String moduleCode, String nodeName);
/**
* 新增
@@ -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<LawsTreeNodeMapper, Law
private LawsNodeRelationMapper lawsNodeRelationMapper;
@Override
public List<LawsTreeNodeModel> queryTreeNodeList(String moduleCode) {
public List<LawsTreeNodeModel> queryTreeNodeList(String moduleCode, String nodeName) {
LambdaQueryWrapper<LawsTreeNode> query = new LambdaQueryWrapper<>();
query.eq(LawsTreeNode::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
query.eq(LawsTreeNode::getModuleCode, moduleCode);
query.orderByAsc(LawsTreeNode::getNodeOrder);
List<LawsTreeNode> list = this.list(query);
List<LawsTreeNode> allNodes = this.list(query);
Set<LawsTreeNode> nodesSet = new HashSet<>();
List<LawsTreeNode> 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<LawsTreeNode> 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<LawsTreeNode> findPathToRoot(List<LawsTreeNode> allNodes, LawsTreeNode node) {
Set<LawsTreeNode> 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<LawsTreeNode> findAllChildren(List<LawsTreeNode> allNodes, LawsTreeNode node) {
Set<LawsTreeNode> childrenSet = new HashSet<>();
List<LawsTreeNode> 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