一、套餐组合销售功能概述
在叮咚买菜系统中实现套餐组合销售功能,可以提升用户购买体验、增加客单价并优化库存管理。该功能主要包括套餐创建、展示、选择、购买和后台管理几个核心模块。
二、系统架构设计
1. 前端实现
- 套餐展示页面:
- 专题页面展示热门套餐
- 分类展示(如家庭套餐、健康轻食、节日特惠等)
- 套餐详情页(包含商品组合、原价与套餐价对比、节省金额)
- 交互设计:
- 一键购买套餐功能
- 自定义套餐选项(部分可替换商品)
- 套餐与单品对比弹窗
2. 后端服务
- 套餐管理服务:
- 套餐CRUD接口
- 套餐有效性验证(库存、时间等)
- 套餐价格计算逻辑
- 订单处理服务:
- 套餐订单拆单处理(将套餐拆分为多个子订单)
- 库存预占与释放机制
- 优惠计算与叠加规则
3. 数据库设计
```
套餐表(package)
- id: 主键
- name: 套餐名称
- description: 描述
- original_price: 原价
- discount_price: 套餐价
- start_time: 生效时间
- end_time: 失效时间
- status: 状态(上架/下架)
- image_url: 图片
套餐商品关联表(package_items)
- id: 主键
- package_id: 套餐ID
- product_id: 商品ID
- quantity: 数量
- is_optional: 是否可选
- default_selected: 默认是否选中
套餐规则表(package_rules)
- id: 主键
- package_id: 套餐ID
- rule_type: 规则类型(限购、互斥等)
- rule_value: 规则值
```
三、核心功能实现
1. 套餐创建与管理
```java
// 套餐创建示例
public Package createPackage(PackageDTO packageDTO) {
// 验证商品库存
validateProductsStock(packageDTO.getItems());
// 计算套餐价格
BigDecimal originalPrice = calculateOriginalPrice(packageDTO.getItems());
BigDecimal discountPrice = packageDTO.getDiscountPrice();
// 创建套餐记录
Package package = new Package();
package.setName(packageDTO.getName());
package.setOriginalPrice(originalPrice);
package.setDiscountPrice(discountPrice);
package.setStartTime(packageDTO.getStartTime());
package.setEndTime(packageDTO.getEndTime());
// 保存套餐
packageRepository.save(package);
// 保存套餐商品关系
savePackageItems(package.getId(), packageDTO.getItems());
return package;
}
```
2. 套餐价格计算逻辑
```python
def calculate_package_price(package_id, selected_items=None):
"""
计算套餐最终价格
:param package_id: 套餐ID
:param selected_items: 用户选择的商品列表(用于自定义套餐)
:return: 套餐价格
"""
package = get_package_by_id(package_id)
if not selected_items: 默认套餐
return package.discount_price
else: 自定义套餐
total_price = Decimal(0.00)
for item in selected_items:
product = get_product_by_id(item[product_id])
应用可能的商品级折扣
item_price = apply_product_discount(product, item.get(quantity, 1))
total_price += item_price * item[quantity]
应用套餐级折扣
total_price = apply_package_discount(total_price, package)
return total_price
```
3. 库存管理实现
```java
// 套餐购买时的库存处理
public boolean reserveStockForPackage(Long packageId, Map productQuantities) {
try {
// 开始分布式事务
for (Map.Entry entry : productQuantities.entrySet()) {
Long productId = entry.getKey();
Integer quantity = entry.getValue();
// 扣减商品库存
if (!productInventoryService.reduceStock(productId, quantity)) {
throw new RuntimeException("库存不足");
}
}
// 提交事务
return true;
} catch (Exception e) {
// 回滚所有库存操作
rollbackStockChanges(packageId, productQuantities);
return false;
}
}
```
四、关键技术点
1. 套餐组合算法:
- 动态组合:根据用户历史购买记录推荐个性化套餐
- 静态组合:运营配置的固定套餐
- 混合组合:部分固定+部分可选商品
2. 价格计算策略:
- 整体折扣:套餐总价低于单独购买总和
- 买赠策略:购买主商品赠送附属商品
- 满减策略:满足一定金额减免
3. 库存同步机制:
- 实时库存同步:确保套餐商品库存准确
- 预占库存:用户加入购物车时预占库存
- 超卖预防:设置合理的库存阈值
五、用户体验优化
1. 智能推荐:
- 基于用户购买历史的套餐推荐
- 季节性/节日性套餐推荐
- 库存紧张商品组合推荐
2. 可视化展示:
- 套餐商品图片轮播
- 价格对比条形图
- 节省金额突出显示
3. 灵活选择:
- 部分商品可选替换
- 数量调整功能
- 自定义套餐保存功能
六、测试与部署
1. 测试用例:
- 套餐创建与编辑测试
- 库存同步测试
- 价格计算准确性测试
- 并发购买测试
- 退款流程测试
2. 部署方案:
- 灰度发布策略
- 回滚机制
- 监控指标设置(套餐购买率、库存预警等)
七、运营支持功能
1. 数据分析:
- 套餐销售排行榜
- 用户购买行为分析
- 库存周转率分析
2. 营销工具:
- 套餐限时折扣
- 满减优惠券
- 分享裂变奖励
3. 客服支持:
- 套餐内容查询接口
- 退换货处理流程
- 投诉处理通道
通过以上方案,叮咚买菜可以实现高效的套餐组合销售功能,提升用户购买体验和平台运营效率。