当前位置:网站首页>查询接口 - 树形菜单查询接口实现
查询接口 - 树形菜单查询接口实现
2022-08-08 15:03:00 【Whitemeen太白】
controller
/** * 返回分类的树形菜单 * * @param categoryName 分类名称(查询条件) * @return 返回分类的树形菜单 */
@ApiOperation(value = "返回分类的树形菜单", notes = "返回分类的树形菜单")
@GetMapping("/tree")
public R<List<Tree<Long>>> getTree(String categoryName) {
return (R.ok(appsCategoryService.selectTree(categoryName)));
}
service
/** * 获取分类的树形菜单 * * @param categoryName 分类名称(查询条件) * @return 分类的树形菜单 */
List<Tree<Long>> selectTree(String categoryName);
serviceImpl
/** * 获取分类的树形菜单 * * @param categoryName 分类名称(查询条件) * @return 分类的树形菜单 */
@Override
public List<Tree<Long>> selectTree(String categoryName) {
// 查询全部分类
List<AppsCategory> appsCategoryAllList = appsCategoryMapper.selectList(Wrappers.<AppsCategory>lambdaQuery()
.like(StringUtils.isNotBlank(categoryName),AppsCategory::getCategoryName, categoryName));
// 设置treeNode并收集到list中
List<TreeNode<Long>> collect = appsCategoryAllList.stream()
.filter(category -> category.getId().intValue() != category.getParentId())
.sorted(Comparator.comparingInt(AppsCategory::getRankWeight))
.map(category -> {
TreeNode<Long> treeNode = new TreeNode<>();
// 设置treeNode的id
treeNode.setId(category.getId());
// 设置treeNode父级id,据此构建树结构
treeNode.setParentId(category.getParentId());
treeNode.setName(category.getCategoryName());
// 设置treeNode排序依据字段
treeNode.setWeight(category.getRankWeight());
// 设置treeNode额外信息
Map<String, Object> extra = new HashMap<>(8);
extra.put("remark", category.getRemark());
extra.put("createTime", category.getCreateTime());
treeNode.setExtra(extra);
// 返回treeNode到stream流中
return treeNode;
// collect容器收集stream流中的treeNode组装成list
}).collect(Collectors.toList());
// 1.当分类名称不为空时(查询条件不为空),进行模糊查询 不组装树结构 直接返回 list方便编辑
if (StrUtil.isNotBlank(categoryName)) {
// 将treeNode直接拷贝放入到tree中,不根据treeNode的层级关系组装成树结构
return collect.stream().map(node -> {
Tree<Long> tree = new Tree<>();
// 将collect容器中的treeNode的额外信息放入tree中(根据treeNode的id放入对应节点)
tree.putAll(node.getExtra());
// 将treeNode节点基本信息拷贝到tree中(根据treeNode的id放入对应节点)
BeanUtils.copyProperties(node, tree);
// 返回tree到stream流中
return tree;
// collect容器收集stream流中的tree组装成list
}).collect(Collectors.toList());
}
// 2.当分类名称为空时(查询条件为空),进行查询所有 组装成树结构 并返回
// 根据parentId=0L作为树的root节点,对collect中的多个子树进行树的构建 并返回
return TreeUtil.build(collect, 0L);
}
边栏推荐
- 小程序轮播图实现由远及近动画
- 瑞吉外卖学习笔记2
- vs2只运行项目中的一个文件
- Chat with wine and chat, build an asynchronous non-blocking (aioredis) real-time (websocket) communication chat system based on Vue3.0+Tornado6.1+Redis publish-subscribe (pubsub) mode
- Power BI简介
- 直播卖货APP——为何能得到商家和用户的喜欢?
- 如何选择ui设计机构
- IBM3650M4的ESXI主机报警“其他主机硬件对象的状态”
- 有了国产 DevOps 工具 ,还怕数字化转型成本高?
- 星起航跨境—跨境电商进入3.0时代,卖家迎来全新机遇
猜你喜欢
随机推荐
俄驻美大使馆:扎波罗热核电站遭炮击威胁欧洲核安全
Notes on synchronized modified classes
万字长文:常见的软件测试面试题(附答案)
leetcode/回文子字符串的个数
领域驱动设计系列贫血模型和充血模型
Fast DDS 共享内存测试例修改栈空间大小的方式-如改为30M
SAP系统为什么要迁移上云?
【Kaggle】Save My Paper 基于自编码器的文本图像去噪
如何使用 Eolink 实现 API 文档自动生成
小程序轮播图实现由远及近动画
腾讯超大 Apache Pulsar 集群的客户端性能调优实践
(1)通过FlinkSQL将数据写入mysql demo
【Kaggle实践记录】电商图片分类
web-sql注入
跟我一起来学弹性云服务器ECS【华为云至简致远】
瑞吉外卖学习笔记2
Redis RDB分析系统
Chat with wine and chat, build an asynchronous non-blocking (aioredis) real-time (websocket) communication chat system based on Vue3.0+Tornado6.1+Redis publish-subscribe (pubsub) mode
Power BI简介
分布式服务治理