一、需求效果:

表单的部门下拉选择时,可以展示部门的层级:

按照这个效果展示,但是不是树,还是原来的集合

二、实现方案:

用Java代码实现两个部分

1、展示Label效果处理

2、处理集合的树状排序

第一个问题用一个方法加额外字段解决

/**
* @author onCloud9
* @date 2023/7/6 10:39
* @description 层级前缀修饰方法
* @params [level]
*/
public void levelPrefixDecoration(int level) {
StringBuilder prefix = new StringBuilder();
boolean isTopOrNot = 0 == level;
if (!isTopOrNot) {
for (int i = 0; i < level; i++) prefix.append("--- ");
prefix.append(" ");
}
deLabel = prefix + sysArDeCode + " | " + deName;
}

第二个问题,使用递归实现:

4个参数,排序好的集合,当前层的集合,完整数据源集合,当前层级值

/**
* @author onCloud9
* @date 2023/7/6 09:58
* @description 部门集合树状排序递归
* @params [sortedList, levels, source]
*/
private void deptListSortRecursive(List<SysArDecoDTO> sortedList, List<SysArDecoDTO> levels, List<SysArDecoDTO> source, int levelNo) {
if (CollectionUtils.isEmpty(levels)) return;
for (SysArDecoDTO level : levels) {
level.levelPrefixDecoration(levelNo);
sortedList.add(level);
List<SysArDecoDTO> collect = source.stream().filter(x -> x.getDeParentId().equals(level.getSysArDeId())).collect(Collectors.toList());
deptListSortRecursive(sortedList, collect, source, levelNo + 1);
}
}

递归的开始,需要传递根节点集合,根节点层级值为0

@Override
public List<SysArDecoDTO> getAllocatedDepartmentList(SysArDecoDTO dto) {
List<SysArDecoDTO> deptList = baseMapper.getAllocatedDepartmentList(
Wrappers.<SysArDecoDTO>query()
.eq("dc.sys_ar_co_id", dto.getSysArCoId())
.eq(StringUtils.isNotBlank(dto.getSealupState()), "dt.sealup_state", dto.getSealupState()));
List<SysArDecoDTO> roots = deptList.stream().filter(x -> x.getDeParentId().equals(0)).collect(Collectors.toList());
List<SysArDecoDTO> list = new ArrayList<>();
deptListSortRecursive(list, roots, deptList, 0);
return list;
}

Dao的SQL语句:

/**
* 获取该公司分配的部门
* @param queryStr
* @return List<SysArDecoDTO>
* @author onCloud9
* @date 2022/10/12 15:48
*
*/
@Select(
"SELECT " +
" dt.de_name AS `deName`, " +
" dt.de_code AS `sysArDeCode`, " +
" dt.de_parent_id AS `deParentId`, " +
" dc.* " +
"FROM sys_ar_deco dc " +
"JOIN sys_ar_department dt ON dc.sys_ar_de_id = dt.id " +
"${ew.customSqlSegment} ORDER BY dt.de_code ASC"
)
List<SysArDecoDTO> getAllocatedDepartmentList(@Param(Constants.WRAPPER) QueryWrapper<SysArDecoDTO> queryStr);

  

