一、系统概述
小象买菜系统需要实现动态价格展示功能,即商品价格能够根据市场行情、库存情况、促销活动等因素实时或近实时更新,为用户提供准确的价格信息。
二、功能需求分析
1. 实时价格更新:价格变化能够及时反映在用户界面上
2. 多维度定价策略:支持不同用户群体、时间段、地区的差异化定价
3. 价格历史记录:记录商品价格变动历史,支持价格趋势分析
4. 促销活动集成:与满减、折扣、秒杀等促销活动无缝对接
5. 库存联动:低库存时自动调整价格(如涨价或促销清仓)
三、技术架构设计
前端实现
```javascript
// Vue.js 示例:价格组件
¥{{ currentPrice.toFixed(2) }}
¥{{ originalPrice.toFixed(2) }}
{{ priceTag }}
<script>
export default {
data() {
return {
currentPrice: 0,
originalPrice: 0,
priceTag:
}
},
mounted() {
// 通过WebSocket或轮询获取最新价格
this.fetchPrice();
// 如果是实时性要求高的场景,使用WebSocket
// this.initWebSocket();
},
methods: {
fetchPrice() {
// 调用API获取最新价格
api.getProductPrice(this.productId).then(response => {
this.currentPrice = response.price;
this.originalPrice = response.originalPrice;
this.priceTag = response.tag;
});
},
// WebSocket实现示例
initWebSocket() {
const ws = new WebSocket(wss://your-api-domain/price-updates);
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.productId === this.productId) {
this.updatePrice(data);
}
};
},
updatePrice(data) {
// 更新价格显示,可添加动画效果
this.currentPrice = data.price;
// 其他更新逻辑...
}
}
}
```
后端实现
1. 价格服务架构:
- 使用微服务架构,单独部署价格服务
- 采用Redis作为价格缓存,提高响应速度
- 数据库设计考虑价格历史记录
2. 价格计算逻辑:
```python
Python示例:价格计算服务
class PriceCalculator:
def __init__(self, product_id):
self.product_id = product_id
def calculate_price(self):
1. 获取基础价格
base_price = self._get_base_price()
2. 应用促销规则
promotion_price = self._apply_promotions(base_price)
3. 应用会员折扣
member_price = self._apply_member_discount(promotion_price)
4. 应用库存联动规则
final_price = self._apply_inventory_rules(member_price)
return final_price
def _get_base_price(self):
从数据库或缓存获取基础价格
pass
def _apply_promotions(self, price):
检查并应用所有适用的促销活动
pass
def _apply_member_discount(self, price):
根据用户等级应用折扣
pass
def _apply_inventory_rules(self, price):
根据库存情况调整价格
inventory = self._get_inventory_level()
if inventory < 10:
return price * 1.2 低库存时涨价20%
elif inventory > 100:
return price * 0.9 高库存时促销打9折
return price
```
3. 价格更新机制:
- 定时任务:每天固定时间批量更新价格
- 事件驱动:当上游系统(如采购系统)价格变动时触发更新
- 手动调整:运营人员通过后台管理系统调整价格
四、数据库设计
```sql
-- 商品价格表
CREATE TABLE product_prices (
id BIGSERIAL PRIMARY KEY,
product_id BIGINT NOT NULL,
base_price DECIMAL(10,2) NOT NULL,
current_price DECIMAL(10,2) NOT NULL,
original_price DECIMAL(10,2),
start_time TIMESTAMP NOT NULL,
end_time TIMESTAMP,
status VARCHAR(20) NOT NULL, -- 有效、失效等
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 价格历史表
CREATE TABLE price_history (
id BIGSERIAL PRIMARY KEY,
product_id BIGINT NOT NULL,
old_price DECIMAL(10,2) NOT NULL,
new_price DECIMAL(10,2) NOT NULL,
change_reason VARCHAR(100),
changed_by BIGINT, -- 操作人ID
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 促销规则表
CREATE TABLE promotion_rules (
id BIGSERIAL PRIMARY KEY,
rule_name VARCHAR(100) NOT NULL,
rule_type VARCHAR(50) NOT NULL, -- 折扣、满减等
conditions JSONB, -- 规则条件
discount_value DECIMAL(10,2),
start_time TIMESTAMP NOT NULL,
end_time TIMESTAMP NOT NULL,
status VARCHAR(20) NOT NULL,
priority INT DEFAULT 0
);
```
五、关键技术实现
1. 实时价格推送:
- 使用WebSocket实现服务器主动推送价格更新
- 备选方案:长轮询(Long Polling)或Server-Sent Events (SSE)
2. 价格缓存策略:
```java
// 使用Redis缓存价格示例
public class PriceCacheService {
private final RedisTemplate
redisTemplate;
public ProductPrice getPrice(Long productId) {
String key = "price:" + productId;
// 先从缓存获取
ProductPrice price = redisTemplate.opsForValue().get(key);
if (price == null) {
// 缓存未命中,从数据库获取
price = priceRepository.findByProductId(productId);
if (price != null) {
// 设置缓存,有效期5分钟
redisTemplate.opsForValue().set(key, price, 5, TimeUnit.MINUTES);
}
}
return price;
}
public void updatePrice(ProductPrice newPrice) {
// 更新数据库
priceRepository.save(newPrice);
// 更新缓存
String key = "price:" + newPrice.getProductId();
redisTemplate.opsForValue().set(key, newPrice);
// 发布价格变更消息
publishPriceChangeEvent(newPrice);
}
private void publishPriceChangeEvent(ProductPrice price) {
// 使用Redis Pub/Sub或MQ发布价格变更事件
}
}
```
3. 价格计算引擎:
- 采用规则引擎(如Drools)实现复杂的价格计算逻辑
- 支持动态加载和修改定价规则
六、测试方案
1. 单元测试:
- 测试价格计算逻辑的各种边界条件
- 测试促销规则的叠加效果
2. 集成测试:
- 测试价格服务与商品服务、订单服务的集成
- 测试缓存更新机制
3. 性能测试:
- 模拟高并发场景下的价格查询
- 测试价格更新时的系统稳定性
4. 用户体验测试:
- 测试价格变动时的界面展示效果
- 测试价格历史记录的展示逻辑
七、部署与监控
1. 部署方案:
- 价格服务独立部署,与主应用解耦
- 使用容器化技术(Docker)部署
- 配置自动扩缩容策略
2. 监控指标:
- 价格查询响应时间
- 价格更新延迟
- 缓存命中率
- 价格计算错误率
3. 告警策略:
- 价格更新失败告警
- 价格差异过大告警(如与市场价对比)
- 缓存异常告警
八、扩展功能考虑
1. 价格预测:基于历史数据预测未来价格走势
2. 价格对比:展示与其他平台的价格对比
3. 价格提醒:用户设置价格阈值,达到时通知
4. 动态定价算法:基于供需关系的智能定价
通过以上方案,小象买菜系统可以实现灵活、准确、实时的动态价格展示功能,提升用户体验和运营效率。