| 项目 | 内容 |
|---|---|
| 接口名称 | 根据姓名和身份证号获取委托人详情 |
| 接口路径 | /secondEntrustUser/detail |
| 请求方式 | GET |
| 接口版本 | v2.0 |
| 开发时间 | 2025-11-21 |
| 接口状态 | ✅ 已完成 |
根据委托人的姓名和身份证号获取该人的完整详情信息,以人为维度聚合查询所有相关数据,包含:
查询逻辑:
/admin/secondGoods/detail 接口逻辑)| 参数名 | 类型 | 必填 | 描述 | 示例值 |
|---|---|---|---|---|
| userName | String | ✅ 是 | 委托人姓名 | 张三 |
| idCard | String | ✅ 是 | 委托人身份证号 | 110101199001011234 |
# 获取委托人详情
curl -X GET "http://localhost:8080/secondEntrustUser/detail?userName=张三&idCard=110101199001011234" \
-H "Authorization: Bearer your_token_here"
// 获取委托人详情
axios.get('/secondEntrustUser/detail', {
params: {
userName: '张三',
idCard: '110101199001011234'
},
headers: {
'Authorization': 'Bearer your_token_here'
}
})
.then(response => {
const { entrustUserInfo, tradeRecords } = response.data.data;
console.log('委托人信息:', entrustUserInfo);
console.log('该人所有交易记录:', tradeRecords);
console.log('交易总数:', tradeRecords.length);
})
.catch(error => {
console.error(error);
});
String url = "http://localhost:8080/secondEntrustUser/detail" +
"?userName=张三&idCard=110101199001011234";
RestTemplate restTemplate = new RestTemplate();
R<SecondEntrustUserDetailVo> result = restTemplate.getForObject(url, R.class);
SecondEntrustUserDetailVo detailVo = result.getData();
SecondEntrustUser entrustUserInfo = detailVo.getEntrustUserInfo();
List<SecondTradeRecordVo> tradeRecords = detailVo.getTradeRecords();
System.out.println("委托人姓名:" + entrustUserInfo.getUserName());
System.out.println("该人关联的交易总数:" + tradeRecords.size());
| 字段名 | 类型 | 描述 |
|---|---|---|
| code | Integer | 响应状态码,200表示成功 |
| msg | String | 响应消息 |
| data | SecondEntrustUserDetailVo | 委托人详情对象 |
| 字段名 | 类型 | 描述 |
|---|---|---|
| entrustUserInfo | SecondEntrustUser | 委托人基本信息(该人的第一条记录) |
| tradeRecords | Array<SecondTradeRecordVo> | 该人所有委托记录关联的交易记录集合 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| id | Integer | ✅ | 委托人记录ID | 1 |
| tradeId | Integer | ✅ | 关联的交易ID | 100 |
| userName | String | ✅ | 委托人姓名 | 张三 |
| userPhone | String | ✅ | 委托人电话 | 13800138000 |
| idCard | String | ✅ | 委托人身份证号 | 110101199001011234 |
| idCardImg | String | ❌ | 委托人身份证照片URL | https://cdn.example.com/idcard/123.jpg |
| deleteFlag | Integer | ✅ | 删除标记(0:未删除,1:已删除) | 0 |
| createdTime | Date | ✅ | 创建时间 | 2025-11-21 10:00:00 |
| updatedTime | Date | ✅ | 更新时间 | 2025-11-21 10:00:00 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| id | Integer | ✅ | 交易记录ID | 100 |
| tradeNo | String | ✅ | 交易编号 | S2025112100001 |
| goodsId | Integer | ✅ | 商品ID | 200 |
| goodsRecordId | Integer | ✅ | 商品记录ID | 300 |
| transactionAmount | BigDecimal | ✅ | 交易金额(元) | 3800.00 |
| tradeStatus | Integer | ✅ | 交易状态 | 4 |
| transactionTime | Date | ❌ | 交易时间 | 2025-11-21 14:00:00 |
| transactionLocation | String | ❌ | 交易地点 | 北京市朝阳区xxx |
| createdTime | Date | ✅ | 创建时间 | 2025-11-21 10:00:00 |
| 字段名 | 类型 | 是否必返 | 描述 | 示例值 |
|---|---|---|---|---|
| buyerId | Integer | ✅ | 买方ID | 456 |
| buyerName | String | ❌ | 买方姓名 | 李四 |
| buyerPhone | String | ❌ | 买方电话 | 13900139000 |
| sellerId | Integer | ✅ | 卖方ID | 789 |
| sellerName | String | ❌ | 卖方姓名 | 王五 |
| sellerPhone | String | ❌ | 卖方电话 | 13700137000 |
| 字段名 | 类型 | 是否必返 | 描述 |
|---|---|---|---|
| operationJsonList | Array<JSONObject> | ✅ | 交易操作节点列表,展示完整交易流程 |
每个操作节点包含:
operationType: 操作类型operationTime: 操作时间operationUserId: 操作人IDoperationUserName: 操作人姓名operationDesc: 操作描述{
"code": 200,
"msg": "成功",
"data": {
"entrustUserInfo": {
"id": 1,
"tradeId": 100,
"userName": "张三",
"userPhone": "13800138000",
"idCard": "110101199001011234",
"idCardImg": "https://cdn.example.com/idcard/123.jpg",
"deleteFlag": 0,
"createdTime": "2025-11-21 10:00:00",
"updatedTime": "2025-11-21 10:00:00"
},
"tradeRecords": [
{
"id": 102,
"tradeNo": "S2025112100003",
"goodsId": 202,
"goodsRecordId": 302,
"transactionAmount": 2800.00,
"tradeStatus": 4,
"transactionTime": "2025-11-21 15:30:00",
"transactionLocation": "北京市海淀区xxx",
"buyerId": 456,
"buyerName": "李四",
"buyerPhone": "13900139000",
"sellerId": 789,
"sellerName": "王五",
"sellerPhone": "13700137000",
"createdTime": "2025-11-21 15:00:00",
"operationJsonList": [
{
"operationType": "CREATE",
"operationTime": "2025-11-21 15:00:00",
"operationUserId": 456,
"operationUserName": "李四",
"operationDesc": "创建交易"
},
{
"operationType": "COMPLETE",
"operationTime": "2025-11-21 15:30:00",
"operationUserId": 456,
"operationUserName": "李四",
"operationDesc": "完成交易"
}
]
},
{
"id": 101,
"tradeNo": "S2025112100002",
"goodsId": 201,
"goodsRecordId": 301,
"transactionAmount": 4500.00,
"tradeStatus": 4,
"transactionTime": "2025-11-21 14:00:00",
"transactionLocation": "北京市朝阳区xxx",
"buyerId": 457,
"buyerName": "赵六",
"buyerPhone": "13600136000",
"sellerId": 788,
"sellerName": "孙七",
"sellerPhone": "13500135000",
"createdTime": "2025-11-21 13:30:00",
"operationJsonList": [
{
"operationType": "CREATE",
"operationTime": "2025-11-21 13:30:00",
"operationUserId": 457,
"operationUserName": "赵六",
"operationDesc": "创建交易"
},
{
"operationType": "COMPLETE",
"operationTime": "2025-11-21 14:00:00",
"operationUserId": 457,
"operationUserName": "赵六",
"operationDesc": "完成交易"
}
]
},
{
"id": 100,
"tradeNo": "S2025112100001",
"goodsId": 200,
"goodsRecordId": 300,
"transactionAmount": 3800.00,
"tradeStatus": 4,
"transactionTime": "2025-11-21 10:00:00",
"transactionLocation": "北京市东城区xxx",
"buyerId": 455,
"buyerName": "周八",
"buyerPhone": "13400134000",
"sellerId": 787,
"sellerName": "吴九",
"sellerPhone": "13300133000",
"createdTime": "2025-11-21 09:30:00",
"operationJsonList": [
{
"operationType": "CREATE",
"operationTime": "2025-11-21 09:30:00",
"operationUserId": 455,
"operationUserName": "周八",
"operationDesc": "创建交易"
},
{
"operationType": "COMPLETE",
"operationTime": "2025-11-21 10:00:00",
"operationUserId": 455,
"operationUserName": "周八",
"operationDesc": "完成交易"
}
]
}
]
}
}
说明:张三(身份证号 110101199001011234)有3条委托记录,关联了3笔交易,接口返回了他所有的交易信息,按创建时间倒序排列。
{
"code": 500,
"msg": "委托人信息不存在",
"data": null
}
{
"code": 500,
"msg": "委托人姓名不能为空",
"data": null
}
查询维度
数据聚合
tradeIddelete_flag = 0)交易记录排序
交易详情处理
数据关联
second_entrust_user 表根据姓名和身份证号查询second_trade_record 表根据 tradeId 列表查询buyer_id 和 seller_id 关联 life_user 表second_trade_operation 表获取交易流程| 状态值 | 状态名称 | 说明 |
|---|---|---|
| 1 | 待确认 | 买家发起交易请求,等待卖家确认 |
| 2 | 已拒绝 | 卖家拒绝了交易请求 |
| 3 | 待交易 | 双方确认交易,等待线下交易 |
| 4 | 交易成功 | 交易完成,双方确认成功 |
| 5 | 交易失败 | 交易失败 |
| 6 | 交易取消 | 交易被取消 |
从分页列表点击某个委托人后,使用该接口获取该人的完整信息。
步骤:
GET /secondEntrustUser/detail?userName=张三&idCard=110101199001011234应用场景:
<template>
<div class="entrust-user-detail">
<el-page-header @back="goBack" title="返回列表">
<template #content>
<span class="page-title">委托人详情</span>
</template>
</el-page-header>
<!-- 委托人基本信息 -->
<el-card class="info-card" v-if="entrustUserInfo" style="margin-top: 20px;">
<template #header>
<div class="card-header">
<span>委托人信息</span>
</div>
</template>
<el-descriptions :column="2" border>
<el-descriptions-item label="姓名">
{{ entrustUserInfo.userName }}
</el-descriptions-item>
<el-descriptions-item label="身份证号">
{{ entrustUserInfo.idCard }}
</el-descriptions-item>
<el-descriptions-item label="联系电话">
{{ entrustUserInfo.userPhone }}
</el-descriptions-item>
<el-descriptions-item label="首次委托时间">
{{ entrustUserInfo.createdTime }}
</el-descriptions-item>
</el-descriptions>
</el-card>
<!-- 交易记录列表 -->
<el-card class="trade-card" style="margin-top: 20px;">
<template #header>
<div class="card-header">
<span>关联交易记录(共 {{ tradeRecords.length }} 笔)</span>
</div>
</template>
<el-timeline v-if="tradeRecords.length > 0">
<el-timeline-item
v-for="trade in tradeRecords"
:key="trade.id"
:timestamp="trade.createdTime"
placement="top"
>
<el-card>
<h4>交易编号:{{ trade.tradeNo }}</h4>
<el-row :gutter="20">
<el-col :span="12">
<p>交易金额:<el-tag type="danger">¥{{ trade.transactionAmount }}</el-tag></p>
<p>交易状态:<el-tag :type="getStatusType(trade.tradeStatus)">
{{ getTradeStatusText(trade.tradeStatus) }}
</el-tag></p>
</el-col>
<el-col :span="12">
<p>买方:{{ trade.buyerName }}({{ trade.buyerPhone }})</p>
<p>卖方:{{ trade.sellerName }}({{ trade.sellerPhone }})</p>
</el-col>
</el-row>
<!-- 交易操作流程 -->
<el-divider content-position="left">交易流程</el-divider>
<el-steps
:active="trade.operationJsonList.length"
finish-status="success"
align-center
>
<el-step
v-for="(operation, index) in trade.operationJsonList"
:key="index"
:title="operation.operationDesc"
:description="`${operation.operationTime} - ${operation.operationUserName}`"
/>
</el-steps>
</el-card>
</el-timeline-item>
</el-timeline>
<el-empty v-else description="暂无交易记录" />
</el-card>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import axios from 'axios';
import { ElMessage } from 'element-plus';
const route = useRoute();
const router = useRouter();
const userName = ref(route.query.userName);
const idCard = ref(route.query.idCard);
const entrustUserInfo = ref(null);
const tradeRecords = ref([]);
const loading = ref(false);
// 交易状态映射
const tradeStatusMap = {
1: '待确认',
2: '已拒绝',
3: '待交易',
4: '交易成功',
5: '交易失败',
6: '交易取消'
};
const getTradeStatusText = (status) => {
return tradeStatusMap[status] || '未知状态';
};
const getStatusType = (status) => {
const typeMap = {
1: 'info',
2: 'danger',
3: 'warning',
4: 'success',
5: 'danger',
6: 'info'
};
return typeMap[status] || 'info';
};
const goBack = () => {
router.back();
};
// 加载委托人详情
const loadDetail = async () => {
loading.value = true;
try {
const response = await axios.get('/secondEntrustUser/detail', {
params: {
userName: userName.value,
idCard: idCard.value
}
});
const data = response.data.data;
entrustUserInfo.value = data.entrustUserInfo;
tradeRecords.value = data.tradeRecords || [];
} catch (error) {
ElMessage.error('加载失败:' + error.message);
} finally {
loading.value = false;
}
};
onMounted(() => {
if (userName.value && idCard.value) {
loadDetail();
} else {
ElMessage.error('缺少必要参数');
router.back();
}
});
</script>
<style scoped>
.entrust-user-detail {
padding: 20px;
}
.page-title {
font-size: 18px;
font-weight: bold;
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
}
</style>
| HTTP状态码 | code | msg | 说明 | 解决方案 |
|---|---|---|---|---|
| 200 | 200 | 成功 | 请求成功 | - |
| 200 | 500 | 委托人信息不存在 | 该姓名和身份证号组合不存在 | 检查参数是否正确 |
| 200 | 500 | 委托人姓名不能为空 | 未传入姓名参数 | 必须传入userName参数 |
| 200 | 500 | 委托人身份证号不能为空 | 未传入身份证号参数 | 必须传入idCard参数 |
| 200 | 500 | 获取委托人详情失败: xxx | 系统异常 | 查看日志,联系后端开发人员 |
| 500 | - | - | 服务器内部错误 | 联系后端开发人员 |
必传参数
userName 和 idCard 都是必传参数查询维度
交易记录
操作节点信息
/admin/secondGoods/detail 接口的实现逻辑性能考虑
| 版本 | 日期 | 修改内容 | 修改人 |
|---|---|---|---|
| v1.0 | 2025-11-21 | 初始版本,根据主键ID查询 | 开发团队 |
| v2.0 | 2025-11-21 | 重大更新:改为根据姓名+身份证号查询,以人为维度聚合交易 | 开发团队 |
如有问题或建议,请联系:
alien-second/doc/委托人详情查询接口文档.md最后更新时间:2025-11-21(v2.0 - 以人为维度)