From 4262e7819cb911f8109b4df82b8f80dfab1e72fe Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 15 十月 2026 17:10:16 +0800
Subject: [PATCH] 【丽水】取叶子节点方法跳转

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java |    6 ++----
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java |    3 +--
 ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java                 |   32 ++++++++++++++++++++++++++++++--
 3 files changed, 33 insertions(+), 8 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
index 873610d..aac16ca 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeUtils.java
@@ -76,13 +76,41 @@
      * 鏍规嵁 SysDept.parentId 鏋勯�犻儴闂ㄦ爲
      */
     public static List<SysDept> buildDeptTree(List<SysDept> depts) {
+        // 鎸� deptId 鍘婚噸锛岄槻姝� sys_user_dept 涓�瀵瑰鍏宠仈浜х敓閲嶅鐨勭埗鑺傜偣锛屽鑷存瀯寤洪儴闂ㄦ爲鏃跺嚭鐜伴棶棰�
+        depts = distinctByDeptId(depts);
         return buildTree(depts, SysDept::getDeptId, SysDept::getParentId, SysDept::setChildren);
     }
 
     /**
-     * 涓�娆℃�ц幏鍙栨墍鏈夐儴闂ㄥ彾瀛愯妭鐐�
+     * 浠庢墎骞抽儴闂ㄥ垪琛ㄤ竴娆℃�ц幏鍙栨墍鏈夊彾瀛愰儴闂細鍗炽�宒eptId 涓嶅嚭鐜板湪浠讳綍鑺傜偣鐨� parentId 涓�嶇殑鑺傜偣銆�
+     * 鍏ュ弬搴斾负鎵佸钩鍒楄〃锛堜笉鏄� buildDeptTree 鐨勮繑鍥炲�硷級锛屾棤闇�鍏堝缓鏍戙��
+     * 浼氬厛鎸� deptId 鍘婚噸锛岄伩鍏� join 浜х敓鐨勯噸澶嶉儴闂ㄥ彉鎴愰噸澶嶅彾瀛愩��
      */
     public static List<SysDept> getLeafDepts(List<SysDept> depts) {
-        return getLeafNodes(depts, SysDept::getHisDeptId, SysDept::getHisParentId);
+        return getLeafNodes(distinctByDeptId(depts), SysDept::getDeptId, SysDept::getParentId);
+    }
+
+    /**
+     * 鎸� deptId 瀵归儴闂ㄥ垪琛ㄥ幓閲嶏紝淇濈暀棣栨鍑虹幇鐨勮妭鐐广��
+     * 鏌ヨ缁撴灉閫氳繃 dept_code 鍏宠仈 sys_user_dept锛屽悓涓�閮ㄩ棬鍙兘鍑虹幇澶氭潯璁板綍锛堥噸澶嶇殑鐖惰妭鐐癸級锛�
+     * 鏋勫缓閮ㄩ棬鏍戝墠闇�鍘婚噸锛岄伩鍏嶉噸澶嶈妭鐐瑰鑷存爲缁撴瀯寮傚父銆�
+     *
+     * @param list 閮ㄩ棬鍒楄〃锛屽厑璁镐负 null
+     * @return 鍘婚噸鍚庣殑閮ㄩ棬鍒楄〃锛涘叆鍙備负 null 鎴栫┖鏃跺師鏍疯繑鍥�
+     */
+    private static List<SysDept> distinctByDeptId(List<SysDept> list) {
+        if (list == null || list.isEmpty()) {
+            return list;
+        }
+        Set<Long> deptIdSet = new HashSet<>();
+        List<SysDept> distinctList = new ArrayList<>(list.size());
+        for (SysDept dept : list) {
+            Long deptId = dept.getDeptId();
+            // deptId 涓虹┖鏃朵繚鐣欙紝閬垮厤璇悎骞朵笉鍚岄儴闂�
+            if (deptId == null || deptIdSet.add(deptId)) {
+                distinctList.add(dept);
+            }
+        }
+        return distinctList;
     }
 }
\ No newline at end of file
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index 6db8841..213b376 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -335,8 +335,7 @@
     public List<SysDept> selectLeafSysDeptListBySysUserDept(SysUserDept sysUserDept){
         List<SysDept> list =  deptMapper.selectSysDeptListBySysUserDept(sysUserDept);
         if(CollectionUtils.isNotEmpty(list)){
-            List<SysDept> tree = TreeUtils.buildDeptTree(list);
-            list = TreeUtils.getLeafDepts(tree);
+            list = TreeUtils.getLeafDepts(list);
         }
         return list;
     }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index 694c7bd..be0b93a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -982,8 +982,7 @@
     public List<SysUserDept> selectLeafSysDeptList(SysUserDept sysUserDept){
         List<SysDept> list =  sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
         if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
-            List<SysDept> tree = TreeUtils.buildDeptTree(list);
-            list = TreeUtils.getLeafDepts(tree);
+            list = TreeUtils.getLeafDepts(list);
         }
         List<SysUserDept> list1 = DtoConversionUtils.sourceToTarget(list, SysUserDept.class);
         return list1;
@@ -993,8 +992,7 @@
         SysUserDept sysUserDept = DtoConversionUtils.sourceToTarget(sysDept, SysUserDept.class);
         List<SysDept> list =  sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
         if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
-            List<SysDept> tree = TreeUtils.buildDeptTree(list);
-            list = TreeUtils.getLeafDepts(tree);
+            list = TreeUtils.getLeafDepts(list);
         }
         return list;
     }

--
Gitblit v1.9.3