feat: 体系树支持模糊查询
This commit is contained in:
+6
-6
@@ -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) {
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ public interface ILawsTreeNodeService extends IService<LawsTreeNode> {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<LawsTreeNodeModel> queryTreeNodeList(String moduleCode);
|
||||
List<LawsTreeNodeModel> queryTreeNodeList(String moduleCode, String nodeName);
|
||||
|
||||
/**
|
||||
* 新增
|
||||
|
||||
+52
-7
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user