一、套餐组合销售功能概述
套餐组合销售是电商平台提升客单价、促进商品销售的有效方式。在叮咚买菜系统中实现套餐组合销售需要设计合理的业务逻辑和技术架构,确保用户体验流畅且系统稳定。
二、核心功能模块设计
1. 套餐管理模块
- 套餐创建:支持管理员创建固定套餐或自定义套餐
- 套餐配置:
- 选择主商品与搭配商品
- 设置套餐价格(需低于单独购买总价)
- 配置库存规则(独立库存或依赖商品库存)
- 设置销售时间范围(限时套餐)
- 套餐分类:按场景分类(早餐套餐、家庭套餐、减肥套餐等)
2. 前端展示模块
- 套餐专区:独立入口展示所有可用套餐
- 智能推荐:基于用户购买历史推荐相关套餐
- 组合展示:
- 套餐内商品清单展示
- 原价与套餐价对比
- 节省金额显示
- 图片展示:套餐整体图片+商品分开展示
3. 订单处理模块
- 库存锁定:下单时同时锁定套餐内所有商品库存
- 价格计算:自动应用套餐优惠价格
- 拆单处理:支持部分商品退货时的套餐价格重新计算
4. 营销活动模块
- 满减套餐:满一定金额自动推荐套餐
- 新人专享套餐:针对新用户的特别套餐
- 节日限定套餐:根据节日推出的特色套餐
三、技术实现方案
1. 数据库设计
```sql
-- 套餐主表
CREATE TABLE `combo_package` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL COMMENT 套餐名称,
`description` varchar(500) DEFAULT NULL COMMENT 套餐描述,
`original_price` decimal(10,2) NOT NULL COMMENT 原价,
`combo_price` decimal(10,2) NOT NULL COMMENT 套餐价,
`start_time` datetime DEFAULT NULL COMMENT 开始时间,
`end_time` datetime DEFAULT NULL COMMENT 结束时间,
`status` tinyint NOT NULL DEFAULT 1 COMMENT 状态,
`image_url` varchar(255) DEFAULT NULL COMMENT 套餐图片,
PRIMARY KEY (`id`)
);
-- 套餐商品关联表
CREATE TABLE `combo_items` (
`id` bigint NOT NULL AUTO_INCREMENT,
`combo_id` bigint NOT NULL COMMENT 套餐ID,
`sku_id` bigint NOT NULL COMMENT 商品SKU ID,
`quantity` int NOT NULL DEFAULT 1 COMMENT 数量,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_combo_sku` (`combo_id`,`sku_id`)
);
```
2. 核心业务逻辑
```java
// 套餐价格计算服务
public class ComboPriceCalculator {
public BigDecimal calculateComboPrice(Long comboId, Map skuQuantities) {
// 1. 查询套餐基本信息
ComboPackage combo = comboRepository.findById(comboId);
// 2. 验证套餐内商品库存
if (!checkComboStock(comboId, skuQuantities)) {
throw new BusinessException("套餐内商品库存不足");
}
// 3. 计算套餐价(优先使用套餐价,否则按单品计算)
if (combo != null && combo.getComboPrice() != null) {
return combo.getComboPrice();
}
// 4. 如果没有套餐价,按单品加总计算(理论上不应该发生)
return calculateIndividualPrice(skuQuantities);
}
private boolean checkComboStock(Long comboId, Map skuQuantities) {
// 实现库存检查逻辑
// ...
}
}
```
3. 前端实现要点
```javascript
// Vue组件示例
export default {
data() {
return {
combos: [], // 套餐列表
selectedCombo: null, // 选中的套餐
cartItems: [] // 购物车商品
}
},
methods: {
fetchCombos() {
// 获取套餐列表
api.getCombos().then(response => {
this.combos = response.data;
});
},
addToCart(combo) {
// 添加套餐到购物车
api.addToCart({
comboId: combo.id,
quantity: 1
}).then(() => {
this.$message.success(套餐已加入购物车);
});
},
calculateSavings(combo) {
// 计算节省金额
const originalPrice = combo.items.reduce((sum, item) => {
return sum + (item.price * item.quantity);
}, 0);
return originalPrice - combo.comboPrice;
}
},
mounted() {
this.fetchCombos();
}
}
```
四、关键业务规则
1. 库存管理:
- 套餐库存可以独立设置,也可以依赖商品库存
- 下单时需同时检查套餐库存和商品库存
2. 价格计算:
- 套餐价格必须低于单独购买所有商品的总价
- 支持多种定价策略(固定价、百分比折扣等)
3. 退货处理:
- 整套退货:按套餐价退款
- 部分退货:需重新计算剩余商品价格
4. 促销兼容:
- 套餐可参与平台其他促销活动
- 需处理促销叠加的优先级
五、系统优化建议
1. 性能优化:
- 套餐商品查询使用缓存
- 高峰期实施限流策略
2. 用户体验:
- 套餐详情页展示节省金额
- 支持一键购买套餐
- 提供套餐评价专区
3. 数据分析:
- 跟踪套餐销售数据
- 分析用户购买套餐的行为模式
- 优化套餐组合策略
六、实施路线图
1. 第一阶段:基础套餐功能开发
- 实现套餐创建、展示、购买流程
- 完成基础库存管理
2. 第二阶段:营销功能增强
- 添加限时套餐、满减套餐等功能
- 实现套餐推荐算法
3. 第三阶段:数据分析与优化
- 添加销售数据分析模块
- 根据数据优化套餐组合
通过以上方案,叮咚买菜可以实现灵活、高效的套餐组合销售功能,提升用户购买体验和平台销售额。