接近实际的电商平台添加商品——spu与sku

商品的spu、sku及其之间的关系 今日来总结一下,电商系统中涉及到商品时必然会遇到的几个概念,SPU、SKU、单品等。彻底搞懂和明白了这几个概念对我们设计商品表是十分必要的前提条件。 SPU:标准化产品单元 SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。 SKU:库存量单位 SKU... 阅读详情

基本概述

什么是spu?
SPU = Standard Product Unit (标准产品单位)
SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。
通俗点讲,属性值、特性相同的商品就可以称为一个SPU。
什么是sku?
SKU=stock keeping unit(库存量单位)
SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。
SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。在服装、鞋类商品中使用最多最普遍。

需求分析

涉及到的数据表
tb_goods:存储spu
tb_goods_desc:存储商品描述
tb_item:存储sku,更具体的spu,例如精细到手机的内存、存储等

前端发送给后端的数据模型

{
    "goods": {
        "isEnableSpec": "1", 
        "category1Id": 1, 
        "category2Id": 2, 
        "category3Id": 3, 
        "typeTemplateId": 35, 
        "goodsName": "星火英语", 
        "brandId": 1, 
        "caption": "星火英语——副", 
        "price": "36"
    }, 
    "goodsDesc": {
        "itemImages": [
            {
                "color": "浅色", 
                "url": "http://192.168.2.123/group1/M00/00/00/wKgCe17TnFyAYyF3AADFbi0oR0A089.jpg"
            }
        ], 
        "specificationItems": [
            {
                "attributeName": "网络", 
                "attributeValue": [
                    "移动3G"
                ]
            }, 
            {
                "attributeName": "机身内存", 
                "attributeValue": [
                    "16G", 
                    "32G"
                ]
            }
        ], 
        "customAttributeItems": [
            {
                "text": "内存大小", 
                "value": "很大"
            }, 
            {
                "text": "颜色", 
                "value": "五颜六色"
            }
        ], 
        "packageList": "星火英语——包装", 
        "saleService": "星火英语——售后"
    }, 
    "itemList": [
        {
            "spec": {
                "网络": "移动3G", 
                "机身内存": "16G"
            }, 
            "price": 0, 
            "num": 999, 
            "status": "1", 
            "isDefault": "0"
        }, 
        {
            "spec": {
                "网络": "移动3G", 
                "机身内存": "32G"
            }, 
            "price": 0, 
            "num": 999, 
            "status": "1", 
            "isDefault": "0"
        }
    ]
}

涉及到3张数据表的插入操作,封装后端接收数据实体类goods
tb_goods和tb_goods_desc插入的对象均是单个对象,而插入tb_item的是多个对象,前端传递的是一个数组,后端需要用list集合接收

具体实现

后端数据接收对象

public class Goods implements Serializable {
    private TbGoods goods;

    private TbGoodsDesc goodsDesc;

    private List<TbItem> itemList;

    public Goods() {
    }

    public Goods(TbGoods goods, TbGoodsDesc goodsDesc, List<TbItem> itemList) {
        this.goods = goods;
        this.goodsDesc = goodsDesc;
        this.itemList = itemList;
    }

    public TbGoods getGoods() {
        return goods;
    }

    public void setGoods(TbGoods goods) {
        this.goods = goods;
    }

    public TbGoodsDesc getGoodsDesc() {
        return goodsDesc;
    }

    public void setGoodsDesc(TbGoodsDesc goodsDesc) {
        this.goodsDesc = goodsDesc;
    }

    public List<TbItem> getItemList() {
        return itemList;
    }

    public void setItemList(List<TbItem> itemList) {
        this.itemList = itemList;
    }
}

service层代码

public void add(Goods goods) {
	goods.getGoods().setAuditStatus("0");//设置未申请状态
	goodsMapper.insert(goods.getGoods());
	//设置关联
	goods.getGoodsDesc().setGoodsId(goods.getGoods().getId());
	//在进行插入
	goodsDescMapper.insert(goods.getGoodsDesc());
	//保存sku
	if ("1".equals(goods.getGoods().getIsEnableSpec())){
		for (TbItem item : goods.getItemList()) {
			//设置sku的name
			//item.getSpec()的格式为{"机身内存":"16G","网络":"联通3G"}
			Map map = JSON.parseObject(item.getSpec(), Map.class);//将规格字符串转化为map集合
			String title = goods.getGoods().getGoodsName();
			//遍历map,取到其中的value值
			for (Object obj : map.keySet()) {
				title += map.get(obj);//将其规格和商品名称合并在一起
			}
			item.setTitle(title);

			setItemValus(goods,item);

			itemMapper.insert(item);
		}

	}else {
		TbItem item = new TbItem();

		item.setPrice( goods.getGoods().getPrice());//价格
		item.setStatus("1");//状态
		item.setIsDefault("1");//是否默认
		item.setNum(99999);//库存数量
		item.setSpec("{}");

		//设置sku的name
		String title = goods.getGoods().getGoodsName();
		item.setTitle(title);

		setItemValus(goods,item);

		itemMapper.insert(item);
	}
}

