电商系统核心:从商品分类到 SKU 上架的全链路设计与实现
本文基于RuoYi-Vue框架,详细阐述了电商商品管理系统的核心设计与实现方案。系统采用三级结构设计:分类管理(支持无限层级)、商品主表(存储通用属性)和SKU表(管理具体规格组合)。数据库设计重点关注商品分类、商品主表和SKU表的关联关系,其中SKU表通过JSON格式存储规格信息。后端实现部分展示了分类管理、商品上架和SKU规格管理的RESTful接口设计,包括权限控制和多商户支持。
🛒 电商系统核心:从商品分类到 SKU 上架的全链路设计与实现
摘要:商品管理是电商系统的核心心脏。一个灵活、可扩展的商品系统不仅要支持基本的商品展示,还要能够处理多规格(SKU)、多级分类以及复杂的库存逻辑。本文将基于 RuoYi-Vue 后端框架,深入剖析商品上架的全流程,包括数据库设计、后端接口实现以及 SKU 的管理策略,助你构建强大的电商后台。
🏗️ 数据库设计:构建稳固的基石
电商系统的商品模型通常包含三个核心概念:分类 (Category)、商品 (Product) 和 库存单元 (SKU)。
1. 商品分类表 (ec_category)
支持无限层级分类,通过 parent_id 实现树形结构。
CREATE TABLE `ec_category` (
`category_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID',
`parent_id` bigint(20) DEFAULT '0' COMMENT '父分类ID',
`category_name` varchar(100) NOT NULL COMMENT '分类名称',
`category_icon` varchar(500) DEFAULT '' COMMENT '图标URL',
`sort_order` int(4) DEFAULT '0' COMMENT '排序',
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB COMMENT='商品分类表';
2. 商品主表 (ec_product)
存储商品的通用属性,如名称、主图、详情、发布状态等。
CREATE TABLE `ec_product` (
`product_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`category_id` bigint(20) NOT NULL COMMENT '分类ID',
`product_name` varchar(200) NOT NULL COMMENT '商品名称',
`product_code` varchar(100) COMMENT '商品编码',
`main_image` varchar(500) COMMENT '主图片',
`price` decimal(10, 2) NOT NULL COMMENT '展示价格',
`publish_status` char(1) DEFAULT '0' COMMENT '上架状态(0下架 1上架)',
`is_hot` char(1) DEFAULT '0' COMMENT '是否热销',
`is_new` char(1) DEFAULT '0' COMMENT '是否新品',
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB COMMENT='商品表';
3. 商品 SKU 表 (ec_product_sku)
这是最关键的部分。SKU (Stock Keeping Unit) 定义了具体的规格组合(如:iPhone 15 Pro + 黑色 + 256GB),价格和库存都挂载在 SKU 上。
CREATE TABLE `ec_product_sku` (
`sku_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'SKU ID',
`product_id` bigint(20) NOT NULL COMMENT '关联商品ID',
`sku_name` varchar(200) COMMENT 'SKU名称',
`spec_info` varchar(500) COMMENT '规格信息JSON,例如 {"颜色":"黑色","内存":"256GB"}',
`price` decimal(10, 2) NOT NULL COMMENT '销售价格',
`stock` int(11) DEFAULT '0' COMMENT '库存数量',
`image` varchar(500) COMMENT 'SKU特定图片',
PRIMARY KEY (`sku_id`),
INDEX `idx_product_id`(`product_id`)
) ENGINE=InnoDB COMMENT='商品SKU表';
💻 后端实现:逻辑与流程
在 RuoYi-Vue 中,我们通过 Controller 层暴露 RESTful 接口来管理这些资源。
1. 分类管理 (EcCategoryController.java)
首先,商家需要建立分类体系。
@RestController
@RequestMapping("/fun/category")
public class EcCategoryController extends BaseController
{
@Autowired
private IEcCategoryService ecCategoryService;
/**
* 获取分类列表
*/
@PreAuthorize("@ss.hasPermi('fun:category:list')")
@GetMapping("/list")
public TableDataInfo list(EcCategory ecCategory)
{
startPage();
// 处理多商户/组织权限逻辑
Long orgId = getOrgId();
if (orgId != null && orgId == 103L) { orgId = null; } // 超级管理员查看所有
ecCategory.setOrgId(orgId);
List<EcCategory> list = ecCategoryService.selectEcCategoryList(ecCategory);
return getDataTable(list);
}
/**
* 新增分类
*/
@PreAuthorize("@ss.hasPermi('fun:category:add')")
@PostMapping
public AjaxResult add(@RequestBody EcCategory ecCategory)
{
ecCategory.setOrgId(getOrgId());
return toAjax(ecCategoryService.insertEcCategory(ecCategory));
}
}
2. 商品上架 (EcProductController.java)
选择分类后,创建商品主体。
@RestController
@RequestMapping("/fun/product")
public class EcProductController extends BaseController
{
@Autowired
private IEcProductService ecProductService;
/**
* 新增商品
*/
@PreAuthorize("@ss.hasPermi('fun:product:add')")
@Log(title = "商品", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody EcProduct ecProduct)
{
// 自动绑定当前商户/组织
ecProduct.setOrgId(getOrgId());
return toAjax(ecProductService.insertEcProduct(ecProduct));
}
/**
* 更新商品状态(上架/下架)
*/
@PreAuthorize("@ss.hasPermi('fun:product:edit')")
@PutMapping
public AjaxResult edit(@RequestBody EcProduct ecProduct)
{
return toAjax(ecProductService.updateEcProduct(ecProduct));
}
}
3. SKU 规格管理 (EcProductSkuController.java)
最后,为商品添加具体的规格和库存。在前端,这通常是一个动态表格,后端负责接收并保存。
@RestController
@RequestMapping("/fun/sku")
public class EcProductSkuController extends BaseController
{
@Autowired
private IEcProductSkuService ecProductSkuService;
/**
* 查询某商品的SKU列表
*/
@GetMapping("/list")
public TableDataInfo list(EcProductSku ecProductSku)
{
startPage();
List<EcProductSku> list = ecProductSkuService.selectEcProductSkuList(ecProductSku);
return getDataTable(list);
}
/**
* 批量更新或添加SKU
* 实际业务中,通常是在保存商品时级联保存SKU,或者单独的SKU管理接口
*/
@PostMapping("/batchSave")
public AjaxResult batchSave(@RequestBody List<EcProductSku> skuList) {
return toAjax(ecProductSkuService.saveBatch(skuList));
}
}
🔄 完整业务流程
- 后台 - 创建分类:管理员在后台添加“手机通讯”、“服装鞋帽”等一级分类。
- 后台 - 发布商品:
- 填写商品名称(如“iPhone 15 Pro”)。
- 上传主图和轮播图。
- 设置基础价格。
- 后台 - 设置规格 (SKU):
- 定义规格项:颜色(黑/白)、内存(256G/512G)。
- 系统生成 SKU 列表。
- 分别为每个 SKU 设置价格(如 256G 版 7999元,512G 版 9999元)和库存。
- 小程序端 - 用户购买:
- 用户进入详情页,点击“立即购买”。
- 弹出 SKU 选择器(颜色、内存)。
- 根据选择的 SKU ID,从
ec_product_sku表读取对应的价格和实时库存。
📦 总结
通过 Product + SKU 的双层设计,我们既保证了商品管理的整洁性,又满足了电商多样化的销售需求。结合 RuoYi-Vue 的权限管理和代码生成能力,我们可以快速搭建起一套功能完备的电商后台管理系统。
项目开源地址
更多推荐

所有评论(0)