一、功能概述
组合套餐销售是美团买菜系统中重要的营销功能,允许商家将多个商品打包销售,提供优惠价格以促进销量。该功能需要实现套餐创建、价格计算、库存管理、订单处理和用户界面展示等核心模块。
二、系统架构设计
1. 前端展示层
- 套餐列表页:展示所有可用套餐,包含套餐图片、名称、原价、套餐价和节省金额
- 套餐详情页:展示套餐内包含的具体商品、规格、数量和单独购买总价
- 购物车集成:允许用户将套餐加入购物车,与其他商品混合结算
- 移动端适配:确保在美团买菜APP和小程序中的良好展示
2. 后端服务层
- 套餐管理服务:套餐CRUD操作、上下架管理
- 价格计算服务:实时计算套餐价格和节省金额
- 库存服务:套餐库存与组件商品库存的同步管理
- 订单服务:处理套餐订单的创建、拆单和状态管理
3. 数据存储层
- MySQL:存储套餐基础信息、规则配置
- Redis:缓存热门套餐数据、库存快照
- Elasticsearch:支持套餐搜索和筛选
三、核心功能实现
1. 套餐模型设计
```java
public class ComboPackage {
private Long id;
private String name;
private String description;
private BigDecimal originalPrice; // 单品总价
private BigDecimal packagePrice; // 套餐价
private LocalDateTime startTime; // 生效时间
private LocalDateTime endTime; // 失效时间
private Integer status; // 状态(0-下架,1-上架)
private List items; // 套餐内商品列表
// getters & setters
}
public class ComboItem {
private Long productId;
private String productName;
private String spec; // 规格
private BigDecimal unitPrice; // 单价
private Integer quantity; // 数量
// getters & setters
}
```
2. 价格计算逻辑
```python
def calculate_package_price(package):
"""
计算套餐价格和节省金额
:param package: 套餐对象
:return: (package_price, saved_amount)
"""
original_total = sum(item.unit_price * item.quantity for item in package.items)
package_price = package.package_price 可能包含额外折扣
saved_amount = original_total - package_price
return package_price, saved_amount
```
3. 库存管理实现
```java
public class PackageInventoryService {
// 检查套餐库存
public boolean checkInventory(Long packageId, int quantity) {
ComboPackage package = packageRepository.findById(packageId);
for (ComboItem item : package.getItems()) {
int available = productInventoryService.getAvailable(item.getProductId());
if (available < item.getQuantity() * quantity) {
return false;
}
}
return true;
}
// 扣减套餐库存(实际扣减组件商品库存)
@Transactional
public boolean deductInventory(Long packageId, int quantity) {
ComboPackage package = packageRepository.findById(packageId);
for (ComboItem item : package.getItems()) {
boolean success = productInventoryService.deduct(
item.getProductId(),
item.getQuantity() * quantity
);
if (!success) {
// 回滚已扣减的库存
rollbackInventory(package, quantity);
return false;
}
}
return true;
}
}
```
4. 订单处理流程
1. 用户选择套餐加入购物车
2. 提交订单时验证套餐库存和有效性
3. 创建订单时:
- 生成主订单记录
- 为每个套餐组件生成子订单项
- 标记为套餐商品以便后续统计
4. 支付成功后扣减库存
四、关键技术挑战与解决方案
1. 库存同步问题
- 问题:套餐库存与组件商品库存需要保持一致
- 解决方案:
- 采用最终一致性模型
- 扣减组件商品库存而非套餐库存
- 使用分布式锁防止超卖
- 定期校验库存一致性
2. 价格计算复杂性
- 问题:套餐价格可能包含多种折扣规则
- 解决方案:
- 实现规则引擎处理不同折扣策略
- 缓存计算结果提高性能
- 实时计算与预计算结合
3. 套餐变更处理
- 问题:套餐修改时已加入购物车的处理
- 解决方案:
- 购物车中的套餐快照化
- 版本控制机制
- 用户结算时校验套餐有效性
五、测试策略
1. 单元测试:
- 价格计算逻辑
- 库存扣减原子性
- 套餐规则验证
2. 集成测试:
- 套餐创建到订单生成的完整流程
- 并发场景下的库存处理
3. 性能测试:
- 高并发时套餐查询性能
- 库存扣减的TPS
4. 用户体验测试:
- 套餐展示的清晰度
- 加入购物车的流畅度
- 价格对比的直观性
六、上线与监控
1. 灰度发布:
- 先上线部分区域测试
- 监控关键指标
2. 监控指标:
- 套餐购买转化率
- 库存扣减失败率
- 价格计算耗时
3. 报警机制:
- 库存不一致报警
- 价格计算异常报警
- 套餐访问量突增报警
七、优化方向
1. 智能推荐:基于用户购买历史推荐相关套餐
2. 动态定价:根据库存和时效性动态调整套餐价格
3. 虚拟套餐:支持基于用户选择的动态组合套餐
4. AR展示:通过AR技术展示套餐商品组合效果
通过以上方案实现,美团买菜系统可以高效支持组合套餐销售功能,提升用户购买体验和平台销售额。