From 7e7f901b2172281dc294dfbc67e6ad00625f09f4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 04 三月 2024 10:11:21 +0800
Subject: [PATCH] 合并代码

---
 cloud-server-management/src/main/java/com/dsh/course/model/node/MenuNode.java |  258 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 258 insertions(+), 0 deletions(-)

diff --git a/cloud-server-management/src/main/java/com/dsh/course/model/node/MenuNode.java b/cloud-server-management/src/main/java/com/dsh/course/model/node/MenuNode.java
new file mode 100644
index 0000000..da46459
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/model/node/MenuNode.java
@@ -0,0 +1,258 @@
+package com.dsh.course.model.node;
+
+
+import com.dsh.constant.IsMenu;
+
+import java.util.*;
+
+/**
+ * @author fengshuonan
+ * @Description 菜单的节点
+ * @date 2016年12月6日 上午11:34:17
+ */
+public class MenuNode implements Comparable {
+
+    /**
+     * 节点id
+     */
+    private Long id;
+
+    /**
+     * 父节点
+     */
+    private Long parentId;
+
+    /**
+     * 节点名称
+     */
+    private String name;
+
+    /**
+     * 按钮级别
+     */
+    private Integer levels;
+
+    /**
+     * 按钮级别
+     */
+    private Integer ismenu;
+
+    /**
+     * 按钮的排序
+     */
+    private Integer num;
+
+    /**
+     * 节点的url
+     */
+    private String url;
+
+    /**
+     * 节点图标
+     */
+    private String icon;
+
+    private String ename;
+    private String bname;
+
+    public String getEname() {
+        return ename;
+    }
+
+    public void setEname(String ename) {
+        this.ename = ename;
+    }
+
+    public String getBname() {
+        return bname;
+    }
+
+    public void setBname(String bname) {
+        this.bname = bname;
+    }
+
+    /**
+     * 子节点的集合
+     */
+    private List<MenuNode> children;
+
+    /**
+     * 查询子节点时候的临时集合
+     */
+    private List<MenuNode> linkedList = new ArrayList<MenuNode>();
+
+    public MenuNode() {
+        super();
+    }
+
+    public MenuNode(Long id, Long parentId) {
+        super();
+        this.id = id;
+        this.parentId = parentId;
+    }
+
+    public Integer getLevels() {
+        return levels;
+    }
+
+    public void setLevels(Integer levels) {
+        this.levels = levels;
+    }
+
+    public String getIcon() {
+        return icon;
+    }
+
+    public void setIcon(String icon) {
+        this.icon = icon;
+    }
+
+    public static MenuNode createRoot() {
+        return new MenuNode(0L, -1L);
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public List<MenuNode> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<MenuNode> children) {
+        this.children = children;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public Integer getIsmenu() {
+        return ismenu;
+    }
+
+    public void setIsmenu(Integer ismenu) {
+        this.ismenu = ismenu;
+    }
+
+    @Override
+    public String toString() {
+        return "MenuNode{" +
+                "id=" + id +
+                ", parentId=" + parentId +
+                ", name='" + name + '\'' +
+                ", levels=" + levels +
+                ", num=" + num +
+                ", url='" + url + '\'' +
+                ", icon='" + icon + '\'' +
+                ", children=" + children +
+                ", linkedList=" + linkedList +
+                '}';
+    }
+
+    /**
+     * 重写排序比较接口,首先根据等级排序,然后更具排序字段排序
+     *
+     * @param o
+     * @return
+     */
+    @Override
+    public int compareTo(Object o) {
+        MenuNode menuNode = (MenuNode) o;
+        Integer num = menuNode.getNum();
+        Integer levels = menuNode.getLevels();
+        if (num == null) {
+            num = 0;
+        }
+        if (levels == null) {
+            levels = 0;
+        }
+        if (this.levels.compareTo(levels) == 0) {
+            return this.num.compareTo(num);
+        } else {
+            return this.levels.compareTo(levels);
+        }
+
+    }
+
+    /**
+     * 构建页面菜单列表
+     */
+    public static List<MenuNode> buildTitle(List<MenuNode> nodes) {
+        if (nodes.size() <= 0) {
+            return nodes;
+        }
+        //剔除非菜单
+        nodes.removeIf(node -> node.getIsmenu() != IsMenu.YES.getCode());
+        //对菜单排序,返回列表按菜单等级,序号的排序方式排列
+        Collections.sort(nodes);
+        return mergeList(nodes, nodes.get(nodes.size() - 1).getLevels(), null);
+    }
+
+    /**
+     * 递归合并数组为子数组,最后返回第一层
+     *
+     * @param menuList
+     * @param listMap
+     * @return
+     */
+    private static List<MenuNode> mergeList(List<MenuNode> menuList, int rank, Map<Long, List<MenuNode>> listMap) {
+        //保存当次调用总共合并了多少元素
+        int n;
+        //保存当次调用总共合并出来的list
+        Map<Long, List<MenuNode>> currentMap = new HashMap<>();
+        //由于按等级从小到大排序,需要从后往前排序
+        //判断该节点是否属于当前循环的等级,不等于则跳出循环
+        for (n = menuList.size() - 1; n >=0&&menuList.get(n).getLevels() == rank; n--) {
+            //判断之前的调用是否有返回以该节点的id为key的map,有则设置为children列表。
+            if (listMap != null && listMap.get(menuList.get(n).getId()) != null) {
+                menuList.get(n).setChildren(listMap.get(menuList.get(n).getId()));
+            }
+            if (menuList.get(n).getParentId()!=null&&menuList.get(n).getParentId()!=0) {
+                //判断当前节点所属的pid是否已经创建了以该pid为key的键值对,没有则创建新的链表
+                currentMap.computeIfAbsent(menuList.get(n).getParentId(), k -> new LinkedList<>());
+                //将该节点插入到对应的list的头部
+                currentMap.get(menuList.get(n).getParentId()).add(0, menuList.get(n));
+            }
+        }
+        if (n <0) {
+            return menuList;
+        } else {
+            return mergeList(menuList.subList(0, n+1), menuList.get(n).getLevels(), currentMap);
+        }
+    }
+
+
+}

--
Gitblit v1.7.1