feat(fleet): add internal capacity pool and warehouse fulfillment bridge

This commit is contained in:
2026-10-07 16:46:56 +08:00
parent 564cfa107c
commit 001219460f
57 changed files with 3820 additions and 38 deletions
File diff suppressed because it is too large Load Diff
@@ -340,11 +340,11 @@ components:
schemas:
BookingCargo:
type: object
required: [destinationKey, packageCount]
required: [destinationKey]
properties:
destinationKey: {type: string, maxLength: 160}
cargoName: {type: string, nullable: true, maxLength: 255}
packageCount: {type: integer, minimum: 1}
packageCount: {type: integer, nullable: true, minimum: 1, description: 询价未知可为空,确认承运前必须补齐正数箱数}
palletSpaces: {type: integer, nullable: true, minimum: 1}
weightKg: {type: number, nullable: true, minimum: 0.001}
volumeCbm: {type: number, nullable: true, minimum: 0.001}
@@ -437,6 +437,8 @@ components:
Booking:
type: object
properties:
offerNo: {type: string, nullable: true, description: 来源拼车发布号,池来源的成交和取消必须经专用接口}
expectedPalletCount: {type: integer, nullable: true, minimum: 1, description: 预计实托数,不等同托位}
bookingNo: {type: string}
tripNo: {type: string}
customerId: {type: string}
@@ -3353,6 +3353,7 @@ components:
properties: { records: { type: array, items: { $ref: '#/components/schemas/TruckSummary' } } }
TruckSummary:
type: object
description: 卡车商业主单摘要;池来源附带同客户fleetArrangement,独立订单该字段为null。列表批量查询承运摘要,不逐行请求车次。
required: [id, customerId, orderNo, origin, destination, palletCount, packageCount, receivedPalletCount, allocatedPalletCount, totalWeightKg, totalVolumeCbm, status, version, createdAt, updatedAt]
properties:
id: { type: string, pattern: '^[0-9]+$' }
@@ -3377,8 +3378,10 @@ components:
version: { type: integer, format: int64 }
createdAt: { type: string, format: date-time }
updatedAt: { type: string, format: date-time }
fleetArrangement: { $ref: '#/components/schemas/FleetArrangement' }
TruckDetail:
type: object
description: 承运安排位于summary.fleetArrangement,与列表摘要使用同一真实来源;根对象不重复该字段。池来源手工状态入口禁止旁路实际履约。
required: [summary, pallets, histories]
properties:
summary: { $ref: '#/components/schemas/TruckSummary' }
@@ -3407,6 +3410,7 @@ components:
properties: { records: { type: array, items: { $ref: '#/components/schemas/LooseboardSummary' } } }
LooseboardSummary:
type: object
description: 散板商业主单摘要;池来源附带同客户fleetArrangement,独立订单该字段为null。池来源不创建第二张占位尾程来源。
required: [id, customerId, orderNo, transportMode, palletRequired, transportType, origin, destination, packageCount, totalWeightKg, totalVolumeCbm, status, version, createdAt, updatedAt]
properties:
id: { type: string, pattern: '^[0-9]+$' }
@@ -3430,8 +3434,10 @@ components:
version: { type: integer, format: int64 }
createdAt: { type: string, format: date-time }
updatedAt: { type: string, format: date-time }
fleetArrangement: { $ref: '#/components/schemas/FleetArrangement' }
LooseboardDetail:
type: object
description: 承运安排位于summary.fleetArrangement,与列表摘要使用同一真实来源;根对象不重复该字段。池来源状态只能由实际履约推进。
required: [summary, histories]
properties:
summary: { $ref: '#/components/schemas/LooseboardSummary' }
@@ -3440,6 +3446,34 @@ components:
remark: { type: string, nullable: true }
createdBy: { type: string, nullable: true }
histories: { type: array, items: { $ref: '#/components/schemas/BusinessHistory' } }
FleetArrangement:
type: object
nullable: true
description: 公司内部拼车成交后的客户隔离承运摘要。无发布池内部ID、他人货物、司机私人信息或采购成本;agreedFreightAmount是约定运费,不代表已收款。未知数量保持null。
required: [sourceType, businessType, businessOrderNo, bookingNo, tripNo, plannedDepartureAt, originWarehouseName, destinationLabel, deliveryMode, fulfillmentStage, stageOccurredAt, readOnlyReason]
properties:
sourceType: { type: string, enum: [FLEET_CAPACITY_OFFER] }
businessType: { type: string, enum: [LOCAL_LOOSEBOARD, US_TRUCK] }
businessOrderNo: { type: string }
bookingNo: { type: string }
tripNo: { type: string }
plannedDepartureAt: { type: string, format: date-time, description: UTC Instant,明确包含Z,不将数据库UTC墙钟值当成本地时间 }
originWarehouseName: { type: string }
destinationLabel: { type: string }
deliveryMode: { type: string, enum: [SELF_DELIVERY, MANUAL_PICKUP_TO_WAREHOUSE] }
deliveryInstructions: { type: string, nullable: true }
fulfillmentStage: { type: string, enum: [WAITING_INBOUND, RECEIVING, WAITING_CONSOLIDATION, PENDING_DISPATCH, IN_TRANSIT, COMPLETED, CANCELLED] }
stageOccurredAt: { type: string, format: date-time, description: 真实履约阶段时间,按业务运行时区转换为Instant }
agreedFreightAmount: { type: number, nullable: true }
currency: { type: string, nullable: true, enum: [CNY, USD] }
incomingNo: { type: string, nullable: true }
dispatchNo: { type: string, nullable: true }
deliveryNo: { type: string, nullable: true }
signedPackages: { type: integer, minimum: 0, nullable: true }
unsignedPackages: { type: integer, minimum: 0, nullable: true }
returnedPackages: { type: integer, minimum: 0, nullable: true }
exceptionSummary: { type: string, nullable: true }
readOnlyReason: { type: string }
BusinessHistory:
type: object
properties:
@@ -3807,7 +3841,7 @@ components:
contactInfo: { type: string, maxLength: 128 }
requestedDate: { type: string, format: date }
remark: { type: string, nullable: true, maxLength: 1000 }
LooseboardStatus: { type: string, enum: [PENDING_ACCEPTANCE, DISPATCHED, IN_TRANSIT, COMPLETED, CANCELLED] }
LooseboardStatus: { type: string, enum: [PENDING_ACCEPTANCE, WAITING_INBOUND, RECEIVING, WAITING_CONSOLIDATION, PENDING_DISPATCH, DISPATCHED, IN_TRANSIT, COMPLETED, CANCELLED] }
LooseboardStatusChange:
type: object
required: [version, status, idempotencyKey]