private void setItemValus(Goods goods,TbItem item){
	//设置分类id
	item.setCategoryid(goods.getGoods().getCategory3Id());
	//设置显示图片
	//goods.getGoodsDesc().getItemImages()的格式为[{"color":"白色","url":""},{"color":"黑色","url":""}]
	List<Map> images = JSON.parseArray(goods.getGoodsDesc().getItemImages(), Map.class);
	if (images.size()>0){
		item.setImage(images.get(0).get("url")+"");//最后的+""是因为set方法要求的是string类型,而images.get(0).get("url")是object类型,需要向上转型
	}

	//设置时间
	item.setCreateTime(new Date());
	item.setUpdateTime(new Date());

	//设置其他冗余信息
	item.setCategory(itemCatMapper.selectByPrimaryKey(goods.getGoods().getCategory3Id()).getName());
	item.setBrand(brandMapper.selectByPrimaryKey(goods.getGoods().getBrandId()).getName());
	item.setSeller(sellerMapper.selectByPrimaryKey(goods.getGoods().getSellerId()).getName());
	item.setGoodsId(goods.getGoods().getId());//商品SPU编号
	item.setSellerId(goods.getGoods().getSellerId());

}

controller层代码

@RequestMapping("/add")
public Result add(@RequestBody Goods goods){
	String username = SecurityContextHolder.getContext().getAuthentication().getName();
	goods.getGoods().setSellerId(username);
	try {
		goodsService.add(goods);
		return new Result(true, "增加成功");
	} catch (Exception e) {
		e.printStackTrace();
		return new Result(false, "增加失败");
	}
}
商城-商品规格管理-SPU和SKU数据结构 商城-商品规格管理-SPU和SKU数据结构3.SPU和SKU数据结构3.1.SPU表3.1.1.表结构3.1.2.spu中的规格参数3.1.2.1.specifications字段3.1.2.2.spec_template字段3.2.SKU表3.2.1.表结构3.2.2.sku中的特有规格参数3.2.2.1.indexes字段3.2.2.2.own_spec字段3.3.导入图片信息 3.SPU和S... 阅读详情

相关推荐

基于Spring Boot4与Vue3的珠宝首饰小程序电商平台实现

在电商系统开发中,库存扣减与订单一致性的保障往往比页面渲染更具挑战。珠宝首饰作为高客单价、强SKU属性的垂直品类,对商品建模、价格快照与库存精确性要求尤高。基于Spring Boot 4构建后端服务,配合Vue3搭建运营管理后台,再以微信小程序作为C端入口,可形成完整的交易闭环。从系统架构与SPU/SKU建模切入,围绕登录鉴权、下单事务、库存防超卖等关键环节展开,并提供可复用的工程代码骨架,帮助开发者快速搭建可演示、可扩展、经得起提问的电商平台。

weixin_33754065的博客 301

一文讲透SPU和SKU

SKU(Stock Keeping Unit)和SPU(Single Product Unit)都是用于管理和标识产品的方式,特别是在零售和电子商务领域中常常使用。接下来我用例子通俗易懂的给大家讲透SKU和SPU。一、什么是SKU和SPU?SKU(Stock Keeping Unit)定义:SKU是一种唯一的编码或标识符,用于区分不同的产品变种或规格,通常与库存管理和销售跟踪有关。例子:假设你经营...

liudada8265的博客 1232

电商平台高性能商品搜索架构与Elasticsearch优化实践

搜索引擎是现代电商平台的核心基础设施,其底层基于倒排索引技术实现毫秒级文本检索。Elasticsearch作为分布式搜索引擎,通过分片机制和近实时搜索特性,能够有效支撑高并发场景。在电商领域,搜索服务需要处理中文分词、同义词扩展等复杂需求,同时保证99%以上的可用性。本文以京东级流量为背景,详细解析如何基于Spring Boot和Elasticsearch构建QPS 5000+的高性能搜索服务,涵盖索引设计、查询优化、熔断降级等关键技术点,特别针对IK分词器调优和深度分页等典型问题提供工程解决方案。

weixin_42552716的博客 255

浅谈SPU和SKU

SPU&SKU

weixin_41659509的博客 8774

【项目实战】电商项目中的SPU(标准产品单位)与SKU(库存保有单位)傻傻分不清楚

电商里面一般对商品的单位都有 SPU 或 SKU,这两个概念有什么区别?从广义上讲,类目>SPU>SKU。SPU就是俗称的“款”;SKU就是商品的“件”。

奶爸的编程之路,也就一周冷个三天 4158

