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

18 KiB
Raw Blame History

账户交易记录查询接口文档

概述

本文档描述了账户交易记录查询相关的三个接口,包括充值记录、消费记录和赠送记录的查询功能。

基础信息:

  • 基础路径:/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充值的记录

请求示例

{
  "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.已删除

响应示例

{
  "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

请求示例

{
  "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.已删除

响应示例

{
  "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赠送的记录

请求示例

{
  "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.已删除

响应示例

{
  "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

前端调用示例

// 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 王志维 初始版本,创建三个查询接口

联系方式

如有问题,请联系开发团队。