JAVA获取部门人员树

2023-11-06

直接上代码,无需多言;主要还是递归;

实体类:

@Data
@ApiModel
@NoArgsConstructor
public class TreeDept implements Serializable {

    //type=0 表示是部门;type=1 表示是人员
    @ApiModelProperty(value = "type=DEPT 表示是部门;type=USER 表示是人员")
    private String type;
    @ApiModelProperty(value = "部门id")
    private Long value;
    @ApiModelProperty(value = "部门名称")
    private String label;//部门名称
    @ApiModelProperty(value = "部门下人员")
    private List<TreeDept> childrenList;

    public TreeDept(String label,Long value,String type){
        this.label = label;
        this.value = value;
        this.type = type;
    }
}

server

 @Override
    public List<TreeDept> deptUserTree() {
//查询部门
        List<SysDept> sysDepts = deptMapper.selectDeptList(new SysDept());
//构建部门树
        List<SysDept> sysDeptTrees = this.buildDeptTree(sysDepts);
        List<SysUser> sysUsers = userService.selectUserList(new SysUser());
        Map<Long, List<SysUser>> deptUserMap = sysUsers.stream().collect(Collectors.groupingBy(SysUser::getDeptId));
        List<TreeDept> treeDeptList = sysDeptTrees.stream().map(e -> {
            TreeDept treeDept = new TreeDept();
            treeDept.setValue(e.getDeptId());
            treeDept.setLabel(e.getDeptName());
            treeDept.setType("DEPT");
            if (ObjectUtil.isNotEmpty(e.getChildren())) {
                treeDept.setChildrenList(getChildUserList(e.getChildren(), deptUserMap));
            }
            return treeDept;
        }).collect(Collectors.toList());
        return treeDeptList;
    }

