一、需求分析 组合套餐销售是美团买菜提升用户购买体验、增加客单价的重要功能,主要需求包括: 1.套餐创建与管理:支持运营人员灵活创建不同类型套餐 2.智能推荐:根据用户购买习惯推荐合适套餐 3.库存联动:套餐销售与单品库存实时同步 4.价格计算:自动计算套餐优惠价与单品总价
一、需求分析
组合套餐销售是美团买菜提升用户购买体验、增加客单价的重要功能,主要需求包括:
1. 套餐创建与管理:支持运营人员灵活创建不同类型套餐
2. 智能推荐:根据用户购买习惯推荐合适套餐
3. 库存联动:套餐销售与单品库存实时同步
4. 价格计算:自动计算套餐优惠价与单品总价对比
5. 多端展示:在APP、小程序、H5等渠道一致展示
二、系统架构设计
1. 核心模块划分
```
套餐服务系统
├── 套餐管理模块
├── 库存同步模块
├── 价格计算模块
├── 推荐引擎模块
├── 订单处理模块
└── 数据分析模块
```
2. 数据库设计
套餐主表(combo_package)
```sql
CREATE TABLE combo_package (
id BIGINT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
original_price DECIMAL(10,2) NOT NULL,
discount_price DECIMAL(10,2) NOT NULL,
start_time DATETIME,
end_time DATETIME,
status TINYINT DEFAULT 1 COMMENT 1-上线 0-下线,
create_time DATETIME,
update_time DATETIME
);
```
套餐商品关联表(combo_item)
```sql
CREATE TABLE combo_item (
id BIGINT PRIMARY KEY,
combo_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL DEFAULT 1,
is_required TINYINT DEFAULT 1 COMMENT 1-必选 0-可选,
sort_order INT DEFAULT 0,
FOREIGN KEY (combo_id) REFERENCES combo_package(id)
);
```
用户套餐购买记录(user_combo_order)
```sql
CREATE TABLE user_combo_order (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
combo_id BIGINT NOT NULL,
order_no VARCHAR(32) NOT NULL,
actual_price DECIMAL(10,2) NOT NULL,
status TINYINT NOT NULL COMMENT 0-待支付 1-已支付 2-已取消,
create_time DATETIME,
pay_time DATETIME,
FOREIGN KEY (combo_id) REFERENCES combo_package(id)
);
```
三、核心功能实现
1. 套餐创建与管理
```java
// 套餐创建服务
public class ComboPackageService {
@Transactional
public ComboPackageDTO createCombo(ComboCreateRequest request) {
// 1. 验证套餐基本信息
validateComboBasicInfo(request);
// 2. 验证套餐商品有效性
List
items = validateComboItems(request.getItems());
// 3. 计算套餐价格
ComboPriceCalculator calculator = new ComboPriceCalculator();
ComboPriceResult priceResult = calculator.calculate(items);
// 4. 保存套餐主信息
ComboPackage package = new ComboPackage();
package.setName(request.getName());
package.setDescription(request.getDescription());
package.setOriginalPrice(priceResult.getOriginalPrice());
package.setDiscountPrice(priceResult.getDiscountPrice());
// ...其他字段设置
comboPackageRepository.save(package);
// 5. 保存套餐商品关联
for (ComboItem item : items) {
item.setComboId(package.getId());
comboItemRepository.save(item);
}
return convertToDTO(package);
}
}
```
2. 库存同步机制
```java
// 库存同步服务
public class InventorySyncService {
public void syncComboInventory(Long comboId) {
// 1. 获取套餐所有商品
List items = comboItemRepository.findByComboId(comboId);
// 2. 计算最小可售数量
int minAvailable = Integer.MAX_VALUE;
for (ComboItem item : items) {
ProductInventory inventory = inventoryService.getInventory(item.getProductId());
int available = inventory.getAvailable() / item.getQuantity();
if (available < minAvailable) {
minAvailable = available;
}
}
// 3. 更新套餐库存状态
ComboPackage package = comboPackageRepository.findById(comboId).orElseThrow();
package.setAvailableQuantity(minAvailable);
package.setSoldOut(minAvailable <= 0);
comboPackageRepository.save(package);
}
}
```
3. 价格计算策略
```java
// 价格计算器
public class ComboPriceCalculator {
public ComboPriceResult calculate(List items) {
double originalTotal = 0;
double costTotal = 0;
for (ComboItem item : items) {
Product product = productService.getProduct(item.getProductId());
originalTotal += product.getPrice() * item.getQuantity();
costTotal += product.getCostPrice() * item.getQuantity();
}
// 默认折扣策略:9折,但不低于成本价1.1倍
double discountPrice = Math.max(originalTotal * 0.9, costTotal * 1.1);
return new ComboPriceResult(originalTotal, discountPrice);
}
}
```
4. 智能推荐算法
```python
推荐引擎示例(Python伪代码)
class ComboRecommender:
def recommend(self, user_id, limit=5):
1. 获取用户历史购买数据
history = self.get_user_purchase_history(user_id)
2. 基于协同过滤的推荐
cf_recommendations = self.collaborative_filtering(history)
3. 基于内容的推荐
content_recommendations = self.content_based(history)
4. 混合推荐策略
hybrid_scores = {}
for combo in self.all_combos:
cf_score = cf_recommendations.get(combo.id, 0)
content_score = content_recommendations.get(combo.id, 0)
hybrid_scores[combo.id] = 0.7 * cf_score + 0.3 * content_score
5. 排序并返回
sorted_combos = sorted(hybrid_scores.items(), key=lambda x: x[1], reverse=True)
return [self.get_combo_detail(combo_id) for combo_id, _ in sorted_combos[:limit]]
```
四、前端展示优化
1. 套餐卡片UI设计
```html
{{combo.name}}
{{combo.description}}
¥{{combo.originalPrice.toFixed(2)}}
¥{{combo.discountPrice.toFixed(2)}}
省¥{{(combo.originalPrice - combo.discountPrice).toFixed(2)}}
包含:
{{item.productName}}×{{item.quantity}}
```
2. 交互逻辑
```javascript
// Vue组件示例
export default {
data() {
return {
selectedCombo: null,
customItems: {} // 用于可选商品的选择
}
},
methods: {
addToCart(combo) {
// 1. 检查可选商品选择情况
if (!this.validateOptionalItems(combo)) {
return;
}
// 2. 构建购物车项
const cartItem = {
comboId: combo.id,
name: combo.name,
price: combo.discountPrice,
items: this.buildSelectedItems(combo)
};
// 3. 调用购物车服务
this.$store.dispatch(cart/addItem, cartItem);
this.$toast.success(已加入购物车);
},
validateOptionalItems(combo) {
// 实现可选商品验证逻辑
return true;
},
buildSelectedItems(combo) {
// 构建实际购买的商品列表
return combo.items.map(item => ({
productId: item.productId,
quantity: item.isRequired ? item.quantity : this.customItems[item.productId] || 0
})).filter(item => item.quantity > 0);
}
}
}
```
五、测试与上线
1. 测试用例设计
1. 功能测试:
- 套餐创建、编辑、删除
- 套餐商品关联管理
- 价格计算准确性
- 库存同步逻辑
2. 性能测试:
- 高并发下套餐查询性能
- 库存更新响应时间
- 推荐算法计算效率
3. 兼容性测试:
- 不同手机型号、屏幕尺寸的UI展示
- 不同网络环境下的加载速度
2. 上线策略
1. 灰度发布:
- 先上线10%流量,观察系统指标
- 逐步增加流量至100%
2. 监控指标:
- 套餐购买转化率
- 库存同步延迟
- 推荐点击率
- 系统错误率
3. 回滚方案:
- 准备旧版本部署包
- 数据库回滚脚本
- 快速切换流程
六、运营与优化
1. 数据分析:
- 套餐销售占比
- 用户购买套餐频率
- 套餐与单品的关联分析
2. A/B测试:
- 不同套餐展示方式对比
- 价格策略效果测试
- 推荐算法版本对比
3. 持续优化:
- 根据销售数据调整套餐组合
- 优化推荐算法参数
- 改进套餐创建流程
通过以上方案,美团买菜系统可以实现高效、稳定的组合套餐销售功能,提升用户体验和平台收益。