2026-08-04 10:07:45 +08:00
|
|
|
openapi: 3.0.3
|
|
|
|
|
info:
|
|
|
|
|
title: 柏悦二期 FBA 计费 API
|
|
|
|
|
version: 2.0.0
|
|
|
|
|
description: 业务成功和失败均使用 HTTP 200;仅响应体 code 为字符串 "200" 时表示成功。
|
|
|
|
|
security:
|
|
|
|
|
- bearerAuth: []
|
|
|
|
|
paths:
|
|
|
|
|
/api/platform/v1/fba-pricing/customer-rules:
|
|
|
|
|
get:
|
|
|
|
|
summary: 查询客户计费规则版本
|
|
|
|
|
description: 需要 firstleg:fba-pricing:rule:view 权限
|
2026-08-05 09:11:26 +08:00
|
|
|
parameters:
|
|
|
|
|
- {$ref: '#/components/parameters/OptionalTenantId'}
|
|
|
|
|
- {name: ruleCode, in: query, schema: {type: string, maxLength: 50}}
|
2026-08-04 10:07:45 +08:00
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/fba-pricing/customer-rules/versions:
|
|
|
|
|
post:
|
|
|
|
|
summary: 新建客户计费规则版本
|
|
|
|
|
description: 版本内容不可原地修改;有效期使用 [effectiveFrom,effectiveTo) 半开区间。
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}]
|
|
|
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CustomerRuleVersionRequest'}}}}
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/fba-pricing/customer-rules/{id}:
|
|
|
|
|
get:
|
|
|
|
|
summary: 查询客户计费规则版本详情
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/Id'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
delete:
|
|
|
|
|
summary: 停用客户计费规则版本
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/Id'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/fba-pricing/carrier-rates:
|
|
|
|
|
get:
|
|
|
|
|
summary: 查询船司 FBA 价格版本
|
|
|
|
|
description: 需要 firstleg:fba-pricing:rate:view 权限
|
2026-08-05 09:30:08 +08:00
|
|
|
parameters:
|
|
|
|
|
- {$ref: '#/components/parameters/OptionalTenantId'}
|
|
|
|
|
- {name: rateCode, in: query, schema: {type: string, maxLength: 50}}
|
2026-08-04 10:07:45 +08:00
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/fba-pricing/carrier-rates/versions:
|
|
|
|
|
post:
|
|
|
|
|
summary: 新建船司 FBA 价格版本
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}]
|
|
|
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CarrierRateVersionRequest'}}}}
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/fba-pricing/carrier-rates/{id}:
|
|
|
|
|
get:
|
|
|
|
|
summary: 查询船司 FBA 价格版本详情
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/Id'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
delete:
|
|
|
|
|
summary: 停用船司 FBA 价格版本
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/Id'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/inbounds/{inboundId}/fees/calculate:
|
|
|
|
|
post:
|
|
|
|
|
summary: 按审核通过测量快照试算 FBA 费用
|
|
|
|
|
description: 精确匹配唯一客户规则和唯一船司价格;需要 firstleg:fba-pricing:calculate 权限。
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
|
|
|
|
requestBody: {content: {application/json: {schema: {$ref: '#/components/schemas/CalculateRequest'}}}}
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/inbounds/{inboundId}/fees/confirm:
|
|
|
|
|
post:
|
|
|
|
|
summary: 确认最新费用快照
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/inbounds/{inboundId}/fees/send:
|
|
|
|
|
post:
|
|
|
|
|
summary: 手工恢复发送费用快照
|
|
|
|
|
description: 仅作为异常恢复接口;正常业务由客服测量审核通过后自动计费、发布并完成入库。
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/inbounds/{inboundId}/fees/latest:
|
|
|
|
|
get:
|
|
|
|
|
summary: 查询最新费用快照
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/InboundId'}]
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无权限}}
|
|
|
|
|
/api/platform/v1/inbounds/{inboundId}/fees/published:
|
|
|
|
|
put:
|
|
|
|
|
summary: 调整已发布费用
|
|
|
|
|
description: 需要 firstleg:fba-pricing:adjust 权限;生成新 SENT 版本并将旧版本标记 SUPERSEDED,不回退 INBOUNDED 状态。
|
|
|
|
|
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
|
|
|
|
requestBody:
|
|
|
|
|
required: true
|
|
|
|
|
content:
|
|
|
|
|
application/json:
|
|
|
|
|
schema: {$ref: '#/components/schemas/AdjustFeeRequest'}
|
|
|
|
|
responses: {'200': {description: 成功或业务失败}, '403': {description: 无调整权限}}
|
|
|
|
|
components:
|
|
|
|
|
securitySchemes:
|
|
|
|
|
bearerAuth: {type: http, scheme: bearer, bearerFormat: JWT}
|
|
|
|
|
parameters:
|
2026-08-05 09:11:26 +08:00
|
|
|
OptionalTenantId: {name: tenantId, in: query, required: false, description: 不传时查询全部企业, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
|
|
|
|
TenantId: {name: tenantId, in: query, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
|
|
|
|
Id: {name: id, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
|
|
|
|
InboundId: {name: inboundId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
2026-08-04 10:07:45 +08:00
|
|
|
IdempotencyKey: {name: Idempotency-Key, in: header, required: true, schema: {type: string, maxLength: 128}}
|
|
|
|
|
schemas:
|
|
|
|
|
AdjustFeeRequest:
|
|
|
|
|
type: object
|
|
|
|
|
required: [subtotalAmount, additionalAmount, reason]
|
|
|
|
|
properties:
|
|
|
|
|
subtotalAmount: {type: number, minimum: 0, multipleOf: 0.01}
|
|
|
|
|
additionalAmount: {type: number, minimum: 0, multipleOf: 0.01}
|
|
|
|
|
reason: {type: string, minLength: 1, maxLength: 500}
|
|
|
|
|
CalculateRequest:
|
|
|
|
|
type: object
|
|
|
|
|
properties: {pricingAt: {type: string, format: date-time, description: 缺省为服务端当前时间}}
|
|
|
|
|
CustomerRuleVersionRequest:
|
|
|
|
|
type: object
|
|
|
|
|
required: [ruleCode, customerId, customerName, businessType, chargeMode, taxMode, conversionFactor, roundingScale, roundingMode, currency, effectiveFrom]
|
|
|
|
|
properties:
|
|
|
|
|
ruleCode: {type: string, maxLength: 50}
|
2026-08-05 09:11:26 +08:00
|
|
|
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
|
2026-08-04 10:07:45 +08:00
|
|
|
customerName: {type: string, maxLength: 128}
|
|
|
|
|
businessType: {type: string, maxLength: 32}
|
|
|
|
|
chargeMode: {type: string, enum: [KG, CBM]}
|
|
|
|
|
taxMode: {type: string, enum: [TAX_INCLUDED, TAX_EXCLUDED]}
|
|
|
|
|
conversionFactor: {type: number, exclusiveMinimum: 0, example: 167}
|
|
|
|
|
roundingScale: {type: integer, minimum: 0, maximum: 4}
|
|
|
|
|
roundingMode: {type: string, enum: [UP, DOWN, CEILING, FLOOR, HALF_UP, HALF_DOWN, HALF_EVEN]}
|
|
|
|
|
currency: {type: string, pattern: '^[A-Z]{3}$'}
|
|
|
|
|
effectiveFrom: {type: string, format: date-time}
|
|
|
|
|
effectiveTo: {type: string, format: date-time, nullable: true}
|
|
|
|
|
CarrierRateVersionRequest:
|
|
|
|
|
type: object
|
|
|
|
|
required: [rateCode, originWarehouseId, originWarehouseName, businessType, channelCode, carrierId, carrierName, destinationCode, chargeUnit, unitPrice, currency, additionalFee, effectiveFrom]
|
|
|
|
|
properties:
|
|
|
|
|
rateCode: {type: string, maxLength: 50}
|
2026-08-05 09:11:26 +08:00
|
|
|
originWarehouseId: {type: string, pattern: '^[1-9][0-9]*$'}
|
2026-08-04 10:07:45 +08:00
|
|
|
originWarehouseName: {type: string}
|
|
|
|
|
businessType: {type: string}
|
|
|
|
|
channelCode: {type: string}
|
2026-08-05 09:11:26 +08:00
|
|
|
carrierId: {type: string, pattern: '^[1-9][0-9]*$'}
|
2026-08-04 10:07:45 +08:00
|
|
|
carrierName: {type: string}
|
|
|
|
|
destinationCode: {type: string}
|
|
|
|
|
chargeUnit: {type: string, enum: [KG, CBM]}
|
|
|
|
|
unitPrice: {type: number, exclusiveMinimum: 0}
|
|
|
|
|
currency: {type: string, pattern: '^[A-Z]{3}$'}
|
|
|
|
|
additionalFee: {type: number, minimum: 0}
|
|
|
|
|
effectiveFrom: {type: string, format: date-time}
|
|
|
|
|
effectiveTo: {type: string, format: date-time, nullable: true}
|