小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
0 前言
因关于组织树在项目中常见,且功能基本一致,故整理一下之前遇到的相关实现,持续更新相关实现啊.
1 组织树形结构 (递归实现)
1 部门组织类
1 | java复制代码@Data |
2 组织树形类
1 | java复制代码@Data |
3 树形工具类
1 | java复制代码@Slf4j |
4 使用说明
首先,将所有部门信息查询出来,转换为OrgTreeNode对象, 再调用OrgTreeMenuUtil工具类的findTree方法,并传入OrgTreeNode对象和组织根节点. 工具类会使用递归,将组织结构封装.
另关于org_path和org_level的编辑时,对于子部门的修改问题, 对于org_path修改:(==分隔符建议使用,尽量少用/==, 如: 阿里巴巴,采购部,手机业务部)
1 先使用原路径+上一级路径, 去进行模糊查询,把所有子部门查询出来.
2 使用字符串的切割,将路径前一半去掉,拼上最新的前缀.
3 更新所有子部门的org_path字段.
对于org_level修改:(如: 阿里巴巴,采购部,手机业务部 就是第三等级部门)
1 本字段依赖于org_path字段,看org_path字段中的分隔符能拆分为几部分,即为那个等级.
2 组织树形结构 (非递归实现)
1 部门组织类
1 | java复制代码@Data |
2 树形工具类
1 | java复制代码@Slf4j |
用空间换时间的做法,不用循环递归去封装,直接通过两次遍历,完成组织树的封装.
3 部门和人员的树形结构
1 组织用户对象
1 | java复制代码@Data |
2 用户对象
1 | java复制代码@Data |
3 部门集合与用户集合合并代码
1 | java复制代码 private List<OrgDropdownListRes> convertOrg(List<Org> orgList, List<Person> personList) { |
查询所有部门 和 所有人员(根据部门id 和 企业id),通过Stream流将人员集合变成map结构,遍历部门,set用户数据.
本文转载自: 掘金