当前位置: 首页 > news >正文

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【06】【商品服务】接口文档地址_三级分类_SPU_SKU


持续学习&持续更新中…

学习态度:守破离


【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【06】【商品服务】接口文档地址_三级分类_SPU_SKU

  • 接口文档地址
  • 三级分类
    • 效果图
    • 建表
    • 后台组建数据的树形结构
    • 在人人(后台管理系统)中实现管理商品的三级分类
    • 路径规则
    • 使用ElementUI构建三级分类
    • 前后端联调
    • 使用逻辑删除
    • 调整日志级别
  • SPU与SKU
  • 基本属性【规格参数】与销售属性
    • 【属性分组-规格参数-销售属性-三级分类】关联关系
    • SPU-SKU属性表
  • 注意
  • 参考

接口文档地址

可以按照接口的规范来开发其他剩余的功能。

https://easydoc.net/s/78237135/ZUqEdvA4/hKJTcbfd

在这里插入图片描述

在这里插入图片描述

三级分类

效果图

在这里插入图片描述

建表

在这里插入图片描述

create table if not exists gulimall_pms.pms_category
(cat_id        bigint auto_increment comment '分类id'primary key,name          char(50)  null comment '分类名称',parent_cid    bigint    null comment '父分类id',cat_level     int       null comment '层级',show_status   tinyint   null comment '是否显示[0-不显示,1显示]',sort          int       null comment '排序',icon          char(255) null comment '图标地址',product_unit  char(50)  null comment '计量单位',product_count int       null comment '商品数量'
)comment '商品三级分类';

后台组建数据的树形结构

在这里插入图片描述

@Service("categoryService")
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService {// ......@Overridepublic List<CategoryEntity> listTree() {// 查出所有分类List<CategoryEntity> entities = baseMapper.selectList(null);/// 组装父子结构:// 查出一级分类List<CategoryEntity> level1 = entities.stream().filter(entity -> entity.getParentCid() == 0).map(entity -> {entity.setChildren(getChildren(entity, entities));return entity;})// 0 是排序的默认值.sorted((menu1, menu2) -> (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort())).collect(Collectors.toList());return level1;}// 递归查找所有子分类private List<CategoryEntity> getChildren(CategoryEntity root, List<CategoryEntity> all) {List<CategoryEntity> collect = all.stream().filter(entity -> entity.getParentCid() == root.getCatId()).map(entity -> {entity.setChildren(getChildren(entity, all));return entity;}).sorted((menu1, menu2) -> (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort())).collect(Collectors.toList());return collect;}}

在人人(后台管理系统)中实现管理商品的三级分类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

路径规则

以角色管理为例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以刚才我们给分类维护设置的/product/category,浏览器应该访问http://localhost:8001/#/product-category,对应代码中的src\views\modules\product\category.vue

使用ElementUI构建三级分类

在这里插入图片描述

前后端联调

在这里插入图片描述

给网关配置路由规则:

spring:cloud:gateway:routes:
#        - id: product_route
#          uri: lb://gulimall-product
#          predicates:
#            - Path=/api/product/**
#          filters:
#            - RewritePath=/api/(?<segment>.*),/$\{segment}
#          #需要把精确的路由放到上面【/api/product/**比/api/**更精确】- id: admin_routeuri: lb://renren-fastpredicates:- Path=/api/**
# 规则:前端项目都带上/api/前缀
#renrenfast代表的是renren-fast的url+port,也就是:localhost:8080
# 默认是这样子转发的 http://localhost:88/api/captcha.jpg  ==》 http://renrenfast/api/captcha.jpg
# 希望这样子转发 http://renrenfast/renren-fast/captcha.jpgfilters:- RewritePath=/api/?(?<segment>.*),/renren-fast/$\{segment}

在这里插入图片描述

使用逻辑删除

【MybatisPlus】https://baomidou.com/guides/logic-delete/

在这里插入图片描述
局部配置:
在这里插入图片描述
全局配置:
在这里插入图片描述
在这里插入图片描述
注:上图注释的文字应该是:这个方法不推荐直接使用,推荐使用逻辑删除

调整日志级别

logging:level: com.atguigu.gulimall: debug

SPU与SKU

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

基本属性【规格参数】与销售属性

  • 基本属性:SPU

商品介绍/规格与包装,这些都是SPU的属性,代表了一类商品

在这里插入图片描述

  • 销售属性:SKU

能决定售价与库存的叫做:销售属性

在这里插入图片描述

  • 总结
    在这里插入图片描述

【属性分组-规格参数-销售属性-三级分类】关联关系

在这里插入图片描述

SPU-SKU属性表

  • 网络/像素,是商品的基本属性【组成了一个SPU,比如华为V20】
  • 内存/容量,决定商品的价格和库存,是销售属性【组成了一个SKU,比如华为V20(6G+128G版)】

在这里插入图片描述

注意

  • nacos中不同命名空间的服务不能直接调用,可以使用其他方法【所以把所有服务都注册到public命名空间下】
  • 每个服务可以设置给自己的配置设置命名空间,做到配置隔离

参考

雷丰阳: Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目).


本文完,感谢您的关注支持!


相关文章:

  • 【创作活动】面对层出不穷的AI大模型产品我们应该怎么选择?
  • 【JavaScript脚本宇宙】通知新风尚:打造互动性十足的Web提示系统
  • VB7/64位VB6开发工具office插件开发-twinbasic
  • 【Redis】redis高阶-使用zset实现延时队列
  • qt网络事件之QSocketNotifier
  • 拥抱生态农业,享受绿色生活
  • 软件测试--第三章 软件测试方法
  • java判断对象是否还在被引用
  • 【设计模式】装饰器模式(结构型)⭐⭐
  • linux常用命令及其选项
  • 手撸一个java网关框架
  • STM32使用HAL库时 UART ErrorCode
  • PowerDesigner导入Excel模板生成数据表
  • 鸿蒙开发接口数据管理:【@ohos.data.rdb (关系型数据库)】
  • Java 请求头加header
  • happypack两次报错的问题
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • ReactNativeweexDeviceOne对比
  • spring boot下thymeleaf全局静态变量配置
  • vuex 学习笔记 01
  • webpack+react项目初体验——记录我的webpack环境配置
  • 笨办法学C 练习34:动态数组
  • 简单基于spring的redis配置(单机和集群模式)
  • 力扣(LeetCode)21
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何编写一个可升级的智能合约
  • 三栏布局总结
  • 数据结构java版之冒泡排序及优化
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • $.each()与$(selector).each()
  • %@ page import=%的用法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Git) gitignore基础使用
  • (二)PySpark3:SparkSQL编程
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六)DockerCompose安装与配置
  • (四)React组件、useState、组件样式
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .net wcf memory gates checking failed
  • .Net 路由处理厉害了
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net的socket示例
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET框架设计—常被忽视的C#设计技巧
  • .Net中ListT 泛型转成DataTable、DataSet
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /etc/fstab和/etc/mtab的区别
  • :=
  • [20140403]查询是否产生日志
  • [codevs1288] 埃及分数
  • [go 反射] 进阶