【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】

news2025/7/18 7:34:48

一.知识回顾

【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】
【1-系统架构演进过程】
【2-微服务系统架构需求】
【3-高性能、高并发、高可用的三高商城系统项目介绍】
【4-Linux云服务器上安装Docker】
【5-Docker安装部署MySQL和Redis服务】
【6-Git安装与配置过程、Gitee码云上创建项目、IDEA关联克隆的项目】
【7-创建商城系统的子模块并将修改后的信息使用Git提交到Gitee上】
【8-数据库表结构的创建&后台管理系统的搭建】
【9-前端项目的搭建部署、Node安装、VSCode安装】
【10-Node的安装以及全局环境变量的相关配置&解决启动报错的问题(1.Error: Cannot find module ‘fs/promises)(2.npm安装node-sass报错)】
【11-导入人人generator项目并自动生成相关的文件&商品子模块的调试&公共模块common子模块的抽离与实现&Lombok插件的安装】
【12-商品子模块整合MyBatisPlus技术&其它模块通过generator的自动生成与补充完善】
【13-项目中微服务组件的学习-SpringCloudAlibaba微服务生态体系的学习&SpringCloudAlibaba的依赖管理&项目中SpringBoot和SpringCloud版本的统一】
【14-微服务的注册中心与配置中心Nacos&Windows操作系统上安装Nacos和Linux操作系统上用Docker中安装Nacos&每个子项目模块使用Nacos进行服务注册与发现】
【15-项目中服务的远程调用之OpenFeign&订单模块与商品模块集成使用OpenFeign的案例】
【16-配置中心之Nacos的基本使用&Nacos服务之命令空间、Nacos服务之配置组、Nacos服务之配置拆分】
【17-微服务网关之Spring Cloud Gateway&Spring Cloud Gateway网关服务搭建】

二.启动我们的管理端的后端项目和前端项目

2.1 后台项目部署

如果启动后端项目的时候遇到如下错误:

image.png

-Djps.track.ap.dependencies=false

那么直接在Settings->Complier->添加上述配置重新启动即可

image.png
后台项目启动后的效果:
在这里插入图片描述

2.2 前端项目部署

在这里插入图片描述

2.3 访问测试登陆

在这里插入图片描述

三.商品分类管理开发

3.1 商品模块对应的商品分类数据库表增加数据

在这里插入图片描述

3.2 启动商品类,对获取我们所有商品分类接口进行测试,看能否成功获取刚插入的数据

启动过程中如果发现报错,错误是Nacos的配置中心地址找不到,我们之前只用订单模块做了案例,并没有给其它模块做案例,所以其它模块直接启动会报错。那么是因为我们没有进行配置中心地址的配置,因为commons模块中引入了Nacos的配置中心依赖,而我们又引入了commons的依赖,所以,如果我们不进行Nacos配置中心的配置,那么启动肯定会报错。
解决方案如下:
在这里插入图片描述

数据展示:
在这里插入图片描述
因为后台为我们传过来的是json数据,显示效果不明显,为了更加明显,我们需要下载一个json插件
在这里插入图片描述
打开我们的插件,将我们的数据拷贝到json插件中
在这里插入图片描述

3.3 数据已经获取了,接下来就需要处理我们的大量数据,说明白了,就是将数据进行分类,具有父子层级关系的目录结构

controller层定义具有层级结构的访问接口

/**
     * 返回具有层级目录的商品分类数据
     * @param params
     * @return
     */
    @GetMapping("/listTree")
    public R listTree(@RequestParam Map<String, Object> params){
        List<CategoryEntity> list = categoryService.queryPageWithTree(params);
        return R.ok().put("data", list);
    }

在这里插入图片描述

service中定义我们的具体业务接口

/**
     * CategoryService中同步定义对应的接口方法
     * @param params
     * @return
     */
    List<CategoryEntity> queryPageWithTree(Map<String, Object> params);

在这里插入图片描述

对应的service实现类中实现相关的接口,并进行相关业务逻辑的处理
这个地方的实现是比较重要的:递归的思想+JDK8特性中stream流相关方法的使用+而且这个解决方案是通用的+可以用在任何想要返回具有层级结构、父子关系的查找当中。
补充一下:JDK8相关的特性文章可以看一下恩师dpb的博客:JDK8新特性