private List<TreeDept> getChildUserList(List<SysDept> children, Map<Long, List<SysUser>> deptUserMap) {
        List<TreeDept> treeDeptList = children.stream().map(e -> {
            TreeDept treeDept = new TreeDept(e.getDeptName(), e.getDeptId(), "DEPT");
            if (ObjectUtil.isNotEmpty(e.getChildren())) {
                treeDept.setChildrenList(getChildUserList(e.getChildren(), deptUserMap));
            } else {
                List<SysUser> sysUsersByDept = deptUserMap.get(e.getDeptId());
                if (ObjectUtil.isNotEmpty(sysUsersByDept)) {
                    List<TreeDept> userTrees = sysUsersByDept.stream().map(sysUser -> {
                        TreeDept userTree = new TreeDept(sysUser.getNickName(), sysUser.getUserId(), "USER");
                        return userTree;
                    }).collect(Collectors.toList());
                    treeDept.setChildrenList(userTrees);
                }
            }
            return treeDept;
        }).collect(Collectors.toList());
        return treeDeptList;
    }
 @Override
    public List<SysDept> buildDeptTree(List<SysDept> depts) {
        List<SysDept> returnList = new ArrayList<SysDept>();
        List<Long> tempList = new ArrayList<Long>();
        for (SysDept dept : depts) {
            tempList.add(dept.getDeptId());
        }
        for (SysDept dept : depts) {
            // 如果是顶级节点, 遍历该父节点的所有子节点
            if (!tempList.contains(dept.getParentId())) {
                recursionFn(depts, dept);
                returnList.add(dept);
            }
        }
        if (returnList.isEmpty()) {
            returnList = depts;
        }
        return returnList;
    }
 /**
     * 递归列表
     */
    private void recursionFn(List<SysDept> list, SysDept t) {
        // 得到子节点列表
        List<SysDept> childList = getChildList(list, t);
        t.setChildren(childList);
        for (SysDept tChild : childList) {
            if (hasChild(list, tChild)) {
                recursionFn(list, tChild);
            }
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA获取部门人员树 的相关文章

随机推荐

  • Linux平台如何实现采集音视频数据并注入轻量级RTSP服务?

    技术背景 好多开发者 问我们最多的问题是 为什么要设计轻量级RTSP服务 轻量级RTSP服务 和RTSP服务有什么区别 针对这个问题 我们的回答是 轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP服务或者RTMP服务 R
  • C++实现《灵魂探测器》简易版 探测到周围的灵魂

    大家玩过灵魂探测器吗 这是一款趣味性的软件 它的功能就是告诉你周围飘游着哪些 灵魂 它的 雷达 每过一小段时间就会探测到一个灵魂并显示ta的基本信息 今天我们就通过C 来实现这个游戏 的简易版 拥有一个属于自己的灵魂探测器吧 首先我们要知道
  • Pandas知识点-读写Excel最全参数总结(收藏)

    Pandas知识点 读写Excel最全参数总结 收藏 pandas文件读写工具汇总 pandas中的文件读写工具由一组read的函数 执行Input 和一组write的对象方法 执行Output 组成 具体见下表 本文总结最常用的三组读写工
  • FreeBSD简单配置SSH并用root远程登陆方法

    前言 最近下载了FreeBSD 在虚拟机上安装 第一步先要开启SSH服务 用终端putty软件可以实现在windows系统进行远程管理 初级 1 开启sshd服务 vi etc inetd conf ssh stream top nowai
  • windows10环境下安装mysql

    文章目录 前言 下载mysql安装包 添加配置文件 安装mysql 创建mysql服务 修改mysql密码 总结 前言 虽然现在云服务器 虚拟机等盛行 在这些服务器上安装mysql也十分方便 但是大部分时候 我们程序员使用的开发环境可能还是
  • 【报错】/lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘ not found

    一 报错如下 lib x86 64 linux gnu libm so 6 version GLIBC 2 29 not found 二 解决方法 1 cd到指定路径 cd usr local 2 下载wget http ftp gnu o
  • 计算机中程序一定要调入主存储器中才能运行,计算机1-3章

    1 课程名称 大学计算机基础 2 适用专业 非计算机类各专业 3 选用教材 大学计算机基础 陈本辉 杨锦伟 主编 北京师范大学出版社 2014年9月第1版 一 判断题 1 计算机常用的输入设备为键盘 鼠标 常用的输出设备有显示器 打印机 2
  • SpringBoot整合Nacos自动刷新配置

    目的 Nacos作为SpringBoot服务的注册中心和配置中心 在NacosServer中修改配置文件 在SpringBoot不重启的情况下 获取到修改的内容 本例将在配置文件中配置一个 cml age 100 的配置项 程序中编写一个方
  • Kali系统目录结构介绍2021

    Kali系统目录结构介绍 登陆kali后 打开终端 输入以下命令 ls all 你会看到如下图所示的结构 树状结构 以下是对这些目录的解释 bin bin是Binary的缩写 这个目录存放着最经常使用的命令 boot 这里存放的是启动Lin
  • Leetcode239.滑动窗口最大值——双端队列

    文章目录 引入 本题解法 引入 本题 看起来十分的简单 给定一个数组 nums 有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧 你只可以看到在滑动窗口内的 k 个数字 滑动窗口每次只向右移动一位 返回滑动窗口中的最大值 示例
  • 计网习题——第三章

    R1 假定网络层提供了下列服务 在源主机中的网络层接受最大长度1200字节和来自运输层的目的主机地址的报文段 网络层则保证将该报文段交付给位于目的主机的运输层 假定在目的主机上能够运行许多网络应用进程 a 设计可能最简单的运输层协议 该协议
  • 开源物联网平台ThingsBoard的安装

    ThingsBoard是一个开源平台 功能强大 性能稳定 用于收集和可视化物联网设备的数据 可以将来自任意数量设备的数据发送到云服务器 在云服务器中可以通过可自定义的仪表板查看或共享 ThingsBoard相关概念 租户tenant 拥有或
  • SQLi-Labs 学习笔记(Less 51-65)

    点击打开链接 Less 51 本关的Sql语句为 plain view plain copy sql SELECT FROM users ORDER BY id 因为此处用的是执行多个针对数据库的查询函数 mysqli multi quer
  • Linux——(第四章)关机、重启和用户登录注销

    目录 1 关机 重启命令 2 用户的登录和注销 1 关机 重启命令 一般情况很少遇到服务器关机操作 基本语法 sync 将数据由内存同步到硬盘中 该命令在重启和关机前执行 halt 立刻关机 关闭系统 但不断电 poweroff 关机 断电
  • Windows的AppData 文件夹

    文章目录 前言 AppData 文件夹是什么 如何查看 AppData 文件夹 AppData 文件夹的应用 有些软件为什么安装到AppData而不是Program Files AppData文件可以删除吗 可以删除的文件 其他常识文件 前
  • 知乎广告效果怎么样?有哪些优势呢?

    随着移动互联网的不断发展 在当下流量越来越贵的背景下 知乎平台以其独特的优势 特别失在内容营销方面独树一帜 相比较其它平台有着明显的优势 主要体现在 1 转化率高 因为知乎作为国内领先的互动问答平台 很多用户是因为有问题 上知乎找解决方案的
  • web 前后台数据交互的方式

    做web开发 很重要的一个环节就是前后台的数据的交互 数据从页面提交到contoller层 数据从controler层传送到jsp页面来显示 这2个过程中数据具体是如何来传送的 是本节讲解的内容 首先说一下数据如何从后台的contorlle
  • ubuntu22.04.1设置root登陆

    一 设置root密码 sudo passwd root 输入自己的超级用户密码 设置root账户密码 二 设置系统登陆界面 1 su root 2 gedit etc pam d gdm autologin 在弹出窗口中找到 auth re
  • numpy.argsort()函数参数以及案例问题

    参考博客网址是 numpy argsort函数 summer2day的博客 CSDN博客 argsort函数numpy argsort a axis 1 kind quicksort order None 返回的是数组值从小到大的索引值 参
  • JAVA获取部门人员树

    直接上代码 无需多言 主要还是递归 实体类 Data ApiModel NoArgsConstructor public class TreeDept implements Serializable type 0 表示是部门 type 1