谷粒商城--SPU和SKU(属性分组、规格参数、销售属性)-1

简介: 谷粒商城--SPU和SKU(属性分组、规格参数、销售属性)

SPU和SKU


SPU:standard product unit(标准化产品单元):是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。如iphone13是SPU,它是一个产品的集合


**SKU:stock keeping unit(库存量单位):**库存进出计量的基本单元,可以是件/盒/托盘等单位。


SKU是对于大型连锁超市DC配送中心物流管理的一个必要的方法。现在已经被引申为产品统一编号的简称,每种产品对应有唯一的SKU号。如iphone13ProMax 1T 蓝色 是SKU,包子店中肉包子是SKU,素包子是SKU,水煎包是SKU…


规格参数和销售属性


像这里的商品介绍,规格与包装都是属于SPU的属性。它们都属于是规格参数


ad6bd1d3792aaf655fd98d8111f5d6d1_2c808ddb5120bd963fefb5b4011c089b.png


像版本,颜色等都属是SKU的销售属性


58b9ec6b5f8eb1aced6d7279de3c84da_af61b0e7e1a4803f80fb9a1cddabfea3.png


表的关系理解


(1)属性关系-规格参数-销售属性-三级分类 关联关系


每个三级分类下有各自的属性分组表通过id和catelogid关联,能查出每个分类下的属性分组


属性分组表和属性表通过一个属性&属性关联表进行关联,能查出每个属性分组下的属性


最终这样的关系我们可以查出每个分类的属性分组和每个属性分组对应的属性


398a0b3adccf30104d732e9ec2ee37f5_62eb29cc8e5f1ed305151ff08537e15d.png


(2)通过思维导图来理解


手机是一级分类,它下面又有属性组,每个属性组又有各自的属性


eaba6460d27fd53046a54055faac7491_fcdd39e93e38806c5d93688c520eea3c.png


(3)SPU-SKU属性表


商品属性表和属性表通过attrid和id进行关联,能查出每个spu的属性


sku销售属性表是为了表示spu下不同sku,比如1号spu在此表有两个sku,这两个sku有不同的销售属性,是通过和属性表关联获取的


312d66d09faee2348be9b9aba7f94344_c65a05a543049dbd5945a8a0b11bfdfc.png


(4)通过思维导图来理解


像网络、像素一般是固定不可选的所以是SPU属性


而内存、容量、颜色等可选的就为SKU销售属性


02e4a4a73eea68affc6733ef9d64bcca_2c35e6266c522d832bdaf69ba9932f56.png


导入前端代码


(1)重新执行“sys_menus.sql”,完善菜单。


正常我们是在系统管理里自定义添加,步骤都是一样的,其实在前端页面添加就是把数据提交到mall_admin表中,这里我们直接把提供的sql语句导入即可!


如下结果:


7710829783607f6163ec82633b3bd747_eb0a07a1941df07644d966f8813545f9.png


(2)实现点击菜单的左边,能够实现在右边展示数据


2614e41468a92c8bec49ca4b882328c5_4c65fe9aafbbc3201b141c45c9424353.png


这个页面就是三级分类和一个表格显示在一块对吧,属于是父子组件交互


前端不具体写了,我们直接导入代码,效果如下:


d38b3c9f3a3dc2a795a2e7a24b0ea1b5_ee1411c79a8cd97d85854f72895979c6.png


因为数据库没数据,所以这里不显示


完善后端接口


接口开发流程

什么是开发接口?

开发接口就是开发Controller、service、dao


在线接口文档如下https://easydoc.net/s/78237135/ZUqEdvA4/OXTgKobR

别人告诉你需要什么功能,需要返回什么样的数据,你就通过接口的形式把他们呢实现出来即可!


以后工作了也是这种形式,主要是开发接口为多,前端其实不用写太多,能看懂即可!!!


开发思路

思路:


  • 根据接口文档写接口
  • 代码中大部分接口已自动生成(MBG),所以我们在前端页面看哪个请求失败
  • 后端改接口


这一部分都是CRUD相关的代码,所以要好好练好好写!!!


属性分组详情

显示属性分组

接口如下:


97c1e4a966c2c4886826bf32db822f7f_48d10a7475f6548312ae56b90d5f70e9.png


controller


    @RequestMapping("/list/{catelogId}")
    public R list(@RequestParam Map<String, Object> params,
                  @PathVariable("catelogId") Long catelogId){
//        PageUtils page = attrGroupService.queryPage(params);
        PageUtils page = attrGroupService.queryPage(params, catelogId);
        return R.ok().put("page", page);
    }

service


这里注意,前端有两个查询按钮


查询和查询全部


这两个都要有模糊查询的功能!