/**
     * 实现CategoryService中对应的接口方法中具体的事项逻辑
     * 查询所有的类别数据,然后将数据封装为树形结构,便于前端使用
     * @param params
     * @return
     */
    @Override
    public List<CategoryEntity> queryPageWithTree(Map<String, Object> params) {
        // 1.查询所有的商品分类信息
        List<CategoryEntity> categoryEntities = baseMapper.selectList(null);
        // 2.将商品分类信息拆解为树形结构【父子关系】
        // 第一步遍历出所有的大类  parent_cid = 0
        List<CategoryEntity> list = categoryEntities.stream().filter(categoryEntity -> categoryEntity.getParentCid() == 0)
                .map(categoryEntity -> {
                    // 根据大类找到多有的小类  递归的方式实现
                    categoryEntity.setChildrens(getCategoryChildrens(categoryEntity,categoryEntities));
                    return categoryEntity;
                }).sorted((entity1, entity2) -> {
                    return (entity1.getSort() == null ? 0 : entity1.getSort()) - (entity2.getSort() == null ? 0 : entity2.getSort());
                }).collect(Collectors.toList());
        // 第二步根据大类找到对应的所有的小类
        return list;
    }

    /**
     *  查找该大类下的所有的小类  递归查找
     * @param categoryEntity 某个大类
     * @param categoryEntities 所有的类别数据
     * @return
     */
    private List<CategoryEntity> getCategoryChildrens(CategoryEntity categoryEntity
            , List<CategoryEntity> categoryEntities) {
        List<CategoryEntity> collect = categoryEntities.stream().filter(entity -> {
            // 根据大类找到他的直属的小类
            return entity.getParentCid() == categoryEntity.getCatId();
        }).map(entity -> {
            // 根据这个小类递归找到对应的小小类
            entity.setChildrens(getCategoryChildrens(entity, categoryEntities));
            return entity;
        }).sorted((entity1, entity2) -> {
            return (entity1.getSort() == null ? 0 : entity1.getSort()) - (entity2.getSort() == null ? 0 : entity2.getSort());
        }).collect(Collectors.toList());
        return collect;
    }

在这里插入图片描述

最后就是启动我们是商品模块,访问测试我们是实现逻辑是否可行:---->如果出现下面的结果—》搞定!
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内网渗透神器CobaltStrike之DNS Beacon(四)

DNS隧道简介 利用DNS隧道进行攻击的现象已存在多年&#xff0c;将数据封装在DNS协议中传输&#xff0c;大部分防火墙和入侵检测设备很少会过滤DNS流量&#xff0c;僵尸网络和入侵攻击可几乎无限制地加以利用&#xff0c;实现诸如远控、文件传输等操作 DNS隐蔽隧道建立通讯并盗…

matplotlib教程二

文章目录一. 条形图1.1 简介1.2 垂直条形图1.3 水平条形图二. 直方图2.1 简介2.2 API2.3 直方图绘制三. 饼图3.1 简介3.2 API3.3 饼图绘制四. 散点图4.1 简介4.2 API4.3 散点图绘制五. 箱形图5.1 简介5.2 API5.3 绘制箱状图六. 轮廓图6.1 简介6.2 轮廓图绘制七. 图像内的文字、…

Android Studio实现一个点餐系统

点餐系统作业要求效果登录注册欢迎页用户管理菜品种类管理菜品管理订单查询点餐源码导读手把手编写注册、用户管理板块新建实体类User新建User服务新建注册活动用户管理作业要求 功能&#xff1a; 1&#xff0e;数据管理 菜品类别&#xff1a;凉菜&#xff1b;热菜&#xff1b;…

