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