feat: support mixed-SKU dropship cartons

This commit is contained in:
2026-09-11 15:38:19 +08:00
parent 0db11517db
commit cc7c2f0954
42 changed files with 1263 additions and 128 deletions
@@ -118,6 +118,27 @@ paths:
content:
application/pdf: { schema: { type: string, format: binary } }
application/json: { schema: { $ref: '#/components/schemas/ApiError' } }
/internal/print/v1/pdfs/dropship-pallet-a4-documents:
post:
summary: Generate one A4 information sheet per dropship pallet
operationId: generateDropshipPalletA4Pdf
security: [{ internalServiceToken: [] }]
parameters: [{ $ref: '#/components/parameters/RequestId' }]
requestBody:
required: true
content: { application/json: { schema: { $ref: '#/components/schemas/DropshipPalletA4PdfRequest' } } }
responses:
'200':
description: PDF generation succeeded, or a business error was returned as ApiResponse JSON.
headers:
Content-Disposition: { schema: { type: string } }
X-Print-Page-Count: { schema: { type: integer, minimum: 1, maximum: 2000 } }
content:
application/pdf: { schema: { type: string, format: binary } }
application/json: { schema: { $ref: '#/components/schemas/ApiError' } }
'413':
description: Request body exceeds the configured limit.
content: { application/json: { schema: { $ref: '#/components/schemas/ApiError' } } }
components:
securitySchemes:
internalServiceToken:
@@ -254,6 +275,48 @@ components:
fbaShipmentId: { type: string }
poReferenceNo: { type: string }
packageCount: { type: integer, minimum: 0 }
DropshipPalletA4PdfRequest:
type: object
required: [templateCode, pageSpec, downloadFileName, documents]
properties:
templateCode: { type: string, enum: [DROPSHIP_PALLET_A4_V1] }
pageSpec: { $ref: '#/components/schemas/FreightA4PageSpec' }
downloadFileName: { type: string, maxLength: 120 }
documents:
type: array
minItems: 1
maxItems: 2000
description: One pallet renders as exactly one A4 page in request order.
items: { $ref: '#/components/schemas/DropshipPalletA4Document' }
DropshipPalletA4Document:
type: object
required: [palletNo, inboundCodes, cartonCount, skuCount, weightKg, volumeCbm, barcodeContent, skuRows]
properties:
palletNo: { type: string, maxLength: 80 }
inboundCodes: { type: string, maxLength: 300 }
cartonCount: { type: integer, minimum: 0 }
skuCount: { type: integer, minimum: 0 }
weightKg: { type: number, minimum: 0 }
volumeCbm: { type: number, minimum: 0 }
barcodeContent:
type: string
maxLength: 80
pattern: '^[\\x20-\\x7E]+$'
description: Code 128 一维码内容,当前固定为稳定托盘码
skuRows:
type: array
minItems: 0
maxItems: 34
items: { $ref: '#/components/schemas/DropshipPalletSkuRow' }
DropshipPalletSkuRow:
type: object
required: [inboundCode, skuCode, cargoName, cartonCount, skuQuantity]
properties:
inboundCode: { type: string, maxLength: 80 }
skuCode: { type: string, maxLength: 128 }
cargoName: { type: string, maxLength: 200 }
cartonCount: { type: integer, minimum: 0 }
skuQuantity: { type: integer, minimum: 0 }
FreightA4PageSpec:
type: object
required: [widthMm, heightMm]