This commit is contained in:
2026-10-20 10:35:52 +08:00
parent ce189f062f
commit c13175bf77
202 changed files with 38397 additions and 7138 deletions
@@ -1,6 +1,6 @@
openapi: 3.0.3
info:
title: 共用车次准备与拼车连续处理
title: 外接登记与整车履约衔接
version: 1.0.0
security:
- bearerAuth: []
@@ -63,19 +63,3 @@ paths:
components:
securitySchemes:
bearerAuth: {type: http, scheme: bearer, bearerFormat: JWT}
schemas:
Prepare:
type: object
required: [dispatchNos, idempotencyKey]
properties:
tripNo: {type: string, nullable: true, maxLength: 64}
recordVersion: {type: integer, format: int64, nullable: true, minimum: 0}
plan:
allOf:
- {$ref: './fleet-trips-v1.yaml#/components/schemas/Create'}
nullable: true
description: 仅新建提交,实际创建幂等键使用外层idempotencyKey。
vehicleId: {type: string, nullable: true}
driverId: {type: string, nullable: true}
dispatchNos: {type: array, minItems: 1, maxItems: 100, uniqueItems: true, items: {type: string, maxLength: 64}}
idempotencyKey: {type: string, minLength: 8, maxLength: 128}
@@ -3,27 +3,16 @@ info:
title: 平台运输车次与资源分配
version: 1.0.0
description: >-
车次是一次实际运输的稳定业务编号,客户排车、库存和派送单继续保留各自客户归属。
本文件定义计划、资源分配及客户排车单关联命令;分配或关联不会扣库存或标记发车。
创建可暂不指定车与司机,幂等键按创建人隔离;相同键相同内容返回同一车次,不同内容拒绝。
正式分配要求在役海外车辆及已确认的托位/载重/容积,以及海外司机;司机按预计任务结束时间重新核验且验证证照文件。
发车预览与实际发车重新核对司机当前海外区域和身份;分配后档案变更不能沿用原分配时的资格结果。
一个车辆或司机同时只能占用一个未释放车次;当前不提供多个未来时段的并行预约。
改派先取得新资源,成功后释放旧资源;整次写入与历史处于同一事务。
司机预计结束包含承担的返程/转场;修改预计结束须重新核验司机,所有写命令使用recordVersion。
普通计划接口不提供修改发车或签收状态的入口;PDA统一发车,结案检查所有客户派送终态及实发数量。
货物结案不释放车辆或司机;结束各资源任务独立提交实际结束时间、地点和原因,车辆另确认可用/维修/停用/已归还状态。
结案和结束任务命令携带版本及幂等键;结束司机任务不要求其证照仍有效,也不自动恢复其派车资格。
关联要求已分配车和司机,客户排车单同起运仓且未开始拣货;可跨客户关联但不改变客户数据归属。
同一排车单唯一关联一个车次;关联、改派、解除及尚未执行的派送单车/司机快照同步使用同一事务。
关联后子排车不能独立编辑、取消或单独发车;取消车次前须解除关联,已开工不允许直接解除或变更路线。
发车前允许在车次统一换车、换司机或调整时间,保留全部拣货事实与客户归属;已确认装载须能容纳于替换车辆。
改派或调整计划使原装载确认失效,发车前须重新确认;不支持用计划接口处理在途换车或撤销已执行货物。
关联只建立执行单据关系,不代表实际装载量、容量核验或审核已完成。
每张客户排车单调度审核通过后允许新拣货;整车确认实际装载并通过理货审核后允许发车。
审核仅通过或打回,通过意见选填、打回原因必填;无需额外提交或不同审核人。
换车换司机、修改路线或时间使调度与理货审核待审;仅修改备注保留审核及装载。
关联变更、重新确认装载或重新审核客户排车单使理货审核待审;保留全部拣货事实及历史审核快照。
排车列表是一趟整车作业的唯一主入口,一张排车单对应唯一车次资源记录;同一起运仓允许多个客户和目的地。
整车主单与任务不属于单一客户,货物明细、扫码归属、出库和派送单分别保留真实客户边界。
本文件保留资源占用查询、历史详情、计划容量、外接预订、结案及车辆/司机任务结束等附加能力。
不提供独立派送车次创建、多排车单手工绑定、旧调度/理货审核或装车写入口;审核和装发使用排车主单接口。
已绑定排车主单的资源与路线调整由排车主单执行;零真实扫码时显式退回装车前,修改后重新两级审核。
车辆和司机资格、容量与实际占用由服务端复验;候选可用不表示已预留,临时外配证据依排车主单规则核验。
调度审核后经理货审核才可真实扫码;PDA拣货核平后,平台和PDA均可确认装车完成及实际发车。
发车前整车派送安排须完整,正常签收汇总推进排车派送完成;既有异常业务和附加资源能力保留。
货物结案不自动释放车辆或司机;各资源任务分别提交实际结束时间、地点和原因,车辆另确认结束状态。
版本、幂等、客户隔离及事务要求以各实际端点及排车公共契约为准;历史数量不授权当前分配。
security:
- bearerAuth: []
paths:
@@ -350,7 +339,7 @@ components:
dispatches: {type: array, items: {$ref: '#/components/schemas/DispatchBinding'}}
previousDispatches:
type: array
description: 原绑定历史中已不在当前绑定的批次、客户及来源引用,按最新有效证据去重;历史数量不作为当前装载或可分配数量
description: 原绑定历史中已不在当前绑定的批次及其客户、来源引用,按最新有效证据去重;历史数量不作为当前装载或可分配数量
items: {$ref: '#/components/schemas/PreviousDispatch'}
appointmentHistoryUnavailableReason:
type: string
@@ -656,20 +645,6 @@ components:
manifestHash: {type: string, pattern: '^[0-9a-f]{64}$'}
pallets: {type: array, minItems: 1, maxItems: 1000, items: {$ref: '#/components/schemas/Measurement'}}
reason: {type: string, minLength: 1, maxLength: 1000}
BindingCommand:
type: object
required: [recordVersion, dispatchNo, reason]
properties:
recordVersion: {type: integer, format: int64, minimum: 0}
dispatchNo: {type: string, minLength: 1, maxLength: 64}
reason: {type: string, minLength: 1, maxLength: 1000}
Review:
type: object
required: [recordVersion, decision]
properties:
recordVersion: {type: integer, format: int64, minimum: 0}
decision: {type: string, enum: [APPROVED, REJECTED]}
reason: {type: string, nullable: true, maxLength: 1000, description: 通过选填;打回必填}
ReviewState:
type: object
required: [status]
@@ -685,17 +660,15 @@ components:
properties:
appointmentBatches: {type: array, items: {$ref: 'overseas-business-v1.yaml#/components/schemas/DispatchBatchReference'}}
dispatchNo: {type: string}
customerId: {type: string, description: 排车单自身客户归属,由服务端解析}
packageCount: {type: integer, description: 关联时待发运箱数,不是实物托位数}
boundBy: {type: string}
boundAt: {type: string, format: date-time}
review: {$ref: '#/components/schemas/ReviewState'}
PreviousDispatch:
type: object
required: [dispatchNo, customerId, recordVersion, recordedAt, appointmentBatches]
required: [dispatchNo, recordVersion, recordedAt, appointmentBatches]
properties:
dispatchNo: {type: string}
customerId: {type: string}
recordVersion: {type: integer, format: int64, description: 原绑定历史的车次版本}
recordedAt: {type: string, format: date-time}
appointmentBatches: {type: array, items: {$ref: 'overseas-business-v1.yaml#/components/schemas/DispatchBatchReference'}}
@@ -712,16 +685,6 @@ components:
name: {type: string, minLength: 1, maxLength: 128}
address: {type: string, nullable: true, maxLength: 500}
destinationKey: {type: string, nullable: true, maxLength: 160, description: 卸货站匹配Loading货物的destinationKey;未配置时可以保存计划但不能确认装载}
Create:
type: object
required: [warehouseId, plannedDepartureAt, expectedDriverEndAt, stops, idempotencyKey]
properties:
warehouseId: {type: string, pattern: '^[1-9][0-9]*$'}
plannedDepartureAt: {type: string, format: date-time}
expectedDriverEndAt: {type: string, format: date-time}
stops: {type: array, minItems: 2, maxItems: 200, items: {$ref: '#/components/schemas/Stop'}}
remark: {type: string, nullable: true, maxLength: 1000}
idempotencyKey: {type: string, minLength: 8, maxLength: 128}
Plan:
type: object
required: [recordVersion, plannedDepartureAt, expectedDriverEndAt, stops, reason]
@@ -4038,10 +4038,6 @@ components:
type: string
format: date-time
nullable: true
vehicleAppointment:
allOf:
- $ref: '#/components/schemas/DispatchAppointmentReference'
nullable: true
remark:
type: string
nullable: true
@@ -5602,6 +5598,10 @@ components:
items:
$ref: '#/components/schemas/DispatchBatchAllocation'
nullable: true
sourceOrigin:
allOf:
- $ref: '#/components/schemas/DispatchSourceOrigin'
nullable: true
required:
- dispatchItemId
- customerId
@@ -5630,6 +5630,7 @@ components:
- grossWeightKg
- volumeCbm
- batchAllocations
- sourceOrigin
DispatchCommandResult:
type: object
x-java-record: DispatchContracts.CommandResult
@@ -5797,7 +5798,6 @@ components:
sourceType:
allOf:
- $ref: '#/components/schemas/DispatchSourceType'
nullable: true
planPalletId:
type: string
pattern: ^[0-9]+$
@@ -5815,7 +5815,9 @@ components:
nullable: true
sourceVersion:
type: string
nullable: true
required:
- sourceType
- sourceVersion
DispatchCreate:
type: object
x-java-record: DispatchCommands.Create
@@ -5857,22 +5859,6 @@ components:
- idempotencyKey
- warehouseId
description: 同一起运仓,允许空单或多客户、多目的仓。客户和来源归属由服务端解析,临时资源不生成假档案。
DispatchAppointmentReference:
type: object
x-java-record: DispatchCommands.AppointmentReference
properties:
referenceNo:
type: string
nullable: true
recordVersion:
oneOf:
- type: string
pattern: ^[0-9]+$
- type: integer
minimum: 0
description: 已有单写入必填;0合法。响应Long按十进制字符串输出。
required:
- recordVersion
DispatchAddCargo:
type: object
x-java-record: DispatchCommands.AddCargo
@@ -6351,24 +6337,6 @@ components:
- status
- confirmedAt
- blockReason
DispatchVehicleAppointment:
type: object
x-java-record: DispatchViews.VehicleAppointment
properties:
referenceNo:
type: string
nullable: true
status:
type: string
nullable: true
appointmentAt:
type: string
format: date-time
nullable: true
required:
- referenceNo
- status
- appointmentAt
DispatchDispatchInfo:
type: object
x-java-record: DispatchViews.DispatchInfo
@@ -6393,10 +6361,6 @@ components:
items:
$ref: '#/components/schemas/DispatchFbaAppointment'
nullable: true
vehicleAppointment:
allOf:
- $ref: '#/components/schemas/DispatchVehicleAppointment'
nullable: true
appointmentBatches:
type: array
items:
@@ -6408,7 +6372,6 @@ components:
- departedAt
- estimatedArrivalAt
- fbaAppointments
- vehicleAppointment
- appointmentBatches
DispatchDocuments:
type: object
@@ -6479,6 +6442,12 @@ components:
sourceKey:
type: string
nullable: true
sourceBusinessType:
type: string
nullable: true
sourceBusinessNo:
type: string
nullable: true
required:
- customerId
- customerName
@@ -6490,6 +6459,8 @@ components:
- volumeCbm
- containerNo
- sourceKey
- sourceBusinessType
- sourceBusinessNo
DispatchDetail:
type: object
x-java-record: DispatchViews.Detail
@@ -6660,6 +6631,14 @@ components:
items:
$ref: '#/components/schemas/DispatchReturnCarton'
nullable: true
sourceKey:
type: string
sourceBusinessType:
type: string
nullable: true
sourceBusinessNo:
type: string
nullable: true
required:
- dispatchItemId
- customerId
@@ -6670,6 +6649,9 @@ components:
- pickedPackages
- positions
- returnCartons
- sourceKey
- sourceBusinessType
- sourceBusinessNo
DispatchPosition:
type: object
x-java-record: DispatchViews.Position
@@ -6970,6 +6952,11 @@ components:
items:
type: string
nullable: true
selectionGroup:
allOf:
- $ref: '#/components/schemas/DispatchSelectionGroup'
required:
- selectionGroup
DispatchCandidateList:
type: object
x-java-record: DispatchPlanningModels.CandidateList
@@ -7860,5 +7847,132 @@ components:
sizeBytes:
type: string
pattern: ^[0-9]+$
DispatchSelectionGroup:
type: object
x-java-record: DispatchPlanningModels.SelectionGroup
properties:
groupKey:
type: string
groupVersion:
type: string
sources:
type: array
items:
$ref: '#/components/schemas/DispatchSelectionGroupSource'
pallets:
type: array
items:
$ref: '#/components/schemas/DispatchSelectionGroupPallet'
complete:
type: boolean
blockReasons:
type: array
items:
type: string
required:
- groupKey
- groupVersion
- sources
- pallets
- complete
- blockReasons
description: 服务端按完整实托及整换标申请计算未被页面筛选截断的来源集合;版本绑定组成、完工轮次、实际位置和各来源版本。complete=false或blockReasons非空禁止选入。
DispatchSelectionGroupSource:
type: object
x-java-record: DispatchPlanningModels.SelectionGroupSource
properties:
selection:
allOf:
- $ref: '#/components/schemas/DispatchCargoSelection'
sourceKey:
type: string
customerId:
type: string
customerName:
type: string
nullable: true
sourceBusinessType:
type: string
nullable: true
sourceBusinessNo:
type: string
nullable: true
packages:
type: string
pattern: ^[0-9]+$
required:
- selection
- sourceKey
- customerId
- customerName
- sourceBusinessType
- sourceBusinessNo
- packages
description: 客户和换标业务号按逻辑来源保留;selection携带本来源权威版本,正式建单和加货显式提交完整组,不从展示sourceKey推业务号。
DispatchSelectionGroupPallet:
type: object
x-java-record: DispatchPlanningModels.SelectionGroupPallet
properties:
warehousePalletId:
type: string
pattern: ^[0-9]+$
palletNo:
type: string
sourceKeys:
type: array
items:
type: string
packageCount:
type: string
pattern: ^[0-9]+$
required:
- warehousePalletId
- palletNo
- sourceKeys
- packageCount
description: 每实托只列一次,sourceKeys列出全部逻辑贡献;实际装载按实托测量,不能把整托容量重复计到各来源。
DispatchSourceOrigin:
type: object
x-java-record: DispatchContracts.SourceOrigin
properties:
dispatchItemSourceId:
type: string
pattern: ^[0-9]+$
nullable: true
relabelApplicationId:
type: string
pattern: ^[0-9]+$
nullable: true
relabelItemId:
type: string
pattern: ^[0-9]+$
nullable: true
sourceInventoryBalanceId:
type: string
pattern: ^[0-9]+$
nullable: true
sourceInboundOrderId:
type: string
pattern: ^[0-9]+$
nullable: true
sourceInboundOrderNo:
type: string
nullable: true
sourceInboundCode:
type: string
nullable: true
productQuantity:
type: string
pattern: ^[0-9]+$
nullable: true
required:
- dispatchItemSourceId
- relabelApplicationId
- relabelItemId
- sourceInventoryBalanceId
- sourceInboundOrderId
- sourceInboundOrderNo
- sourceInboundCode
- productQuantity
securitySchemes:
bearerAuth: { type: http, scheme: bearer, bearerFormat: JWT }