功能概述 小象买菜系统的动态价格展示功能需要根据多种因素实时调整商品价格,包括市场波动、促销活动、库存状况、用户身份等,以提供更灵活的定价策略和更好的用户体验。 技术实现方案 1.后端架构设计 价格计算服务 -核心模块: -基础价格管理:维护商品基准价格 -价格
功能概述
小象买菜系统的动态价格展示功能需要根据多种因素实时调整商品价格,包括市场波动、促销活动、库存状况、用户身份等,以提供更灵活的定价策略和更好的用户体验。
技术实现方案
1. 后端架构设计
价格计算服务
- 核心模块:
- 基础价格管理:维护商品基准价格
- 价格规则引擎:应用各种定价规则
- 实时价格计算:根据当前上下文计算最终价格
- 价格缓存:提高频繁访问商品的价格获取速度
数据库设计
```sql
-- 商品基础表
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
base_price DECIMAL(10,2),
-- 其他基础字段...
);
-- 价格规则表
CREATE TABLE pricing_rules (
id INT PRIMARY KEY,
rule_type ENUM(promotion, time_based, user_segment, inventory),
rule_data JSON, -- 存储规则具体参数
start_time DATETIME,
end_time DATETIME,
is_active BOOLEAN,
product_id INT REFERENCES products(id)
);
-- 用户价格组表
CREATE TABLE user_price_groups (
id INT PRIMARY KEY,
group_name VARCHAR(50),
discount_rate DECIMAL(5,2)
);
-- 用户价格组映射表
CREATE TABLE user_group_mappings (
user_id INT,
group_id INT REFERENCES user_price_groups(id),
PRIMARY KEY (user_id)
);
-- 实时价格缓存表
CREATE TABLE realtime_prices (
product_id INT REFERENCES products(id),
user_id INT, -- 可为NULL表示通用价格
calculated_price DECIMAL(10,2),
last_updated TIMESTAMP,
PRIMARY KEY (product_id, user_id)
);
```
2. 价格计算逻辑
```python
class PriceCalculator:
def __init__(self, product_id, user_id=None):
self.product_id = product_id
self.user_id = user_id
def get_current_price(self):
1. 检查缓存
cached_price = self._get_from_cache()
if cached_price is not None:
return cached_price
2. 获取基础价格
base_price = self._get_base_price()
3. 应用所有适用规则
applicable_rules = self._get_applicable_rules()
final_price = base_price
for rule in applicable_rules:
final_price = self._apply_rule(final_price, rule)
4. 更新缓存
self._update_cache(final_price)
return final_price
def _get_from_cache(self):
实现从缓存获取逻辑
pass
def _get_base_price(self):
从数据库获取基础价格
pass
def _get_applicable_rules(self):
获取所有适用的定价规则
包括促销、时间相关、用户分段等
pass
def _apply_rule(self, current_price, rule):
根据规则类型应用不同的计算逻辑
if rule[type] == percentage_discount:
return current_price * (1 - rule[discount_rate])
elif rule[type] == fixed_discount:
return max(0, current_price - rule[discount_amount])
其他规则类型...
return current_price
def _update_cache(self, price):
更新缓存逻辑
pass
```
3. 前端实现方案
动态价格展示组件
```javascript
class DynamicPriceDisplay extends React.Component {
state = {
currentPrice: null,
loading: true,
lastUpdated: null
};
componentDidMount() {
this.fetchPrice();
// 设置定时器定期刷新价格
this.refreshInterval = setInterval(this.fetchPrice, 30000); // 30秒刷新
}
componentWillUnmount() {
clearInterval(this.refreshInterval);
}
fetchPrice = async () => {
try {
const response = await fetch(`/api/products/${this.props.productId}/price`, {
headers: {
Authorization: `Bearer ${getAuthToken()}`,
X-User-Context: JSON.stringify({
userId: getCurrentUserId(),
// 其他上下文信息如地理位置等
})
}
});
const data = await response.json();
this.setState({
currentPrice: data.price,
loading: false,
lastUpdated: new Date()
});
} catch (error) {
console.error(Error fetching price:, error);
this.setState({ loading: false });
}
};
render() {
const { currentPrice, loading, lastUpdated } = this.state;
return (
{loading ? (
加载价格...
) : (
<>
¥{currentPrice.toFixed(2)}
{lastUpdated && (
(更新于 {lastUpdated.toLocaleTimeString()})
)}
>
)}
);
}
}
```
4. 实时更新机制
WebSocket实现方案
```javascript
// 前端WebSocket连接
const priceSocket = new WebSocket(wss://yourdomain.com/price-updates);
priceSocket.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.productId === currentProductId) {
// 更新价格显示
updatePriceDisplay(data.newPrice);
}
};
// 后端WebSocket服务 (Node.js示例)
const WebSocket = require(ws);
const wss = new WebSocket.Server({ port: 8080 });
wss.on(connection, (ws) => {
// 验证用户身份
// 订阅用户关注的产品价格更新
ws.on(message, (message) => {
// 处理客户端消息
});
});
// 当价格变化时通知相关客户端
function notifyPriceChange(productId, newPrice) {
const message = JSON.stringify({
type: price_update,
productId: productId,
newPrice: newPrice,
timestamp: new Date().toISOString()
});
// 广播给所有订阅该产品的客户端
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
// 这里可以添加更精细的订阅逻辑
client.send(message);
}
});
}
```
5. 价格更新触发条件
系统应在以下情况下触发价格更新:
1. 定时更新:每30分钟检查一次基础价格更新
2. 库存变化:当库存低于阈值时触发动态定价
3. 促销活动:促销开始/结束时间到达时
4. 用户行为:用户加入购物车、批量购买等
5. 市场数据:接入外部市场价格API(如生鲜市场批发价)
6. 管理员手动调整:后台管理系统直接修改价格
性能优化建议
1. 多级缓存策略:
- Redis缓存常用商品价格
- 浏览器本地存储用户最近查看的商品价格
- CDN缓存静态价格信息(对于不常变化的商品)
2. 价格计算预加载:
- 在用户浏览商品列表时预加载价格
- 使用Intersection Observer实现懒加载价格
3. 批量价格查询:
- 前端实现批量查询接口,减少HTTP请求
- 后端支持批量价格计算API
4. 价格更新队列:
- 对于大量价格更新,使用消息队列处理
- 避免瞬间高并发写入数据库
安全考虑
1. 价格防篡改:
- 所有价格计算应在后端完成
- 前端仅展示,不处理价格逻辑
- 使用HTTPS保护传输数据
2. 权限控制:
- 价格管理接口需要严格权限验证
- 不同用户角色看到不同价格(如批发商vs零售用户)
3. 审计日志:
- 记录所有价格变更操作
- 包括变更时间、操作人、变更前后值
扩展功能建议
1. 价格历史趋势:展示商品价格变化曲线
2. 价格预测:基于历史数据预测未来价格走势
3. 价格提醒:当价格降到用户设定值时通知
4. A/B测试:不同用户群体看到不同定价策略
5. 动态定价算法:基于机器学习的智能定价
通过以上方案,小象买菜系统可以实现灵活、实时、个性化的动态价格展示功能,提升用户体验和商业灵活性。