跨平台商品模型大解析:亚马逊 vs 阿里 vs 拼多多

本文深入探讨了亚马逊、阿里巴巴和拼多多三大电商平台的商品模型设计,分析了它们在变体关系、商品抽象层级和SKU定义等方面的异同。亚马逊模型以物流和变体为中心,强调全球仓配体系下的标准化管理;阿里模型采用多视角的弹性结构,适用于多类目、多品牌、多卖家环境;拼多多模型则结合平台标准化与商家个性化,适合短期促销和快速上新场景。文章还提供了实践建议,帮助自研电商平台或商品中台的开发者选择合适的商品结构,并强调了商品模型在电商系统中的核心作用。通过对比分析,本文旨在为读者提供商品建模的启发和参考。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 13万+

电商商品表设计

一、了解下商品中的两个概念:SPU和SKU SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。 SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。 举个例子:i...

3762

解析CRMEB-JAVA多商户商城源码:商品、交易、营销三大核心链路

在多商户电商系统开发中,核心交易链路的设计直接决定服务的稳定性与扩展性。从商品模型的SPU/SKU拆分,到订单状态机的严谨流转,再到支付回调的幂等处理与退款链路的错误码映射,每个环节都需要将领域建模与工程实践紧密结合。营销场景中的秒杀、优惠券和积分,则对并发控制提出更高要求,通常借助Redis原子操作和数据库唯一索引来保证数据一致性。Spring Boot与MyBatis-Plus作为基础框架,为快速构建多商户平台提供了可行的技术路径。掌握这些关键设计后,开发者便能更好地理解高性能交易系统的底层逻辑和落地方

weixin_31421613的博客 192

uni-app+Django跨端电商平台开发实战

跨平台开发框架uni-app通过条件编译技术实现一套代码多端发布,显著提升中小型电商项目的开发效率。结合Django框架强大的ORM系统和Admin后台,可快速构建包含商品管理、订单支付等核心功能的RESTful API服务。在电商场景中,SPU+SKU数据模型和购物车乐观锁设计能有效处理商品规格联动与并发控制。通过Redis预减库存和Celery异步任务队列,可应对秒杀等高并发场景。这种技术组合特别适合需要快速覆盖微信小程序、H5等多渠道的电商项目,在保证85%原生性能的同时降低60%以上的开发成本。

weixin_31292729的博客 97

SpringBoot电商系统实战:从单体架构到核心模块设计与性能优化

在Java Web应用开发领域,单体架构因其部署简单、开发直观的特点,依然是中小型项目快速验证和上线的优选方案。其核心原理在于将所有功能模块集成于单一应用内,通过清晰的MVC分层实现业务逻辑。SpringBoot框架凭借其‘约定大于配置’的理念和丰富的起步依赖,极大地简化了此类应用的初始搭建与整合,技术价值体现在能帮助开发者聚焦业务而非环境配置。在电商、后台管理等典型应用场景中,诸如用户权限管理、商品SPU/SKU设计、订单事务处理等模块的实现,都离不开对数据库、缓存、消息队列等组件的深度集成。本文基于一个

weixin_42535703的博客 267

Java多商户电商平台源码改造:数据隔离、订单状态机与支付幂等实战

多商户电商平台本质是同一套系统支撑多个独立商家经营,会员共享、业务数据按商户隔离。此类基于Java的商城源码,常被用于毕业设计、外包项目及面试准备,核心价值不在于页面功能多全,而在于后端如何通过数据模型、权限拦截与状态控制保证商户间互不可见。实际落地时,需要从seller_id贯穿业务表、RBAC权限模型、ThreadLocal上下文等基础机制入手,建立数据隔离;订单模块则依赖状态机枚举与支付回调幂等设计,避免错单和重复入账。掌握这些原理后,再对Spring Boot + MyBatis搭建的项目做最小闭环

weixin_31315567的博客 289

Spring Boot电商平台毕业设计实战:从架构到部署的全栈指南

在软件开发领域,构建一个完整的电商系统是检验全栈工程能力的经典实践。其核心原理在于通过模块化设计,将复杂的业务逻辑拆解为用户、商品、订单、支付等独立服务,并利用数据库事务、缓存、消息队列等技术保障数据一致性与系统性能。这种架构模式的技术价值在于,它能系统性地串联前后端开发、数据库设计、安全认证与性能优化等核心技能,是培养工程思维的绝佳场景。电商平台作为典型的应用场景,涵盖了从商品展示、交易处理到数据管理的完整业务闭环,为开发者提供了从技术选型、编码实现到容器化部署的完整实践路径。本文以主流的Spring B

weixin_33947521的博客 374

完整前后端开源跨平台微商城电商系统源码

