一 数据库表结构

DROP TABLE IF EXISTS `pms_category`;CREATE TABLE `pms_category` (`cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类id',`name` char(50) DEFAULT NULL COMMENT '分类名称',`parent_cid` bigint(20) DEFAULT NULL COMMENT '父分类id',`cat_level` int(11) DEFAULT NULL COMMENT '层级',`show_status` tinyint(4) DEFAULT NULL COMMENT '是否显示[0-不显示,1显示],用于逻辑删除',`sort` int(11) DEFAULT NULL COMMENT '排序',`icon` char(255) DEFAULT NULL COMMENT '图标地址',`product_unit` char(50) DEFAULT NULL COMMENT '计量单位',`product_count` int(11) DEFAULT NULL COMMENT '商品数量',PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1433 DEFAULT CHARSET=utf8mb4 COMMENT='商品三级分类';

二 控制器实现

/**
* @className: CategoryController
* @description: 商品三级分类
* @date: 2020/10/25
* @author: cakin
*/
@RestController
@RequestMapping("product/category")
public class CategoryController {@Autowiredprivate CategoryService categoryService;/*** 功能描述:查出所有分类以及子分类,以树形结构组装起来** @author cakin* @date 2020/10/25* @return R 返回给前端数据* @description:*/@RequestMapping("/list/tree")public R list() {List<CategoryEntity> entities = categoryService.listWithTree();return R.ok().put("data", entities);}
}

三 服务实现

/**
* 功能描述:查出所有分类以及子分类,以树形结构组装起来
*
* @author cakin
* @date 2020/10/25
* @return List<CategoryEntity>:树形结构列表返回父子结构
* @description:
*/
@Override
public List<CategoryEntity> listWithTree() {// 1 查出所有分类List<CategoryEntity> entities = baseMapper.selectList(null);// 2 组装成父子的树形结构// 2.1 找到所有的一级分类List<CategoryEntity> level1Menus = entities.stream().filter(categoryEntity -> categoryEntity.getParentCid() == 0) // 过滤一级分类.map((menu) -> {menu.setChildren(getChildrens(menu, entities));return menu;}) // 设置一级二类的孩子.sorted((menu1, menu2) -> {return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());}) // 给一级分类排序.collect(Collectors.toList());// 2.2 返回一级分类列表return level1Menus;
}/**
* 功能描述:递归查找某个菜单的子菜单
*
* @param root 当前菜单
* @param all  所有分类
* @return List<CategoryEntity> 当前菜单的子菜单列表
* @author cakin
* @date 2020/10/23
*/
private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all) {// 当前菜单的子菜单列表List<CategoryEntity> children = all.stream().filter(categoryEntity -> {return categoryEntity.getParentCid() == root.getCatId();}) // 找出了二级菜单.map(categoryEntity -> {// 1 找到子菜单categoryEntity.setChildren(getChildrens(categoryEntity, all));return categoryEntity;}) // 为二级菜单找到它的三级子菜单列表.sorted((menu1, menu2) -> {// 2 菜单的排序return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());}) // 二级菜单排序.collect(Collectors.toList());return children;
}

四 测试

1 请求  http://127.0.0.1:10000/product/category/list/tree

2 以树形结构返回

{"msg": "success","code": 0,"data": [{"catId": 1,"name": "图书、音像、电子书刊","parentCid": 0,"catLevel": 1,"showStatus": 1,"sort": 0,"icon": null,"productUnit": null,"productCount": 0,"children": [{"catId": 22,"name": "电子书刊","parentCid": 1,"catLevel": 2,"showStatus": 1,"sort": 0,"icon": null,"productUnit": null,"productCount": 0,"children": [{"catId": 165,"name": "电子书","parentCid": 22,"catLevel": 3,"showStatus": 1,"sort": 0,"icon": null,"productUnit": null,"productCount": 0},{"catId": 166,"name": "网络原创","parentCid": 22,"catLevel": 3,"showStatus": 1,"sort": 0,"icon": null,"productUnit": null,"productCount": 0},{"catId": 167,"name": "数字杂志","parentCid": 22,"catLevel": 3,"showStatus": 1,"sort": 0,"icon": null,"productUnit": null,"productCount": 0},{"catId": 168,"name": "多媒体图书","parentCid": 22,"catLevel": 3,"showStatus": 1,"sort": 0,"icon": null,"productUnit": null,"productCount": 0}]},
......

五 参考

https://gitee.com/cakin24/mygulimall

商品管理系统商品分类树查询相关推荐

  1. 商城后台管理系统之普通查询_分页查询_商品的添加,单个删除,批量删除

    一.MVC开发模式和JavaEE经典三层结构 1.JSP开发模式一: jsp(接收请求,响应请求,展示数据)+javabean(处理业务逻辑) javaBean:可复用的java组件 -user -u ...

  2. 【电商】电商后台---商品管理系统

    前面介绍了根据商品流转所涉及的系统模块,供应商与合同的管理已经总结过,所以本篇继续写一下商品管理模块. 关于商品管理系统的总结介绍在网能够搜索出好多,这里也结合了接触过的系统,借鉴了一些资料,根据个人 ...

  3. 电商后台:商品管理系统

    关于商品管理系统的总结介绍在网能够搜索出好多,这里也结合了接触过的系统,借鉴了一些资料,根据个人的理解整理出来,希望能够按计划形成一个完整的供应链系列文章,目的是通过梳理总结让自己原来懵懂的内容清晰, ...

  4. 电子证书管理系统前台_电商平台后台之商品管理系统组成模块

    "前端用户的一小步,后台系统的一大步",平时常见的功能如购物车.优惠券等,看似简单,实则在后台要经过很多条件的校验.多系统间的信息流转.下面小猪电商介绍下电商平台后台之商品管理系统 ...

  5. Vue.js+Mysq+java+springboot+商品推荐算法实现商品推荐网站+商品管理系统后台

    面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,通 ...

  6. 基于java与springboot结合商品推荐算法实现商品推荐网站+商品管理系统后台,mysql,vue

    面对海量的商品信息如何实现针对不同用户维度开展个性化商品推荐,实现用户线上选购商品,下订单,支付,物流配送等?本次毕设程序基于前后端分离开发模式,搭建系统网络商品推荐系统前台与系统后台商品管理系统,通 ...

  7. PHP+mysql商品管理系统-计算机毕业设计源码19895

    摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台.商品管理系统每天都有大量的信息需要通过网络来管理,为此,本人开发了一个基于B/S(浏览器/服务器)模式的商品管理系统商品管理平台. 该系 ...

  8. 转:电商后台:商品管理系统

    电商后台:商品管理系统 2018-06-14 16:08 电商 电商管理系统是为了能够让用户快速的找到商品,为同类型产品提供标准的属性.属性值,便于统一产品,使用户得到决策必须的消息,为运营童鞋方便管 ...

  9. java最终考核项目(实现商品管理系统)

    文章目录 首先声明一点,java这门语言其实博主是个小白,有很多小细节没考虑进去,大家有需要的私下各自完善一下,还请各位大佬多多谅解,谢谢,祝大家取得好成绩,冲冲冲,加油!!! 第一步: 第二步: 第 ...

最新文章

  1. 【某小学生作文】《我的爸爸是名驾驶员》
  2. 共创Linux防火墙,Linux防火墙iptables简明教程
  3. android ndk调用出错,由于Android-NDK应用程序的权限问题,为什么fopen在本地方法中失败?...
  4. ubuntu所有php扩展php-7.0扩展列表
  5. 《爬虫写得好,铁窗关到老》教你把握爬虫的法律边界!㊫
  6. 系统级芯片设计语言和验证语言的发展
  7. 【 Educational Codeforces Round 71 (Rated for Div. 2) F】Remainder Problem【分块】
  8. 出现“Failed to update Unity Web Player”解决方法
  9. python爬虫探索原神世界(角色篇)
  10. SAP中会计凭证数据表关系的简单验证
  11. VC6.0用file-open后,出现“MSDEV.EXE-应用程序错误的解决方法
  12. 《深入浅出图神经网络》读书笔记 1-2
  13. SpringBoot自动生成接口文档
  14. 戴尔服务器两张Titan V配置深度学习环境
  15. P1425 小鱼的游泳时间(C语言)
  16. cmd命令之Xcopy介绍_复制文件夹里所有文件到另一个文件夹操作方式
  17. 如何才能快速将多个视频素材文件一键消音处理
  18. 自定义jsp标签来防止表单的重复提交
  19. 企业信使运营管理平台官网_注册_开自助充值
  20. [转载]千手观音是如何练成的?

热门文章

  1. 集成板的CodeBlocks编译器配置相关文档
  2. 历史要开一个人的玩笑,多大的英雄都没法子。
  3. iso:genisoimage 和 xorrisofs
  4. mysql笔记免费_mysql笔记
  5. 什么牌子的蓝牙耳机音质好?十大公认音质好的无线蓝牙耳机
  6. IOS微信浏览器返回事件监听问题
  7. 系统管理、服务 网站***、sql注入、脚本***等视频动画
  8. 家装家居行业该如何进行网络推广?
  9. 解压压缩的文件没有管理员权限
  10. k8s注册节点出现kube-flannel-ds服务状态pending