From 86603282c0cc5f005b740112311d89e99b8fc570 Mon Sep 17 00:00:00 2001
From: 龚焕茏 <2842157468@qq.com>
Date: 星期一, 08 七月 2024 17:39:10 +0800
Subject: [PATCH] feat:部门树形结构
---
src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java | 4 +
src/main/java/com/mindskip/xzs/utility/TreeUtils.java | 75 +++++++++++++++++++++++++
src/main/java/com/mindskip/xzs/domain/Department.java | 4
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java | 3
src/main/java/com/mindskip/xzs/vo/TreeNode.java | 54 ++++++++++++++++++
src/main/resources/mapper/UserMapper.xml | 4
6 files changed, 138 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/mindskip/xzs/domain/Department.java b/src/main/java/com/mindskip/xzs/domain/Department.java
index 017ae39..73e060f 100644
--- a/src/main/java/com/mindskip/xzs/domain/Department.java
+++ b/src/main/java/com/mindskip/xzs/domain/Department.java
@@ -1,13 +1,13 @@
package com.mindskip.xzs.domain;
+import com.mindskip.xzs.vo.TreeNode;
import lombok.Data;
-import javax.sql.rowset.serial.SerialArray;
import java.io.Serializable;
import java.util.List;
@Data
-public class Department implements Serializable {
+public class Department extends TreeNode implements Serializable {
private Integer id;
diff --git a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
index 0ad215c..6f296cb 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -11,6 +11,7 @@
import com.mindskip.xzs.repository.UserMapper;
import com.mindskip.xzs.service.DepartmentService;
import com.mindskip.xzs.utility.ModelMapperSingle;
+import com.mindskip.xzs.utility.TreeUtils;
import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;
@@ -109,7 +110,7 @@
@Override
public List<Department> gets(List<Integer> deptId) {
- return departmentMapper.gets(deptId);
+ return TreeUtils.build(departmentMapper.gets(deptId));
}
@Override
diff --git a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
index 92a8b58..13d3696 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
@@ -10,6 +10,7 @@
import com.mindskip.xzs.exception.BusinessException;
import com.mindskip.xzs.repository.UserMapper;
import com.mindskip.xzs.service.UserService;
+import com.mindskip.xzs.utility.TreeUtils;
import com.mindskip.xzs.viewmodel.admin.user.UserPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.user.UserResponseVM;
import org.springframework.beans.factory.annotation.Autowired;
@@ -192,7 +193,8 @@
@Override
public List<Department> getDeptAdmins(Integer id) {
- return userMapper.getDeptAdmins(id);
+ List<Department> list = userMapper.getDeptAdmins(id);
+ return TreeUtils.build(list);
}
@Override
diff --git a/src/main/java/com/mindskip/xzs/utility/TreeUtils.java b/src/main/java/com/mindskip/xzs/utility/TreeUtils.java
new file mode 100644
index 0000000..e508f51
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/utility/TreeUtils.java
@@ -0,0 +1,75 @@
+package com.mindskip.xzs.utility;
+
+
+import com.mindskip.xzs.vo.TreeNode;
+import org.apache.commons.lang3.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏍戝舰缁撴瀯宸ュ叿绫伙紝濡傦細鑿滃崟銆侀儴闂ㄧ瓑
+ *
+ * @author gonghl
+ */
+public class TreeUtils {
+
+ /**
+ * 鏍规嵁pid锛屾瀯寤烘爲鑺傜偣
+ */
+ public static <T extends TreeNode> List<T> build(List<T> treeNodes, Integer pid) {
+ //pid涓嶈兘涓虹┖
+ if (ObjectUtils.isEmpty(pid)) {
+ return null;
+ }
+
+ List<T> treeList = new ArrayList<>();
+ for (T treeNode : treeNodes) {
+ if (pid.equals(treeNode.getParentId())) {
+ treeList.add(findChildren(treeNodes, treeNode));
+ }
+ }
+
+ return treeList;
+ }
+
+ /**
+ * 鏌ユ壘瀛愯妭鐐�
+ */
+ private static <T extends TreeNode> T findChildren(List<T> treeNodes, T rootNode) {
+ for (T treeNode : treeNodes) {
+ if (rootNode.getId().equals(treeNode.getParentId())) {
+ rootNode.getChildren().add(findChildren(treeNodes, treeNode));
+ }
+ }
+ return rootNode;
+ }
+
+ /**
+ * 鏋勫缓鏍戣妭鐐�
+ */
+ public static <T extends TreeNode> List<T> build(List<T> treeNodes) {
+ List<T> result = new ArrayList<>();
+
+ //list杞琺ap
+ Map<Integer, T> nodeMap = new LinkedHashMap<>(treeNodes.size());
+ for (T treeNode : treeNodes) {
+ nodeMap.put(treeNode.getId(), treeNode);
+ }
+
+ for (T node : nodeMap.values()) {
+ T parent = nodeMap.get(node.getParentId());
+ if (parent != null && !(node.getId().equals(parent.getId()))) {
+ parent.getChildren().add(node);
+ continue;
+ }
+
+ result.add(node);
+ }
+
+ return result;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/vo/TreeNode.java b/src/main/java/com/mindskip/xzs/vo/TreeNode.java
new file mode 100644
index 0000000..069b16f
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/vo/TreeNode.java
@@ -0,0 +1,54 @@
+package com.mindskip.xzs.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏍戣妭鐐癸紝鎵�鏈夐渶瑕佸疄鐜版爲鑺傜偣鐨勶紝閮介渶瑕佺户鎵胯绫�
+ *
+ * @author gonghl
+ */
+public class TreeNode<T> implements Serializable {
+ private static final Long serialVersionUID = 1L;
+ /**
+ * 涓婚敭
+ */
+ private Integer id;
+ /**
+ * 涓婄骇ID
+ */
+
+ private Integer parentId;
+ /**
+ * 瀛愯妭鐐瑰垪琛�
+ */
+ @TableField(exist = false)
+ private List<T> children = new ArrayList<>();
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Integer getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(Integer pid) {
+ this.parentId = pid;
+ }
+
+ public List<T> getChildren() {
+ return children;
+ }
+
+ public void setChildren(List<T> children) {
+ this.children = children;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index c6f89ad..4d49779 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -543,10 +543,10 @@
<select id="getDeptAdmins" resultType="com.mindskip.xzs.domain.Department" parameterType="java.lang.Integer">
<if test="id != null">
- select a.id, a.name from t_department a inner join t_user_department b on a.id = b.department_id where a.deleted = 0 and b.dept_admin = 1 and b.user_id = #{id} order by a.id desc
+ select a.id, a.name, a.parent_id from t_department a inner join t_user_department b on a.id = b.department_id where a.deleted = 0 and b.dept_admin = 1 and b.user_id = #{id} order by a.id
</if>
<if test="id == null">
- select a.id, a.name from t_department a where a.deleted = 0 order by a.id desc
+ select a.id, a.name, a.parent_id from t_department a where a.deleted = 0 order by a.id
</if>
</select>
--
Gitblit v1.8.0