一、核心功能设计
1. 规格定义与组合
- 规格类型:支持重量(如500g/1kg)、包装(散装/礼盒装)、品质(A级/B级)、产地(国产/进口)等多维度属性。
- 动态组合:通过后台配置实现规格的灵活组合(如“300g装+国产”或“500g装+进口”),避免硬编码限制。
- SKU生成:系统自动根据规格组合生成唯一SKU,关联库存、价格、条码等信息。
2. 库存管理
- 分规格库存:每个SKU独立管理库存,避免超卖(如“300g苹果”库存为100,“500g苹果”库存为50)。
- 库存同步:实时更新库存数据,支持预售、缺货预警等场景。
- 批次管理:对生鲜类商品按批次追踪,确保先进先出(FIFO)或特定效期管理。
3. 价格体系
- 阶梯定价:根据规格设置不同价格(如“小份10元,大份18元”)。
- 促销联动:支持满减、折扣、买赠等促销活动与规格关联(如“买大份送小份”)。
- 动态调价:基于市场波动或库存情况自动调整价格(如临期商品降价)。
二、技术实现方案
1. 数据库设计
- 规格表(Spec):存储规格类型(如“重量”)、可选值(如“300g”“500g”)。
- 商品-规格关联表(ProductSpec):建立商品与规格的映射关系。
- SKU表:存储SKU唯一标识、规格组合、价格、库存等。
- 示例结构:
```sql
CREATE TABLE Spec (
spec_id INT PRIMARY KEY,
spec_name VARCHAR(50) -- 如"重量"
);
CREATE TABLE SpecValue (
value_id INT PRIMARY KEY,
spec_id INT,
value VARCHAR(50) -- 如"300g"
);
CREATE TABLE SKU (
sku_id INT PRIMARY KEY,
product_id INT,
price DECIMAL(10,2),
stock INT,
-- 其他字段如条码、效期等
);
```
2. API接口设计
- 获取规格列表:`GET /api/products/{id}/specs` 返回商品所有规格及可选值。
- 获取SKU信息:`GET /api/skus/{skuId}` 返回具体SKU的价格、库存等。
- 更新库存:`POST /api/skus/{skuId}/stock` 支持批量更新库存。
3. 前端交互优化
- 规格选择器:采用树形结构或矩阵表格展示规格组合,禁用无效组合(如“300g+进口”无库存时置灰)。
- 实时价格计算:用户选择规格后动态显示价格,支持批量购买计算。
- 库存提示:显示剩余库存,低库存时高亮警示。
三、业务逻辑处理
1. 库存同步机制
- 分布式锁:在高并发场景下,使用Redis分布式锁防止超卖。
- 异步扣减:订单支付成功后,通过消息队列(如Kafka)异步扣减库存,提升响应速度。
- 库存预警:设置阈值,库存低于预警值时触发补货通知。
2. 价格计算引擎
- 公式化定价:支持按规格权重计算价格(如价格=基础价×规格系数)。
- 促销规则:集成满减、折扣等促销逻辑,优先应用最优价格。
3. 订单拆分
- 多规格合并:同一商品的不同规格可合并为一条订单项,但需分别扣减库存。
- 部分缺货处理:当部分规格缺货时,允许用户选择继续购买或取消。
四、用户体验优化
1. 搜索与筛选
- 规格筛选:支持按规格属性(如“仅显示500g以上”)过滤商品。
- 智能推荐:根据用户历史购买记录推荐常用规格。
2. 商品详情页
- 规格对比表:以表格形式展示不同规格的价格、重量、包装等差异。
- 图片关联:不同规格可关联不同商品图片(如散装与礼盒装图片)。
3. 购物车交互
- 规格修改:在购物车中允许用户修改已选规格,无需返回商品页。
- 批量操作:支持一键选择/取消同一商品的所有规格。
五、测试与监控
1. 压力测试
- 模拟高并发场景(如秒杀活动),验证库存扣减的准确性和系统稳定性。
2. 数据校验
- 定期核对库存数据与实际仓库数据,防止数据不一致。
3. 日志监控
- 记录规格选择、库存变更等关键操作日志,便于问题追溯。
五、案例参考
- 美团买菜实际场景:用户可选择“300g普通西红柿”或“500g有机西红柿”,系统根据选择动态显示价格和库存,下单后自动扣减对应SKU库存。
- 技术栈示例:后端采用Spring Cloud微服务架构,数据库使用MySQL分库分表,缓存使用Redis集群,前端基于React/Vue实现动态规格选择器。
通过以上设计,美团买菜系统可高效支持多规格商品售卖,同时保障用户体验和运营效率。实际开发中需根据业务规模调整技术方案,例如引入大数据分析优化规格推荐逻辑。