src/main/java/com/mindskip/xzs/domain/Department.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/utility/TreeUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mindskip/xzs/vo/TreeNode.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/UserMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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; 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 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 src/main/java/com/mindskip/xzs/utility/TreeUtils.java
New file @@ -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转map 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; } } src/main/java/com/mindskip/xzs/vo/TreeNode.java
New file @@ -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; } } 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>