PageUtils queryPage(Map<String, Object> params, Long catelogId);
@Override
public PageUtils queryPage(Map<String, Object> params, Long catelogId) {
    //多条件查询
    String key = (String) params.get("key");
    QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<>();
    if (!StringUtils.isEmpty(key)) {
        wrapper.and((obj) -> {
            obj.eq("attr_group_id",key).or().like("attr_group_name",key);
        });
    }
    if (catelogId == 0) {
        //如果是默认的是查全部的一级分类
        IPage<AttrGroupEntity> page = this.page(
            new Query<AttrGroupEntity>().getPage(params),
            wrapper);
        return new PageUtils(page);
    } else {
        wrapper.eq("catelog_id", catelogId);
        IPage<AttrGroupEntity> page = this.page(
            new Query<AttrGroupEntity>().getPage(params), wrapper);
        return new PageUtils(page);
    }
}

测试


7b4c48131ac537d2fe04404ca366b24b_97f92c989a29179873f7bcaa8d2b0ad3.png


属性分组回显

这一部分主要是做属性分组的数据回显的


接口如下:


93c627dd04754479c5b11d5a9b9e4530_b79f2d4fa1714657db07ebacb6d30c61.png


前端这里省略,需要去elementui找组件,改数据


controller

/**
 * 信息
 */
@RequestMapping("/info/{attrId}")
public R info(@PathVariable("attrId") Long attrId){
  AttrEntity attr = attrService.getById(attrId);
    Long catelogId = attr.getCatelogId();
    Long[] path = categoryService.findCatelogPath(catelogId);
    attr.setCatelogPath(path);
    return R.ok().put("attr", attr);
}

service


获取分类路径id


通过递归操作完成


过程


给一个分类id,不断的查它的父类id直到查不到为止,最后把查询到的id到放到一个集合里


怎样写好递归?


  1. 确定参数值和返回值
  2. 确定终止条件
  3. 递归逻辑


三者缺一不可!!!


//找到catelogId的完整路径:[父/子/孙]
@Override
public Long[] findCatelogPath(Long catelogId) {
    ArrayList<Long> list = new ArrayList<>();
    List<Long> parentPath = findParentPath(catelogId, list);//1.确定递归参数和返回值
    Collections.reverse(parentPath);
    return (Long[]) list.toArray(new Long[parentPath.size()]);
}
private List<Long> findParentPath(Long catelogId,ArrayList<Long> list){
    //3.递归逻辑
    list.add(catelogId);
    CategoryEntity entity = this.getById(catelogId);
    if (entity.getParentCid()!=0){//2.递归终止条件
        findParentPath(entity.getParentCid(),list);
    }
    return list;
}

测试


返回属性的父路径id

2671125db8f45f4548bda3cb8dbfcefc_58021efab77c44f9f9fcbd731d8ce0c3.png

相关文章
|
Java API 开发工具
如何用阿里云 oss 下载文件
阿里云对象存储服务(OSS)提供了多种方式下载文件,以下讲解下各种方式的下载方法
12905 2
|
存储 Java 数据库连接
【Mybatis】关系映射 表对象之间的关系
【Mybatis】关系映射 表对象之间的关系
413 0
|
SQL 设计模式 开发框架
谷粒商城笔记+踩坑(6)——商品服务-属性及其关联分组
商品规格属性和销售属性的增删改查、属性分组中查询新增关联的属性
谷粒商城笔记+踩坑(6)——商品服务-属性及其关联分组
|
存储 SQL 数据库
数据库设计案例:电商系统数据库设计实践
数据库设计案例:电商系统数据库设计实践
2981 1
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
35332 1
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
3871 12
|
XML JSON Java
SpringMVC详解(全网最全)
### SpringMVC 简介 SpringMVC 是 Spring 框架中的一个模块,用于构建 Web 应用的 MVC 架构。它提供了简洁、优雅的方式来处理 HTTP 请求和响应,支持前后端分离,优化用户体验。 #### 起源与发展 1. **三层架构**:早期的 Servlet 只能处理单一请求,耦合度高,复用性差,整页刷新影响用户体验。 2. **MVC 模式**:部分解耦业务逻辑与视图层,但后端仍负责 View 层,难以应对高并发。 3. **前后端分离**:通过异步调用实现解耦,增强复用性和交互体验。
1995 5
|
人工智能 算法 安全
基于YOLOv8的交通车辆实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv8的交通车辆实时检测系统,使用5830张图片训练出有效模型,开发了Python和Pyside6的GUI界面系统,支持图片、视频和摄像头实时检测,具备模型权重导入、检测置信度调节等功能,旨在提升道路安全和改善交通管理。
2889 1
基于YOLOv8的交通车辆实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
|
存储 缓存 Java
谷粒商城笔记+踩坑汇总篇
环境的搭建、商品服务-三级分类、品牌服务、阿里云云存储+JSR303数字校验+统一异常处理、spu+sku、分页拦截器、商品服务、仓库服务、Nginx反向代理,thymeleaf+动态展示三级分类、缓存与分布式锁,Redisson+缓存数据一致性、ElasticSearch检索服务、异步和线程池、商品详情搭建+异步编排、认证服务、阿里云短信+验证码防刷+BCrypt加密、用户名密码登录+微博社交登录+SpringSession+xxl-sso单点登录、购物车、订单服务、幂等性、库存自动解锁。MQ延迟队列
谷粒商城笔记+踩坑汇总篇
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
5171 2

热门文章

最新文章