agent-skill-backend/账户交易记录查询接口文档.md

580 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 账户交易记录查询接口文档
## 概述
本文档描述了账户交易记录查询相关的三个接口,包括充值记录、消费记录和赠送记录的查询功能。
**基础信息:**
- 基础路径:`/api/account`
- 请求方式:全部使用 POST
- 认证要求:所有接口都需要登录认证(@RequireAuth
- 响应格式:统一使用 `CommonResult<T>` 包装
---
## 1. 分页查询充值记录
### 接口信息
- **接口名称**:分页查询充值记录
- **接口路径**`/api/account/getRechargePageList`
- **请求方式**POST
- **接口描述**查询所有的充值记录transactionType=1支持分页和条件筛选默认根据创建时间倒序排列
### 请求参数
**Content-Type**: `application/json`
**请求体参数AccountTransactionDto**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| pageNum | Integer | 否 | 当前页码默认1 |
| pageSize | Integer | 否 | 每页数量默认10 |
| sortBy | String | 否 | 排序字段 |
| sortDesc | Boolean | 否 | 是否降序默认true |
| userId | Long | 否 | 用户ID用于筛选特定用户的充值记录 |
| status | Integer | 否 | 交易状态1.成功 2.失败 3.处理中 |
| transactionNo | String | 否 | 交易单号,精确匹配 |
| createTimeStart | Date | 否 | 开始时间格式yyyy-MM-dd HH:mm:ss |
| createTimeEnd | Date | 否 | 结束时间格式yyyy-MM-dd HH:mm:ss |
| deleteFlag | Integer | 否 | 删除标记0.未删除 1.已删除默认0 |
**注意**:此接口固定查询 transactionType=1充值的记录
### 请求示例
```json
{
"pageNum": 1,
"pageSize": 10,
"userId": 1001,
"status": 1,
"createTimeStart": "2025-01-01 00:00:00",
"createTimeEnd": "2025-12-31 23:59:59"
}
```
### 响应参数
**响应结构**`CommonResult<PageInfo<AccountTransaction>>`
**PageInfo 字段说明**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| total | Long | 总记录数 |
| list | Array | 数据列表 |
| pageNum | Integer | 当前页码 |
| pageSize | Integer | 每页数量 |
| pages | Integer | 总页数 |
**AccountTransaction 对象字段**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| transactionId | Long | 主键ID |
| userId | Long | 用户ID |
| userName | String | 用户名 |
| transactionType | Integer | 交易类型1.充值 |
| amount | BigDecimal | 交易金额(积分) |
| beforeBalance | BigDecimal | 交易前余额 |
| afterBalance | BigDecimal | 交易后余额 |
| status | Integer | 交易状态1.成功 2.失败 3.处理中 |
| transactionNo | String | 交易单号 |
| payType | Integer | 支付方式1.微信 2.支付宝 3.余额支付 |
| businessId | Long | 关联业务ID套餐ID |
| businessType | String | 业务类型 |
| callId | String | 调用ID关联冻结单 |
| remark | String | 交易备注 |
| isExpense | Integer | 是否支出1.是 0.否 |
| inputToken | Integer | 输入token |
| outputToken | Integer | 输出token |
| totalTokens | Integer | 合计tokens |
| modelName | String | 处理的模型名称 |
| question | String | 对应回答的问题或需求 |
| incomeType | String | 收入类型recharge(充值)、sign_in(签到奖励) |
| createTime | String | 创建时间格式yyyy-MM-dd HH:mm:ss |
| updateTime | String | 更新时间格式yyyy-MM-dd HH:mm:ss |
| createBy | String | 创建人 |
| updateBy | String | 更新人 |
| deleteFlag | Integer | 是否删除0.未删除 1.已删除 |
### 响应示例
```json
{
"code": 200,
"message": "success",
"data": {
"total": 50,
"list": [
{
"transactionId": 1001,
"userId": 1001,
"userName": "张三",
"transactionType": 1,
"amount": 10000.00,
"beforeBalance": 5000.00,
"afterBalance": 15000.00,
"status": 1,
"transactionNo": "TXN202504150001",
"payType": 1,
"businessId": 10,
"businessType": "package_recharge",
"callId": null,
"remark": "购买套餐基础套餐获得10000积分",
"isExpense": 0,
"inputToken": null,
"outputToken": null,
"totalTokens": null,
"modelName": null,
"question": null,
"incomeType": "recharge",
"createTime": "2025-04-15 10:30:00",
"updateTime": "2025-04-15 10:30:00",
"createBy": "system",
"updateBy": "system",
"deleteFlag": 0
}
],
"pageNum": 1,
"pageSize": 10,
"pages": 5
}
}
```
---
## 2. 分页查询消费记录按callId分组
### 接口信息
- **接口名称**:分页查询消费记录
- **接口路径**`/api/account/getConsumptionGroupedPageList`
- **请求方式**POST
- **接口描述**查询所有的消费记录按callId进行分组每组返回一条汇总记录。对于同一个callId的多条记录
- **amount字段**对该callId下所有记录的amount进行**求和**
- **inputToken字段**对该callId下所有记录的inputToken进行**求和**
- **outputToken字段**对该callId下所有记录的outputToken进行**求和**
- **totalTokens字段**对该callId下所有记录的totalTokens进行**求和**
- **question字段**取该callId下最早创建的记录的question
- 其他字段取该callId下最早创建的记录的值
主要适用于大模型消费场景,可以查看每次对话的总体消费情况。默认根据创建时间倒序排列
### 请求参数
**Content-Type**: `application/json`
**请求体参数AccountTransactionDto**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| pageNum | Integer | 否 | 当前页码默认1 |
| pageSize | Integer | 否 | 每页数量默认10 |
| sortBy | String | 否 | 排序字段 |
| sortDesc | Boolean | 否 | 是否降序默认true |
| userId | Long | 否 | 用户ID用于筛选特定用户的消费记录 |
| status | Integer | 否 | 交易状态1.成功 2.失败 3.处理中 |
| createTimeStart | Date | 否 | 开始时间格式yyyy-MM-dd HH:mm:ss |
| createTimeEnd | Date | 否 | 结束时间格式yyyy-MM-dd HH:mm:ss |
| deleteFlag | Integer | 否 | 删除标记0.未删除 1.已删除默认0 |
**注意**
- 此接口固定查询 transactionType IN (3, 7) 的记录3.购买内容 7.其他)
- 只查询 callId 不为空的记录
- 按 callId 分组,每组返回一条记录
- question 字段取该 callId 下最早创建的记录的 question
### 请求示例
```json
{
"pageNum": 1,
"pageSize": 10,
"userId": 1001,
"status": 1,
"createTimeStart": "2025-01-01 00:00:00",
"createTimeEnd": "2025-12-31 23:59:59"
}
```
### 响应参数
**响应结构**`CommonResult<PageInfo<ConsumptionGroupedDto>>`
**PageInfo 字段说明**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| total | Long | 总记录数按callId分组后的数量 |
| list | Array | 数据列表 |
| pageNum | Integer | 当前页码 |
| pageSize | Integer | 每页数量 |
| pages | Integer | 总页数 |
**ConsumptionGroupedDto 对象字段**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| transactionId | Long | 主键ID取该callId下最早的记录ID |
| userId | Long | 用户ID |
| userName | String | 用户名 |
| transactionType | Integer | 交易类型3.购买内容 7.其他 |
| amount | BigDecimal | 交易金额该callId下所有记录的amount**求和**,通常为负数表示消耗) |
| beforeBalance | BigDecimal | 交易前余额(取最早记录的值) |
| afterBalance | BigDecimal | 交易后余额(取最早记录的值) |
| status | Integer | 交易状态1.成功 2.失败 3.处理中 |
| transactionNo | String | 交易单号 |
| payType | Integer | 支付方式1.微信 2.支付宝 3.余额支付 |
| businessId | Long | 关联业务ID |
| businessType | String | 业务类型 |
| callId | String | 调用ID关联冻结单分组依据 |
| remark | String | 交易备注 |
| isExpense | Integer | 是否支出1.是 0.否 |
| inputToken | Integer | 输入token该callId下所有记录的inputToken**求和** |
| outputToken | Integer | 输出token该callId下所有记录的outputToken**求和** |
| totalTokens | Integer | 合计tokens该callId下所有记录的totalTokens**求和** |
| modelName | String | 处理的模型名称 |
| question | String | 对应回答的问题或需求取该callId下最早入库的question |
| incomeType | String | 收入类型 |
| createTime | String | 创建时间取该callId下最早的创建时间格式yyyy-MM-dd HH:mm:ss |
| updateTime | String | 更新时间格式yyyy-MM-dd HH:mm:ss |
| createBy | String | 创建人 |
| updateBy | String | 更新人 |
| deleteFlag | Integer | 是否删除0.未删除 1.已删除 |
### 响应示例
```json
{
"code": 200,
"message": "success",
"data": {
"total": 30,
"list": [
{
"transactionId": 2001,
"userId": 1001,
"userName": "张三",
"transactionType": 3,
"amount": -1500.00,
"beforeBalance": 15000.00,
"afterBalance": 13500.00,
"status": 1,
"transactionNo": "TXN202504150002",
"payType": 3,
"businessId": null,
"businessType": "ai_model_consumption",
"callId": "CALL_20250415_001",
"remark": "AI模型调用消费",
"isExpense": 1,
"inputToken": 3000,
"outputToken": 1500,
"totalTokens": 4500,
"modelName": "gpt-4",
"question": "请帮我分析这段代码的性能问题",
"incomeType": null,
"createTime": "2025-04-15 11:00:00",
"updateTime": "2025-04-15 11:00:00",
"createBy": "system",
"updateBy": "system",
"deleteFlag": 0
}
],
"pageNum": 1,
"pageSize": 10,
"pages": 3
}
}
```
### 业务说明
**为什么需要按callId分组**
在大模型调用场景中一次用户提问一个callId可能会产生多条消费记录
1. 首次冻结费用的记录
2. 实际扣费的记录
3. 可能的退款或调整记录
通过按callId分组并**对金额和token进行求和**,可以将同一次对话的所有相关记录合并展示,便于用户查看:
- **总消费金额**:该次对话总共消耗了多少积分
- **总token用量**该次对话总共使用了多少input/output token
- **总体消费情况**:一次对话的完整消费概览
**聚合字段说明**
以下字段会对同一callId下的所有记录进行**SUM求和**
- `amount`:总金额(通常为负数,表示消耗)
- `inputToken`总输入token数
- `outputToken`总输出token数
- `totalTokens`总token数
**question字段的取值逻辑**
由于同一个callId可能有多条记录但question用户的问题应该在第一次创建时就确定了因此取该callId下创建时间最早的记录的question字段。
**其他字段的取值逻辑**
除上述聚合字段外其他字段如transactionId、beforeBalance、afterBalance等都取该callId下创建时间最早的记录的值。
---
## 3. 分页查询赠送记录
### 接口信息
- **接口名称**:分页查询赠送记录
- **接口路径**`/api/account/getGiftPageList`
- **请求方式**POST
- **接口描述**查询所有的赠送记录transactionType=6支持分页和条件筛选默认根据创建时间倒序排列
### 请求参数
**Content-Type**: `application/json`
**请求体参数AccountTransactionDto**
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| pageNum | Integer | 否 | 当前页码默认1 |
| pageSize | Integer | 否 | 每页数量默认10 |
| sortBy | String | 否 | 排序字段 |
| sortDesc | Boolean | 否 | 是否降序默认true |
| userId | Long | 否 | 用户ID用于筛选特定用户的赠送记录 |
| status | Integer | 否 | 交易状态1.成功 2.失败 3.处理中 |
| transactionNo | String | 否 | 交易单号,精确匹配 |
| createTimeStart | Date | 否 | 开始时间格式yyyy-MM-dd HH:mm:ss |
| createTimeEnd | Date | 否 | 结束时间格式yyyy-MM-dd HH:mm:ss |
| deleteFlag | Integer | 否 | 删除标记0.未删除 1.已删除默认0 |
**注意**:此接口固定查询 transactionType=6赠送的记录
### 请求示例
```json
{
"pageNum": 1,
"pageSize": 10,
"userId": 1001,
"status": 1,
"createTimeStart": "2025-01-01 00:00:00",
"createTimeEnd": "2025-12-31 23:59:59"
}
```
### 响应参数
**响应结构**`CommonResult<PageInfo<AccountTransaction>>`
**PageInfo 字段说明**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| total | Long | 总记录数 |
| list | Array | 数据列表 |
| pageNum | Integer | 当前页码 |
| pageSize | Integer | 每页数量 |
| pages | Integer | 总页数 |
**AccountTransaction 对象字段**
| 参数名 | 类型 | 说明 |
|--------|------|------|
| transactionId | Long | 主键ID |
| userId | Long | 用户ID |
| userName | String | 用户名 |
| transactionType | Integer | 交易类型6.赠送 |
| amount | BigDecimal | 赠送金额(积分) |
| beforeBalance | BigDecimal | 赠送前余额 |
| afterBalance | BigDecimal | 赠送后余额 |
| status | Integer | 交易状态1.成功 2.失败 3.处理中 |
| transactionNo | String | 交易单号 |
| payType | Integer | 支付方式通常为null或3 |
| businessId | Long | 关联业务ID |
| businessType | String | 业务类型gift_balance |
| callId | String | 调用ID通常为null |
| remark | String | 赠送备注 |
| isExpense | Integer | 是否支出0.否(赠送为收入) |
| inputToken | Integer | 输入token通常为null |
| outputToken | Integer | 输出token通常为null |
| totalTokens | Integer | 合计tokens通常为null |
| modelName | String | 处理的模型名称通常为null |
| question | String | 对应回答的问题或需求通常为null |
| incomeType | String | 收入类型通常为null |
| createTime | String | 创建时间格式yyyy-MM-dd HH:mm:ss |
| updateTime | String | 更新时间格式yyyy-MM-dd HH:mm:ss |
| createBy | String | 创建人(通常是管理员) |
| updateBy | String | 更新人 |
| deleteFlag | Integer | 是否删除0.未删除 1.已删除 |
### 响应示例
```json
{
"code": 200,
"message": "success",
"data": {
"total": 15,
"list": [
{
"transactionId": 3001,
"userId": 1001,
"userName": "张三",
"transactionType": 6,
"amount": 5000.00,
"beforeBalance": 10000.00,
"afterBalance": 15000.00,
"status": 1,
"transactionNo": "GIFT202504150001",
"payType": null,
"businessId": null,
"businessType": "gift_balance",
"callId": null,
"remark": "管理员赠送积分",
"isExpense": 0,
"inputToken": null,
"outputToken": null,
"totalTokens": null,
"modelName": null,
"question": null,
"incomeType": null,
"createTime": "2025-04-15 14:00:00",
"updateTime": "2025-04-15 14:00:00",
"createBy": "admin",
"updateBy": "admin",
"deleteFlag": 0
}
],
"pageNum": 1,
"pageSize": 10,
"pages": 2
}
}
```
---
## 通用说明
### 交易类型枚举
| 值 | 说明 |
|----|------|
| 1 | 充值 |
| 2 | 提现 |
| 3 | 购买内容 |
| 4 | 退款 |
| 5 | 签到奖励 |
| 6 | 赠送 |
| 7 | 其他 |
### 交易状态枚举
| 值 | 说明 |
|----|------|
| 1 | 成功 |
| 2 | 失败 |
| 3 | 处理中 |
### 支付方式枚举
| 值 | 说明 |
|----|------|
| 1 | 微信支付 |
| 2 | 支付宝 |
| 3 | 余额支付 |
### 错误码说明
| 错误码 | 说明 |
|--------|------|
| 200 | 成功 |
| 401 | 未登录或登录已过期 |
| 403 | 权限不足 |
| 500 | 服务器内部错误 |
### 注意事项
1. **认证要求**所有接口都需要登录后才能访问请求时需要携带有效的认证token
2. **分页参数**如果不传分页参数默认第1页每页10条
3. **时间格式**:所有时间字段统一使用 `yyyy-MM-dd HH:mm:ss` 格式
4. **排序规则**所有接口默认按创建时间create_time倒序排列最新的记录在前
5. **数据权限**如果传入userId参数可以查询指定用户的记录如果不传则查询所有用户的记录需要相应权限
6. **软删除**默认只查询未删除的记录deleteFlag=0
### 前端调用示例
```javascript
// 1. 查询充值记录
async function getRechargeList(params) {
const response = await fetch('/api/account/getRechargePageList', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
},
body: JSON.stringify({
pageNum: 1,
pageSize: 10,
userId: 1001,
...params
})
});
return await response.json();
}
// 2. 查询消费记录按callId分组
async function getConsumptionList(params) {
const response = await fetch('/api/account/getConsumptionGroupedPageList', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
},
body: JSON.stringify({
pageNum: 1,
pageSize: 10,
userId: 1001,
...params
})
});
return await response.json();
}
// 3. 查询赠送记录
async function getGiftList(params) {
const response = await fetch('/api/account/getGiftPageList', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token
},
body: JSON.stringify({
pageNum: 1,
pageSize: 10,
userId: 1001,
...params
})
});
return await response.json();
}
```
---
## 版本历史
| 版本 | 日期 | 作者 | 说明 |
|------|------|------|------|
| v1.0 | 2025-04-15 | 王志维 | 初始版本,创建三个查询接口 |
---
## 联系方式
如有问题,请联系开发团队。