1846 lines
98 KiB
YAML
1846 lines
98 KiB
YAML
openapi: 3.0.3
|
||
info:
|
||
title: 柏悦头程订单 API
|
||
description: 业务成功和失败均使用 HTTP 200;仅响应体 code 为字符串 "200" 时表示成功,其他 code 表示失败。
|
||
version: 1.7.0
|
||
security:
|
||
- bearerAuth: []
|
||
paths:
|
||
/api/merchant/v1/orders/workbench:
|
||
get:
|
||
summary: 客户订单工作台分页和筛选后待办数量
|
||
description: >-
|
||
仅按登录客户查询,权限merchant:order:list。草稿优先,再按创建时间和订单ID降序稳定分页。
|
||
入仓码/SKU采用或匹配;所有条件先筛选再计数。十类数量共用当前筛选,不从当前页行数计算。
|
||
默认包含草稿和有效正式单;履约子状态以Firstleg为准,待审核和已完成以Order为准。
|
||
security: [{bearerAuth: []}]
|
||
parameters:
|
||
- {name: cargoKeyword, in: query, schema: {type: string, maxLength: 64}}
|
||
- {name: receivingWarehouseId, in: query, schema: {type: integer, format: int64}}
|
||
- {name: channelName, in: query, schema: {type: string, maxLength: 128}}
|
||
- {name: destinationType, in: query, schema: {type: string, enum: [FBA, OVERSEAS, PRIVATE]}}
|
||
- {name: trackingNumber, in: query, schema: {type: string, maxLength: 128}}
|
||
- {name: mainStatus, in: query, schema: {type: string, enum: [DRAFT, PENDING_REVIEW, WAIT_MEASURE, WAIT_PALLETIZE, WAIT_SPLIT, LOADING, LOADED, DELIVERED, COMPLETED, CANCELLED]}}
|
||
- {name: createdFrom, in: query, schema: {type: string, format: date-time}}
|
||
- {name: createdTo, in: query, schema: {type: string, format: date-time}}
|
||
- {name: queue, in: query, schema: {type: string, enum: [all, fee, customs, draft, loaded, declared, cleared, scheduled, delivering, delivered], default: all}}
|
||
- {name: page, in: query, schema: {type: integer, minimum: 1, default: 1}}
|
||
- {name: size, in: query, schema: {type: integer, minimum: 1, maximum: 200, default: 10}}
|
||
responses:
|
||
'200':
|
||
description: 成功或业务错误;后端依赖不可用时返回明确错误,不返回局部成功数据
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
code: {type: string}
|
||
data:
|
||
type: object
|
||
required: [page, queues, channelNames, progress]
|
||
properties:
|
||
page: {$ref: '#/components/schemas/UnifiedOrderPage'}
|
||
queues:
|
||
type: object
|
||
required: [all, fee, customs, draft, loaded, declared, cleared, scheduled, delivering, delivered]
|
||
properties:
|
||
all: {type: integer, format: int64, minimum: 0}
|
||
fee: {type: integer, format: int64, minimum: 0}
|
||
customs: {type: integer, format: int64, minimum: 0}
|
||
draft: {type: integer, format: int64, minimum: 0}
|
||
loaded: {type: integer, format: int64, minimum: 0}
|
||
declared: {type: integer, format: int64, minimum: 0}
|
||
cleared: {type: integer, format: int64, minimum: 0}
|
||
scheduled: {type: integer, format: int64, minimum: 0}
|
||
delivering: {type: integer, format: int64, minimum: 0}
|
||
delivered: {type: integer, format: int64, minimum: 0}
|
||
channelNames: {type: array, items: {type: string}, description: 当前客户完整渠道筛选项,不限于当前页}
|
||
progress:
|
||
type: array
|
||
description: 与当前页订单一一对应的客户履约进度;分类互斥,待办可重叠。分片未齐时partial为true,完成只认Order可信回写。
|
||
items: {$ref: '#/components/schemas/MerchantOrderProgress'}
|
||
|
||
/internal/order/v1/fulfillment-completions:
|
||
post:
|
||
security: []
|
||
summary: Firstleg 回传来源实装签收并聚合履约根订单完成
|
||
description: >-
|
||
仅接受内部服务令牌。请求必须携带海外事件已验证的来源订单 ID、订单号、入仓码、
|
||
FBA 派送单号和完成时间。来源根订单先持久化自身实装签收事实,只有全部有效余量子单
|
||
已完成才完成根订单;来源子单独立完成并在根锁下重新评估聚合。明确 CANCELLED 子单
|
||
不参与完成门禁,其他未完成状态均阻断。重复事实不得重复写历史。响应明确返回来源状态
|
||
status 和履约根 rootOrderId/rootStatus;根尚未聚合完成时允许保留其原状态。
|
||
订单完成仅由此可信履约回写和取消后聚合门禁产生,普通订单状态流转禁止目标 COMPLETED,
|
||
平台不提供手工完成订单接口。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string}
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
required: [tenantId, orderId, orderNo, inboundCode, rootOrderId, deliveryNo, completedAt, eventId, payloadHash]
|
||
properties:
|
||
tenantId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
orderNo: {type: string}
|
||
inboundCode: {type: string}
|
||
rootOrderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
deliveryNo: {type: string}
|
||
completedAt: {type: string, format: date-time}
|
||
eventId: {type: string, format: uuid}
|
||
payloadHash: {type: string, pattern: '^[0-9a-fA-F]{64}$'}
|
||
responses:
|
||
'200':
|
||
description: 来源实装签收事实已保存,返回来源和履约根各自状态
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
required: [code, data]
|
||
properties:
|
||
code: {type: string}
|
||
data:
|
||
type: object
|
||
required: [orderId, status, replayed, rootOrderId, rootStatus]
|
||
properties:
|
||
orderId: {type: integer, format: int64}
|
||
status: {type: string, enum: [APPROVED, ACCEPTED, PROCESSING, COMPLETED]}
|
||
replayed: {type: boolean}
|
||
rootOrderId: {type: integer, format: int64}
|
||
rootStatus: {type: string, enum: [APPROVED, ACCEPTED, PROCESSING, COMPLETED]}
|
||
'403': {description: 内部服务令牌无效}
|
||
/internal/order/v1/cargoes/{tenantId}/{orderId}:
|
||
get:
|
||
security: []
|
||
summary: Firstleg 批量读取订单货物绑定
|
||
description: >-
|
||
仅接受内部服务令牌。按 tenantId 与 orderId 严格限定订单范围,并按订单货物顺序一次返回全部货物;
|
||
cargoId 是 Firstleg inboundDetailId 的绑定键,shipmentId 仅取对应货物行快照,
|
||
不使用订单顶层货件号回退,也不提供逐货物查询替代本批量契约。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string}
|
||
- {name: tenantId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: orderId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
responses:
|
||
'200':
|
||
description: 当前订单范围内的货物绑定列表
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/CargoLabelBindingListEnvelope'}
|
||
'403': {description: 内部服务令牌无效}
|
||
put:
|
||
security: []
|
||
summary: Firstleg 维护订单权威协作备注
|
||
description: >-
|
||
仅接受内部服务令牌。预装清单编辑备注时写回 Order 权威订单记录;
|
||
客户备注保持只读,内部、仓库和客服备注统一按订单版本乐观更新。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string}
|
||
- {name: tenantId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: orderId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
required: [operatorId]
|
||
properties:
|
||
internalRemark: {type: string, nullable: true, maxLength: 1000}
|
||
warehouseRemark: {type: string, nullable: true, maxLength: 1000}
|
||
customerServiceRemark: {type: string, nullable: true, maxLength: 1000}
|
||
operatorId: {type: integer, format: int64, minimum: 1}
|
||
responses:
|
||
'200': {description: 返回订单最新版本和四类备注}
|
||
'403': {description: 内部服务令牌无效}
|
||
/internal/order/v1/cargoes/{tenantId}/{orderId}/printable-inbound-snapshot:
|
||
post:
|
||
security: []
|
||
summary: 为 Firstleg 箱唛打印读取并预留稳定入仓快照
|
||
description: >-
|
||
仅接受内部服务令牌。若 AUTO 模式草稿尚无入仓码,则按订单渠道原子预留全局唯一入仓码;
|
||
并发重放返回已胜出的同一码,后续订单提交继续复用,避免已打印二维码失效。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string}
|
||
- {name: tenantId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: orderId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
responses:
|
||
'200': {description: 返回带稳定入仓码及总箱数的订单快照}
|
||
'403': {description: 内部服务令牌无效}
|
||
/internal/order/v1/pending-review-orders:
|
||
get:
|
||
security: []
|
||
summary: Firstleg 分页读取 Order 权威待审核订单
|
||
description: >-
|
||
仅接受内部服务令牌。只返回 ord_order 中未删除且 status=SUBMITTED 的头程订单,
|
||
mainStatus 固定为 PENDING_REVIEW。createdStart/createdEnd 和 expectedArrivalStart/expectedArrivalEnd
|
||
均按 Asia/Shanghai 自然日闭区间分别过滤 ord_order.created_at 与 expected_arrival_at;
|
||
稳定按 created_at DESC、id DESC 分页;不读取或修复 Firstleg 投影。
|
||
excludedOrderIds 由 Firstleg 根据当前有效装柜计划提供,用于在数据库分页前排除已经占柜的订单。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string}
|
||
- {name: channelCodes, in: query, required: false, style: form, explode: true, schema: {type: array, items: {type: string, maxLength: 64}}}
|
||
- {name: warehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: customerId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: inboundCode, in: query, required: false, schema: {type: string, maxLength: 40}}
|
||
- {name: createdStart, in: query, required: false, schema: {type: string, format: date}}
|
||
- {name: createdEnd, in: query, required: false, schema: {type: string, format: date}}
|
||
- {name: expectedArrivalStart, in: query, required: false, schema: {type: string, format: date}}
|
||
- {name: expectedArrivalEnd, in: query, required: false, schema: {type: string, format: date}}
|
||
- {name: excludedOrderIds, in: query, required: false, style: form, explode: true, schema: {type: array, items: {type: string, pattern: '^[1-9][0-9]*$'}}}
|
||
- {name: page, in: query, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||
- {name: size, in: query, required: true, schema: {type: integer, format: int64, minimum: 1, maximum: 200}}
|
||
responses:
|
||
'200':
|
||
description: Order 权威待审核订单页
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/PendingReviewOrderPageEnvelope'}
|
||
'403': {description: 内部服务令牌无效}
|
||
/internal/order/v1/pending-review-orders/batch:
|
||
post:
|
||
security: []
|
||
summary: Firstleg 按订单 ID 批量核验 Order 权威待审核订单
|
||
description: >-
|
||
仅接受内部服务令牌。只返回请求集合中未删除且 status=SUBMITTED 的订单,按请求顺序返回;
|
||
供订单列表创建同柜组前幂等准备 Firstleg PREPARING 入库投影,不返回已审核或失效订单。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string}
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/PendingReviewOrderBatchRequest'}
|
||
responses:
|
||
'200':
|
||
description: Order 权威待审核订单集合
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/PendingReviewOrderListEnvelope'}
|
||
'403': {description: 内部服务令牌无效}
|
||
/internal/exports/v1/DOMESTIC_WAREHOUSE_ORDER_LIST/batches:
|
||
post:
|
||
security: []
|
||
summary: File 异步导出中心分页读取国内仓订单
|
||
description: >-
|
||
仅接受内部服务令牌。selectedOrderNos 非空时忽略查询筛选并严格按所选业务订单号导出;
|
||
selectedOrderNos 为空时按与平台统一订单列表一致的筛选条件导出全部匹配记录,page/size 不属于请求参数。
|
||
Provider 只返回结构化数据,不生成文件;调用方创建 File 任务时 exportType 固定为
|
||
DOMESTIC_WAREHOUSE_ORDER_LIST、format 固定为 XLSX,并需要 platform:order:export。
|
||
parameters:
|
||
- name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string, minLength: 32}
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/DomesticWarehouseOrderExportBatchRequest'}
|
||
responses:
|
||
'200': {description: 返回固定列定义、当前批数据、游标与首批总数}
|
||
'403': {description: 内部服务令牌无效}
|
||
/api/merchant/v1/orders/first-leg/addresses:
|
||
get:
|
||
summary: 查询当前客户下单地址簿
|
||
parameters:
|
||
- name: addressType
|
||
in: query
|
||
required: false
|
||
schema: {type: string, enum: [PICKUP, PRIVATE_DESTINATION]}
|
||
responses:
|
||
'200': {description: 只返回登录客户可用地址}
|
||
'403': {description: 需要订单查看、创建或编辑权限}
|
||
post:
|
||
summary: 保存当前客户下单地址
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/CustomerOrderAddressSaveRequest'}
|
||
responses:
|
||
'200': {description: 返回地址内部 ID,Long 按字符串序列化}
|
||
'403': {description: 需要 merchant:order:create 权限}
|
||
/api/merchant/v1/orders/first-leg/addresses/{id}:
|
||
put:
|
||
summary: 修改当前客户下单地址
|
||
description: 已创建订单保存独立快照,本操作不会修改历史订单。
|
||
parameters:
|
||
- {name: id, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/CustomerOrderAddressSaveRequest'}
|
||
responses: {'200': {description: 成功}, '403': {description: 需要 merchant:order:edit 权限}}
|
||
delete:
|
||
summary: 停用当前客户下单地址
|
||
description: 停用后不能用于新订单,历史订单快照不受影响。
|
||
parameters:
|
||
- {name: id, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
responses: {'200': {description: 成功}, '403': {description: 需要 merchant:order:edit 权限}}
|
||
/api/merchant/v1/orders/first-leg/batch-imports/template:
|
||
get:
|
||
summary: 下载 Excel 批量下单模板
|
||
description: >-
|
||
返回两级中文业务表头的 xlsx,按订单基础、目的地与预约、货物与包装、报关与计价、FBA业务信息、联系人/备注分组并使用不同配色。
|
||
静态业务枚举使用中文下拉;仓库按全部 ACTIVE 分页结果构建,FBA目的仓仅包含 FBA,海外仓目的仓仅包含 OVERSEAS,
|
||
客户地址按当前客户生成。预计出运日期和预约提货时间提供日期格式及校验。工作表不暴露内部 ID,权威仓库选择自动推导目的国、
|
||
目的仓 ID/名称及 FBA 仓库代码。客户归属和企业名称取认证 tenantId 对应的 IAM 企业主档,贸易术语固定为 FOB,均不作为模板列。
|
||
示例与逐列填写规则位于独立说明页,不占用50行编辑区。
|
||
responses:
|
||
'200': {description: xlsx 模板}
|
||
'403': {description: 需要 merchant:order:create 权限}
|
||
/api/merchant/v1/orders/first-leg/batch-imports:
|
||
post:
|
||
summary: 上传 Excel 批量创建订单草稿
|
||
description: >-
|
||
ATOMIC 在任一行失败时整批回滚;PARTIAL 每行独立事务,错误行不影响成功行。
|
||
同一操作者重试必须复用 Idempotency-Key,每个非空数据行按实际 Excel 行号生成内部稳定幂等键;模板及错误报告不展示该内部键。
|
||
仅接受当前中文模板,中文下拉值由服务端映射为权威代码,不兼容历史英文技术表头。
|
||
导入支持 Excel 原生日期值,并重新校验动态选项;FBA、OVERSEAS、PRIVATE 必须分别且只能填写对应目的仓字段。
|
||
原文件和错误报告分别通过 File 的 ORDER_BATCH_IMPORT_SOURCE、ORDER_BATCH_IMPORT_ERROR_REPORT 契约保存。
|
||
parameters:
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
- name: mode
|
||
in: query
|
||
required: true
|
||
schema: {type: string, enum: [ATOMIC, PARTIAL]}
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
multipart/form-data:
|
||
schema:
|
||
type: object
|
||
required: [file]
|
||
properties:
|
||
file: {type: string, format: binary, description: 最大 5MB,仅 xlsx;最多 50 行}
|
||
responses:
|
||
'200': {description: 返回逐行结果、原文件 ID 及可选错误报告文件 ID}
|
||
'403': {description: 需要 merchant:order:create 权限}
|
||
/api/platform/v1/orders/first-leg/inbound-code-policy:
|
||
get:
|
||
summary: 平台端查询全系统入仓码模式
|
||
description: 与客户下单端返回同一份全局策略,不按客户区分。
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
data: {$ref: '#/components/schemas/InboundCodePolicy'}
|
||
'403': {description: 需要平台订单列表、创建、编辑或提交权限之一}
|
||
/api/platform/v1/orders/first-leg/inbound-code-associations/{inboundCode}:
|
||
get:
|
||
summary: 平台按全局入仓码查询订单基础关联
|
||
description: >-
|
||
需要 platform:order:list。入仓码和订单业务号是主要展示键;Long ID 均以字符串返回,
|
||
只供页面路由和后续接口关联。查询直接使用 Order 全局唯一入仓码事实,不跨库读取 Firstleg。
|
||
parameters:
|
||
- $ref: '#/components/parameters/InboundCodePath'
|
||
responses:
|
||
'200':
|
||
description: 查询成功或业务失败,按响应体 code 判断
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/InboundCodeAssociationEnvelope'}
|
||
'403': {description: 需要平台身份和 platform:order:list 权限}
|
||
/api/platform/v1/orders:
|
||
get:
|
||
summary: 平台统一订单列表
|
||
description: >-
|
||
统一返回八态产品主状态、下一步动作及测量/组托/预装/装柜/派送摘要,需要 platform:order:list。
|
||
入仓码来源由全系统统一模式控制:AUTO 在订单提交时按物流渠道生成,格式为物流前缀+YYMMDD+当天全平台票序;
|
||
LEGACY_MANUAL 在草稿中录入旧系统入仓码。两种模式下入仓码一经提交均固定;有入库单时同时返回
|
||
inboundId、inboundVersion、loadingVersion、pickingVersion;inboundVersion
|
||
才是 C04 loading/complete 的 expectedVersion,loadingVersion 当前等于 pickingVersion(兼容别名)。
|
||
tenantId 省略时跨全部客户;mainStatus 省略时按订单创建时间分页,指定 PENDING_REVIEW 时由 Order 查询,
|
||
指定履约主状态时先按 Order 权威状态校正并去重,再分页读取 Firstleg 摘要。旧 /orders/first-leg 接口保持兼容。
|
||
列表行同时返回 customerRemark(客户下单备注)、latestInternalNote(最新一条平台内部备注)和
|
||
relation(仅有关联时返回;PARENT 含 childCount,CHILD 含 rootOrderId、parentOrderId 与 splitSequence)。
|
||
coLoadGroup 仅平台响应返回,由 Order 经 Firstleg 内部批量只读契约聚合;成员业务标识由 Order 权威订单片段补齐。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedTaxMode'
|
||
- {name: tenantId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- $ref: '#/components/parameters/UnifiedKeyword'
|
||
- $ref: '#/components/parameters/UnifiedOrderNo'
|
||
- $ref: '#/components/parameters/UnifiedMainStatus'
|
||
- {name: customerId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: receivingWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: destinationWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- $ref: '#/components/parameters/UnifiedInboundCode'
|
||
- $ref: '#/components/parameters/UnifiedInternalOrderStatus'
|
||
- $ref: '#/components/parameters/UnifiedExpectedArrivalDate'
|
||
- $ref: '#/components/parameters/UnifiedFeeReviewStatus'
|
||
- $ref: '#/components/parameters/UnifiedChannelName'
|
||
- $ref: '#/components/parameters/UnifiedContainerNo'
|
||
- $ref: '#/components/parameters/UnifiedCabinetNo'
|
||
- $ref: '#/components/parameters/UnifiedSailingDate'
|
||
- $ref: '#/components/parameters/UnifiedLoaded'
|
||
- $ref: '#/components/parameters/UnifiedFullContainer'
|
||
- $ref: '#/components/parameters/UnifiedMeasurementReviewStatus'
|
||
- $ref: '#/components/parameters/UnifiedFbaCode'
|
||
- $ref: '#/components/parameters/UnifiedCreatedFrom'
|
||
- $ref: '#/components/parameters/UnifiedCreatedTo'
|
||
- $ref: '#/components/parameters/UnifiedPage'
|
||
- $ref: '#/components/parameters/UnifiedSize'
|
||
responses:
|
||
'200':
|
||
description: 成功或业务失败,响应体 code 为字符串 200 时成功
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/UnifiedOrderPageEnvelope'}
|
||
'403': {description: 需要平台身份和 platform:order:list 权限}
|
||
/api/platform/v1/orders/status-counts:
|
||
get:
|
||
summary: 平台统一订单页签数量
|
||
description: >-
|
||
需要平台身份和 platform:order:list;tenantId 省略时按授权平台范围查询全部客户。
|
||
按统一列表非分页、非 mainStatus 筛选全量去重;忽略主状态和分页,不返回全部数量。
|
||
订单审核与完成状态优先于履约投影,依赖异常返回业务错误,不能以零代替失败。
|
||
MEASUREMENT_REVIEW 为独立任务,暂不返回该 key。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedTaxMode'
|
||
- {name: tenantId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- $ref: '#/components/parameters/UnifiedKeyword'
|
||
- $ref: '#/components/parameters/UnifiedOrderNo'
|
||
- {name: customerId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: receivingWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: destinationWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- $ref: '#/components/parameters/UnifiedInboundCode'
|
||
- $ref: '#/components/parameters/UnifiedInternalOrderStatus'
|
||
- $ref: '#/components/parameters/UnifiedExpectedArrivalDate'
|
||
- $ref: '#/components/parameters/UnifiedFeeReviewStatus'
|
||
- $ref: '#/components/parameters/UnifiedChannelName'
|
||
- $ref: '#/components/parameters/UnifiedContainerNo'
|
||
- $ref: '#/components/parameters/UnifiedCabinetNo'
|
||
- $ref: '#/components/parameters/UnifiedSailingDate'
|
||
- $ref: '#/components/parameters/UnifiedLoaded'
|
||
- $ref: '#/components/parameters/UnifiedFullContainer'
|
||
- $ref: '#/components/parameters/UnifiedMeasurementReviewStatus'
|
||
- $ref: '#/components/parameters/UnifiedFbaCode'
|
||
- $ref: '#/components/parameters/UnifiedCreatedFrom'
|
||
- $ref: '#/components/parameters/UnifiedCreatedTo'
|
||
responses:
|
||
'200':
|
||
description: 标准 ApiResponse;仅 code 为字符串 200 时可使用数量
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
code: {type: string}
|
||
message: {type: string}
|
||
data:
|
||
type: object
|
||
required: [counts]
|
||
properties:
|
||
counts:
|
||
type: object
|
||
description: PENDING_REVIEW、WAIT_MEASURE、WAIT_PALLETIZE、WAIT_SPLIT、LOADING、LOADED、DELIVERED、COMPLETED
|
||
additionalProperties: {type: integer, format: int64, minimum: 0}
|
||
'403': {description: 需要平台身份和 platform:order:list 权限}
|
||
/api/platform/v1/orders/{orderId}:
|
||
get:
|
||
summary: 平台统一订单详情
|
||
description: 合并 Order 与 Firstleg 时间线并按发生时间升序返回;返回当前订单片段的 inboundCode 与同柜组摘要;平台可见内部备注。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedOrderId'
|
||
- $ref: '#/components/parameters/UnifiedTenantId'
|
||
responses:
|
||
'200':
|
||
description: 成功或业务失败,按响应体 code 判断
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/UnifiedOrderDetailEnvelope'}
|
||
'403': {description: 需要平台身份和 platform:order:list 权限}
|
||
/api/platform/v1/orders/{orderId}/remarks:
|
||
put:
|
||
summary: 更新订单协作备注
|
||
description: 客户备注只读;需要 platform:order:note 权限,可更新或清空内部备注、仓库备注和客服备注。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedOrderId'
|
||
- $ref: '#/components/parameters/UnifiedTenantId'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
required: [expectedVersion]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
internalRemark: {type: string, nullable: true, maxLength: 1000}
|
||
warehouseRemark: {type: string, nullable: true, maxLength: 1000}
|
||
customerServiceRemark: {type: string, nullable: true, maxLength: 1000}
|
||
responses:
|
||
'200': {description: 备注添加成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 platform:order:note 权限}
|
||
/api/platform/v1/orders/{orderId}/declaration:
|
||
put:
|
||
summary: 版本化修改客户原始申报资料
|
||
description: >-
|
||
需要 platform:order:declaration:edit。货物使用订单内 itemNo 定位,不接受货物数据库 ID;
|
||
不允许修改客户、国内收货仓、订单号、入仓码、状态、仓库/PDA/设备实测、测量审核或计费事实。
|
||
仅待审核、待测量数据、待分柜阶段允许修改;进入装柜中及后续阶段后拒绝修改。
|
||
已有测量或计费事实不阻断客户申报快照更新,详情继续以最新申报与既有实测分别展示;
|
||
只有渠道发生变化时才在写入前校验同柜/分柜/装柜可逆性和重新计价资格,任何校验失败均不写入。
|
||
正式门禁分别为 /internal/firstleg/v1/inbounds/order-channel-changes/validate 与
|
||
/internal/firstleg/v1/pricing/order-channel-changes/validate,两个服务均失败关闭。
|
||
国内收货仓或中转仓如需变化必须重新下单。成功后通过 ORDER_DECLARATION_UPDATED_V1 Outbox
|
||
同步 Firstleg;消费者按 eventId 幂等、version 顺序刷新申报快照,不覆盖实测、箱码或已确认费用。
|
||
本次 changes 含渠道字段时,同版本 Outbox 还必须调用
|
||
/internal/firstleg/v1/pricing/order-channel-changes/apply,使未确认价格预估显式失效;普通申报更新不得调用。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedOrderId'
|
||
- $ref: '#/components/parameters/UnifiedTenantId'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/OrderDeclarationUpdateRequest'}
|
||
responses:
|
||
'200': {description: 成功返回新版本、渠道历史标记和字段级前后值;版本冲突、渠道与不可逆履约或已确认费用不兼容时响应体业务码为 A0409}
|
||
'403': {description: 无权限或非平台身份}
|
||
/api/platform/v1/orders/{orderId}/planning:
|
||
put:
|
||
summary: 版本化修改订单运营预估
|
||
description: 需要 platform:order:declaration:edit;只修改预计到货时间与平台预估体积,客户下单和仓库实测体积不受影响。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedOrderId'
|
||
- $ref: '#/components/parameters/UnifiedTenantId'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/OrderPlanningUpdateRequest'}
|
||
responses:
|
||
'200': {description: 成功返回新订单版本;版本冲突时响应体业务码为 A0409}
|
||
'403': {description: 无权限或非平台身份}
|
||
/api/merchant/v1/orders:
|
||
get:
|
||
summary: 客户统一订单列表
|
||
description: >-
|
||
只按登录态客户隔离查询,需要 merchant:order:list;不接受目标客户参数。
|
||
有入库单时同时返回 inboundId、inboundVersion、loadingVersion、pickingVersion;inboundVersion
|
||
才是 C04 loading/complete 的 expectedVersion,loadingVersion 当前等于 pickingVersion(兼容别名)。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedTaxMode'
|
||
- $ref: '#/components/parameters/UnifiedKeyword'
|
||
- $ref: '#/components/parameters/UnifiedOrderNo'
|
||
- $ref: '#/components/parameters/UnifiedMainStatus'
|
||
- {name: customerId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: receivingWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: destinationWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- $ref: '#/components/parameters/UnifiedInboundCode'
|
||
- $ref: '#/components/parameters/UnifiedInternalOrderStatus'
|
||
- $ref: '#/components/parameters/UnifiedExpectedArrivalDate'
|
||
- $ref: '#/components/parameters/UnifiedFeeReviewStatus'
|
||
- $ref: '#/components/parameters/UnifiedChannelName'
|
||
- $ref: '#/components/parameters/UnifiedContainerNo'
|
||
- $ref: '#/components/parameters/UnifiedCabinetNo'
|
||
- $ref: '#/components/parameters/UnifiedSailingDate'
|
||
- $ref: '#/components/parameters/UnifiedLoaded'
|
||
- $ref: '#/components/parameters/UnifiedFullContainer'
|
||
- $ref: '#/components/parameters/UnifiedMeasurementReviewStatus'
|
||
- $ref: '#/components/parameters/UnifiedFbaCode'
|
||
- $ref: '#/components/parameters/UnifiedCreatedFrom'
|
||
- $ref: '#/components/parameters/UnifiedCreatedTo'
|
||
- $ref: '#/components/parameters/UnifiedPage'
|
||
- $ref: '#/components/parameters/UnifiedSize'
|
||
responses:
|
||
'200':
|
||
description: 成功或业务失败,按响应体 code 判断
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/UnifiedOrderPageEnvelope'}
|
||
'403': {description: 需要 merchant:order:list 权限}
|
||
/api/merchant/v1/orders/{orderId}:
|
||
get:
|
||
summary: 客户统一订单详情
|
||
description: 仅返回登录客户所属订单及客户可见时间线,不返回平台内部备注。progress使用与工作台相同的权威投影,按认证客户和精确订单读取;根单只汇总本客户有效子单,子单只投影自身。依赖不可用时失败,不回退delivery快照。
|
||
parameters:
|
||
- $ref: '#/components/parameters/UnifiedOrderId'
|
||
responses:
|
||
'200':
|
||
description: 成功或业务失败,按响应体 code 判断
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/MerchantOrderDetailEnvelope'}
|
||
'403': {description: 需要 merchant:order:view 权限}
|
||
/api/merchant/v1/orders/first-leg:
|
||
get:
|
||
summary: 客户端入库订单聚合列表
|
||
description: 按当前登录客户分页返回订单、货物汇总、收货方快照及头程入仓编码,需要 merchant:order:list 权限;客户 ID 从 JWT 的 tenantId 兼容字段取得。
|
||
parameters:
|
||
- {name: keyword, in: query, required: false, schema: {type: string, maxLength: 64}}
|
||
- {name: orderNo, in: query, required: false, schema: {type: string, maxLength: 64}}
|
||
- {name: receivingWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: channelName, in: query, required: false, schema: {type: string, maxLength: 128}}
|
||
- {name: customerContact, in: query, required: false, description: 客户名称、联系人或手机号, schema: {type: string, maxLength: 128}}
|
||
- {name: customerId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: status, in: query, required: false, schema: {type: string}}
|
||
- {name: operationStatus, in: query, required: false, description: 操作状态,优先于兼容参数 status, schema: {type: string}}
|
||
- {name: destinationType, in: query, required: false, schema: {type: string, maxLength: 32}}
|
||
- {name: destinationWarehouseId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: createdFrom, in: query, required: false, schema: {type: string, format: date-time}}
|
||
- {name: createdTo, in: query, required: false, schema: {type: string, format: date-time}}
|
||
- {name: page, in: query, required: false, schema: {type: integer, minimum: 1, default: 1}}
|
||
- {name: size, in: query, required: false, schema: {type: integer, minimum: 1, maximum: 200, default: 20}}
|
||
responses:
|
||
'200':
|
||
description: 成功或业务失败,响应体 code 为字符串 200 时成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
items: {type: array, items: {$ref: '#/components/schemas/FirstLegOrderSummary'}}
|
||
post:
|
||
summary: 创建订单草稿
|
||
parameters:
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/FirstLegOrderDraft'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
/api/merchant/v1/orders/first-leg/inbound-code-associations/{inboundCode}:
|
||
get:
|
||
summary: 客户按入仓码查询本客户订单基础关联
|
||
description: >-
|
||
需要 merchant:order:list。客户范围仅取登录态,不接受客户 ID 参数;其他客户的入仓码统一按不存在处理。
|
||
入仓码和订单业务号是主要展示键,Long ID 只供路由关联。
|
||
parameters:
|
||
- $ref: '#/components/parameters/InboundCodePath'
|
||
responses:
|
||
'200':
|
||
description: 查询成功、不存在或其他业务失败,按响应体 code 判断
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/InboundCodeAssociationEnvelope'}
|
||
'403': {description: 需要客户身份和 merchant:order:list 权限}
|
||
/api/merchant/v1/orders/first-leg/batch:
|
||
post:
|
||
summary: 批量创建头程订单草稿
|
||
description: >-
|
||
一次请求为多个外层行创建草稿;每个数组元素对应一张草稿,元素内 cargoes
|
||
对应该行的多个产品明细。每项独立处理,允许部分成功;草稿仅校验渠道、目的仓、SKU
|
||
和箱数,提交审核前再执行完整货物与提货资料校验。最多 50 项。
|
||
parameters:
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: array
|
||
minItems: 1
|
||
maxItems: 50
|
||
items: {$ref: '#/components/schemas/FirstLegBatchDraftItem'}
|
||
responses:
|
||
'200':
|
||
description: 批量处理完成;业务失败通过 items.errorCode 和 items.errorMessage 逐项返回
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/FirstLegBatchDraftResponse'}
|
||
'400': {description: 请求数组为空、超过 50 项或幂等键缺失}
|
||
'403': {description: 需要 merchant:order:create 权限}
|
||
/api/merchant/v1/orders/first-leg/inbound-code-policy:
|
||
get:
|
||
summary: 查询全系统入仓码模式
|
||
description: >-
|
||
返回订单服务当前统一运行模式。AUTO 表示提交时由新系统生成;LEGACY_MANUAL
|
||
表示两套系统并跑期间必须录入旧系统生成的入仓码。该策略不按客户区分。
|
||
responses:
|
||
'200':
|
||
description: 查询成功
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
data: {$ref: '#/components/schemas/InboundCodePolicy'}
|
||
'403': {description: 需要 merchant:order:list、merchant:order:create 或 merchant:order:edit 权限之一}
|
||
/api/merchant/v1/orders/first-leg/{id}:
|
||
put:
|
||
summary: 客户版本化编辑草稿
|
||
description: >-
|
||
仅允许本客户 DRAFT/REJECTED 订单。必须携带读取详情时的 expectedVersion 和 Idempotency-Key;
|
||
不接受旧平铺保存请求。原键同载荷重放先返回首次成功,不再检查已递增版本或修改明细与历史;
|
||
同键不同订单/版本/内容、首次版本过期或状态不允许返回业务冲突 A0409。
|
||
版本或 draft 缺失为参数错误。主表、子明细、历史和幂等结果同事务提交或回滚。
|
||
parameters:
|
||
- $ref: '#/components/parameters/OrderId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/MerchantDraftUpdateRequest'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 merchant:order:edit 权限和本客户订单归属}
|
||
/api/merchant/v1/orders/first-leg/{id}/cancel:
|
||
post:
|
||
summary: 客户版本化幂等取消订单
|
||
description: >-
|
||
必须携带当前 expectedVersion、原因和 Idempotency-Key。原键同载荷返回首次成功,
|
||
不重复取消、聚合根订单、写历史或 Outbox;同键不同订单/版本/原因拒绝。
|
||
新命令仅在当前版本及取消状态门禁通过后执行,重复取消新命令返回 A0409。
|
||
取消、根履约聚合、历史、事件与幂等结果同事务完成;不接受缺版本的旧原因请求。
|
||
parameters:
|
||
- $ref: '#/components/parameters/OrderId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/MerchantOrderCancelRequest'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 merchant:order:cancel 权限和本客户订单归属}
|
||
/api/merchant/v1/orders/first-leg/{id}/submit:
|
||
post:
|
||
summary: 提交订单
|
||
description: 必须携带读取详情时的expectedVersion;原键同载荷重放先返回首次成功,不重复提交。改版本/订单的同键请求与过期首次提交为A0409。每条货物的每箱数量、箱数和总数量均必填,且总数量必须等于每箱数量 × 箱数。
|
||
parameters:
|
||
- $ref: '#/components/parameters/OrderId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/OrderSubmitRequest'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
/api/platform/v1/orders/first-leg:
|
||
get:
|
||
summary: 平台分页查询头程订单
|
||
description: tenantId 是目标客户 ID 的兼容参数名;省略时查询全部客户订单,传入时仅查询指定客户。
|
||
parameters:
|
||
- name: tenantId
|
||
in: query
|
||
required: false
|
||
description: 可选的目标客户筛选;tenantId 为历史兼容参数名
|
||
schema: {type: integer, format: int64, minimum: 1}
|
||
responses:
|
||
'200': {description: 查询成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 platform:order:list 权限和平台身份}
|
||
post:
|
||
summary: 平台代客创建订单草稿
|
||
parameters:
|
||
- $ref: '#/components/parameters/TenantId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/FirstLegOrderDraft'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 platform:order:create 权限}
|
||
/api/platform/v1/orders/first-leg/batch-review-preview:
|
||
post:
|
||
tags: [Platform first-leg orders]
|
||
summary: 批量审核预览
|
||
description: >-
|
||
在一个 HTTP 请求中按目标客户批量返回审核弹窗所需稳定快照。服务端固定使用订单与货物两次批量查询,
|
||
中文品名按货物 itemNo 顺序去重;不得由前端逐票请求详情。orderId 仅供路由,主要展示使用 inboundCode;
|
||
canApprove=false 时必须展示 blockReason。请求中的 orderVersion 用于识别列表快照是否过期。
|
||
parameters:
|
||
- $ref: '#/components/parameters/TenantId'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/BatchReviewRequest'}
|
||
responses:
|
||
'200':
|
||
description: 返回请求顺序一致的批量审核预览
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/BatchReviewPreviewEnvelope'}
|
||
'403': {description: 需要平台身份和 platform:order:approve 权限}
|
||
/api/platform/v1/orders/first-leg/legacy-import:
|
||
post:
|
||
tags: [Platform first-leg orders]
|
||
summary: 导入旧系统订单
|
||
description: 固定归属 IT测试公司;保留旧入仓码,按当前仓库和价格簿逐行校验,成功行直接进入待审核。
|
||
parameters:
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
multipart/form-data:
|
||
schema:
|
||
type: object
|
||
required: [file]
|
||
properties:
|
||
file: {type: string, format: binary}
|
||
responses:
|
||
'200': {description: 返回逐行成功、失败及错误原因}
|
||
'403': {description: 需要平台身份和 platform:order:import 权限}
|
||
/api/platform/v1/orders/first-leg/batch-approve:
|
||
post:
|
||
tags: [Platform first-leg orders]
|
||
summary: 批量审核通过订单
|
||
description: >-
|
||
单客户范围内逐票重新校验权限、状态和 orderVersion,每票独立事务;允许部分成功,
|
||
failedOrders 返回未成功订单及业务原因,成功订单不会因其他订单失败而回滚。
|
||
parameters:
|
||
- $ref: '#/components/parameters/TenantId'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/BatchReviewRequest'}
|
||
responses:
|
||
'200': {description: 返回部分成功语义的逐票处理汇总}
|
||
'403': {description: 需要平台身份和 platform:order:approve 权限}
|
||
/api/platform/v1/orders/first-leg/tenant-statistics:
|
||
get:
|
||
tags: [Platform first-leg orders]
|
||
summary: 查询客户累计及本月运单数
|
||
description: 仅统计 submitted_at 非空的 MASTER 根运单,草稿和 CHILD 拆分单不计入;累计不受取消或驳回影响;月份按 Asia/Shanghai 半开区间计算。
|
||
parameters:
|
||
- {$ref: '#/components/parameters/TenantId'}
|
||
responses:
|
||
'200':
|
||
description: 成功;需要 platform:order:list 权限
|
||
content:
|
||
application/json:
|
||
schema:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
data: {$ref: '#/components/schemas/TenantOrderStatisticsResponse'}
|
||
'403': {description: 需要平台身份和 platform:order:list 权限}
|
||
|
||
/api/platform/v1/orders/first-leg/tenant-counts:
|
||
get:
|
||
summary: 批量查询客户运单数
|
||
description: 按客户 ID 返回真实头程运单数量,tenantIds 为历史兼容参数名;最多 200 个客户。
|
||
parameters:
|
||
- name: tenantIds
|
||
in: query
|
||
required: true
|
||
schema: {type: array, maxItems: 200, items: {type: integer, format: int64}}
|
||
responses:
|
||
'200': {description: 查询成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 platform:order:list 权限}
|
||
/api/platform/v1/orders/first-leg/{id}/submit:
|
||
post:
|
||
summary: 平台代客提交指定订单
|
||
description: 必须携带读取详情时的expectedVersion;原键同载荷重放先返回首次成功,不重复提交。改版本/订单的同键请求与过期首次提交为A0409。每条货物的每箱数量、箱数和总数量均必填,且总数量必须等于每箱数量 × 箱数。
|
||
parameters:
|
||
- $ref: '#/components/parameters/OrderId'
|
||
- $ref: '#/components/parameters/TenantId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/OrderSubmitRequest'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 platform:order:submit 权限}
|
||
/api/platform/v1/orders/first-leg/{id}:
|
||
put:
|
||
summary: 平台版本化幂等编辑订单
|
||
description: 仅DRAFT/REJECTED/SUBMITTED可编辑;SUBMITTED保持不回退。原键同载荷先返回首次成功,不重写明细历史或重复准备入仓。缺版本/旧平铺体拒绝,首次版本冲突或同键异载荷为A0409。
|
||
parameters:
|
||
- $ref: '#/components/parameters/OrderId'
|
||
- $ref: '#/components/parameters/TenantId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/PlatformOrderUpdateRequest'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断}
|
||
'403': {description: 需要 platform:order:edit 权限}
|
||
/api/platform/v1/orders/first-leg/{id}/cancel:
|
||
post:
|
||
summary: 平台版本化幂等取消订单
|
||
description: 复用客户取消命令的版本、原因和幂等规则;原键同载荷成功重放不重复根聚合/历史/事件,同键异载荷或新命令重复取消为A0409。
|
||
parameters:
|
||
- $ref: '#/components/parameters/OrderId'
|
||
- $ref: '#/components/parameters/TenantId'
|
||
- $ref: '#/components/parameters/IdempotencyKey'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: {$ref: '#/components/schemas/MerchantOrderCancelRequest'}
|
||
responses:
|
||
'200': {description: 成功或业务失败,按响应体 code 判断;无业务返回数据}
|
||
'403': {description: 需要platform:order:cancel权限和平台身份}
|
||
|
||
/internal/order/v1/fulfillment-splits:
|
||
post:
|
||
summary: 创建父订单装柜拆分(Firstleg 内部)
|
||
parameters:
|
||
- $ref: '#/components/parameters/InternalToken'
|
||
requestBody:
|
||
required: true
|
||
content:
|
||
application/json:
|
||
schema: { $ref: '#/components/schemas/FulfillmentSplitCreateRequest' }
|
||
responses:
|
||
'200': { description: 成功, content: { application/json: { schema: { $ref: '#/components/schemas/FulfillmentSplitResponse' } } } }
|
||
|
||
/internal/order/v1/fulfillment-splits/{tenantId}/{parentOrderId}:
|
||
get:
|
||
summary: 查询根订单、已完成分片与当前余量(Firstleg 内部)
|
||
parameters:
|
||
- $ref: '#/components/parameters/InternalToken'
|
||
- { name: tenantId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: parentOrderId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses:
|
||
'200': { description: 成功;返回原始箱数、累计已装和当前余量 }
|
||
'403': { description: 内部凭证无效 }
|
||
|
||
/api/platform/v1/orders/{orderId}/fulfillment-tree:
|
||
get:
|
||
summary: 查询父子订单与柜次数量摘要
|
||
parameters:
|
||
- { name: orderId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
- { name: tenantId, in: query, required: true, schema: { type: integer, format: int64 } }
|
||
responses: { '200': { description: 成功 }, '403': { description: 无权限 } }
|
||
|
||
/api/merchant/v1/orders/{orderId}/fulfillment-tree:
|
||
get:
|
||
summary: 查询我的父子订单与柜次数量摘要
|
||
parameters:
|
||
- { name: orderId, in: path, required: true, schema: { type: integer, format: int64 } }
|
||
responses: { '200': { description: 成功 }, '403': { description: 无权限 } }
|
||
|
||
/api/platform/v1/orders/container-bookings/{containerBookingId}/fulfillment-slices:
|
||
get:
|
||
summary: 平台按柜次查询全部订单分片
|
||
description: tenantId 可选;省略时跨客户汇总。响应不包含照片、锁码或内部审计字段。
|
||
parameters:
|
||
- {name: containerBookingId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
- {name: tenantId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
responses:
|
||
'200': {description: 成功;无分片时返回空数组}
|
||
'403': {description: 需要平台身份和 platform:order:list 权限}
|
||
/api/merchant/v1/orders/container-bookings/{containerBookingId}/fulfillment-slices:
|
||
get:
|
||
summary: 客户按柜次查询本客户订单分片
|
||
description: 客户范围来自登录态,不接受目标客户参数。
|
||
parameters:
|
||
- {name: containerBookingId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||
responses:
|
||
'200': {description: 成功;无分片时返回空数组}
|
||
'403': {description: 需要 merchant:order:view 权限}
|
||
|
||
components:
|
||
securitySchemes:
|
||
bearerAuth:
|
||
type: http
|
||
scheme: bearer
|
||
bearerFormat: JWT
|
||
schemas:
|
||
CustomerTransportFragment:
|
||
type: object
|
||
required: [nodes]
|
||
properties:
|
||
inboundCode: {type: string, nullable: true}
|
||
cabinetNo: {type: string, nullable: true}
|
||
containerNo: {type: string, nullable: true}
|
||
nodes: {type: array, items: {$ref: '#/components/schemas/CustomerTransportNode'}}
|
||
CustomerTransportNode:
|
||
type: object
|
||
properties:
|
||
standardNode: {type: string, description: 标准船节点;进港为AT_ORIGIN_PORT,不表示开航}
|
||
nodeSequence: {type: integer}
|
||
providerCode: {type: string, nullable: true}
|
||
estimatedAt: {type: string, format: date-time, nullable: true}
|
||
actualAt: {type: string, format: date-time, nullable: true, description: 仅实际时间表示实际发生,不能用预计时间替代}
|
||
locationCode: {type: string, nullable: true}
|
||
locationName: {type: string, nullable: true}
|
||
|
||
CargoLabelBindingListEnvelope:
|
||
type: object
|
||
required: [code, data]
|
||
properties:
|
||
code: {type: string, example: "200"}
|
||
message: {type: string, nullable: true}
|
||
data:
|
||
type: array
|
||
items: {$ref: '#/components/schemas/CargoLabelBinding'}
|
||
CargoLabelBinding:
|
||
type: object
|
||
required: [cargoId, orderId, itemNo, cargoName, packageCount]
|
||
properties:
|
||
cargoId: {type: string, pattern: '^[1-9][0-9]*$', description: Firstleg inboundDetailId 的绑定键}
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
itemNo: {type: integer, minimum: 1}
|
||
cargoName: {type: string}
|
||
skuNo: {type: string, nullable: true}
|
||
packageCount: {type: integer, minimum: 1}
|
||
lengthCm: {type: number, nullable: true}
|
||
widthCm: {type: number, nullable: true}
|
||
heightCm: {type: number, nullable: true}
|
||
shipmentId: {type: string, nullable: true, description: 当前货物行的 FBA 货件号快照,不以订单级字段回退}
|
||
BatchReviewRequest:
|
||
type: object
|
||
required: [items]
|
||
properties:
|
||
items:
|
||
type: array
|
||
minItems: 1
|
||
maxItems: 100
|
||
uniqueItems: true
|
||
items: {$ref: '#/components/schemas/BatchReviewRequestItem'}
|
||
BatchReviewRequestItem:
|
||
type: object
|
||
required: [orderId, orderVersion]
|
||
properties:
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$', description: 仅供路由关联,不作为主要展示键}
|
||
orderVersion: {type: integer, minimum: 0, description: 统一订单列表返回的 Order 乐观锁版本}
|
||
BatchReviewPreviewEnvelope:
|
||
type: object
|
||
required: [code, data]
|
||
properties:
|
||
code: {type: string, example: "200"}
|
||
message: {type: string, nullable: true}
|
||
data: {$ref: '#/components/schemas/BatchReviewPreview'}
|
||
BatchReviewPreview:
|
||
type: object
|
||
required: [total, approvableCount, items]
|
||
properties:
|
||
total: {type: integer, minimum: 1, maximum: 100}
|
||
approvableCount: {type: integer, minimum: 0, maximum: 100}
|
||
items:
|
||
type: array
|
||
items: {$ref: '#/components/schemas/BatchReviewPreviewItem'}
|
||
BatchReviewPreviewItem:
|
||
type: object
|
||
required: [orderId, orderVersion, chineseGoodsNames, canApprove]
|
||
properties:
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$', description: 仅供路由关联,不作为主要展示键}
|
||
orderVersion: {type: integer, minimum: 0}
|
||
inboundCode: {type: string, nullable: true, description: 权威入仓码;缺失时为 null,不以内部 ID 回退}
|
||
customerId: {type: string, nullable: true, pattern: '^[1-9][0-9]*$'}
|
||
customerName: {type: string, nullable: true}
|
||
chineseGoodsNames: {type: array, items: {type: string}, description: 按订单货物顺序去重的中文品名}
|
||
channelCode: {type: string, nullable: true}
|
||
channelName: {type: string, nullable: true}
|
||
destinationWarehouseCode: {type: string, nullable: true, description: Order 保存的目的仓业务编码;缺失时不以内部 ID 回退}
|
||
destinationWarehouseName: {type: string, nullable: true}
|
||
canApprove: {type: boolean}
|
||
blockReason: {type: string, nullable: true}
|
||
DomesticWarehouseOrderExportBatchRequest:
|
||
type: object
|
||
required: [taskId, tenantId, appCode, requestedBy, dispatchVersion, parameters, limit]
|
||
properties:
|
||
taskId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
tenantId: {type: string, enum: ['0'], description: 平台导出固定为0}
|
||
appCode: {type: string, enum: [PLATFORM]}
|
||
requestedBy: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
dispatchVersion: {type: integer, minimum: 1}
|
||
parameters: {$ref: '#/components/schemas/DomesticWarehouseOrderExportParameters'}
|
||
cursor: {type: string, nullable: true}
|
||
snapshotToken: {type: string, nullable: true, maxLength: 512}
|
||
limit: {type: integer, minimum: 1, maximum: 500}
|
||
DomesticWarehouseOrderExportParameters:
|
||
type: object
|
||
description: >-
|
||
selectedOrderNos 非空时仅导出所选订单;为空或省略时使用其余筛选字段导出全量匹配结果。
|
||
筛选字段与 GET /api/platform/v1/orders 一致,但不得传 page、size。
|
||
properties:
|
||
selectedOrderNos:
|
||
type: array
|
||
maxItems: 5000
|
||
uniqueItems: true
|
||
items: {type: string, minLength: 1, maxLength: 64}
|
||
tenantId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
keyword: {type: string, maxLength: 64}
|
||
orderNo: {type: string, maxLength: 64}
|
||
mainStatus: {type: string, enum: [PENDING_REVIEW, WAIT_MEASURE, WAIT_PALLETIZE, INBOUNDED, WAIT_SPLIT, LOADING, LOADED, DELIVERED, COMPLETED, WAIT_WEIGHT_CONFIRM, WEIGHT_CONFIRMED, WAIT_CUSTOMS_DOCS, EXPORT_CUSTOMS, SAILING_CLEARANCE, WAIT_UNLOAD, WAIT_DISPATCH, OUTBOUND_DOCUMENT, DELIVERING, SIGNED, MEASUREMENT_REVIEW]}
|
||
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
receivingWarehouseId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
destinationWarehouseId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
inboundCode: {type: string, maxLength: 64}
|
||
internalOrderStatus: {type: string, maxLength: 32}
|
||
expectedArrivalDate: {type: string, format: date}
|
||
feeReviewStatus: {type: string, enum: [UNRECORDED, PENDING, APPROVED, REJECTED]}
|
||
channelName: {type: string, maxLength: 128}
|
||
containerNo: {type: string, maxLength: 64}
|
||
cabinetNo: {type: string, maxLength: 64}
|
||
sailingDate: {type: string, format: date}
|
||
loaded: {type: boolean}
|
||
fullContainer: {type: boolean}
|
||
measurementReviewStatus: {type: string, enum: [UNRECORDED, PENDING, APPROVED, REJECTED]}
|
||
fbaCode: {type: string, maxLength: 64}
|
||
createdFrom: {type: string, format: date-time}
|
||
createdTo: {type: string, format: date-time}
|
||
OrderDeclarationUpdateRequest:
|
||
type: object
|
||
required: [expectedVersion, cargoes]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
customerRemark: {type: string, nullable: true, maxLength: 1000}
|
||
expectedArrivalAt: {type: string, format: date-time, nullable: true}
|
||
estimatedVolumeCbm: {type: number, minimum: 0.0001, nullable: true, description: 平台运营预估体积,独立于客户下单货物体积与仓库实测体积}
|
||
channelCode: {type: string, maxLength: 64, description: 与 channelName 同时传;变更时重新校验价格渠道,入仓码保持不变}
|
||
channelName: {type: string, maxLength: 128}
|
||
cargoes: {type: array, minItems: 1, maxItems: 500, items: {$ref: '#/components/schemas/OrderDeclarationCargo'}}
|
||
OrderPlanningUpdateRequest:
|
||
type: object
|
||
required: [expectedVersion]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
expectedArrivalAt: {type: string, format: date-time, nullable: true}
|
||
estimatedVolumeCbm: {type: number, minimum: 0.0001, nullable: true}
|
||
OrderDeclarationCargo:
|
||
type: object
|
||
required: [itemNo, cargoName, packageCount, totalQuantity, lengthCm, widthCm, heightCm, grossWeightKg, volumeCbm]
|
||
properties:
|
||
itemNo: {type: integer, minimum: 1, maximum: 500, description: 订单内稳定货物行号}
|
||
cargoName: {type: string, maxLength: 128}
|
||
cargoNameEn: {type: string, nullable: true, maxLength: 128}
|
||
skuNo: {type: string, nullable: true, maxLength: 64}
|
||
model: {type: string, nullable: true, maxLength: 64}
|
||
packageCount: {type: integer, minimum: 1}
|
||
totalQuantity: {type: integer, minimum: 1}
|
||
lengthCm: {type: number, minimum: 0.01}
|
||
widthCm: {type: number, minimum: 0.01}
|
||
heightCm: {type: number, minimum: 0.01}
|
||
grossWeightKg: {type: number, minimum: 0.001}
|
||
volumeCbm: {type: number, minimum: 0.0001}
|
||
netWeightKg: {type: number, nullable: true, minimum: 0.001}
|
||
hsCode: {type: string, nullable: true, maxLength: 20}
|
||
customsHsCode: {type: string, nullable: true, maxLength: 20}
|
||
unitsPerPackage: {type: integer, nullable: true, minimum: 1}
|
||
unitDeclaredValue: {type: number, nullable: true, minimum: 0}
|
||
declaredValue: {type: number, nullable: true, minimum: 0}
|
||
currency: {type: string, nullable: true, pattern: '^[A-Z]{3}$'}
|
||
material: {type: string, nullable: true, maxLength: 128}
|
||
usage: {type: string, nullable: true, maxLength: 128}
|
||
brand: {type: string, nullable: true, maxLength: 64}
|
||
cargoRemark: {type: string, nullable: true, maxLength: 500}
|
||
TenantOrderStatisticsResponse:
|
||
type: object
|
||
required: [tenantId, totalSubmittedOrders, currentMonthSubmittedOrders, monthStart, nextMonthStart, zoneId, asOf]
|
||
properties:
|
||
tenantId: {type: string, pattern: '^[1-9][0-9]*$', description: Long 按字符串序列化以避免 JavaScript 精度丢失}
|
||
totalSubmittedOrders: {type: string, pattern: '^[0-9]+$', description: Long 按字符串序列化}
|
||
currentMonthSubmittedOrders: {type: string, pattern: '^[0-9]+$', description: Long 按字符串序列化}
|
||
monthStart: {type: string, format: date-time}
|
||
nextMonthStart: {type: string, format: date-time}
|
||
zoneId: {type: string, example: Asia/Shanghai}
|
||
asOf: {type: string, format: date-time}
|
||
UnifiedMainStatus:
|
||
type: string
|
||
enum: [DRAFT, PENDING_REVIEW, WAIT_MEASURE, WAIT_PALLETIZE, INBOUNDED, WAIT_SPLIT, LOADING, LOADED, DELIVERED, COMPLETED, CANCELLED]
|
||
description: >-
|
||
统一订单八态产品主状态。ONE_CLICK_DROPSHIP 测量计费完成后进入 WAIT_PALLETIZE,封托完成后进入 WAIT_SPLIT;
|
||
STANDARD 保持既有流程,INBOUNDED 仅兼容存量已入库记录。
|
||
UnifiedOrderPageEnvelope:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
message: {type: string}
|
||
data: {$ref: '#/components/schemas/UnifiedOrderPage'}
|
||
UnifiedOrderPage:
|
||
type: object
|
||
properties:
|
||
records: {type: array, items: {$ref: '#/components/schemas/UnifiedOrderRow'}}
|
||
page: {type: integer, format: int64, minimum: 1}
|
||
size: {type: integer, format: int64, minimum: 1}
|
||
total: {type: integer, format: int64, minimum: 0}
|
||
pages: {type: integer, format: int64, minimum: 0}
|
||
MerchantOrderProgress:
|
||
type: object
|
||
required: [orderId, stage, partial]
|
||
properties:
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
stage: {type: string, enum: [none, loaded, declared, cleared, scheduled, delivering, delivered]}
|
||
partial: {type: boolean}
|
||
MerchantOrderDetailEnvelope:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
message: {type: string}
|
||
data: {$ref: '#/components/schemas/MerchantOrderDetail'}
|
||
MerchantOrderDetail:
|
||
allOf:
|
||
- {$ref: '#/components/schemas/UnifiedOrderDetail'}
|
||
- type: object
|
||
required: [progress]
|
||
properties:
|
||
progress: {$ref: '#/components/schemas/MerchantOrderProgress'}
|
||
UnifiedOrderDetailEnvelope:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
message: {type: string}
|
||
data: {$ref: '#/components/schemas/UnifiedOrderDetail'}
|
||
UnifiedOrderDetail:
|
||
type: object
|
||
required: [transportFragments]
|
||
properties:
|
||
transportFragments:
|
||
type: array
|
||
description: 仅当前客户当前订单已完成实装片段的柜级运输事实,按入仓码和柜次分别返回,不包含跳拣来源或其他客户
|
||
items: {$ref: '#/components/schemas/CustomerTransportFragment'}
|
||
summary: {$ref: '#/components/schemas/UnifiedOrderRow'}
|
||
order:
|
||
type: object
|
||
properties:
|
||
order: {type: object, description: Order 服务订单主实体}
|
||
cargoes: {type: array, items: {type: object}}
|
||
parties: {type: array, items: {type: object}}
|
||
internalNotes: {type: array, items: {type: object}, description: 客户详情始终为空数组}
|
||
statusHistory: {type: array, items: {type: object}}
|
||
timeline: {type: array, items: {$ref: '#/components/schemas/UnifiedOrderTimelineEvent'}}
|
||
UnifiedOrderRow:
|
||
type: object
|
||
properties:
|
||
orderId: {type: integer, format: int64}
|
||
orderVersion: {type: integer, nullable: true, description: 列表行编辑使用的订单乐观锁版本,不作为业务编号展示}
|
||
tenantId: {type: integer, format: int64}
|
||
orderNo: {type: string}
|
||
mainStatus: {$ref: '#/components/schemas/UnifiedMainStatus'}
|
||
nextAction: {type: string, nullable: true}
|
||
customerFeeConfirmationRequired: {type: boolean, description: Firstleg 已向客户发送最新费用且客户尚未确认时为 true}
|
||
relation: {$ref: '#/components/schemas/UnifiedOrderRelation'}
|
||
internalOrderStatus: {type: string, enum: [DRAFT, SUBMITTED, APPROVED, ACCEPTED, REJECTED, CANCELLED, PROCESSING, COMPLETED], nullable: true}
|
||
customerId: {type: integer, format: int64, nullable: true}
|
||
customerName: {type: string, nullable: true}
|
||
channelCode: {type: string, nullable: true, description: 稳定物流渠道编码,仅供业务校验;直接来自当前 Order 或 Firstleg 权威快照,不由 channelName 推导}
|
||
channelName: {type: string, nullable: true}
|
||
channelChanged: {type: boolean, description: 当前订单历史上是否由平台变更过渠道}
|
||
receivingWarehouseId: {type: integer, format: int64, nullable: true}
|
||
receivingWarehouseName: {type: string, nullable: true}
|
||
destinationWarehouseId: {type: integer, format: int64, nullable: true}
|
||
destinationWarehouseName: {type: string, nullable: true}
|
||
inboundId: {type: integer, format: int64, nullable: true}
|
||
inboundVersion: {type: integer, nullable: true, description: C04 loading/complete 的 expectedVersion}
|
||
inboundCode: {type: string, nullable: true, description: 当前订单片段的权威入仓码;缺失时为 null,不得回退为 orderId 或 orderNo}
|
||
expectedShipDate: {type: string, format: date, nullable: true}
|
||
holdFlag: {type: boolean, nullable: true, description: Firstleg 入库单当前扣货标识;尚未生成入库单时为 null}
|
||
currentHoldReason: {type: string, nullable: true, description: Firstleg 入库单当前扣货原因;未扣货或尚未生成入库单时为 null}
|
||
totalPackageCount: {type: integer, nullable: true, description: 无入仓事实时为当前订单有效货物箱数合计;存在入仓业务单元后为该单元履约总箱数,拆分后不以父单原始箱数覆盖}
|
||
recommendedPalletType: {type: string, nullable: true, description: 当前无列表级权威事实时返回 null,不得返回固定托盘类型}
|
||
locationCodes: {type: string, nullable: true, description: "库位编码汇总;按首次出现顺序去重并使用中文顿号分隔"}
|
||
estimatedVolumeCbm: {type: number, nullable: true, description: 平台运营填写的预估体积,不得与客户下单或实测体积混用}
|
||
expectedVolumeCbm: {type: number, nullable: true, description: Order 客户下单货物体积合计,不得与平台预估或实测体积混用}
|
||
actualGrossWeightKg: {type: number, nullable: true, description: 仅 Firstleg 实测毛重;无实测时返回 null}
|
||
actualVolumeCbm: {type: number, nullable: true, description: 仅 Firstleg 实测体积;无实测时返回 null}
|
||
expectedArrivalAt: {type: string, format: date-time, nullable: true}
|
||
feeReviewStatus: {type: string, nullable: true, description: Firstleg 入仓费用审核快照;财务状态不在本字段表达}
|
||
companyName: {type: string, nullable: true}
|
||
businessType: {type: string, nullable: true}
|
||
fulfillmentType: {type: string, enum: [STANDARD, ONE_CLICK_DROPSHIP], nullable: true, description: 独立履约类型,不复用计费业务类型}
|
||
lxCode: {type: string, nullable: true, description: 一件代发可选 LX 编码;普通头程或未填写时为 null}
|
||
pickupMethod: {type: string, nullable: true}
|
||
requestedPickupAt: {type: string, format: date-time, nullable: true, description: Customer-requested pickup appointment from the pickup snapshot}
|
||
taxMode: {type: string, nullable: true}
|
||
containerMode: {type: string, nullable: true}
|
||
customsInspection: {type: boolean, nullable: true}
|
||
destinationType: {type: string, nullable: true}
|
||
destinationCode: {type: string, nullable: true}
|
||
totalPalletCount: {type: integer, nullable: true}
|
||
chargeableWeightKg: {type: number, nullable: true, description: Firstleg confirmed billing snapshot chargeable weight in kilograms}
|
||
chargeableVolumeCbm: {type: number, nullable: true}
|
||
volumetricWeightKg: {type: number, nullable: true}
|
||
totalNetWeightKg: {type: number, nullable: true, description: 统一订单货物净重展示字段;严格来源 Firstleg actualNetWeightKg,不以毛重回退}
|
||
measurementCompletedAt: {type: string, format: date-time, nullable: true}
|
||
inboundCompletedAt: {type: string, format: date-time, nullable: true}
|
||
expressCompany: {type: string, nullable: true}
|
||
expressTrackingNo: {type: string, nullable: true}
|
||
createdBy: {type: string, nullable: true}
|
||
skuNos: {type: array, nullable: true, items: {type: string}}
|
||
totalQuantity: {type: integer, nullable: true}
|
||
shipmentId: {type: string, nullable: true}
|
||
referenceId: {type: string, nullable: true}
|
||
measurement: {$ref: '#/components/schemas/UnifiedMeasurementSummary'}
|
||
preload: {$ref: '#/components/schemas/UnifiedPreloadSummary'}
|
||
loading: {$ref: '#/components/schemas/UnifiedLoadingSummary'}
|
||
delivery: {$ref: '#/components/schemas/UnifiedDeliverySummary'}
|
||
transport: {$ref: '#/components/schemas/UnifiedTransportSummary'}
|
||
coLoadGroup: {$ref: '#/components/schemas/UnifiedCoLoadGroupSummary'}
|
||
customerRemark: {type: string, nullable: true}
|
||
latestInternalNote: {type: string, nullable: true, description: 客户详情不返回平台内部备注}
|
||
warehouseRemark: {type: string, nullable: true}
|
||
customerServiceRemark: {type: string, nullable: true}
|
||
createdAt: {type: string, format: date-time, nullable: true}
|
||
updatedAt: {type: string, format: date-time, nullable: true}
|
||
UnifiedOrderRelation:
|
||
type: object
|
||
nullable: true
|
||
properties:
|
||
role: {type: string, enum: [PARENT, CHILD]}
|
||
rootOrderId: {type: integer, format: int64, nullable: true}
|
||
parentOrderId: {type: integer, format: int64, nullable: true}
|
||
splitSequence: {type: integer, nullable: true}
|
||
childCount: {type: integer, nullable: true}
|
||
UnifiedCoLoadGroupSummary:
|
||
type: object
|
||
nullable: true
|
||
description: 仅平台统一订单列表与详情返回;未加入同柜组时为 null
|
||
properties:
|
||
status: {type: string}
|
||
memberCount: {type: integer, minimum: 0}
|
||
memberInboundCodes:
|
||
type: array
|
||
items: {type: string, nullable: true, description: 同柜组成员订单片段的权威入仓码;缺失时保留 null,不回退内部ID}
|
||
UnifiedMeasurementSummary:
|
||
type: object
|
||
nullable: true
|
||
properties:
|
||
reviewStatus: {type: string, nullable: true}
|
||
actualGrossWeightKg: {type: number, nullable: true, description: Firstleg 实测毛重;不得使用净重回退}
|
||
actualVolumeCbm: {type: number, nullable: true}
|
||
chargeableWeightKg: {type: number, nullable: true}
|
||
completedAt: {type: string, format: date-time, nullable: true}
|
||
UnifiedPreloadSummary:
|
||
type: object
|
||
nullable: true
|
||
properties:
|
||
status: {type: string, nullable: true}
|
||
version: {type: integer, nullable: true}
|
||
itemCount: {type: integer, nullable: true}
|
||
updatedAt: {type: string, format: date-time, nullable: true}
|
||
UnifiedLoadingSummary:
|
||
type: object
|
||
nullable: true
|
||
properties:
|
||
status: {type: string, nullable: true}
|
||
loadingVersion: {type: integer, nullable: true, description: 当前为 pickingVersion 兼容别名}
|
||
pickingVersion: {type: integer, nullable: true}
|
||
expectedCount: {type: integer, nullable: true}
|
||
pickedCount: {type: integer, nullable: true}
|
||
evidenceCount: {type: integer, nullable: true}
|
||
sealNo: {type: string, nullable: true}
|
||
updatedAt: {type: string, format: date-time, nullable: true}
|
||
UnifiedDeliverySummary:
|
||
type: object
|
||
nullable: true
|
||
properties:
|
||
status: {type: string, nullable: true}
|
||
completedAt: {type: string, format: date-time, nullable: true}
|
||
trackingNo: {type: string, nullable: true}
|
||
UnifiedTransportSummary:
|
||
type: object
|
||
nullable: true
|
||
properties:
|
||
containerNo: {type: string, nullable: true}
|
||
cabinetNo: {type: string, nullable: true}
|
||
vesselName: {type: string, nullable: true}
|
||
voyageNo: {type: string, nullable: true}
|
||
estimatedSailingAt: {type: string, format: date-time, nullable: true, description: 当前关联柜次预计开船时间}
|
||
actualSailingAt: {type: string, format: date-time, nullable: true, description: 当前关联柜次实际开船时间}
|
||
effectiveSailingAt: {type: string, format: date-time, nullable: true, description: 实际开船时间优先,否则预计开船时间}
|
||
effectiveSailingAtEstimated: {type: boolean, nullable: true}
|
||
estimatedPortArrivalAt: {type: string, format: date-time, nullable: true, description: 当前关联柜次预计到港时间}
|
||
actualPortArrivalAt: {type: string, format: date-time, nullable: true, description: 当前关联柜次实际到港时间}
|
||
effectivePortArrivalAt: {type: string, format: date-time, nullable: true, description: 实际到港时间优先,否则预计到港时间}
|
||
effectivePortArrivalAtEstimated: {type: boolean, nullable: true}
|
||
UnifiedOrderTimelineEvent:
|
||
type: object
|
||
properties:
|
||
source: {type: string}
|
||
eventType: {type: string}
|
||
mainStatus: {$ref: '#/components/schemas/UnifiedMainStatus'}
|
||
action: {type: string, nullable: true}
|
||
remark: {type: string, nullable: true}
|
||
operatorId: {type: integer, format: int64, nullable: true}
|
||
operatorName: {type: string, nullable: true}
|
||
occurredAt: {type: string, format: date-time, nullable: true}
|
||
FulfillmentSplitQuantityLine:
|
||
type: object
|
||
required: [sourceDetailId, packageCount]
|
||
properties:
|
||
sourceDetailId: {type: integer, format: int64, minimum: 1}
|
||
packageCount: {type: integer, minimum: 1}
|
||
FulfillmentSplitCreateRequest:
|
||
type: object
|
||
required: [tenantId, parentOrderId, sourceOrderId, loadingPlanId, containerBookingId,
|
||
sourcePackageCount, loadedPackageCount, remainingPackageCount, idempotencyKey, lines]
|
||
properties:
|
||
tenantId: {type: integer, format: int64, minimum: 1}
|
||
parentOrderId: {type: integer, format: int64, minimum: 1}
|
||
sourceOrderId: {type: integer, format: int64, minimum: 1}
|
||
loadingPlanId: {type: integer, format: int64, minimum: 1}
|
||
containerBookingId: {type: integer, format: int64, minimum: 1}
|
||
sourcePackageCount: {type: integer, minimum: 1}
|
||
loadedPackageCount: {type: integer, minimum: 1}
|
||
remainingPackageCount: {type: integer, minimum: 0}
|
||
expectedParentVersion: {type: integer, minimum: 0, description: 可选;省略时仍在父订单行锁下串行拆分}
|
||
idempotencyKey: {type: string, minLength: 1, maxLength: 128}
|
||
operationId: {type: string, maxLength: 64}
|
||
operatorName: {type: string, maxLength: 64}
|
||
lines:
|
||
type: array
|
||
minItems: 1
|
||
items: {$ref: '#/components/schemas/FulfillmentSplitQuantityLine'}
|
||
FulfillmentSplitChild:
|
||
type: object
|
||
properties:
|
||
orderId: {type: integer, format: int64}
|
||
orderNo: {type: string}
|
||
splitSequence: {type: integer, minimum: 1}
|
||
splitRole: {type: string, enum: [LOADED, REMAINDER]}
|
||
packageCount: {type: integer, minimum: 1}
|
||
sourceOrderId: {type: integer, format: int64}
|
||
loadingPlanId: {type: integer, format: int64}
|
||
containerBookingId: {type: integer, format: int64}
|
||
FulfillmentSplitResponse:
|
||
type: object
|
||
properties:
|
||
parentOrderId: {type: integer, format: int64}
|
||
parentOrderNo: {type: string}
|
||
parentVersion: {type: integer, minimum: 0}
|
||
loadedChild:
|
||
allOf: [{$ref: '#/components/schemas/FulfillmentSplitChild'}]
|
||
description: 新写入时指向承接本次实装的来源订单本身;历史双子单仍返回原已装子订单
|
||
remainderChild:
|
||
allOf: [{$ref: '#/components/schemas/FulfillmentSplitChild'}]
|
||
nullable: true
|
||
description: 未装数量大于0时唯一创建的余量子订单;全部装完时为空
|
||
sourcePackageCount: {type: integer, minimum: 1}
|
||
loadedPackageCount: {type: integer, minimum: 1}
|
||
remainingPackageCount: {type: integer, minimum: 0}
|
||
loadingPlanId: {type: integer, format: int64}
|
||
containerBookingId: {type: integer, format: int64}
|
||
idempotencyKey: {type: string}
|
||
FulfillmentSplitTree:
|
||
type: object
|
||
properties:
|
||
parentOrderId: {type: integer, format: int64}
|
||
parentOrderNo: {type: string}
|
||
parentVersion: {type: integer, minimum: 0}
|
||
children:
|
||
type: array
|
||
items: {$ref: '#/components/schemas/FulfillmentSplitChild'}
|
||
allocatedPackageCount: {type: integer, minimum: 0, deprecated: true}
|
||
remainingPackageCount: {type: integer, minimum: 0, deprecated: true}
|
||
originalPackageCount: {type: integer, minimum: 0, description: 根订单最初箱数}
|
||
cumulativeLoadedPackageCount: {type: integer, minimum: 0, description: 所有已完成来源分片累计实装箱数}
|
||
currentRemainderPackageCount: {type: integer, minimum: 0, description: 当前唯一有效余量箱数}
|
||
PricingTaxMode:
|
||
type: string
|
||
enum: [TAX_INCLUDED, TAX_EXCLUDED]
|
||
description: 报价包税维度;独立于订单 taxMode 的买单/退税语义
|
||
PlatformOrderUpdateRequest:
|
||
type: object
|
||
required: [expectedVersion, draft]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
draft: {$ref: '#/components/schemas/FirstLegOrderDraft'}
|
||
OrderSubmitRequest:
|
||
type: object
|
||
required: [expectedVersion]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
MerchantDraftUpdateRequest:
|
||
type: object
|
||
required: [expectedVersion, draft]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
draft: {$ref: '#/components/schemas/FirstLegOrderDraft'}
|
||
MerchantOrderCancelRequest:
|
||
type: object
|
||
required: [expectedVersion, reason]
|
||
properties:
|
||
expectedVersion: {type: integer, minimum: 0}
|
||
reason: {type: string, minLength: 1, maxLength: 500}
|
||
FirstLegOrderDraft:
|
||
type: object
|
||
required: [customerName, transportMode, cargoes, pickupMethod, receivingWarehouseId, receivingWarehouseName, channelCode, channelName, taxMode, pricingTaxMode, destinationType]
|
||
properties:
|
||
fulfillmentType:
|
||
type: string
|
||
enum: [STANDARD, ONE_CLICK_DROPSHIP]
|
||
default: STANDARD
|
||
description: 独立履约类型;省略为普通头程,不复用业务/计费 businessType
|
||
lxCode:
|
||
type: string
|
||
nullable: true
|
||
maxLength: 128
|
||
description: 一件代发绑定的领星入库单 LX 代码
|
||
inboundCode:
|
||
type: string
|
||
maxLength: 40
|
||
pattern: '^[A-Za-z0-9._:-]+$'
|
||
description: 仅 LEGACY_MANUAL 模式填写的旧系统入仓码;AUTO 模式必须省略
|
||
pricingTaxMode: {$ref: '#/components/schemas/PricingTaxMode'}
|
||
senderAddressId: {type: string, pattern: '^[1-9][0-9]*$', description: PICKUP 时必填;必须是本客户 PICKUP 地址}
|
||
privateDestinationAddressId: {type: string, pattern: '^[1-9][0-9]*$', description: PRIVATE 时必填;必须是本客户 PRIVATE_DESTINATION 地址}
|
||
expressTrackingNo: {type: string, nullable: true, maxLength: 128, description: 快递自提(SELF_EXPRESS)时选填;留空清空单号,其他取货方式不保存。客户仅能在下单或编辑草稿时填写}
|
||
customsInspection: {type: boolean, nullable: true, description: 非木制品可空;任一货物 woodenProduct=true 时必须为 true}
|
||
cargoes:
|
||
type: array
|
||
minItems: 1
|
||
items: {$ref: '#/components/schemas/FirstLegOrderCargo'}
|
||
description: >-
|
||
订单保存请求中的完整字段以服务端 FirstLegOrderSaveRequest 为准;fulfillmentType
|
||
省略时固定为 STANDARD,一键代发必须显式传 ONE_CLICK_DROPSHIP,且不复用计费 businessType;pricingTaxMode
|
||
是新建和编辑订单的必填报价维度;customerId 不接受客户端指定,服务端始终使用认证企业 ID;
|
||
发货与私人目的仓只接受客户地址 ID,服务端在订单参与方表冻结快照;地址簿后续修改不回写历史订单。
|
||
私人目的仓不得写入或伪装为 Warehouse 平台仓主档。历史存量订单的响应字段仍允许为空。
|
||
CustomerOrderAddressSaveRequest:
|
||
type: object
|
||
required: [addressType, addressName, companyName, contactName, phone, countryCode, city, addressLine, defaultAddress]
|
||
properties:
|
||
addressType: {type: string, enum: [PICKUP, PRIVATE_DESTINATION]}
|
||
addressName: {type: string, maxLength: 64}
|
||
companyName: {type: string, maxLength: 128}
|
||
contactName: {type: string, maxLength: 64}
|
||
phone: {type: string, maxLength: 32}
|
||
email: {type: string, format: email, maxLength: 128, nullable: true}
|
||
countryCode: {type: string, minLength: 2, maxLength: 2}
|
||
province: {type: string, maxLength: 64, nullable: true}
|
||
city: {type: string, maxLength: 64}
|
||
district: {type: string, maxLength: 64, nullable: true}
|
||
addressLine: {type: string, maxLength: 255}
|
||
postalCode: {type: string, maxLength: 20, nullable: true}
|
||
defaultAddress: {type: boolean}
|
||
InboundCodePolicy:
|
||
type: object
|
||
required: [mode, manualEntryRequired]
|
||
properties:
|
||
mode: {type: string, enum: [AUTO, LEGACY_MANUAL]}
|
||
manualEntryRequired: {type: boolean}
|
||
InboundCodeAssociationEnvelope:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
message: {type: string}
|
||
data: {$ref: '#/components/schemas/InboundCodeAssociationSummary'}
|
||
InboundCodeAssociationSummary:
|
||
type: object
|
||
required: [inboundCode, orderNo, orderStatus, orderId, customerId, customerName, destinationType]
|
||
properties:
|
||
inboundCode: {type: string, maxLength: 40, pattern: '^[A-Za-z0-9._:-]+$', description: 主要展示键:全局唯一入仓码}
|
||
orderNo: {type: string, description: 主要展示键:订单业务号}
|
||
orderStatus: {type: string, description: Order 权威交易状态}
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$', description: 内部 ID,仅供路由关联}
|
||
customerId: {type: string, pattern: '^[1-9][0-9]*$', description: 客户 ID,字符串避免精度损失}
|
||
customerName: {type: string}
|
||
destinationType: {type: string}
|
||
destinationCountryCode: {type: string, nullable: true}
|
||
destinationWarehouseId: {type: string, pattern: '^[1-9][0-9]*$', nullable: true, description: 内部 ID,仅供路由关联}
|
||
destinationWarehouseCode: {type: string, nullable: true, description: 目的仓业务编码;FBA 场景为 Amazon 仓码}
|
||
destinationWarehouseName: {type: string, nullable: true}
|
||
FirstLegBatchDraftItem:
|
||
type: object
|
||
required: [clientRowId, draft]
|
||
properties:
|
||
clientRowId:
|
||
type: string
|
||
maxLength: 128
|
||
description: 前端外层行标识;同一批次内必须唯一,用于幂等重试和结果关联
|
||
draft:
|
||
$ref: '#/components/schemas/FirstLegOrderDraft'
|
||
PendingReviewOrderPageEnvelope:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
message: {type: string}
|
||
data:
|
||
type: object
|
||
required: [records, page, size, total, pages]
|
||
properties:
|
||
records: {type: array, items: {$ref: '#/components/schemas/PendingReviewOrderRow'}}
|
||
page: {type: integer, format: int64, minimum: 1}
|
||
size: {type: integer, format: int64, minimum: 1}
|
||
total: {type: integer, format: int64, minimum: 0}
|
||
pages: {type: integer, format: int64, minimum: 0}
|
||
PendingReviewOrderBatchRequest:
|
||
type: object
|
||
additionalProperties: false
|
||
required: [orderIds]
|
||
properties:
|
||
orderIds:
|
||
type: array
|
||
minItems: 1
|
||
maxItems: 100
|
||
uniqueItems: true
|
||
items: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
PendingReviewOrderListEnvelope:
|
||
type: object
|
||
properties:
|
||
code: {type: string, example: '200'}
|
||
message: {type: string}
|
||
data: {type: array, items: {$ref: '#/components/schemas/PendingReviewOrderRow'}}
|
||
PendingReviewOrderRow:
|
||
type: object
|
||
required: [orderId, orderNo, inboundCode, customerId, customerName, warehouseId, channelCode, channelName, totalPackageCount, createdAt, expectedArrivalAt, mainStatus]
|
||
properties:
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
orderNo: {type: string}
|
||
inboundCode: {type: string}
|
||
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
customerName: {type: string}
|
||
warehouseId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
channelCode: {type: string}
|
||
channelName: {type: string}
|
||
totalPackageCount: {type: integer, minimum: 0}
|
||
createdAt: {type: string, format: date-time}
|
||
expectedArrivalAt: {type: string, format: date-time, nullable: true}
|
||
mainStatus: {type: string, enum: [PENDING_REVIEW]}
|
||
FirstLegBatchDraftResponse:
|
||
type: object
|
||
required: [total, succeeded, failed, items]
|
||
properties:
|
||
total: {type: integer, minimum: 0}
|
||
succeeded: {type: integer, minimum: 0}
|
||
failed: {type: integer, minimum: 0}
|
||
items:
|
||
type: array
|
||
items: {$ref: '#/components/schemas/FirstLegBatchDraftResult'}
|
||
FirstLegBatchDraftResult:
|
||
type: object
|
||
required: [index, success]
|
||
properties:
|
||
index: {type: integer, minimum: 0}
|
||
clientRowId: {type: string}
|
||
success: {type: boolean}
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
orderNo: {type: string}
|
||
inboundCode: {type: string, pattern: '^[A-Za-z0-9._:-]+$', example: ZBYHK2608140001, description: AUTO 模式为渠道前缀+业务日期+全局票序;LEGACY_MANUAL 模式为录入的旧系统入仓码;履约拆分的子订单追加 splitSequence 后缀}
|
||
errorCode: {type: string}
|
||
errorMessage: {type: string}
|
||
FirstLegOrderCargo:
|
||
type: object
|
||
required: [packageCount, woodenProduct]
|
||
properties:
|
||
skuNo: {type: string, maxLength: 64, description: 草稿可空;FBA 或 ONE_CLICK_DROPSHIP 订单提交及已提交编辑时每条货物必填}
|
||
cargoName: {type: string, maxLength: 128}
|
||
cargoNameEn: {type: string, maxLength: 128}
|
||
productImageFileId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
hsCode: {type: string, maxLength: 20, description: 报关 HS CODE}
|
||
customsHsCode: {type: string, maxLength: 20, description: 清关 HS CODE}
|
||
lengthCm: {type: number, minimum: 0, description: 箱规长(厘米)}
|
||
widthCm: {type: number, minimum: 0, description: 箱规宽(厘米)}
|
||
heightCm: {type: number, minimum: 0, description: 箱规高(厘米)}
|
||
unitsPerPackage: {type: integer, minimum: 1, description: 每箱数量;提交时必填}
|
||
packageCount: {type: integer, minimum: 1, description: 箱数}
|
||
packingGroupNo: {type: string, maxLength: 32, description: 一件代发同箱关联键,由客户端在添加同箱 SKU 时生成;同组货物行共享物理箱,箱数、包装类型、箱规、重量和体积必须一致且汇总时只计算一次}
|
||
grossWeightKg: {type: number, exclusiveMinimum: true, minimum: 0, description: 总毛重}
|
||
volumeCbm: {type: number, exclusiveMinimum: true, minimum: 0, description: 总体积}
|
||
totalQuantity: {type: integer, minimum: 1, description: 总数量;提交时必填且必须等于每箱数量 × 箱数}
|
||
netWeightKg: {type: number, exclusiveMinimum: true, minimum: 0, description: 总净重}
|
||
unitDeclaredValue: {type: number, minimum: 0, description: 清关申报单价(USD)}
|
||
declaredValue: {type: number, minimum: 0, description: 清关申报金额(USD)}
|
||
material: {type: string, maxLength: 128}
|
||
usage: {type: string, maxLength: 128}
|
||
model: {type: string, maxLength: 64}
|
||
brand: {type: string, maxLength: 64}
|
||
productLengthCm: {type: number, minimum: 0}
|
||
productWidthCm: {type: number, minimum: 0}
|
||
productHeightCm: {type: number, minimum: 0}
|
||
shipmentId: {type: string, maxLength: 64}
|
||
referenceId: {type: string, maxLength: 64}
|
||
upcNo: {type: string, maxLength: 64}
|
||
cargoRemark: {type: string, maxLength: 500}
|
||
packageType: {type: string, maxLength: 32}
|
||
dangerousGoods: {type: boolean}
|
||
woodenProduct: {type: boolean, description: 木制品权威判定快照;为 true 时订单 customsInspection 必须为 true}
|
||
description: >-
|
||
原型货物明细字段。FBA 货物的 skuNo、shipmentId、referenceId 由服务端按每条货物校验,upcNo 选填;
|
||
productImageFileId 必须属于当前登录客户。一件代发中,相同 packingGroupNo 的多条 SKU 行属于同一批物理箱,物理箱数只计算一次。
|
||
FirstLegOrderSummary:
|
||
type: object
|
||
properties:
|
||
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
orderNo: {type: string}
|
||
inboundId: {type: string, pattern: '^[1-9][0-9]*$', nullable: true}
|
||
inboundCode: {type: string}
|
||
channelName: {type: string}
|
||
pickupMethod: {type: string, enum: [SELF_EXPRESS, PICKUP, SELF_TRUCK], nullable: true}
|
||
destinationWarehouseName: {type: string}
|
||
status: {type: string}
|
||
packageCount: {type: integer}
|
||
expressCompany: {type: string}
|
||
trackingNo: {type: string}
|
||
skuNos: {type: string, description: 多个 SKU 使用中文顿号分隔}
|
||
totalGrossWeightKg: {type: number}
|
||
totalNetWeightKg: {type: number}
|
||
totalVolumeCbm: {type: number}
|
||
totalQuantity: {type: integer}
|
||
remark: {type: string}
|
||
shipmentId: {type: string}
|
||
referenceId: {type: string}
|
||
pricingTaxMode: {$ref: '#/components/schemas/PricingTaxMode'}
|
||
ContainerSlice:
|
||
type: object
|
||
properties:
|
||
containerBookingId: {type: string}
|
||
tenantId: {type: string}
|
||
parentOrderId: {type: string}
|
||
parentOrderNo: {type: string}
|
||
childOrderId: {type: string}
|
||
childOrderNo: {type: string}
|
||
sourceOrderId: {type: string}
|
||
sourceOrderNo: {type: string}
|
||
splitRole: {type: string, enum: [LOADED, REMAINDER]}
|
||
packageCount: {type: integer}
|
||
loadingPlanId: {type: string}
|
||
parameters:
|
||
InboundCodePath:
|
||
name: inboundCode
|
||
in: path
|
||
required: true
|
||
schema: {type: string, minLength: 1, maxLength: 40, pattern: '^[A-Za-z0-9._:-]+$'}
|
||
description: 全局唯一业务入仓码
|
||
InternalToken:
|
||
name: X-Internal-Service-Token
|
||
in: header
|
||
required: true
|
||
schema: {type: string, minLength: 1}
|
||
UnifiedKeyword:
|
||
name: keyword
|
||
in: query
|
||
required: false
|
||
schema: {type: string, maxLength: 64}
|
||
UnifiedTaxMode:
|
||
name: taxMode
|
||
in: query
|
||
required: false
|
||
description: 严格按税务模式在数据库计数和分页前过滤;未传查询全部税务模式,空串或其他值拒绝
|
||
schema: {type: string, enum: [TAX_REFUND, BUY_DECLARATION]}
|
||
UnifiedOrderNo:
|
||
name: orderNo
|
||
in: query
|
||
required: false
|
||
schema: {type: string, maxLength: 64}
|
||
UnifiedMainStatus:
|
||
name: mainStatus
|
||
in: query
|
||
required: false
|
||
description: 统一订单主状态及业务页签筛选;WAIT_PALLETIZE、WAIT_SPLIT 与存量兼容状态 INBOUNDED 独立查询。WAIT_CUSTOMS_DOCS 为实际装柜后待上传客户报关资料;EXPORT_CUSTOMS 为本票报关资料已上传且实际装柜完成、尚未报关完成或实际开船的汇总,买单票无需客户退税资料,不以点击开始报关为前提;SAILING_CLEARANCE 在整柜报关完成后进入,也接受实际离港事实;清关资料保存成功后才进入 WAIT_UNLOAD/WAIT_DISPATCH。WAIT_UNLOAD 持续到实际卸柜或生成有效出库单;生成出库单后进入 OUTBOUND_DOCUMENT,实际出库后进入 DELIVERING,派送完成进入 SIGNED。
|
||
schema:
|
||
type: string
|
||
enum: [PENDING_REVIEW, WAIT_MEASURE, WAIT_PALLETIZE, INBOUNDED, WAIT_SPLIT, LOADING, LOADED, DELIVERED, COMPLETED, WAIT_WEIGHT_CONFIRM, WEIGHT_CONFIRMED, WAIT_CUSTOMS_DOCS, EXPORT_CUSTOMS, SAILING_CLEARANCE, WAIT_UNLOAD, WAIT_DISPATCH, OUTBOUND_DOCUMENT, DELIVERING, SIGNED, MEASUREMENT_REVIEW]
|
||
UnifiedInboundCode:
|
||
{name: inboundCode, in: query, required: false, description: 订单创建时生成的入仓码,所有订单状态均可查询, schema: {type: string, maxLength: 40}}
|
||
UnifiedInternalOrderStatus:
|
||
name: internalOrderStatus
|
||
in: query
|
||
required: false
|
||
description: Order 内部生命周期状态;不是八态产品主状态
|
||
schema: {type: string, enum: [DRAFT, SUBMITTED, APPROVED, ACCEPTED, REJECTED, CANCELLED, PROCESSING, COMPLETED]}
|
||
UnifiedExpectedArrivalDate:
|
||
{name: expectedArrivalDate, in: query, required: false, schema: {type: string, format: date}}
|
||
UnifiedFeeReviewStatus:
|
||
name: feeReviewStatus
|
||
in: query
|
||
required: false
|
||
description: 当前最高版本入库费用审核状态;UNRECORDED 表示尚无费用记录
|
||
schema: {type: string, enum: [UNRECORDED, PENDING, APPROVED, REJECTED]}
|
||
UnifiedChannelName:
|
||
{name: channelName, in: query, required: false, schema: {type: string, maxLength: 128}}
|
||
UnifiedContainerNo:
|
||
{name: containerNo, in: query, required: false, schema: {type: string, maxLength: 64}}
|
||
UnifiedCabinetNo:
|
||
{name: cabinetNo, in: query, required: false, schema: {type: string, maxLength: 64}}
|
||
UnifiedSailingDate:
|
||
{name: sailingDate, in: query, required: false, schema: {type: string, format: date}}
|
||
UnifiedLoaded:
|
||
name: loaded
|
||
in: query
|
||
required: false
|
||
description: true 表示运输装载状态存在且不是 UNLOADED/PENDING;false 表示无该状态
|
||
schema: {type: boolean}
|
||
UnifiedFullContainer:
|
||
name: fullContainer
|
||
in: query
|
||
required: false
|
||
description: true 对应 FULL_CONTAINER,false 对应 LCL
|
||
schema: {type: boolean}
|
||
UnifiedMeasurementReviewStatus:
|
||
name: measurementReviewStatus
|
||
in: query
|
||
required: false
|
||
description: 测量审核状态;UNRECORDED 表示字段为空
|
||
schema: {type: string, enum: [UNRECORDED, PENDING, APPROVED, REJECTED]}
|
||
UnifiedFbaCode:
|
||
name: fbaCode
|
||
in: query
|
||
required: false
|
||
description: 兼容匹配订单货物 sku_no
|
||
schema: {type: string, maxLength: 64}
|
||
UnifiedCreatedFrom:
|
||
name: createdFrom
|
||
in: query
|
||
required: false
|
||
description: 无主状态或待审核筛选按订单创建时间;其他主状态按履约快照创建时间
|
||
schema: {type: string, format: date-time}
|
||
UnifiedCreatedTo:
|
||
name: createdTo
|
||
in: query
|
||
required: false
|
||
description: 无主状态或待审核筛选按订单创建时间;其他主状态按履约快照创建时间
|
||
schema: {type: string, format: date-time}
|
||
UnifiedPage:
|
||
name: page
|
||
in: query
|
||
required: false
|
||
schema: {type: integer, minimum: 1, default: 1}
|
||
UnifiedSize:
|
||
name: size
|
||
in: query
|
||
required: false
|
||
schema: {type: integer, minimum: 1, maximum: 200, default: 20}
|
||
UnifiedOrderId:
|
||
name: orderId
|
||
in: path
|
||
required: true
|
||
schema: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
UnifiedTenantId:
|
||
name: tenantId
|
||
in: query
|
||
required: true
|
||
schema: {type: string, pattern: '^[1-9][0-9]*$'}
|
||
TenantId:
|
||
name: tenantId
|
||
in: query
|
||
required: true
|
||
schema: {type: integer, format: int64}
|
||
OrderId:
|
||
name: id
|
||
in: path
|
||
required: true
|
||
schema: {type: integer, format: int64}
|
||
IdempotencyKey:
|
||
name: Idempotency-Key
|
||
in: header
|
||
required: true
|
||
description: 同一客户和操作者重试同一请求时必须保持不变
|
||
schema: {type: string, minLength: 1, maxLength: 128}
|