From 0c27432b33d4fdbf7a7fdccb678a5679efe65d84 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Tue, 06 Jun 2023 09:21:55 +0800
Subject: [PATCH] fix

---
 src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java |   32 ++++++++++++++++++++++++++++----
 1 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
index 7d7d263..ebcf9ff 100644
--- a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
+++ b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
@@ -40,7 +40,20 @@
             return null;
         }
 
-        MemberNode parentNode = findNotWholeNode();
+        MemberNode childTreeRoot = getNode(node.getRefererId());
+
+        MemberNode parentNode = findNotWholeNode(childTreeRoot == null ? root : childTreeRoot);
+        parentNode.addNode(node);
+        return parentNode;
+    }
+
+    public MemberNode addNode(MemberNode node, Long parentNodeId) {
+        if (parentNodeId == null) {
+            root = node;
+            return null;
+        }
+
+        MemberNode parentNode = getNode(parentNodeId);
         parentNode.addNode(node);
         return parentNode;
     }
@@ -49,7 +62,7 @@
      * 层级遍历,查到子节点未满3个的节点
      * @return
      */
-    public MemberNode findNotWholeNode() {
+    public MemberNode findNotWholeNode(MemberNode root) {
         ArrayDeque<MemberNode> deque = new ArrayDeque<>();
         deque.add(root);
 
@@ -77,6 +90,10 @@
         return result;
     }
 
+    public MemberNode findNotWholeNode() {
+        return findNotWholeNode(root);
+    }
+
     /**
      * 查找整个树下对应节点
      * @param param memberId/address/inviteId
@@ -85,6 +102,10 @@
     public MemberNode getNode(Object param) {
         if (root == null) {
             return null;
+        }
+
+        if (root.getMemberId().equals(param) || root.getPhone().equals(param) || root.getInviteId().equals(param)) {
+            return root;
         }
 
         return getNode(root.CHILD, param);
@@ -103,11 +124,14 @@
         }
 
         for (MemberNode node : nodeList) {
-            if (node.getMemberId().equals(param) || node.getAddress().equals(param) || node.getInviteId().equals(param)) {
+            if (node.getMemberId().equals(param) || node.getPhone().equals(param) || node.getInviteId().equals(param)) {
                 return node;
             }
 
-            return getNode(node.CHILD, param);
+            MemberNode childNode = getNode(node.CHILD, param);
+            if (childNode != null) {
+                return childNode;
+            }
         }
 
         return null;

--
Gitblit v1.9.1