一 数据库表结构

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. 重磅推出:AutoProject Studio 自动化项目生成器
  2. mysql5.0修改字符集,查看mysql字符集及修改表结构
  3. 局部特征用于图像检索 Aggregating local features for Image Retrieval
  4. vba 将数组作为参数传递_将VBA数组写入工作表时转置(Transpose)的利用
  5. 假如谷歌真的和ICQ一起了
  6. django-models类索引外键时候的related_name属性作用
  7. C/C++打造《百万级人脸识别系统》
  8. 逻辑回归、线性回归直观感受
  9. golang的Channel初始化的有缓存与无缓存解释
  10. beginnersbook C 语言示例·翻译完成 | ApacheCN
  11. 温州近10%的网站存在高危安全漏洞
  12. android自动化测试--appium运行的坑问题及解决方法
  13. Svn服务器之必须提交更改日志篇
  14. 怎样覆盖之前的html文档,jquery – html文本覆盖自己
  15. 新工具︱微软Microsoft Visual Studio的R语言模块下载试用Ing...(尝鲜)
  16. 关于java方向的思考
  17. 基于AD09的四层板设计概要
  18. FileNet入门学习
  19. 深入理解蓝牙BLE之“BQB认证”
  20. Shell | 实用命令不完全总结

热门文章

  1. ps入门第6天_ps渐变字_彩色字 案例:彩虹桥or彩虹字特效
  2. CDSP基于《数据安全法》和《个人信息保护法》的数据安全专家认证
  3. 《缠中说禅108课》75:逗庄家玩的一些杂史 1
  4. I2C软件模拟EEPROM通讯实验
  5. Linux系统下查看和修改 系统时间和硬件时间
  6. IDM.UltraEdit.v14.10.0.1024.Incl.Keymaker-CORE
  7. openstack的分布式应用工具包Tooz
  8. ObservableObject、Observedobject、Published的学习与使用
  9. html如何设置方正仿宋,怎么在WPS中添加方正仿宋简体?
  10. 办公室服务器安装系统,教你如何架设办公室FTP服务器以Serv-U为例