| 项目 | 内容 |
|---|---|
| 接口名称 | 获取用户作为卖家的交易评价列表(分页) |
| 接口路径 | /secondTradeRecord/getSellerEvaluationList |
| 请求方式 | GET |
| 接口版本 | v1.1(支持分页) |
| 开发时间 | 2025-11-18 |
| 接口状态 | ✅ 已完成 |
用于用户主页展示该用户作为卖家收到的所有交易评价,支持分页查询,包含:
| 参数名 | 类型 | 必填 | 描述 | 示例值 | 默认值 |
|---|---|---|---|---|---|
| sellerId | Integer | ✅ 是 | 卖家用户ID(主页用户ID) | 123 | - |
| pageNum | Integer | ❌ 否 | 页码(从1开始) | 1 | 1 |
| pageSize | Integer | ❌ 否 | 每页条数(最大100) | 10 | 10 |
参数说明:
pageNum: 页码从1开始,传入小于1的值自动修正为1pageSize: 每页条数,传入小于1的值自动修正为10,超过100自动限制为100# 获取第1页,每页10条(使用默认值)
curl -X GET "http://localhost:8080/secondTradeRecord/getSellerEvaluationList?sellerId=123" \
-H "Authorization: Bearer your_token_here"
# 获取第2页,每页20条
curl -X GET "http://localhost:8080/secondTradeRecord/getSellerEvaluationList?sellerId=123&pageNum=2&pageSize=20" \
-H "Authorization: Bearer your_token_here"
// 基本用法
axios.get('/secondTradeRecord/getSellerEvaluationList', {
params: {
sellerId: 123,
pageNum: 1,
pageSize: 10
},
headers: {
'Authorization': 'Bearer your_token_here'
}
})
.then(response => {
const { records, total, pages, current, size } = response.data.data;
console.log(`当前第${current}页,每页${size}条`);
console.log(`共${total}条数据,${pages}页`);
console.log('评价列表:', records);
})
.catch(error => {
console.error(error);
});
// 结合分页组件使用
function loadEvaluations(sellerId, pageNum = 1, pageSize = 10) {
return axios.get('/secondTradeRecord/getSellerEvaluationList', {
params: { sellerId, pageNum, pageSize }
});
}
// 加载下一页
function loadNextPage(currentPage) {
loadEvaluations(123, currentPage + 1, 10)
.then(response => {
// 处理数据
});
}
String url = "http://localhost:8080/secondTradeRecord/getSellerEvaluationList" +
"?sellerId=123&pageNum=1&pageSize=10";
RestTemplate restTemplate = new RestTemplate();
R<IPage<SellerEvaluationVo>> result = restTemplate.getForObject(url, R.class);
IPage<SellerEvaluationVo> page = result.getData();
System.out.println("总记录数:" + page.getTotal());
System.out.println("总页数:" + page.getPages());
System.out.println("当前页:" + page.getCurrent());
System.out.println("每页条数:" + page.getSize());
List<SellerEvaluationVo> records = page.getRecords();
| 字段名 | 类型 | 描述 |
|---|---|---|
| code | Integer | 响应状态码,200表示成功 |
| msg | String | 响应消息 |
| data | IPage<SellerEvaluationVo> | 分页数据对象 |
| 字段名 | 类型 | 描述 | 示例值 |
|---|---|---|---|
| records | Array<SellerEvaluationVo> | 当前页的评价列表 | [...] |
| total | Long | 总记录数 | 45 |
| size | Long | 每页条数 | 10 |
| current | Long | 当前页码 | 1 |
| pages | Long | 总页数 | 5 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| id | Integer | ✅ | 交易记录ID | 1 |
| tradeNo | String | ✅ | 交易编号 | S2025111800001 |
| transactionTime | String | ✅ | 交易时间 | 2025-11-18 10:00:00 |
| transactionAmount | BigDecimal | ✅ | 交易金额(元) | 3800.00 |
| tradeStatus | Integer | ✅ | 交易状态 | 4 |
| createdTime | String | ✅ | 创建时间 | 2025-11-18 09:00:00 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| goodsId | Integer | ✅ | 商品ID | 100 |
| goodsTitle | String | ❌ | 商品标题 | 二手iPhone 13 128G 白色 95新 |
| goodsHomeImage | String | ❌ | 商品封面图片URL | https://cdn.example.com/goods/iphone13.jpg |
| goodsPrice | BigDecimal | ❌ | 商品价格(元) | 3999.00 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| buyerId | Integer | ✅ | 买家ID | 456 |
| buyerName | String | ❌ | 买家昵称 | 张三 |
| buyerImage | String | ❌ | 买家头像URL | https://cdn.example.com/avatar/user456.jpg |
| buyerPhone | String | ❌ | 买家手机号 | 13800138000 |
| buyerRealName | String | ❌ | 买家真实姓名 | 张三三 |
| buyerSex | String | ❌ | 买家性别 | 男 |
| buyerJianjie | String | ❌ | 买家简介 | 热爱数码产品,诚信交易 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| buyerEvaluate | String | ✅ | 买家评价内容 | 商品质量很好,和描述一致,卖家态度也不错,推荐! |
| buyerRating | Integer | ❌ | 买家评分(1-5分) | 5 |
| buyerCreditScore | Integer | ✅ | 买家信用积分 | 450 |
| buyerCreditLevel | String | ✅ | 买家风控评分等级 | A |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| sellerId | Integer | ✅ | 卖家ID | 123 |
| sellerName | String | ❌ | 卖家昵称 | 李四 |
| sellerImage | String | ❌ | 卖家头像URL | https://cdn.example.com/seller.jpg |
| sellerCreditScore | Integer | ✅ | 卖家信用积分 | 500 |
| sellerCreditLevel | String | ✅ | 卖家风控评分等级 | O |
| 状态值 | 状态名称 | 说明 |
|---|---|---|
| 1 | 待确认 | 买家发起交易请求,等待卖家确认 |
| 2 | 已拒绝 | 卖家拒绝了交易请求 |
| 3 | 待交易 | 双方确认交易,等待线下交易 |
| 4 | 交易成功 | 交易完成,双方确认成功 |
| 5 | 交易失败 | 交易失败 |
| 6 | 交易取消 | 交易被取消 |
| 等级 | 违规次数 | 等级说明 | 风险程度 |
|---|---|---|---|
| O | 0次 | 无违规记录 | 🟢 无风险(最优) |
| A | 1-2次 | 轻微违规 | 🟢 低风险 |
| B | 3-5次 | 一般违规 | 🟡 中等风险 |
| C | 6-9次 | 较严重违规 | 🟡 较高风险 |
| D | 10-14次 | 严重违规 | 🔴 高风险 |
| E | ≥15次 | 极差 | 🔴 极高风险(最差) |
{
"code": 200,
"msg": "成功",
"data": {
"records": [
{
"id": 1,
"tradeNo": "S2025111800001",
"goodsId": 100,
"goodsTitle": "二手iPhone 13 128G 白色 95新",
"goodsHomeImage": "https://cdn.example.com/goods/iphone13.jpg",
"goodsPrice": 3999.00,
"transactionAmount": 3800.00,
"buyerId": 456,
"buyerName": "张三",
"buyerImage": "https://cdn.example.com/avatar/user456.jpg",
"buyerPhone": "13800138000",
"buyerRealName": "张三三",
"buyerSex": "男",
"buyerJianjie": "热爱数码产品,诚信交易",
"buyerEvaluate": "商品质量很好,和描述一致,卖家态度也不错,推荐!",
"buyerRating": 5,
"buyerCreditScore": 450,
"buyerCreditLevel": "A",
"sellerId": 123,
"sellerName": "李四",
"sellerImage": "https://cdn.example.com/avatar/user123.jpg",
"sellerCreditScore": 500,
"sellerCreditLevel": "O",
"transactionTime": "2025-11-18 10:00:00",
"tradeStatus": 4,
"createdTime": "2025-11-18 09:00:00"
}
],
"total": 45,
"size": 10,
"current": 1,
"pages": 5
}
}
{
"code": 200,
"msg": "成功",
"data": {
"records": [],
"total": 0,
"size": 10,
"current": 1,
"pages": 0
}
}
{
"code": 500,
"msg": "获取评价列表失败: 卖家ID不能为空",
"data": null
}
{
"code": 500,
"msg": "获取评价列表失败: 数据库连接异常",
"data": null
}
假设某卖家有 45 条评价:
| pageNum | pageSize | 返回记录 | 页面显示 |
|---|---|---|---|
| 1 | 10 | 1-10 | 第1页,共5页,显示10条 |
| 2 | 10 | 11-20 | 第2页,共5页,显示10条 |
| 3 | 10 | 21-30 | 第3页,共5页,显示10条 |
| 4 | 10 | 31-40 | 第4页,共5页,显示10条 |
| 5 | 10 | 41-45 | 第5页,共5页,显示5条 |
数据过滤
buyer_evaluate IS NOT NULL AND buyer_evaluate != '')delete_flag = 0)分页限制
数据关联
goods_record_id 关联 second_goods_record 表buyer_id 关联 life_user 表seller_id 关联 life_user 表user_id 关联 second_user_credit 表second_risk_control_record 表性能优化
| HTTP状态码 | code | msg | 说明 | 解决方案 |
|---|---|---|---|---|
| 200 | 200 | 成功 | 请求成功 | - |
| 200 | 500 | 卖家ID不能为空 | 未传入 sellerId 参数 | 检查请求参数,确保传入 sellerId |
| 200 | 500 | 获取评价列表失败: xxx | 系统异常 | 查看日志,联系后端开发人员 |
| 500 | - | - | 服务器内部错误 | 联系后端开发人员 |
<template>
<div class="evaluation-list">
<!-- 评价列表 -->
<div v-for="item in evaluations" :key="item.id" class="evaluation-item">
<div class="buyer-info">
<img :src="item.buyerImage" :alt="item.buyerName" />
<span>{{ item.buyerName }}</span>
<el-rate :model-value="item.buyerRating" disabled />
</div>
<div class="evaluation-content">{{ item.buyerEvaluate }}</div>
<div class="evaluation-time">{{ item.createdTime }}</div>
</div>
<!-- 分页组件 -->
<el-pagination
v-model:current-page="pageNum"
v-model:page-size="pageSize"
:page-sizes="[10, 20, 50, 100]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import axios from 'axios';
const sellerId = ref(123);
const pageNum = ref(1);
const pageSize = ref(10);
const total = ref(0);
const evaluations = ref([]);
// 加载评价列表
const loadEvaluations = async () => {
try {
const response = await axios.get('/secondTradeRecord/getSellerEvaluationList', {
params: {
sellerId: sellerId.value,
pageNum: pageNum.value,
pageSize: pageSize.value
}
});
const { records, total: totalCount } = response.data.data;
evaluations.value = records;
total.value = totalCount;
} catch (error) {
console.error('加载失败:', error);
}
};
// 每页条数改变
const handleSizeChange = (newSize) => {
pageSize.value = newSize;
pageNum.value = 1; // 重置到第一页
loadEvaluations();
};
// 当前页改变
const handleCurrentChange = (newPage) => {
pageNum.value = newPage;
loadEvaluations();
};
onMounted(() => {
loadEvaluations();
});
</script>
import React, { useState, useEffect } from 'react';
import { Pagination, Rate, Avatar, List } from 'antd';
import axios from 'axios';
function SellerEvaluationList({ sellerId }) {
const [pageNum, setPageNum] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [total, setTotal] = useState(0);
const [evaluations, setEvaluations] = useState([]);
const [loading, setLoading] = useState(false);
// 加载评价列表
const loadEvaluations = async () => {
setLoading(true);
try {
const response = await axios.get('/secondTradeRecord/getSellerEvaluationList', {
params: { sellerId, pageNum, pageSize }
});
const { records, total: totalCount } = response.data.data;
setEvaluations(records);
setTotal(totalCount);
} catch (error) {
console.error('加载失败:', error);
} finally {
setLoading(false);
}
};
useEffect(() => {
loadEvaluations();
}, [pageNum, pageSize, sellerId]);
// 页码改变
const handlePageChange = (page, size) => {
setPageNum(page);
setPageSize(size);
};
return (
<div>
<List
loading={loading}
dataSource={evaluations}
renderItem={(item) => (
<List.Item>
<List.Item.Meta
avatar={<Avatar src={item.buyerImage} />}
title={
<div>
<span>{item.buyerName}</span>
<Rate value={item.buyerRating} disabled style={{ marginLeft: 10 }} />
</div>
}
description={
<>
<div>{item.buyerEvaluate}</div>
<div style={{ color: '#999', fontSize: 12, marginTop: 5 }}>
{item.createdTime}
</div>
</>
}
/>
</List.Item>
)}
/>
<Pagination
current={pageNum}
pageSize={pageSize}
total={total}
onChange={handlePageChange}
showSizeChanger
showQuickJumper
showTotal={(total) => `共 ${total} 条`}
pageSizeOptions={[10, 20, 50, 100]}
/>
</div>
);
}
export default SellerEvaluationList;
必传参数
sellerId 为必传参数,用于查看指定用户的评价列表"卖家ID不能为空"分页参数
pageNum 和 pageSize 为可选参数,有默认值数据权限
空数据处理
[]字段可空性
null,前端需要做空值判断| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2025-11-18 | 初始版本,返回全部数据 | 开发团队 |
| v1.1 | 2025-11-18 | 新增分页功能 | 开发团队 |
| v1.1 | 2025-11-18 | 优化查询方式,使用 MyBatis Plus | 开发团队 |
| v1.1 | 2025-11-18 | 增加风控评分等级计算 | 开发团队 |
| v1.1 | 2025-11-18 | 增加更多用户信息字段 | 开发团队 |
如有问题或建议,请联系:
alien-second/doc/获取卖家交易评价列表接口文档.md最后更新时间:2025-11-18(v1.1 - 支持分页)