一、模块概述
价格管理模块是生鲜电商系统的核心功能之一,负责处理商品定价、促销活动、价格调整等业务逻辑。针对生鲜行业特点,该模块需支持动态定价、多维度价格策略、价格监控预警等功能。
二、核心功能设计
1. 基础价格管理
- 商品基准价设置:支持按商品分类、规格、品质等级设置基础价格
- 采购价关联:自动根据采购成本计算建议售价
- 价格有效期管理:支持设置价格生效和失效时间
- 多区域价格:按配送区域/仓库设置差异化价格
2. 动态定价引擎
- 市场价跟踪:对接第三方数据源获取竞品价格
- 智能调价规则:
- 基于库存水平的自动调价
- 基于保质期的阶梯降价
- 基于销售速度的动态调整
- 算法模型:集成机器学习模型预测最优价格
3. 促销管理
- 促销活动类型:
- 满减/满折
- 限时特价
- 买赠活动
- 第二件半价
- 会员专享价
- 活动优先级:支持活动冲突检测和优先级设置
- 预算控制:设置活动总预算和单品预算
4. 价格监控与预警
- 异常价格检测:自动识别明显偏离市场水平的价格
- 毛利率监控:实时计算并预警低毛利商品
- 价格变动历史:完整记录所有价格调整操作
三、技术实现方案
1. 数据库设计
```sql
-- 商品价格主表
CREATE TABLE product_price (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
product_id BIGINT NOT NULL,
region_id BIGINT,
base_price DECIMAL(10,2) NOT NULL,
cost_price DECIMAL(10,2),
market_price DECIMAL(10,2),
status TINYINT DEFAULT 1,
create_time DATETIME,
update_time DATETIME,
UNIQUE KEY uk_product_region (product_id, region_id)
);
-- 价格历史表
CREATE TABLE price_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
price_id BIGINT NOT NULL,
old_price DECIMAL(10,2),
new_price DECIMAL(10,2),
change_type TINYINT COMMENT 1-手动调整 2-系统自动 3-促销活动,
operator VARCHAR(50),
change_reason TEXT,
create_time DATETIME
);
-- 促销活动表
CREATE TABLE promotion (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
type TINYINT NOT NULL COMMENT 1-满减 2-折扣 3-特价,
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
status TINYINT DEFAULT 0 COMMENT 0-未开始 1-进行中 2-已结束,
priority INT DEFAULT 0,
budget DECIMAL(12,2),
used_budget DECIMAL(12,2),
create_time DATETIME
);
-- 促销商品关联表
CREATE TABLE promotion_product (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
promotion_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
promotion_price DECIMAL(10,2),
discount_rate DECIMAL(5,2),
max_discount DECIMAL(10,2),
min_order_qty INT DEFAULT 1,
UNIQUE KEY uk_promo_product (promotion_id, product_id)
);
```
2. 核心服务实现
```java
// 价格计算服务接口
public interface PriceCalculationService {
/
* 获取商品最终售价
* @param productId 商品ID
* @param regionId 区域ID
* @param quantity 购买数量
* @param userId 用户ID(用于会员价)
* @return 最终价格信息
*/
PriceResult getFinalPrice(Long productId, Long regionId,
Integer quantity, Long userId);
/
* 批量计算商品价格
*/
Map
batchGetPrices(List queries);
/
* 创建促销活动
*/
Promotion createPromotion(PromotionCreateRequest request);
}
// 价格计算实现
@Service
public class PriceCalculationServiceImpl implements PriceCalculationService {
@Autowired
private ProductPriceRepository priceRepository;
@Autowired
private PromotionRepository promotionRepository;
@Autowired
private MemberService memberService;
@Override
public PriceResult getFinalPrice(Long productId, Long regionId,
Integer quantity, Long userId) {
// 1. 获取基础价格
ProductPrice price = priceRepository.findByProductAndRegion(productId, regionId);
// 2. 检查会员价
PriceResult result = new PriceResult(price);
if (userId != null) {
MemberPrice memberPrice = memberService.getMemberPrice(userId, productId);
if (memberPrice != null && memberPrice.getPrice() < price.getBasePrice()) {
result.setMemberPrice(memberPrice.getPrice());
}
}
// 3. 检查适用促销
List activePromos = promotionRepository.findActivePromotions(
productId, LocalDateTime.now());
// 按优先级排序
activePromos.sort(Comparator.comparingInt(Promotion::getPriority).reversed());
for (Promotion promo : activePromos) {
if (promo.getType() == PromotionType.SPECIAL_PRICE) {
// 特价促销直接替换价格
PromotionProduct pp = promo.getProducts().stream()
.filter(p -> p.getProductId().equals(productId))
.findFirst().orElse(null);
if (pp != null) {
result.setPromotionPrice(pp.getPromotionPrice());
result.setPromotionInfo(promo);
break;
}
} else if (promo.getType() == PromotionType.DISCOUNT &&
quantity >= promo.getMinOrderQty()) {
// 折扣促销
// ... 折扣计算逻辑
}
// 其他促销类型处理...
}
return result;
}
}
```
3. 动态定价实现
```python
动态定价策略示例
class DynamicPricingEngine:
def __init__(self):
self.strategies = {
inventory_based: self.inventory_based_pricing,
shelf_life_based: self.shelf_life_based_pricing,
competitor_based: self.competitor_based_pricing
}
def inventory_based_pricing(self, product, current_price):
"""基于库存水平的定价策略"""
inventory_level = product.get_inventory_level()
if inventory_level > product.max_inventory * 0.8:
库存高,降价5%
return current_price * 0.95
elif inventory_level < product.min_inventory:
库存低,涨价3%
return current_price * 1.03
return current_price
def shelf_life_based_pricing(self, product, current_price):
"""基于保质期的定价策略"""
remaining_days = product.get_remaining_shelf_life()
if remaining_days < 3:
临近保质期,大幅降价
return current_price * 0.7
elif remaining_days < 7:
即将到期,适度降价
return current_price * 0.9
return current_price
def competitor_based_pricing(self, product, current_price):
"""基于竞品价格的定价策略"""
competitor_price = self.get_competitor_price(product)
if competitor_price < current_price * 0.95:
竞品价格明显低于我们
return competitor_price * 1.02 保持微小优势
return current_price
def calculate_new_price(self, product, strategy_names):
current_price = product.get_current_price()
for strategy in strategy_names:
if strategy in self.strategies:
current_price = self.strategies[strategy](product, current_price)
return current_price
```
四、关键业务规则
1. 价格优先级规则:
- 会员价 > 促销价 > 动态调价 > 基础价
- 相同类型促销按优先级排序
2. 价格调整限制:
- 单次调价幅度不超过±15%
- 24小时内调价次数不超过3次
- 毛利率不得低于行业基准值
3. 生鲜特殊规则:
- 叶菜类商品每日必须调价
- 短保商品(保质期<3天)需每日多次调价
- 破损率高的商品自动降价
五、系统集成点
1. 采购系统:获取最新采购成本作为定价参考
2. 库存系统:根据库存水平触发动态调价
3. 销售系统:实时销售数据反馈至定价引擎
4. 会员系统:获取会员等级和专属价格
5. 财务系统:价格变动对毛利率的影响分析
六、实施路线图
1. 第一阶段(1个月):
- 基础价格管理功能开发
- 简单促销活动支持
- 价格历史记录
2. 第二阶段(2个月):
- 动态定价引擎开发
- 复杂促销规则支持
- 价格预警系统
3. 第三阶段(1个月):
- 机器学习模型集成
- A/B测试框架
- 报表和分析看板
七、测试要点
1. 价格计算准确性测试:
- 各种促销组合下的价格计算
- 会员价与促销价的优先级
- 边界条件测试(如数量阈值)
2. 性能测试:
- 高并发下的价格查询
- 批量价格更新性能
- 促销活动开始/结束时的系统负载
3. 业务规则验证:
- 价格调整限制规则
- 毛利率保护机制
- 生鲜特殊规则实现
八、运维考虑
1. 价格缓存策略:
- 热点商品价格本地缓存
- 缓存失效机制
- 缓存一致性保证
2. 监控告警:
- 异常价格变动监控
- 促销活动预算超支告警
- 定价引擎性能监控
3. 回滚机制:
- 价格批量更新回滚
- 促销活动紧急停止
- 定价策略版本控制
该价格管理模块设计充分考虑了生鲜行业的特殊性,通过动态定价、智能促销和严格的价格管控,帮助美菜生鲜实现精细化运营和利润最大化。