一、功能概述
本地供应商评价功能是小象买菜系统中提升供应链透明度和用户信任度的重要组成部分。该功能允许用户对购买的商品来源供应商进行评价,帮助其他用户了解供应商质量,同时为平台提供供应商管理数据。
二、系统架构设计
1. 数据库设计
```sql
-- 供应商表
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
address VARCHAR(255),
contact_phone VARCHAR(20),
business_license VARCHAR(50),
avg_rating DECIMAL(3,2) DEFAULT 0,
evaluation_count INT DEFAULT 0,
status TINYINT DEFAULT 1 COMMENT 1-活跃 0-禁用,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 供应商评价表
CREATE TABLE supplier_evaluations (
evaluation_id INT PRIMARY KEY AUTO_INCREMENT,
supplier_id INT NOT NULL,
user_id INT NOT NULL,
order_id INT NOT NULL,
rating TINYINT NOT NULL COMMENT 1-5分,
quality_rating TINYINT COMMENT 产品质量评分,
delivery_rating TINYINT COMMENT 配送服务评分,
freshness_rating TINYINT COMMENT 新鲜度评分,
content TEXT COMMENT 评价内容,
images VARCHAR(500) COMMENT 评价图片URL,逗号分隔,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id),
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
```
2. 后端API设计
```
/api/suppliers/{id}/evaluations GET 获取供应商评价列表
/api/suppliers/{id}/evaluations POST 提交供应商评价
/api/suppliers/{id}/stats GET 获取供应商评价统计
```
三、核心功能实现
1. 评价提交功能
```javascript
// 前端评价提交示例
async function submitSupplierEvaluation(supplierId, orderId, ratings, content, images) {
try {
const response = await fetch(`/api/suppliers/${supplierId}/evaluations`, {
method: POST,
headers: {
Content-Type: application/json,
Authorization: `Bearer ${localStorage.getItem(token)}`
},
body: JSON.stringify({
order_id: orderId,
rating: ratings.overall,
quality_rating: ratings.quality,
delivery_rating: ratings.delivery,
freshness_rating: ratings.freshness,
content: content,
images: images.join(,)
})
});
if (response.ok) {
alert(评价提交成功);
// 刷新评价列表
} else {
alert(评价提交失败);
}
} catch (error) {
console.error(评价提交错误:, error);
}
}
```
2. 评价统计与展示
```python
后端获取供应商评价统计
@app.route(/api/suppliers/
/stats, methods=[GET])
def get_supplier_stats(supplier_id):
查询平均评分
avg_rating = db.session.query(
db.func.avg(SupplierEvaluation.rating)
).filter(
SupplierEvaluation.supplier_id == supplier_id
).scalar() or 0
查询各维度评分
quality_avg = db.session.query(
db.func.avg(SupplierEvaluation.quality_rating)
).filter(
SupplierEvaluation.supplier_id == supplier_id
).scalar() or 0
其他统计...
return jsonify({
avg_rating: round(avg_rating, 2),
quality_avg: round(quality_avg, 2),
evaluation_count: SupplierEvaluation.query.filter_by(
supplier_id=supplier_id
).count(),
其他统计字段...
})
```
3. 评价列表展示
```javascript
// 前端评价列表组件
function SupplierEvaluations({ supplierId }) {
const [evaluations, setEvaluations] = useState([]);
const [stats, setStats] = useState(null);
useEffect(() => {
// 获取评价统计
fetch(`/api/suppliers/${supplierId}/stats`)
.then(res => res.json())
.then(data => setStats(data));
// 获取评价列表
fetch(`/api/suppliers/${supplierId}/evaluations`)
.then(res => res.json())
.then(data => setEvaluations(data));
}, [supplierId]);
return (
综合评分: {stats?.avg_rating || 暂无}
产品质量: {stats?.quality_avg || 暂无}
{/* 其他维度展示 */}
{evaluations.map(eval => (
用户{eval.user_id % 1000}
{formatDate(eval.created_at)}
{eval.content}
{eval.images && (
{eval.images.split(,).map(img => (

))}
)}
))}
);
}
```
四、关键业务逻辑
1. 评价权限控制
```python
检查用户是否有权评价该供应商
def can_evaluate_supplier(user_id, supplier_id, order_id):
检查订单是否存在且属于该用户
order = Order.query.filter_by(
id=order_id,
user_id=user_id,
status=completed
).first()
if not order:
return False
检查订单中是否有该供应商的商品
order_items = OrderItem.query.filter_by(
order_id=order_id
).all()
for item in order_items:
if item.product and item.product.supplier_id == supplier_id:
return True
return False
```
2. 评分计算与更新
```python
更新供应商平均评分
def update_supplier_rating(supplier_id):
evaluations = SupplierEvaluation.query.filter_by(
supplier_id=supplier_id
).all()
if not evaluations:
return 0
total = sum(e.rating for e in evaluations)
count = len(evaluations)
avg_rating = total / count
更新供应商表中的平均评分
supplier = Supplier.query.get(supplier_id)
supplier.avg_rating = avg_rating
supplier.evaluation_count = count
db.session.commit()
return avg_rating
```
五、扩展功能建议
1. 评价审核机制:对用户评价进行人工或AI审核,防止恶意评价
2. 评价回复功能:允许供应商对评价进行回复解释
3. 评价标签系统:自动分析评价内容生成标签(如"包装完好"、"配送及时")
4. 评价激励体系:对高质量评价给予用户积分奖励
5. 供应商分级系统:根据评价数据自动划分供应商等级
六、技术实现要点
1. 性能优化:
- 对评价表进行分表或分区(按时间或供应商ID)
- 实现评价数据的缓存(Redis)
- 对热门供应商的评价进行预加载
2. 安全性考虑:
- 防止评价刷单(IP限制、用户行为分析)
- 敏感词过滤
- 评价内容长度限制
3. 用户体验:
- 评价表单引导(分步骤、示例)
- 实时评分预览
- 图片上传与裁剪功能
通过以上实现,小象买菜系统可以构建一个完善的本地供应商评价体系,既能帮助消费者做出更明智的购买决策,也能为平台提供有价值的供应商管理数据。