4641 lines
136 KiB
YAML
4641 lines
136 KiB
YAML
openapi: 3.0.0
|
||
info:
|
||
title: 'Datahub API'
|
||
description: 'Datahub API documentation'
|
||
version: 1.0.0
|
||
servers:
|
||
-
|
||
url: /api/v1
|
||
description: 'API v1'
|
||
paths:
|
||
/api/v1/dashboard/overview:
|
||
get:
|
||
tags:
|
||
- Dashboard
|
||
summary: 获取概览统计
|
||
description: 返回今日/本周/本月的成功和失败同步数,以及按数据类型的本月分组统计。
|
||
operationId: 867e0544fefdad33775c25bb6188d484
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/DashboardOverview' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/api/v1/dashboard/trend:
|
||
get:
|
||
tags:
|
||
- Dashboard
|
||
summary: 获取趋势数据
|
||
description: 返回指定时间范围内按日/周/月聚合的成功和失败同步趋势。
|
||
operationId: d3850b6a1ce1436c8ddf4b92fc0b7e44
|
||
parameters:
|
||
-
|
||
name: from
|
||
in: query
|
||
description: 起始日期(默认30天前)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-02-15'
|
||
-
|
||
name: to
|
||
in: query
|
||
description: 结束日期(默认今天)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-03-17'
|
||
-
|
||
name: group_by
|
||
in: query
|
||
description: 聚合粒度
|
||
required: false
|
||
schema:
|
||
type: string
|
||
default: day
|
||
enum:
|
||
- day
|
||
- week
|
||
- month
|
||
-
|
||
name: data_type
|
||
in: query
|
||
description: 数据类型筛选
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum:
|
||
- order
|
||
- product
|
||
- refund
|
||
- inventory
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { $ref: '#/components/schemas/DashboardTrendItem' } }
|
||
type: object
|
||
'400':
|
||
description: 参数错误
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/api/v1/dashboard/breakdown:
|
||
get:
|
||
tags:
|
||
- Dashboard
|
||
summary: 获取分组统计
|
||
description: 按公司/平台/店铺维度统计成功和失败同步数。
|
||
operationId: 91349b224bcf13f440df27de0a198f54
|
||
parameters:
|
||
-
|
||
name: dimension
|
||
in: query
|
||
description: 分组维度
|
||
required: true
|
||
schema:
|
||
type: string
|
||
enum:
|
||
- company
|
||
- platform
|
||
- store
|
||
-
|
||
name: from
|
||
in: query
|
||
description: 起始日期(默认今天)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-03-17'
|
||
-
|
||
name: to
|
||
in: query
|
||
description: 结束日期(默认今天)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-03-17'
|
||
-
|
||
name: data_type
|
||
in: query
|
||
description: 数据类型筛选
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum:
|
||
- order
|
||
- product
|
||
- refund
|
||
- inventory
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { $ref: '#/components/schemas/DashboardBreakdownItem' } }
|
||
type: object
|
||
'400':
|
||
description: 参数错误
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/api/v1/failed-messages:
|
||
get:
|
||
tags:
|
||
- 'Failed Messages'
|
||
summary: 失败消息列表
|
||
description: '获取 Consumer 处理失败的消息列表,支持分页、按数据类型/平台/时间筛选。仅 admin 可访问。'
|
||
operationId: 6dac9bdff8b35f75565ed5c6b8638937
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: data_type
|
||
in: query
|
||
description: 数据类型精确筛选(order/product/refund)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum:
|
||
- order
|
||
- product
|
||
- refund
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: error_type
|
||
in: query
|
||
description: 异常类名模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: failed_at_from
|
||
in: query
|
||
description: 失败时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: failed_at_to
|
||
in: query
|
||
description: 失败时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/FailedMessageList' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/api/v1/failed-messages/{id}':
|
||
get:
|
||
tags:
|
||
- 'Failed Messages'
|
||
summary: 失败消息详情
|
||
description: '获取失败消息详情,含完整错误堆栈和原始消息体。仅 admin 可访问。'
|
||
operationId: 4f6b7410222ebc0fa65afdc1d168c15a
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '失败消息 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/FailedMessageDetail' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/api/v1/mq/status:
|
||
get:
|
||
tags:
|
||
- 'MQ Status'
|
||
summary: 获取消息队列状态
|
||
description: '查询 RabbitMQ 各队列的消息数、消费者数和运行状态。支持按队列类型筛选。仅 admin 角色可访问。'
|
||
operationId: 3f5b041034fafc9738ecf65f166b6193
|
||
parameters:
|
||
-
|
||
name: queue
|
||
in: query
|
||
description: 队列类型筛选(orders/products/refunds/inventory)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum:
|
||
- orders
|
||
- products
|
||
- refunds
|
||
- inventory
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/MqQueueStatus' }
|
||
type: object
|
||
'400':
|
||
description: 无效的队列类型参数
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'500':
|
||
description: 'RabbitMQ 连接异常'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/api/v1/logs/operations:
|
||
get:
|
||
tags:
|
||
- 'Operation Logs'
|
||
summary: 操作日志列表
|
||
description: '获取操作日志列表,支持分页、按用户/操作类型/目标类型/时间筛选。仅 admin 可访问。'
|
||
operationId: 36e862550729db3d302d110c8e10c58d
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: user_id
|
||
in: query
|
||
description: '用户 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: action
|
||
in: query
|
||
description: 操作类型精确筛选
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: target_type
|
||
in: query
|
||
description: 目标类型精确筛选
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_at_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: created_at_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/OperationLogList' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/api/v1/logs/operations/{id}':
|
||
get:
|
||
tags:
|
||
- 'Operation Logs'
|
||
summary: 操作日志详情
|
||
description: '获取操作日志详情,含完整操作详情 JSON。仅 admin 可访问。'
|
||
operationId: d4b0ae03fd3ef2dec4c8d6d910013ef2
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '操作日志 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/OperationLogDetail' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/orders:
|
||
get:
|
||
tags:
|
||
- Orders
|
||
summary: 订单列表
|
||
description: '获取订单列表,支持分页、多维度筛选和时间范围筛选。返回业务字段,不含 raw/hash。'
|
||
operationId: 7e493d0464138129e7e1f0e7ebee178b
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: order_status_id
|
||
in: query
|
||
description: '订单状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '平台订单 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
-
|
||
name: paid_date_from
|
||
in: query
|
||
description: 付款时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: paid_date_to
|
||
in: query
|
||
description: 付款时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/Order' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/orders/{id}':
|
||
get:
|
||
tags:
|
||
- Orders
|
||
summary: 订单详情
|
||
description: '获取订单详情,返回所有业务字段、ext 和关联的 order_items,不含 raw/hash。'
|
||
operationId: aff126ce9a5cef811fea88ceba395fdc
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '订单 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: object, allOf: [{ $ref: '#/components/schemas/Order' }, { properties: { order_items: { description: 关联订单子项, type: array, items: { type: object } } }, type: object }] }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/order-items:
|
||
get:
|
||
tags:
|
||
- 'Order Items'
|
||
summary: 订单项列表
|
||
description: '获取订单项列表,支持分页和多维度筛选。OrderItem 无 raw/hash 字段,仅提供 Normal 接口。'
|
||
operationId: 894b5ea5fad8ecc3159e628333252260
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: order_id
|
||
in: query
|
||
description: '内部订单 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '平台订单 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_product_id
|
||
in: query
|
||
description: '平台商品 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: product_sku
|
||
in: query
|
||
description: 'SKU 编码精确筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/OrderItem' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/order-items/{id}':
|
||
get:
|
||
tags:
|
||
- 'Order Items'
|
||
summary: 订单项详情
|
||
description: 获取订单项详情,返回完整字段和关联的父订单摘要信息。
|
||
operationId: a808f2d76861f46925baef81c52da14f
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '订单项 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: object, allOf: [{ $ref: '#/components/schemas/OrderItem' }, { properties: { parent_order: { description: 父订单摘要信息, type: object, nullable: true } }, type: object }] }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/products:
|
||
get:
|
||
tags:
|
||
- Products
|
||
summary: 产品列表
|
||
description: '获取产品列表,支持分页、多维度筛选。返回业务字段,不含 raw/hash。'
|
||
operationId: 934e471439896276d2897b4b5132c077
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: status_id
|
||
in: query
|
||
description: '产品状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_item_id
|
||
in: query
|
||
description: '平台商品 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: name
|
||
in: query
|
||
description: 商品名称模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/Product' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/products/{id}':
|
||
get:
|
||
tags:
|
||
- Products
|
||
summary: 产品详情
|
||
description: '获取产品详情,返回所有业务字段和 ext,不含 raw/hash。'
|
||
operationId: 7d7422e8293b23608368a4a9000f8096
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '产品 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/Product' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/raw/orders:
|
||
get:
|
||
tags:
|
||
- 'Orders (Raw)'
|
||
summary: 订单列表(Raw)
|
||
description: '获取订单原始数据列表。返回关键标识 + hash,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
|
||
operationId: 562f4be5afd7463d1c9c9c653bdd0c35
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: order_status_id
|
||
in: query
|
||
description: '订单状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '平台订单 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
-
|
||
name: paid_date_from
|
||
in: query
|
||
description: 付款时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
-
|
||
name: paid_date_to
|
||
in: query
|
||
description: 付款时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, order_status_id: { type: integer }, hash: { type: string }, created_date: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/raw/orders/{id}':
|
||
get:
|
||
tags:
|
||
- 'Orders (Raw)'
|
||
summary: 订单详情(Raw)
|
||
description: '获取订单原始数据详情。返回关键标识 + 完整 raw + hash + ext。'
|
||
operationId: 6c9b613233d2ef2a708d51523149d84b
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '订单 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { id: { type: integer }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, order_status_id: { type: integer }, raw: { description: 平台原始数据, type: object }, hash: { type: string }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/raw/products:
|
||
get:
|
||
tags:
|
||
- 'Products (Raw)'
|
||
summary: 产品列表(Raw)
|
||
description: '获取产品原始数据列表。返回关键标识 + hash,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
|
||
operationId: 770fd6e9caf314efbc05aa0277c7e811
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: status_id
|
||
in: query
|
||
description: '产品状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_item_id
|
||
in: query
|
||
description: '平台商品 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: name
|
||
in: query
|
||
description: 商品名称模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_item_id: { type: string }, platform_model_id: { type: string, nullable: true }, name: { type: string, nullable: true }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, hash: { type: string }, updated_date: { type: string, format: date-time, nullable: true }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/raw/products/{id}':
|
||
get:
|
||
tags:
|
||
- 'Products (Raw)'
|
||
summary: 产品详情(Raw)
|
||
description: '获取产品原始数据详情。返回关键标识 + 完整 raw + hash + ext。'
|
||
operationId: e0ba90775ff4ceb4fe459b8272a63624
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '产品 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { id: { type: integer }, platform_item_id: { type: string }, platform_model_id: { type: string, nullable: true }, name: { type: string, nullable: true }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, raw: { description: 平台原始数据, type: object }, hash: { type: string }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time, nullable: true }, updated_date: { type: string, format: date-time, nullable: true } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/raw/refunds:
|
||
get:
|
||
tags:
|
||
- 'Refunds (Raw)'
|
||
summary: 退款列表(Raw)
|
||
description: '获取退款原始数据列表。返回关键标识 + hash,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
|
||
operationId: 04e3c7e28df6496b975c24618933c6dd
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_status_id
|
||
in: query
|
||
description: '退款状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_type_id
|
||
in: query
|
||
description: '退款类型 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_refund_id
|
||
in: query
|
||
description: '平台退款 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '关联平台订单 ID 筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, hash: { type: string }, created_date: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/raw/refunds/{id}':
|
||
get:
|
||
tags:
|
||
- 'Refunds (Raw)'
|
||
summary: 退款详情(Raw)
|
||
description: '获取退款原始数据详情。返回关键标识 + 完整 raw + hash + ext。'
|
||
operationId: 884b7753642515815a193abb0cae88c9
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '退款 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, raw: { description: 平台原始数据, type: object }, hash: { type: string }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/raw/refund-items:
|
||
get:
|
||
tags:
|
||
- 'Refund Items (Raw)'
|
||
summary: 退款项列表(Raw)
|
||
description: '获取退款项原始数据列表。返回关键标识,不含 raw 字段本身(太大)。筛选参数与 Normal 接口一致。'
|
||
operationId: b1af2757230f49948c934063da9d627a
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_id
|
||
in: query
|
||
description: '父退款 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_status_id
|
||
in: query
|
||
description: '退款状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_type_id
|
||
in: query
|
||
description: '退款类型 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_refund_id
|
||
in: query
|
||
description: '平台退款子项 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '关联平台订单 ID 筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_product_id
|
||
in: query
|
||
description: '平台商品 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_parent_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, created_date: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }, total: { type: integer }, page: { type: integer }, per_page: { type: integer } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/raw/refund-items/{id}':
|
||
get:
|
||
tags:
|
||
- 'Refund Items (Raw)'
|
||
summary: 退款项详情(Raw)
|
||
description: '获取退款项原始数据详情。返回关键标识 + 完整 raw + ext。'
|
||
operationId: 6a82a9938eef667456c5a8948b984eb3
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '退款项 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { id: { type: integer }, platform_refund_id: { type: string }, platform_parent_refund_id: { type: string }, platform_order_id: { type: string }, store_id: { type: integer }, company_id: { type: integer }, platform_id: { type: integer }, refund_status_id: { type: integer }, raw: { description: 平台原始子项数据, type: object }, ext: { type: object, nullable: true }, created_date: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/refunds:
|
||
get:
|
||
tags:
|
||
- Refunds
|
||
summary: 退款列表
|
||
description: '获取退款列表,支持分页、按退款状态/类型/时间范围筛选。返回业务字段,不含 raw/hash。'
|
||
operationId: bd68a8b63be96fc4bc13a7f914db8e6f
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_status_id
|
||
in: query
|
||
description: '退款状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_type_id
|
||
in: query
|
||
description: '退款类型 ID 精确筛选(1=未发货前退款 2=退货退款 3=退货后部分退款 4=无须退货退款 5=闪电退款)'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_refund_id
|
||
in: query
|
||
description: '平台退款 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '关联平台订单 ID 筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/Refund' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/refunds/{id}':
|
||
get:
|
||
tags:
|
||
- Refunds
|
||
summary: 退款详情
|
||
description: '获取退款详情,返回所有业务字段和 ext,不含 raw/hash。'
|
||
operationId: 6009f4876a61b01d12a288fcfe78444c
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '退款 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/Refund' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/refund-items:
|
||
get:
|
||
tags:
|
||
- 'Refund Items'
|
||
summary: 退款项列表
|
||
description: '获取退款项列表,支持分页、按退款单/退款状态/类型/时间范围筛选。返回业务字段,不含 raw。'
|
||
operationId: ad798f6022c7e5b289827884ef582bc2
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '公司 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '平台 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: store_id
|
||
in: query
|
||
description: '店铺 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_id
|
||
in: query
|
||
description: '父退款 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_status_id
|
||
in: query
|
||
description: '退款状态 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: refund_type_id
|
||
in: query
|
||
description: '退款类型 ID 精确筛选(1=仅退款 2=退货退款 3=补偿退款)'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_refund_id
|
||
in: query
|
||
description: '平台退款子项 ID 精确搜索'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_order_id
|
||
in: query
|
||
description: '关联平台订单 ID 筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: platform_product_id
|
||
in: query
|
||
description: '平台商品 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: created_date_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: created_date_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/RefundItem' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/refund-items/{id}':
|
||
get:
|
||
tags:
|
||
- 'Refund Items'
|
||
summary: 退款项详情
|
||
description: '获取退款项详情,返回所有业务字段和 ext,不含 raw。'
|
||
operationId: de6cf91ff904e528cba6f1b43f829a2c
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '退款项 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/RefundItem' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/api/v1/logs/requests:
|
||
get:
|
||
tags:
|
||
- 'Request Logs'
|
||
summary: 请求日志列表
|
||
description: '获取 API 请求日志列表,支持分页、按用户/方法/路径/状态码/时间筛选。仅 admin 可访问。'
|
||
operationId: db0b73fd478b1f9dfacb819a397254ff
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: user_id
|
||
in: query
|
||
description: '用户 ID 精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: method
|
||
in: query
|
||
description: 'HTTP 方法精确筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
enum:
|
||
- GET
|
||
- POST
|
||
- PUT
|
||
- PATCH
|
||
- DELETE
|
||
-
|
||
name: path
|
||
in: query
|
||
description: 请求路径模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: status_code
|
||
in: query
|
||
description: 'HTTP 状态码精确筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: created_at_from
|
||
in: query
|
||
description: 创建时间起始(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-01-01'
|
||
-
|
||
name: created_at_to
|
||
in: query
|
||
description: 创建时间截止(含)
|
||
required: false
|
||
schema:
|
||
type: string
|
||
format: date
|
||
example: '2026-12-31'
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/ApiRequestLogList' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/api/v1/logs/requests/{id}':
|
||
get:
|
||
tags:
|
||
- 'Request Logs'
|
||
summary: 请求日志详情
|
||
description: '获取请求日志详情,含完整请求体和 User-Agent。仅 admin 可访问。'
|
||
operationId: f730ba32caa6f4a153d5d394a1102912
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '请求日志 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/ApiRequestLogDetail' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 无权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 数据不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/me/api-keys:
|
||
get:
|
||
tags:
|
||
- ApiKeys
|
||
summary: 'API Key 列表'
|
||
description: '列出当前用户的所有 API Keys'
|
||
operationId: c01c1650a1944005fe5b51f72bacbbd4
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer }, name: { type: string }, key_prefix: { type: string }, last_used_at: { type: string, format: date-time, nullable: true }, expires_at: { type: string, format: date-time, nullable: true }, enabled: { type: boolean }, created_at: { type: string, format: date-time } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
post:
|
||
tags:
|
||
- ApiKeys
|
||
summary: '生成 API Key'
|
||
description: '生成新的 API Key,需用户已启用 api_key_enabled。明文仅在生成时返回一次'
|
||
operationId: 12fd3adae0626962960533c85569d1b1
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- name
|
||
properties:
|
||
name:
|
||
type: string
|
||
example: 'Production Key'
|
||
maxLength: 100
|
||
expires_at:
|
||
description: 过期时间,不传则永不过期
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 生成成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 生成成功 }
|
||
data: { properties: { plain_key: { description: '明文 Key,仅此次可见', type: string }, api_key: { properties: { id: { type: integer }, name: { type: string }, key_prefix: { type: string }, expires_at: { type: string, format: date-time, nullable: true }, enabled: { type: boolean }, created_at: { type: string, format: date-time } }, type: object } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: '未启用 API Key 功能'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/me/api-keys/{id}':
|
||
delete:
|
||
tags:
|
||
- ApiKeys
|
||
summary: '删除 API Key'
|
||
description: '删除 API Key'
|
||
operationId: 7356615676c0ac3874f8657b49154931
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: 'API Key ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 删除成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 删除成功 }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 'API Key 不存在'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/register:
|
||
post:
|
||
tags:
|
||
- Auth
|
||
summary: 用户注册
|
||
description: 注册新用户,需提供用户名、密码和邮箱
|
||
operationId: b099deca54ae9ddc3ee7e2261b6fc125
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- username
|
||
- password
|
||
- email
|
||
properties:
|
||
username:
|
||
type: string
|
||
example: new_user
|
||
maxLength: 20
|
||
minLength: 3
|
||
password:
|
||
type: string
|
||
example: Pass_1234
|
||
maxLength: 32
|
||
minLength: 6
|
||
email:
|
||
type: string
|
||
format: email
|
||
example: user@example.com
|
||
maxLength: 100
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 注册成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 注册成功 }
|
||
data: { properties: { id: { type: integer, example: 1 }, username: { type: string, example: new_user }, email: { type: string, example: user@example.com } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或唯一性冲突
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
/login:
|
||
post:
|
||
tags:
|
||
- Auth
|
||
summary: 用户登录
|
||
description: '使用用户名和密码登录,返回 access_token 和 refresh_token'
|
||
operationId: 383bcb1269d6dcce4609dc1f5d3ef129
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- username
|
||
- password
|
||
properties:
|
||
username:
|
||
type: string
|
||
example: admin
|
||
password:
|
||
type: string
|
||
example: Pass_1234
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 登录成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 登录成功 }
|
||
data: { properties: { access_token: { type: string }, refresh_token: { type: string }, token_type: { type: string, example: Bearer }, expires_in: { type: integer, example: 7200 }, user: { properties: { id: { type: integer }, username: { type: string }, email: { type: string } }, type: object } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 用户名或密码错误
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 账号已被禁用
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
/refresh:
|
||
get:
|
||
tags:
|
||
- Auth
|
||
summary: '刷新 Access Token'
|
||
description: '使用 refresh_token 获取新的 access_token,同时轮换 refresh_token'
|
||
operationId: fc18486b361cc4791acbafd8a2f25fff
|
||
parameters:
|
||
-
|
||
name: refresh_token
|
||
in: query
|
||
description: 'Refresh Token'
|
||
required: true
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: 'Token 刷新成功'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 'Token 刷新成功' }
|
||
data: { properties: { access_token: { type: string }, refresh_token: { type: string }, token_type: { type: string, example: Bearer }, expires_in: { type: integer, example: 7200 } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: '缺少 refresh_token 参数'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 'refresh_token 无效或已过期'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'403':
|
||
description: 账号已被禁用
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/me:
|
||
get:
|
||
tags:
|
||
- Auth
|
||
summary: 获取当前用户信息
|
||
description: 获取当前用户信息
|
||
operationId: f03c8d46af839b7dbd0b659647cab574
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { id: { type: integer, example: 1 }, username: { type: string, example: admin }, email: { type: string, example: admin@example.com }, status: { type: integer, example: 1 }, ext: { type: object, nullable: true }, created_at: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/me/profile:
|
||
put:
|
||
tags:
|
||
- Auth
|
||
summary: 更新个人信息
|
||
description: '当前用户更新自己的 email 和 ext 字段'
|
||
operationId: 01c6d8f425109cd3dfff51d1d69cd55c
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
email:
|
||
type: string
|
||
format: email
|
||
example: new@example.com
|
||
maxLength: 100
|
||
ext:
|
||
type: object
|
||
example: { nickname: user }
|
||
nullable: true
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 个人信息更新成功 }
|
||
data: { properties: { id: { type: integer }, username: { type: string }, email: { type: string }, status: { type: integer }, ext: { type: object, nullable: true }, created_at: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或唯一性冲突
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/me/password:
|
||
put:
|
||
tags:
|
||
- Auth
|
||
summary: 修改密码
|
||
description: '修改当前用户密码,需验证旧密码。修改成功后清除 refresh_token,需重新登录'
|
||
operationId: c3ca37414997ba697e6c11173d9bc483
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- old_password
|
||
- new_password
|
||
properties:
|
||
old_password:
|
||
type: string
|
||
example: OldPass_1234
|
||
new_password:
|
||
type: string
|
||
example: NewPass_5678
|
||
maxLength: 32
|
||
minLength: 6
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 密码修改成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 密码修改成功,请重新登录 }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或旧密码不正确
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/logout:
|
||
get:
|
||
tags:
|
||
- Auth
|
||
summary: 退出登录
|
||
description: '退出登录,清除 refresh_token 并注销当前 JWT token'
|
||
operationId: dc5f3d60e870dd8b211f88cd97635158
|
||
responses:
|
||
'200':
|
||
description: 退出成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 退出成功 }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/companies:
|
||
get:
|
||
tags:
|
||
- Companies
|
||
summary: 公司列表
|
||
description: '获取公司列表,支持按 name/label 模糊搜索,受 scope 过滤'
|
||
operationId: e3e4d8f38acabbb4c061ba987d6e14dc
|
||
parameters:
|
||
-
|
||
name: name
|
||
in: query
|
||
description: '公司名称模糊搜索(匹配 name 或 label)'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: acme }, label: { type: string, example: 阿克米公司 }, enabled: { type: boolean, example: true }, ext: { type: object, nullable: true }, created_at: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/users/{id}/data-scope':
|
||
get:
|
||
tags:
|
||
- DataScope
|
||
summary: 查看用户数据权限
|
||
description: '返回用户的 scope 列表(含实体名称)和解析后的 store_ids'
|
||
operationId: 0215f552f5c2315b8b93d030ef72db76
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '用户 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { user_id: { type: integer, example: 1 }, role: { type: string, example: admin }, scopes: { type: array, items: { properties: { scope_type: { type: string, example: company }, scope_id: { type: integer, example: 1 }, name: { type: string, example: 示例公司 } }, type: object } }, resolved_store_ids: { type: array, items: { type: integer }, example: [1, 2, 3] } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 用户不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
put:
|
||
tags:
|
||
- DataScope
|
||
summary: 设置用户数据权限
|
||
description: '全量替换用户的 scope 绑定,并重建 bitmap'
|
||
operationId: 4ff88235674fa406239c90406f051994
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '用户 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- scopes
|
||
properties:
|
||
scopes:
|
||
type: array
|
||
items: { required: [scope_type, scope_id], properties: { scope_type: { type: string, example: company, enum: [company, platform, store] }, scope_id: { type: integer, example: 1 } }, type: object }
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 数据权限更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 数据权限更新成功 }
|
||
type: object
|
||
'400':
|
||
description: '参数校验失败(无效 scope_type 等)'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 用户不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/platforms:
|
||
get:
|
||
tags:
|
||
- Platforms
|
||
summary: 平台列表
|
||
description: 获取全部平台列表(全局数据,不过滤)
|
||
operationId: 5ff5cb3822eee3a87c0387f6a5ad4637
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, developer_id: { type: integer, example: 1 }, created_at: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/roles:
|
||
get:
|
||
tags:
|
||
- Roles
|
||
summary: 角色列表
|
||
description: 获取所有角色,包含每个角色的用户数
|
||
operationId: 9a543d6f94510bc9ca9208afc0b4715c
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: editor }, users_count: { type: integer, example: 5 } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/users/{id}/role':
|
||
put:
|
||
tags:
|
||
- Roles
|
||
summary: 分配用户角色
|
||
description: '为指定用户分配角色,administrator 不允许降级自己的角色'
|
||
operationId: 49884e2548d00ed9b195e873b2dd3934
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '用户 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- role_id
|
||
properties:
|
||
role_id:
|
||
description: '角色 ID'
|
||
type: integer
|
||
example: 2
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 角色分配成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 角色分配成功 }
|
||
data: { $ref: '#/components/schemas/User' }
|
||
type: object
|
||
'400':
|
||
description: 不允许降级自己的管理员角色
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 用户或角色不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/roles/{id}/route-groups':
|
||
get:
|
||
tags:
|
||
- Roles
|
||
summary: 查看角色已授权的路由组
|
||
description: 获取指定角色已授权的路由组列表
|
||
operationId: 25aba1fb2a9a4cc81e1bf06c716deda9
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '角色 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 角色不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
put:
|
||
tags:
|
||
- Roles
|
||
summary: 设置角色的路由组授权
|
||
description: '全量替换指定角色的路由组授权,administrator 角色不允许修改'
|
||
operationId: 1e1f0c23e58bc994ea055407eb469a37
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '角色 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- group_ids
|
||
properties:
|
||
group_ids:
|
||
type: array
|
||
items: { type: integer }
|
||
example: [1, 3, 5]
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 路由组授权更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 路由组授权更新成功 }
|
||
data: { type: array, items: { type: object } }
|
||
type: object
|
||
'400':
|
||
description: 'administrator 角色不允许修改或参数错误'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 角色不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/roles/{id}/route-overrides':
|
||
get:
|
||
tags:
|
||
- Roles
|
||
summary: 查看角色的路由覆盖
|
||
description: 获取指定角色的路由覆盖列表,包含路由详情
|
||
operationId: 7766effa17b431f2bcd67b1f434ee042
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '角色 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer }, role_id: { type: integer }, route_id: { type: integer }, allowed: { type: boolean }, route: { type: object } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 角色不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
put:
|
||
tags:
|
||
- Roles
|
||
summary: 设置角色的路由覆盖
|
||
description: '全量替换指定角色的路由覆盖规则,administrator 角色不允许修改'
|
||
operationId: 7ab36e126b6eb4e7631cc7b51b5d2779
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '角色 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- overrides
|
||
properties:
|
||
overrides:
|
||
type: array
|
||
items: { required: [route_id, allowed], properties: { route_id: { description: '路由 ID', type: integer, example: 12 }, allowed: { description: 是否允许, type: boolean, example: false } }, type: object }
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 路由覆盖更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 路由覆盖更新成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer }, role_id: { type: integer }, route_id: { type: integer }, allowed: { type: boolean }, route: { type: object } }, type: object } }
|
||
type: object
|
||
'400':
|
||
description: 'route_id 重复、不存在或 administrator 角色不允许修改'
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 角色不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/route-groups:
|
||
get:
|
||
tags:
|
||
- RouteGroups
|
||
summary: 路由组列表
|
||
description: 返回所有路由组,包含每组的路由数量
|
||
operationId: dc2a90e0b1d08db3762003eac4f93598
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true }, description: { type: string, example: 用户相关路由, nullable: true }, sort_order: { type: integer, example: 0 }, routes_count: { type: integer, example: 5 }, created_at: { type: string, format: date-time } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
post:
|
||
tags:
|
||
- RouteGroups
|
||
summary: 创建路由组
|
||
description: 创建路由组
|
||
operationId: 5796b5d8d366ca24bd7b850510fdc77d
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- name
|
||
properties:
|
||
name:
|
||
type: string
|
||
example: user-management
|
||
maxLength: 100
|
||
label:
|
||
type: string
|
||
example: 用户管理
|
||
nullable: true
|
||
maxLength: 200
|
||
description:
|
||
type: string
|
||
example: 用户相关路由
|
||
nullable: true
|
||
sort_order:
|
||
type: integer
|
||
example: 0
|
||
default: 0
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 创建成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 创建成功 }
|
||
data: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true }, description: { type: string, nullable: true }, sort_order: { type: integer, example: 0 }, created_at: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或名称重复
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/route-groups/{id}':
|
||
put:
|
||
tags:
|
||
- RouteGroups
|
||
summary: 更新路由组
|
||
description: 更新路由组
|
||
operationId: 08ab6c0eb639ed8c3c7b2aa5151f3f8b
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '路由组 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
name:
|
||
type: string
|
||
example: user-management
|
||
maxLength: 100
|
||
label:
|
||
type: string
|
||
example: 用户管理
|
||
nullable: true
|
||
maxLength: 200
|
||
description:
|
||
type: string
|
||
example: 用户相关路由
|
||
nullable: true
|
||
sort_order:
|
||
type: integer
|
||
example: 0
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 更新成功 }
|
||
data: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true }, description: { type: string, nullable: true }, sort_order: { type: integer, example: 0 }, created_at: { type: string, format: date-time } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或名称重复
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 路由组不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
delete:
|
||
tags:
|
||
- RouteGroups
|
||
summary: 删除路由组
|
||
description: '删除路由组,组内路由 group_id 自动设为 NULL,role_route_groups 关联自动级联删除'
|
||
operationId: 2b870b541944a9318469fafc2ad83834
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '路由组 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 删除成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 删除成功 }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 路由组不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/routes:
|
||
get:
|
||
tags:
|
||
- RouteGroups
|
||
summary: 路由列表
|
||
description: '获取全部路由列表,含分组信息,支持按 group_id、method、path 筛选'
|
||
operationId: 06fcdb734181d39362a999d1599a5e66
|
||
parameters:
|
||
-
|
||
name: group_id
|
||
in: query
|
||
description: '路由组 ID,传 0 或 "ungrouped" 筛选未分组路由'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: method
|
||
in: query
|
||
description: 'HTTP 方法筛选'
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: path
|
||
in: query
|
||
description: 路径模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, method: { type: string, example: GET }, path: { type: string, example: /api/v1/users }, group_id: { type: integer, example: 1, nullable: true }, group: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true } }, type: object, nullable: true } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/routes/{id}/group':
|
||
put:
|
||
tags:
|
||
- RouteGroups
|
||
summary: 分配路由到路由组
|
||
description: '将路由分配到指定路由组,传 group_id=null 表示从分组中移出'
|
||
operationId: 10daee20cc95a281bc0bc3716df103aa
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '路由 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- group_id
|
||
properties:
|
||
group_id:
|
||
description: '路由组 ID,传 null 移出分组'
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 分配成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 分配成功 }
|
||
data: { properties: { id: { type: integer, example: 1 }, method: { type: string, example: GET }, path: { type: string, example: /api/v1/users }, group_id: { type: integer, example: 1, nullable: true }, group: { properties: { id: { type: integer, example: 1 }, name: { type: string, example: user-management }, label: { type: string, example: 用户管理, nullable: true } }, type: object, nullable: true } }, type: object }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 路由或目标路由组不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/stores:
|
||
get:
|
||
tags:
|
||
- Stores
|
||
summary: 店铺列表
|
||
description: '获取店铺列表,受 scope 过滤,支持 company_id/platform_id 筛选及 name 模糊搜索'
|
||
operationId: 36279ef5f2735b2624e99a82ebc3dccc
|
||
parameters:
|
||
-
|
||
name: company_id
|
||
in: query
|
||
description: '按公司 ID 筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: platform_id
|
||
in: query
|
||
description: '按平台 ID 筛选'
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
-
|
||
name: name
|
||
in: query
|
||
description: 按店铺名称模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { type: array, items: { properties: { id: { type: integer, example: 1 }, company_id: { type: integer, example: 1 }, platform_id: { type: integer, example: 1 }, platform_store_id: { type: string, example: SHOP-001 }, name: { type: string, example: my-store }, label: { type: string, example: 我的店铺 }, enabled: { type: boolean, example: true }, warehouse_id: { type: integer, example: 1 }, currency_id: { type: integer, example: 1 }, timezone: { type: integer, example: 8 }, created_at: { type: string, format: date-time }, updated_at: { type: string, format: date-time } }, type: object } }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
/users:
|
||
get:
|
||
tags:
|
||
- Users
|
||
summary: 用户列表
|
||
description: '获取用户列表,支持分页、按 username/email 模糊搜索、按 status 精确筛选'
|
||
operationId: 4f028975120b69092c0eae73bb36bcac
|
||
parameters:
|
||
-
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 1
|
||
-
|
||
name: per_page
|
||
in: query
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
default: 15
|
||
maximum: 100
|
||
-
|
||
name: username
|
||
in: query
|
||
description: 用户名模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: email
|
||
in: query
|
||
description: 邮箱模糊搜索
|
||
required: false
|
||
schema:
|
||
type: string
|
||
-
|
||
name: status
|
||
in: query
|
||
description: 状态筛选(0=禁用,1=启用)
|
||
required: false
|
||
schema:
|
||
type: integer
|
||
enum:
|
||
- 0
|
||
- 1
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { properties: { items: { type: array, items: { $ref: '#/components/schemas/User' } }, total: { type: integer, example: 100 }, page: { type: integer, example: 1 }, per_page: { type: integer, example: 15 } }, type: object }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
post:
|
||
tags:
|
||
- Users
|
||
summary: 创建用户
|
||
description: 创建用户
|
||
operationId: 0b5969ce7b77ccaa0b2e9b551e302980
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- username
|
||
- password
|
||
- email
|
||
properties:
|
||
username:
|
||
type: string
|
||
example: new_user
|
||
maxLength: 20
|
||
minLength: 3
|
||
password:
|
||
type: string
|
||
example: Pass_1234
|
||
maxLength: 32
|
||
minLength: 6
|
||
email:
|
||
type: string
|
||
format: email
|
||
example: new@example.com
|
||
maxLength: 100
|
||
status:
|
||
type: integer
|
||
default: 1
|
||
enum: [0, 1]
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 创建成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 创建成功 }
|
||
data: { $ref: '#/components/schemas/User' }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或唯一性冲突
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/users/{id}':
|
||
get:
|
||
tags:
|
||
- Users
|
||
summary: 用户详情
|
||
description: 用户详情
|
||
operationId: b0770c8ad8eb11c5493fe9643c657673
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '用户 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
responses:
|
||
'200':
|
||
description: 获取成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 获取成功 }
|
||
data: { $ref: '#/components/schemas/User' }
|
||
type: object
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 用户不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
put:
|
||
tags:
|
||
- Users
|
||
summary: 更新用户信息
|
||
description: '更新用户的 username、email 或 ext 字段,不支持修改密码'
|
||
operationId: c5ee224e653aac218896c93ecc3f9b67
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '用户 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
username:
|
||
type: string
|
||
example: updated_user
|
||
maxLength: 20
|
||
minLength: 3
|
||
email:
|
||
type: string
|
||
format: email
|
||
example: updated@example.com
|
||
maxLength: 100
|
||
ext:
|
||
type: object
|
||
example: { nickname: Tester }
|
||
nullable: true
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 更新成功 }
|
||
data: { $ref: '#/components/schemas/User' }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败或唯一性冲突
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 用户不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
'/users/{id}/status':
|
||
patch:
|
||
tags:
|
||
- Users
|
||
summary: 更新用户状态
|
||
description: 启用或禁用用户
|
||
operationId: c1ad72b12757d083cf0aebbf2f3787fd
|
||
parameters:
|
||
-
|
||
name: id
|
||
in: path
|
||
description: '用户 ID'
|
||
required: true
|
||
schema:
|
||
type: integer
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
required:
|
||
- status
|
||
properties:
|
||
status:
|
||
description: 0=禁用,1=启用
|
||
type: integer
|
||
enum: [0, 1]
|
||
type: object
|
||
responses:
|
||
'200':
|
||
description: 状态更新成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
properties:
|
||
code: { type: integer, example: 0 }
|
||
message: { type: string, example: 状态更新成功 }
|
||
data: { $ref: '#/components/schemas/User' }
|
||
type: object
|
||
'400':
|
||
description: 参数校验失败
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'401':
|
||
description: 未认证
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
'404':
|
||
description: 用户不存在
|
||
content:
|
||
application/json:
|
||
schema:
|
||
$ref: '#/components/schemas/ErrorResponse'
|
||
security:
|
||
-
|
||
bearerAuth: []
|
||
components:
|
||
schemas:
|
||
Order:
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
platform_id:
|
||
type: integer
|
||
example: 2
|
||
store_id:
|
||
type: integer
|
||
example: 100
|
||
order_status_id:
|
||
type: integer
|
||
example: 1
|
||
platform_order_id:
|
||
type: string
|
||
example: ORD-20260101-001
|
||
buyer_user_id:
|
||
type: string
|
||
example: buyer_123
|
||
nullable: true
|
||
payment_method_id:
|
||
type: integer
|
||
example: 1
|
||
presale:
|
||
type: boolean
|
||
example: false
|
||
total_amount:
|
||
type: number
|
||
format: decimal
|
||
example: 199.99
|
||
total_paid:
|
||
type: number
|
||
format: decimal
|
||
example: 189.99
|
||
total_discount:
|
||
type: number
|
||
format: decimal
|
||
example: 10
|
||
total_received:
|
||
type: number
|
||
format: decimal
|
||
example: 189.99
|
||
freight_fee:
|
||
type: number
|
||
format: decimal
|
||
example: 0
|
||
tax_fee:
|
||
type: number
|
||
format: decimal
|
||
example: 0
|
||
discount_fee:
|
||
type: number
|
||
format: decimal
|
||
example: 10
|
||
commission_fee:
|
||
type: number
|
||
format: decimal
|
||
example: 5
|
||
coupon_amount:
|
||
type: number
|
||
format: decimal
|
||
example: 0
|
||
voucher_amount:
|
||
type: number
|
||
format: decimal
|
||
example: 0
|
||
order_type_id:
|
||
type: integer
|
||
example: 1
|
||
hash:
|
||
type: string
|
||
example: a1b2c3d4e5f6...
|
||
raw:
|
||
description: 平台原始数据
|
||
type: object
|
||
nullable: true
|
||
ext:
|
||
description: 扩展字段
|
||
type: object
|
||
nullable: true
|
||
created_date:
|
||
type: string
|
||
format: date-time
|
||
updated_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
paid_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
shipping_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
updated_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
OrderItem:
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
platform_id:
|
||
type: integer
|
||
example: 2
|
||
store_id:
|
||
type: integer
|
||
example: 100
|
||
order_id:
|
||
type: integer
|
||
example: 1000
|
||
platform_order_id:
|
||
type: string
|
||
example: ORD-20260101-001
|
||
sub_order_id:
|
||
type: string
|
||
example: SUB-001
|
||
nullable: true
|
||
sub_order_type_id:
|
||
type: integer
|
||
example: 1
|
||
product_id:
|
||
type: integer
|
||
example: 500
|
||
platform_product_id:
|
||
type: string
|
||
example: PROD-001
|
||
product_sku:
|
||
type: string
|
||
example: SKU-ABC-001
|
||
nullable: true
|
||
product_barcode:
|
||
type: string
|
||
example: '6901234567890'
|
||
nullable: true
|
||
unit_price:
|
||
type: number
|
||
format: decimal
|
||
example: 49.99
|
||
quantity:
|
||
type: integer
|
||
example: 2
|
||
discount:
|
||
type: number
|
||
format: decimal
|
||
example: 5
|
||
total:
|
||
type: number
|
||
format: decimal
|
||
example: 94.98
|
||
created_date:
|
||
type: string
|
||
format: date-time
|
||
ext:
|
||
description: 扩展字段
|
||
type: object
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
updated_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
Product:
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
platform_id:
|
||
type: integer
|
||
example: 2
|
||
store_id:
|
||
type: integer
|
||
example: 100
|
||
status_id:
|
||
type: integer
|
||
example: 1
|
||
type_id:
|
||
type: integer
|
||
example: 1
|
||
platform_item_id:
|
||
type: string
|
||
example: ITEM-001
|
||
platform_model_id:
|
||
type: string
|
||
example: MODEL-A
|
||
nullable: true
|
||
name:
|
||
type: string
|
||
example: 'iPhone 16 Pro'
|
||
nullable: true
|
||
price:
|
||
type: number
|
||
format: decimal
|
||
example: 99.99
|
||
currency:
|
||
type: string
|
||
example: CNY
|
||
num:
|
||
type: integer
|
||
example: 100
|
||
hash:
|
||
type: string
|
||
example: a1b2c3d4e5f6...
|
||
raw:
|
||
description: 平台原始数据
|
||
type: object
|
||
nullable: true
|
||
ext:
|
||
description: 扩展字段
|
||
type: object
|
||
nullable: true
|
||
created_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
updated_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
updated_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
Refund:
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
platform_id:
|
||
type: integer
|
||
example: 2
|
||
store_id:
|
||
type: integer
|
||
example: 100
|
||
order_id:
|
||
type: integer
|
||
example: 500
|
||
nullable: true
|
||
platform_order_id:
|
||
type: string
|
||
example: ORD-20260101-001
|
||
platform_refund_id:
|
||
type: string
|
||
example: RF-20260115-001
|
||
refund_status_id:
|
||
type: integer
|
||
example: 1
|
||
refund_type_id:
|
||
type: integer
|
||
example: 2
|
||
reason:
|
||
type: string
|
||
example: 商品质量问题
|
||
nullable: true
|
||
buyer_user_id:
|
||
type: string
|
||
example: buyer_123
|
||
nullable: true
|
||
refund_amount:
|
||
type: number
|
||
format: decimal
|
||
example: 99.99
|
||
freight_refund:
|
||
type: number
|
||
format: decimal
|
||
example: 10
|
||
refund_total:
|
||
type: number
|
||
format: decimal
|
||
example: 109.99
|
||
currency:
|
||
type: string
|
||
example: CNY
|
||
hash:
|
||
type: string
|
||
example: a1b2c3d4e5f6...
|
||
raw:
|
||
description: 平台原始数据
|
||
type: object
|
||
nullable: true
|
||
ext:
|
||
description: 扩展字段
|
||
type: object
|
||
nullable: true
|
||
order_created_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
order_paid_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_date:
|
||
type: string
|
||
format: date-time
|
||
updated_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
completed_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
updated_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
RefundItem:
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
platform_id:
|
||
type: integer
|
||
example: 2
|
||
store_id:
|
||
type: integer
|
||
example: 100
|
||
refund_id:
|
||
type: integer
|
||
example: 50
|
||
platform_parent_refund_id:
|
||
type: string
|
||
example: PRF-001
|
||
nullable: true
|
||
platform_refund_id:
|
||
type: string
|
||
example: RF-ITEM-001
|
||
refund_status_id:
|
||
type: integer
|
||
example: 1
|
||
refund_type_id:
|
||
type: integer
|
||
example: 2
|
||
reason:
|
||
type: string
|
||
example: 商品质量问题
|
||
nullable: true
|
||
currency:
|
||
type: string
|
||
example: CNY
|
||
buyer_user_id:
|
||
type: string
|
||
example: buyer_123
|
||
nullable: true
|
||
platform_order_id:
|
||
type: string
|
||
example: ORD-20260101-001
|
||
platform_sub_order_id:
|
||
type: string
|
||
example: SUB-001
|
||
nullable: true
|
||
platform_product_id:
|
||
type: string
|
||
example: PROD-001
|
||
nullable: true
|
||
quantity:
|
||
type: integer
|
||
example: 1
|
||
refund_amount:
|
||
type: number
|
||
format: decimal
|
||
example: 99.99
|
||
raw:
|
||
description: 平台原始子项数据
|
||
type: object
|
||
nullable: true
|
||
ext:
|
||
description: 扩展字段
|
||
type: object
|
||
nullable: true
|
||
order_created_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
order_paid_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_date:
|
||
type: string
|
||
format: date-time
|
||
updated_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
completed_date:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
updated_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
User:
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
username:
|
||
type: string
|
||
example: user_1234
|
||
email:
|
||
type: string
|
||
example: user@example.com
|
||
status:
|
||
type: integer
|
||
example: 1
|
||
role_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
api_key_enabled:
|
||
type: boolean
|
||
example: false
|
||
ext:
|
||
type: object
|
||
example:
|
||
nickname: user
|
||
nullable: true
|
||
refresh_token_expires_at:
|
||
type: string
|
||
format: date-time
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
updated_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
ApiResponse:
|
||
properties:
|
||
code:
|
||
type: integer
|
||
example: 0
|
||
message:
|
||
type: string
|
||
example: success
|
||
data:
|
||
type: object
|
||
nullable: true
|
||
type: object
|
||
PaginatedData:
|
||
properties:
|
||
items:
|
||
type: array
|
||
items: { }
|
||
total:
|
||
type: integer
|
||
example: 0
|
||
page:
|
||
type: integer
|
||
example: 1
|
||
per_page:
|
||
type: integer
|
||
example: 15
|
||
type: object
|
||
ErrorResponse:
|
||
properties:
|
||
code:
|
||
type: integer
|
||
example: 400
|
||
message:
|
||
type: string
|
||
example: 'Bad request'
|
||
data:
|
||
type: object
|
||
nullable: true
|
||
type: object
|
||
MqQueueInfo:
|
||
description: 单个队列的状态信息
|
||
properties:
|
||
queue:
|
||
description: 队列名称
|
||
type: string
|
||
example: orders.queue
|
||
messages:
|
||
description: '消息数量(异常时为 N/A)'
|
||
example: 5
|
||
oneOf:
|
||
-
|
||
type: integer
|
||
-
|
||
type: string
|
||
consumers:
|
||
description: '消费者数量(异常时为 N/A)'
|
||
example: 1
|
||
oneOf:
|
||
-
|
||
type: integer
|
||
-
|
||
type: string
|
||
status:
|
||
description: 队列状态
|
||
type: string
|
||
example: active
|
||
enum:
|
||
- high_load
|
||
- processing
|
||
- active
|
||
- empty
|
||
- error
|
||
type: object
|
||
MqQueueStatus:
|
||
description: 消息队列全量状态
|
||
properties:
|
||
business_queues:
|
||
description: 业务队列列表
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/MqQueueInfo'
|
||
retry_queues:
|
||
description: 重试队列列表
|
||
type: array
|
||
items:
|
||
$ref: '#/components/schemas/MqQueueInfo'
|
||
error_queue:
|
||
$ref: '#/components/schemas/MqQueueInfo'
|
||
summary:
|
||
description: 汇总统计
|
||
properties:
|
||
total_messages:
|
||
description: 消息总数
|
||
type: integer
|
||
example: 7
|
||
total_consumers:
|
||
description: 消费者总数
|
||
type: integer
|
||
example: 1
|
||
type: object
|
||
fetched_at:
|
||
description: 数据获取时间
|
||
type: string
|
||
format: date-time
|
||
example: '2026-03-13 12:00:00'
|
||
type: object
|
||
FailedMessageList:
|
||
description: 失败消息列表项
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
error_id:
|
||
type: string
|
||
example: err_67890abc
|
||
data_type:
|
||
type: string
|
||
example: order
|
||
enum:
|
||
- order
|
||
- product
|
||
- refund
|
||
platform:
|
||
type: string
|
||
example: Tmall
|
||
nullable: true
|
||
platform_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
store_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
error_type:
|
||
type: string
|
||
example: RuntimeException
|
||
error_message:
|
||
type: string
|
||
example: 'Connection refused'
|
||
retry_count:
|
||
type: integer
|
||
example: 3
|
||
message_id:
|
||
type: string
|
||
example: msg_12345
|
||
nullable: true
|
||
failed_at:
|
||
type: string
|
||
format: date-time
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
FailedMessageDetail:
|
||
description: 失败消息详情(含完整错误堆栈和原始消息体)
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
error_id:
|
||
type: string
|
||
example: err_67890abc
|
||
data_type:
|
||
type: string
|
||
example: order
|
||
enum:
|
||
- order
|
||
- product
|
||
- refund
|
||
platform:
|
||
type: string
|
||
example: Tmall
|
||
nullable: true
|
||
platform_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
company_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
store_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
error_type:
|
||
type: string
|
||
example: RuntimeException
|
||
error_message:
|
||
type: string
|
||
example: 'Connection refused'
|
||
error_code:
|
||
type: integer
|
||
example: 0
|
||
error_trace:
|
||
description: 完整异常堆栈
|
||
type: string
|
||
original_message:
|
||
description: '原始消息体 JSON'
|
||
type: object
|
||
retry_count:
|
||
type: integer
|
||
example: 3
|
||
message_id:
|
||
type: string
|
||
example: msg_12345
|
||
nullable: true
|
||
failed_at:
|
||
type: string
|
||
format: date-time
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
DashboardOverview:
|
||
description: 'Dashboard 概览统计'
|
||
properties:
|
||
today:
|
||
description: 今日统计
|
||
properties:
|
||
success:
|
||
type: integer
|
||
example: 120
|
||
failed:
|
||
type: integer
|
||
example: 3
|
||
type: object
|
||
this_week:
|
||
description: 本周统计
|
||
properties:
|
||
success:
|
||
type: integer
|
||
example: 850
|
||
failed:
|
||
type: integer
|
||
example: 15
|
||
type: object
|
||
this_month:
|
||
description: 本月统计
|
||
properties:
|
||
success:
|
||
type: integer
|
||
example: 3200
|
||
failed:
|
||
type: integer
|
||
example: 42
|
||
type: object
|
||
by_type:
|
||
description: 按数据类型分组统计(本月窗口)
|
||
type: array
|
||
items:
|
||
properties:
|
||
data_type:
|
||
type: string
|
||
example: order
|
||
enum:
|
||
- order
|
||
- product
|
||
- refund
|
||
- inventory
|
||
success:
|
||
type: integer
|
||
example: 1000
|
||
failed:
|
||
type: integer
|
||
example: 10
|
||
type: object
|
||
type: object
|
||
DashboardTrendItem:
|
||
description: 趋势数据点
|
||
properties:
|
||
date:
|
||
type: string
|
||
format: date
|
||
example: '2026-03-17'
|
||
success:
|
||
type: integer
|
||
example: 120
|
||
failed:
|
||
type: integer
|
||
example: 3
|
||
type: object
|
||
DashboardBreakdownItem:
|
||
description: 分组统计项
|
||
properties:
|
||
id:
|
||
description: '维度 ID(公司/平台/店铺)'
|
||
type: integer
|
||
example: 1
|
||
name:
|
||
description: 维度名称
|
||
type: string
|
||
example: Tmall
|
||
success:
|
||
type: integer
|
||
example: 500
|
||
failed:
|
||
type: integer
|
||
example: 8
|
||
type: object
|
||
ApiRequestLogList:
|
||
description: 'API 请求日志列表项'
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
user_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
method:
|
||
type: string
|
||
example: GET
|
||
path:
|
||
type: string
|
||
example: /api/v1/users
|
||
status_code:
|
||
type: integer
|
||
example: 200
|
||
ip:
|
||
type: string
|
||
example: 127.0.0.1
|
||
nullable: true
|
||
response_code:
|
||
type: integer
|
||
example: 0
|
||
nullable: true
|
||
duration_ms:
|
||
type: integer
|
||
example: 42
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
ApiRequestLogDetail:
|
||
description: 'API 请求日志详情(含完整请求体和 User-Agent)'
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
user_id:
|
||
type: integer
|
||
example: 1
|
||
nullable: true
|
||
method:
|
||
type: string
|
||
example: POST
|
||
path:
|
||
type: string
|
||
example: /api/v1/users
|
||
status_code:
|
||
type: integer
|
||
example: 200
|
||
ip:
|
||
type: string
|
||
example: 127.0.0.1
|
||
nullable: true
|
||
user_agent:
|
||
type: string
|
||
example: Mozilla/5.0
|
||
nullable: true
|
||
request_body:
|
||
description: 请求体(脱敏后)
|
||
type: object
|
||
nullable: true
|
||
response_code:
|
||
type: integer
|
||
example: 0
|
||
nullable: true
|
||
duration_ms:
|
||
type: integer
|
||
example: 42
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
OperationLogList:
|
||
description: 操作日志列表项
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
user_id:
|
||
type: integer
|
||
example: 1
|
||
action:
|
||
type: string
|
||
example: user.create
|
||
target_type:
|
||
type: string
|
||
example: user
|
||
target_id:
|
||
type: integer
|
||
example: 5
|
||
nullable: true
|
||
description:
|
||
type: string
|
||
example: '创建用户 test_user'
|
||
ip:
|
||
type: string
|
||
example: 127.0.0.1
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
OperationLogDetail:
|
||
description: '操作日志详情(含完整操作详情 JSON)'
|
||
properties:
|
||
id:
|
||
type: integer
|
||
example: 1
|
||
user_id:
|
||
type: integer
|
||
example: 1
|
||
action:
|
||
type: string
|
||
example: user.create
|
||
target_type:
|
||
type: string
|
||
example: user
|
||
target_id:
|
||
type: integer
|
||
example: 5
|
||
nullable: true
|
||
description:
|
||
type: string
|
||
example: '创建用户 test_user'
|
||
detail:
|
||
description: '操作详情 JSON'
|
||
type: object
|
||
nullable: true
|
||
ip:
|
||
type: string
|
||
example: 127.0.0.1
|
||
nullable: true
|
||
created_at:
|
||
type: string
|
||
format: date-time
|
||
type: object
|
||
securitySchemes:
|
||
bearerAuth:
|
||
type: http
|
||
bearerFormat: JWT
|
||
scheme: bearer
|
||
apiKeyAuth:
|
||
type: apiKey
|
||
name: X-API-Key
|
||
in: header
|
||
tags:
|
||
-
|
||
name: Dashboard
|
||
description: 'Dashboard 数据同步统计'
|
||
-
|
||
name: 'Failed Messages'
|
||
description: 失败消息查看
|
||
-
|
||
name: 'MQ Status'
|
||
description: 消息队列状态监控
|
||
-
|
||
name: 'Operation Logs'
|
||
description: 操作日志查看
|
||
-
|
||
name: Orders
|
||
description: 订单管理
|
||
-
|
||
name: 'Order Items'
|
||
description: 订单项管理
|
||
-
|
||
name: Products
|
||
description: 产品管理
|
||
-
|
||
name: 'Orders (Raw)'
|
||
description: 订单原始数据
|
||
-
|
||
name: 'Products (Raw)'
|
||
description: 产品原始数据
|
||
-
|
||
name: 'Refunds (Raw)'
|
||
description: 退款原始数据
|
||
-
|
||
name: 'Refund Items (Raw)'
|
||
description: 退款项原始数据
|
||
-
|
||
name: Refunds
|
||
description: 退款管理
|
||
-
|
||
name: 'Refund Items'
|
||
description: 退款项管理
|
||
-
|
||
name: 'Request Logs'
|
||
description: 'API 请求日志查看'
|
||
-
|
||
name: ApiKeys
|
||
description: 'API Key 管理'
|
||
-
|
||
name: Auth
|
||
description: 认证与个人信息
|
||
-
|
||
name: Companies
|
||
description: 公司管理
|
||
-
|
||
name: DataScope
|
||
description: 用户数据范围管理
|
||
-
|
||
name: Platforms
|
||
description: 平台管理
|
||
-
|
||
name: Roles
|
||
description: 角色与授权管理
|
||
-
|
||
name: RouteGroups
|
||
description: 路由组管理
|
||
-
|
||
name: Stores
|
||
description: 店铺管理
|
||
-
|
||
name: Users
|
||
description: 用户管理
|