【Java】部门集合树状顺序展示的更多相关文章

  1. java集合树状结构及源码

    java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...

  2. B2568 比特集合 树状数组

    啊啊啊,跳题坑死人.抽了一道国集的题,自己瞎编了一个算法,好像过不了而半途而废.转去看题解,发现用二维树状数组维护一下,偏移量我倒是想对了,但是维护的东西和我的完全不一样.还是有很大差距啊... 题解 ...

  3. 树状图展示终端目录内容-tree

    以树状图列出目录的内容,让你一目了然 执行 tree 指令,它会列出指定目录下的所有文件,包括子目录里的文件. 安装 我们通过包管理工具可以方便的安装它 mac - brew install tree ...

  4. JAVA总结--集合

    1.集合树状图 Collection:最基本的集合接口 ----List:有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问 ----ArrayList:异步 ----Linke ...

  5. 树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

    树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...

  6. 将lits集合转化为树状结构

    一,bean的类型: public class DeptListRES { /** * 子节点 */ private List<DeptListRES> children; private ...

  7. UVALive 6911---Double Swords(贪心+树状数组(或集合))

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  8. Ztree行政地区树状展示

    Ztree行政地区树状展示(点击加载) 效果如下: 开始贴代码: 实体类 Item,用于对Ztree的节点展示 public class Item { private String id; priva ...

  9. 基于ExtJs6前台,SpringMVC-Spring-Mybatis,resteasy,mysql无限极表设计,实现树状展示数据(treepanel)

    先从后台讲起 1.表的设计 parent_id就是另外一条记录的id,无限极表设计可以参考  http://m.blog.csdn.net/Rookie_Or_Veteran/article/deta ...

  10. MVC身份验证.MVC过滤器.MVC6关键字Task,Async.前端模拟表单验证,提交.自定义匿名集合.Edge导出到Excel.BootstrapTree树状菜单的全选和反选.bootstrap可搜索可多选可全选下拉框

    1.MVC身份验证. 有两种方式.一个是传统的所有控制器继承自定义Control,然后再里面用MVC的过滤器拦截.所以每次网站的后台被访问时.就会先走入拦截器.进行前端和后端的验证 一个是利用(MVC ...

随机推荐

  1. 【论文笔记】ResNet深度残差网络

    [深度学习]总目录 深度残差网络(ResNet)由微软研究院的何恺明.张祥雨.任少卿.孙剑提出.研究动机是为了解决深度网络的退化问题,不同于过去的网络是通过学习去拟合一个分布,ResNet通过学习去拟 ...

  2. pandas rank()函数简介

    本文简单的说一下自己对pandas的rank()函数的简单讲解. 函数原型:rank(axis=0, method: str = 'average', numeric_only: Union[bool ...

  3. C#.NET FRAMEWORK ASP.NET MVC 获取客户端IP

    C#.NET FRAMEWORK ASP.NET MVC 获取客户端IP 工具类: using System; namespace CommonUtils { public static class ...

  4. centos 7 mysql8 安装和卸载

    cent os 7 安装 mysql 8--install-start官网下载MySQL的RPM源,地址:https://dev.mysql.com/downloads/repo/yum/ 下载这个项 ...

  5. uni-app apple store 上传新版本审核被拒绝 Guideline 5.1.1

    - Legal - Privacy - Data Collection and Storage We noticed that your app requests the user's consent ...

  6. 小米便签AS部署之Git的基本使用

    1 项目测试截图 及仓库地址 https://gitee.com/magicfatblink/Notes-master 2 小米便签代码的移植 2.1 IDE 的准备 2.1.1 AS版本选择 由于小 ...

  7. 【iOS】bugly进阶系列

    初学者使用bugly仅仅是用于接受崩溃日志,但是其实bugly除了接受崩溃之外还可以做许多事情.这里我把bugly分成三大模块逐一进行探讨. (其实bugly顶部的三个标题就预示着bugly的功能本来 ...

  8. Linux安全审计之audit安装与使用

    场景 安全最重要的一步是内部安全,如何监控用户的行为是一个永恒不变的话题. audit可以详细监控用户的行为,详细到查看或修改了某个文件.这些都可以在日志中查看到. 安装 小贴士: CentOS默认已 ...

  9. invalid comparison: java.util.Date and java.lang.String异常的原因

    mybatis查询时使用date类型与""比较导致的 例 <if test="params.applicationEndTime != null and param ...

  10. Windows下Qt5程序打包发布

    Windows下Qt5程序打包发布与图标设置 原文(有删改):https://blog.csdn.net/qq_39105333/article/details/114779650 设置程序图标 默认 ...