From fffffbf5f498e2aff538fca3b4c2393d8716bdbd Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 01 九月 2026 17:59:24 +0800
Subject: [PATCH] 【丽水】人工无-3已领取状态(service_subtask_preachform.sendstate = 3)
---
ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java | 88 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 88 insertions(+), 0 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java
new file mode 100644
index 0000000..873610d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java
@@ -0,0 +1,88 @@
+package com.ruoyi.common.utils;
+
+import com.ruoyi.common.core.domain.entity.SysDept;
+
+import java.util.*;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 鏍戠粨鏋勫伐鍏风被锛氭牴鎹� parentId 鏋勯�犳爲銆佷竴娆℃�ц幏鍙栨墍鏈夊彾瀛愯妭鐐广��
+ * 鏍稿績鏂规硶涓烘硾鍨嬪疄鐜帮紝id / parentId / children 閫氳繃鍑芥暟娉ㄥ叆锛屽彲澶嶇敤浜庝换浣曡妭鐐圭被鍨嬨��
+ */
+public class TreeUtils {
+
+ private TreeUtils() {
+ }
+
+ /* ================== 閫氱敤鏂规硶 ================== */
+
+ /**
+ * 鏍规嵁 parentId 鏋勯�犳爲锛孫(n) 涓�娆¢亶鍘嗐��
+ * 鏍硅妭鐐逛负銆岀埗Id涓嶅湪闆嗗悎涓�嶇殑鑺傜偣锛涜嫢涓嶅瓨鍦ㄦ牴鑺傜偣锛堝鍏ㄦ槸鑷紩鐢ㄧ殑鐜級鍒欏師鏍疯繑鍥炪��
+ *
+ * @param nodes 鑺傜偣鍒楄〃
+ * @param idGetter 鍙栬妭鐐筰d
+ * @param parentIdGetter 鍙栫埗鑺傜偣id
+ * @param childrenSetter 璁剧疆瀛愯妭鐐瑰垪琛�
+ */
+ public static <T, K> List<T> buildTree(
+ List<T> nodes,
+ Function<T, K> idGetter,
+ Function<T, K> parentIdGetter,
+ BiConsumer<T, List<T>> childrenSetter) {
+ if (nodes == null || nodes.isEmpty()) {
+ return new ArrayList<>();
+ }
+ // 鎸夌埗Id鍒嗙粍锛屼竴娆¢亶鍘嗘嬁鍒版瘡涓妭鐐圭殑瀛愬垪琛�
+ Map<K, List<T>> byParent = nodes.stream().collect(Collectors.groupingBy(parentIdGetter));
+ for (T node : nodes) {
+ childrenSetter.accept(node, byParent.getOrDefault(idGetter.apply(node), new ArrayList<>()));
+ }
+ Set<K> ids = nodes.stream().map(idGetter).filter(Objects::nonNull).collect(Collectors.toSet());
+ List<T> roots = nodes.stream()
+ .filter(n -> !ids.contains(parentIdGetter.apply(n)))
+ .collect(Collectors.toList());
+ return roots.isEmpty() ? nodes : roots;
+ }
+
+ /**
+ * 涓�娆℃�ц幏鍙栨墍鏈夊彾瀛愯妭鐐癸細鍗炽�宨d 涓嶅嚭鐜板湪浠讳綍鑺傜偣鐨� parentId 涓�嶇殑鑺傜偣锛孫(n) 涓�娆¢亶鍘嗐��
+ *
+ * @param nodes 鑺傜偣鍒楄〃
+ * @param idGetter 鍙栬妭鐐筰d
+ * @param parentIdGetter 鍙栫埗鑺傜偣id
+ */
+ public static <T, K> List<T> getLeafNodes(
+ List<T> nodes,
+ Function<T, K> idGetter,
+ Function<T, K> parentIdGetter) {
+ if (nodes == null || nodes.isEmpty()) {
+ return new ArrayList<>();
+ }
+ Set<K> parentIds = nodes.stream()
+ .map(parentIdGetter)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ return nodes.stream()
+ .filter(n -> !parentIds.contains(idGetter.apply(n)))
+ .collect(Collectors.toList());
+ }
+
+ /* ================== SysDept 渚挎嵎鏂规硶 ================== */
+
+ /**
+ * 鏍规嵁 SysDept.parentId 鏋勯�犻儴闂ㄦ爲
+ */
+ public static List<SysDept> buildDeptTree(List<SysDept> depts) {
+ return buildTree(depts, SysDept::getDeptId, SysDept::getParentId, SysDept::setChildren);
+ }
+
+ /**
+ * 涓�娆℃�ц幏鍙栨墍鏈夐儴闂ㄥ彾瀛愯妭鐐�
+ */
+ public static List<SysDept> getLeafDepts(List<SysDept> depts) {
+ return getLeafNodes(depts, SysDept::getHisDeptId, SysDept::getHisParentId);
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3