随着移动互联网的迅猛发展,电商平台已成为企业数字化转型的重要载体。本章将全面介绍“完整前后端全开源微商城电商购物系统”的整体架构与技术生态,涵盖其开源特性、核心功能模块、适用场景以及在Uni-app、Vue.js、微服务架构等现代技术栈支持下的开发优势。系统不仅实现了H5、小程序、App三端统一,还具备高可扩展性、安全性和性能优化机制,适用于中小型电商项目快速搭建与二次开发。通过本系统的深入剖析,开发者能够掌握从零构建一个生产级电商应用的关键路径。

weixin_42579969的博客 1017

商品价格监控怎么做:八爪鱼RPA自动采集+异常预警方案

商品价格的变动直接影响利润和竞争力,但对于多店铺、多SKU的电商团队来说,靠人工盯价格几乎是一件不可能完成的事。这篇文章以八爪鱼RPA为例,介绍一套价格自动采集与变动分析的方案,适合需要持续监控竞品价格或自身价格的运营团队参考。

BZYRPA的博客 546

电商比价工具实战:到手价计算与商品匹配的核心逻辑

在电商数据分析与价格监控场景中,比价系统需要解决两个基础问题:如何识别不同平台上的同一商品,以及如何统一‘到手价’的计算口径。商品匹配通常依赖品牌、货号、配色等结构化工整,正则表达式与归一化策略可有效提升准确率;到手价则需根据各平台规则分别计算,例如优惠券折扣或服务费附加。借助SQLite存储历史价格,还能实现降价趋势分析与自动告警。本文以唯品会和得物为例,拆解从页面采集、接口解析到数据入库的完整流程,并分享反爬与并发写入的实战避坑经验,为构建可复用的电商价格监控工具提供参考。

weixin_34314962的博客 296

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 682

FastAPI+Vue3电商平台实战:从零构建企业级全栈项目

在互联网应用开发中,前后端分离架构已成为现代Web工程的标配,它让前端与后端团队并行协作,并天然支持多端复用。FastAPI作为Python生态中高性能的异步框架,凭借Pydantic数据校验与自动生成OpenAPI文档的能力,在API密集型场景下表现卓越;而Vue3搭配Vite、Pinia则提供了高效的前端工程化方案。本实战项目以电商系统为载体,从数据建模的SPU/SKU拆分、JWT用户鉴权,到应对高并发的Redis缓存三防策略与原子化库存扣减,再到支付回调验签、Docker多阶段部署与Nginx反向代理

weixin_36064575的博客 185

Windows Server+SqlServer Always On实战:5步搞定高可用集群搭建

本文详细介绍了在Windows Server环境中,通过5个关键步骤搭建SQL Server Always On高可用集群的实战指南。内容涵盖从底层故障转移集群配置、SQL Server实例启用Always On功能,到创建可用性组和侦听器的完整流程,并提供了核心运维与故障排查思路,帮助企业构建稳定可靠的数据库高可用架构。

milk5的博客 857

AI翻译在跨境电商中的实际应用与效果

随着大模型技术的普及,AI翻译已从“可用”迈向“好用”。本文介绍的这套基于CSANMT的智能中英翻译系统,凭借其高精度、低延迟、易部署、可扩展的特点,正成为越来越多跨境企业的标配工具。它不仅是语言转换器,更是全球化运营的加速器。无论是缩短上新周期、提升客服响应速度,还是深化市场洞察,AI翻译都在以极低的边际成本创造实实在在的商业价值。未来,随着多模态翻译(图文结合)、领域自适应(Fine-tuning on-demand)、实时语音翻译等功能的加入,这类系统将进一步演变为一站式跨境电商语言服务平台。

weixin_33750664的博客 859

基于远程服务器 Tip_Adapter源码从零开始复现

从零一步步实现源代码的运行

zcyzcyjava的博客 1602

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1896

SpringBoot2+Vue3+MySQL8.0电商项目实战:部署、踩坑与二次开发

前后端分离架构已成为现代电商系统的主流形态,SpringBoot2与Vue3的组合在工程实践中占据重要地位。SpringBoot2提供稳定的服务端生态,兼容JDK8/11并适配大量三方SDK;Vue3借助组合式API和Vite带来更高开发效率;MyBatis-Plus通过通用CRUD与条件构造器显著减少重复代码;MySQL8.0以utf8mb4和窗口函数等特性支撑更复杂的业务场景。这套技术栈既能满足电商平台对商品、订单、库存的核心管理需求,也便于开发者快速搭建vue3后台管理系统。针对常见问题,如docke

weixin_30874365的博客 119

深入详解DICOM医学影像定位线相关知识:理解定位线的概念、定位线的作用以及定位线显示和计算原理

深入详解DICOM医学影像定位线相关知识:理解定位线的概念、定位线的作用以及定位线显示和计算原理

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 2049
上一篇: 数据库转map类型的list集合以及组合查询
下一篇: 后端验证用户修改的商品是否属于当前登录用户
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值