投资组合优化的人工蜂群算法(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

力扣(LeetCode)1732. 找到最高海拔(C++)

前缀和 这道题&#xff0c;很容易看出&#xff0c;gaingaingain (海拔高度差) 是海拔高度的一个差分&#xff0c;对 gaingaingain 用前缀和&#xff0c;就能求出每个点的海拔了。题目要求我们&#xff0c;找最高海拔&#xff0c;那么只需要维护一个变量 ansansans &#xff0c…

【NLP】使用 BERT 和 PyTorch Lightning 进行多标签文本分类

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【论文精读5】MVSNet系列论文详解-Point-MVSNet

Point-MVSNet全文名称&#xff1a;Point-Based Multi-View Stereo Network&#xff0c;是2019提出的使用coarse-to-fine方法来优化深度图推断过程的网络结构&#xff0c;与上一篇CVP-MVSNet都是迭代优化的思想&#xff0c;不同的是Point-MVSNet在点云上进行操作&#xff0c;而C…

基于51单片机的二氧化碳(CO2)气体浓度监测报警系统

基于51单片机的二氧化碳&#xff08;CO2&#xff09;气体浓度监测报警系统( proteus仿真程序演示视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;C0073 这里写目录标题基于51单片机的二氧化碳&am…

【数据结构】栈和队列的实现

文章目录一、栈的实现二、队列的实现一、栈的实现 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除元素的操作&#xff0c;进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈低。栈遵循数据后进先出的原则。 创建一个栈&#xff1a; typedef …

就是一整个爱住,你们大胆飞,我就是最坚强的后盾——Java面试突击宝典

前言 马老师说过&#xff0c;员工的离职原因很多&#xff0c;只有两点最真实&#xff1a; 钱&#xff0c;没给到位 心&#xff0c;受委屈了 当然&#xff0c;我是想换个平台&#xff0c;换个方向&#xff0c;想清楚为什么要跳槽&#xff0c;如果真的要跳槽&#xff0c;想要拿…

75.【JavaWeb-03】

JavaWeb(十五)、JavaBean(十六)、MVC三层框架1.早些年:2.三层架构:(十七)、Filter(过滤器)1加入依赖2.基本步骤3.出现500错误的话4.案列演示(十八)、Listener(监听器)1.利用监听实现在线人数的统计(十九)、小结对18之前的(二十)、过滤器、监听器常见应用1.过滤器注册和注销操作…

一起Talk Android吧(第四百一十八回:制作时钟)

文章目录整体思路准备画布绘制表盘绘制刻度绘制指针示例代码各位看官们大家好&#xff0c;上一回中咱们说的例子是"解决Glide不能加载网络图片的方法",这一回咱们介绍的例子是"制作时钟"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android…

向毕业妥协系列之深度学习笔记:神经网络深度学习(一)

目录 一.神经网络杂记 二.计算图&#xff08;反向传播求导几个实例&#xff09; 1.普通式子反向传播求导 2.逻辑回归中的梯度下降 3.m个样本的梯度下降 三.向量化 深度学习系列的文章也可以结合下面的笔记来看&#xff1a; 深度学习笔记-目录 一.神经网络杂记 这个系列…

不知道word压缩文件怎么弄?简单三步轻松实现

如果你是学生&#xff0c;那么你的作业、论文应该都是以word文档格式上交的吧&#xff1f; 如果你是打工人&#xff0c;应该也经常需要编辑一些文档&#xff0c;例如通知、工作安排等等&#xff0c;给上司或其他同事查阅。 那么久而久之积累下来&#xff0c;word文件就会占据电…

TIA博途_通过PEEK指令在TP900触摸屏上实现监控所有IO地址的具体方法示例

TIA博途_通过PEEK指令在TP900触摸屏上实现监控所有IO地址的具体方法示例 如下图所示,首先,新建一个项目,添加一个DB块,这里以DB276为例进行说明,在该DB块中添加如图所示变量, 如下图所示,添加一个FB,用于读取IO点的值,具体程序可参考下图, 如下图所示,在OB1中调…

使用马尔可夫链构建文本生成器

本文中将介绍一个流行的机器学习项目——文本生成器&#xff0c;你将了解如何构建文本生成器&#xff0c;并了解如何实现马尔可夫链以实现更快的预测模型。 文本生成器简介 文本生成在各个行业都很受欢迎&#xff0c;特别是在移动、应用和数据科学领域。甚至新闻界也使用文本生…

PyTorch中的matmul函数详解

PyTorch中的两个张量的乘法可以分为两种&#xff1a; 两个张量对应的元素相乘&#xff08;element-wise&#xff09;&#xff0c;在PyTorch中可以通过torch.mul函数&#xff08;或者∗*∗运算符&#xff09;实现 两个张量矩阵相乘&#xff08;Matrix product&#xff09;&…

Day07--生命周期的概念与分类

文字概述&#xff1a; 1.啥子是生命周期呢&#xff1f; ***********************************************************************************************************************************************************************************************************…

[附源码]Python计算机毕业设计毕业生就业信息管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

EasyExcel对大数据量表格操作导入导出

前言 最近有个项目里面中有大量的Excel文档导入导出需求&#xff0c;数据量最多的文档有上百万条数据&#xff0c;之前的导入导出都是用apache的POI&#xff0c;于是这次也决定使用POI&#xff0c;结果导入一个四十多万的文档就GG了&#xff0c;内存溢出... 于是找到EasyExce…