一、功能概述
套餐组合销售是电商系统中常见的营销手段,通过将多个商品打包销售,既能提升客单价,又能促进滞销商品销售。针对叮咚买菜场景,套餐组合应突出"便捷、实惠、新鲜"的特点。
二、核心功能模块设计
1. 套餐管理后台
- 套餐创建:
- 选择主商品与搭配商品(支持多选)
- 设置套餐价格(需低于单独购买总价)
- 配置套餐有效期
- 上传套餐专属图片和描述
- 套餐分类:
- 按场景分类(家庭套餐、减脂套餐、节日套餐等)
- 按商品类型分类(水果套餐、肉禽套餐等)
- 库存管理:
- 套餐库存与组件商品库存联动
- 组件商品缺货时自动下架套餐
2. 前端展示
- 套餐专区:
- 独立入口展示所有套餐
- 轮播图推荐热门套餐
- 按分类筛选功能
- 商品详情页:
- 显示"可组成套餐"推荐
- 套餐价格与单独购买价格对比
- 套餐包含商品清单
- 购物车逻辑:
- 套餐与单品互斥(避免重复购买)
- 套餐内商品不可单独修改数量
3. 订单处理
- 拆单逻辑:
- 套餐订单拆分为各组件商品子订单
- 保持库存同步扣减
- 配送计算:
- 按套餐内最重/最大商品计算运费
- 满额免运费规则适配
三、技术实现方案
1. 数据库设计
```sql
-- 套餐主表
CREATE TABLE `combo_package` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`description` text,
`original_price` decimal(10,2) NOT NULL,
`combo_price` decimal(10,2) NOT NULL,
`start_time` datetime NOT NULL,
`end_time` datetime NOT NULL,
`status` tinyint DEFAULT 1 COMMENT 1-上架 0-下架,
`image_url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
-- 套餐商品关联表
CREATE TABLE `combo_items` (
`id` bigint NOT NULL AUTO_INCREMENT,
`combo_id` bigint NOT NULL,
`product_id` bigint NOT NULL,
`quantity` int NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `idx_combo_id` (`combo_id`)
);
```
2. 核心业务逻辑(Java示例)
```java
public class ComboService {
// 计算套餐价格
public BigDecimal calculateComboPrice(Long comboId) {
ComboPackage combo = comboRepository.findById(comboId);
List items = comboItemRepository.findByComboId(comboId);
BigDecimal total = BigDecimal.ZERO;
for (ComboItem item : items) {
Product product = productRepository.findById(item.getProductId());
total = total.add(product.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())));
}
// 确保套餐价低于单独购买价
if (combo.getComboPrice().compareTo(total) >= 0) {
throw new BusinessException("套餐价格必须低于单独购买总价");
}
return combo.getComboPrice();
}
// 创建订单时处理套餐
public Order createOrderWithCombo(OrderRequest request) {
Order order = new Order();
// ...基础订单信息设置
for (OrderItem item : request.getItems()) {
if (item.getComboId() != null) {
// 处理套餐商品
ComboPackage combo = comboRepository.findById(item.getComboId());
List comboItems = comboItemRepository.findByComboId(item.getComboId());
// 扣减套餐内各商品库存
for (ComboItem ci : comboItems) {
productService.reduceStock(ci.getProductId(), ci.getQuantity());
}
// 添加套餐子订单项
for (ComboItem ci : comboItems) {
OrderItem subItem = new OrderItem();
subItem.setProductId(ci.getProductId());
subItem.setQuantity(ci.getQuantity());
// ...其他字段设置
order.addOrderItem(subItem);
}
} else {
// 处理普通商品
// ...
}
}
return orderRepository.save(order);
}
}
```
3. 前端实现要点(Vue示例)
```javascript
// 套餐详情组件
export default {
data() {
return {
combo: null,
originalTotal: 0,
saving: 0
}
},
async created() {
const res = await api.getComboDetail(this.$route.params.id);
this.combo = res.data;
// 计算单独购买总价
let total = 0;
res.data.items.forEach(item => {
total += item.product.price * item.quantity;
});
this.originalTotal = total;
this.saving = total - res.data.comboPrice;
},
methods: {
addToCart() {
// 添加套餐到购物车逻辑
this.$store.dispatch(cart/addCombo, this.combo.id);
}
}
}
```
四、关键业务规则
1. 价格校验规则:
- 套餐价格必须低于单独购买总价
- 套餐内商品价格变动时,需重新校验套餐价格有效性
2. 库存同步规则:
- 套餐库存 = 各组件商品库存最小值
- 购买套餐时同步扣减各组件商品库存
3. 促销互斥规则:
- 套餐不可与其他优惠券叠加使用
- 套餐内商品不可再享受单品折扣
五、优化建议
1. 智能推荐:
- 基于用户购买历史推荐相关套餐
- 根据季节/节日动态调整推荐套餐
2. 动态定价:
- 临近保质期商品自动生成特惠套餐
- 库存积压商品组合促销
3. 用户体验优化:
- 套餐内商品支持一键替换(同类商品)
- 套餐详情页展示营养信息/烹饪建议
4. 数据分析:
- 跟踪套餐转化率
- 分析套餐内商品关联度
- 优化套餐组合策略
六、实施路线图
1. MVP阶段(1个月):
- 实现基础套餐创建与展示功能
- 完成套餐购物车与订单处理逻辑
2. 迭代优化(2-3个月):
- 添加智能推荐算法
- 实现动态定价机制
- 优化前端展示效果
3. 数据驱动(持续):
- 建立套餐效果分析看板
- 根据数据反馈调整套餐策略
通过以上方案,叮咚买菜可以实现灵活高效的套餐组合销售功能,提升用户购买体验的同时增加平台销售额。