Files
datahub/backend/docs/openapi.yaml
T
2026-03-17 15:55:20 +08:00

4641 lines
136 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 自动设为 NULLrole_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: 用户管理