1. 数据表结构

数据库名称 表名 TREE(帮助文档业务树)
项次 主键 字段名称 数据属性 字段别名(英文)
Column Heading
数据值范围 字段说明
Text



类型 长度 小数


1
公司别ID VARCHAR 50
compid
公司别ID
2 Y 节点ID VARCHAR 50
nodeId
节点ID
3
上级节点 VARCHAR 50
nodeDir
上级节点ID
4
节点名称 VARCHAR 50
nodeName
节点名称
5
节点类型 VARCHAR 50
nodeType
节点类型
6
节点描述 VARCHAR 50
nodeExplain
节点描述
7
信息代码 VARCHAR 50
uriCode
信息代码
8
路径地址 VARCHAR 50
url
路径地址
9
父节点下排序 VARCHAR 50
nextNodeId
父节点下排序节点,最后节点为“0”,下一个节点指向节点ID
10
新增日期 VARCHAR 50
createDate
新增日期
11
新增时间 VARCHAR 50
createTime
新增时间
12
修改日期 VARCHAR 50
updateDate
修改日期
13
修改时间 VARCHAR 50
updateTime
修改时间

2. 数据结构处理方案

先只查询点击的节点ID,查询节点下的子节点,再进行对子节点进行排序

2.1 排序逻辑代码

  1. /**
  2. * @param treeVOList 节点列表
  3. * @param nodeDir 父节点ID
  4. * @return List 返回排序后的父节点下的子节点
  5. */
  6. private List<TreeVO> getChildren(List<TreeVO> treeVOList, String nodeDir) {
  7. List<TreeVO> treeVOListChildren = new ArrayList();
  8. // 创建迭代器进行数据的循环
  9. Iterator it = treeVOList.iterator();
  10. // 创建一个Map容器进装值
  11. Map<String, TreeVO> entityMap = new HashMap<>();
  12. // 循环列表
  13. while (it.hasNext()) {
  14. TreeVO treeVO = (TreeVO) it.next();
  15. // 判断该节点是否是父节点下的子节点
  16. if (treeVO.getNodeDir().equals(nodeDir)) {
  17. // 进行添加节点数据到集合中
  18. entityMap.put(treeVO.getNextNodeId(), treeVO);
  19. }
  20. }
  21. TreeVO treeVO = null;
  22. for (int i = 0; i < entityMap.size(); i++) {
  23. // 查找最后节点
  24. if (i == 0) {
  25. // 拿到最后节点的数据内容
  26. treeVO = entityMap.get("0");
  27. } else {
  28. // 根据上一个节点的下一个节点拿到当前节点
  29. treeVO = entityMap.get(treeVO.getNodeId());
  30. }
  31. // 提交数据到列表中
  32. treeVOListChildren.add(treeVO);
  33. }
  34. // 倒序
  35. Collections.reverse(treeVOListChildren);
  36. return treeVOListChildren;
  37. }