196 lines
10 KiB
YAML
196 lines
10 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: 一件代发国内清点组托 API
|
|
version: 3.0.0
|
|
description: 测量环节录入预计托数,审核通过后预生成全部 DP 托盘码并可立即打印。PDA 支持先扫箱或先扫托,逐托封托后完成入库。
|
|
paths:
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/pending:
|
|
get:
|
|
summary: 查询待领取或本人已领取任务
|
|
x-required-authority: platform:firstleg:pda:view
|
|
parameters: [{$ref: '#/components/parameters/WarehouseId'}, {name: keyword, in: query, required: false, schema: {type: string, maxLength: 64}}]
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}:
|
|
get:
|
|
summary: 查询任务、已清点待绑箱及托盘结果
|
|
x-required-authority: platform:firstleg:pda:view
|
|
parameters: [{$ref: '#/components/parameters/TaskId'}, {$ref: '#/components/parameters/WarehouseId'}]
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/cartons/resolve:
|
|
get:
|
|
summary: 扫箱码解析入仓码、SKU 和应收数量,不返回全部未清点箱
|
|
x-required-authority: platform:firstleg:pda:view
|
|
parameters:
|
|
- {$ref: '#/components/parameters/TaskId'}
|
|
- {$ref: '#/components/parameters/WarehouseId'}
|
|
- {name: boxCode, in: query, required: true, schema: {type: string, maxLength: 80}}
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/claim:
|
|
post:
|
|
summary: 领取任务
|
|
x-required-authority: platform:firstleg:pda:work
|
|
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/ClaimRequest'}}}}
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/cartons/count:
|
|
post:
|
|
summary: 逐箱确认 SKU 实收数量
|
|
description: 未传 palletNo 时进入待归托区;传入本任务预生成的 OPEN 托盘码时直接归托。数量不一致必须 ACCEPT_VARIANCE 且填写说明。
|
|
x-required-authority: platform:firstleg:pda:work
|
|
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CountCartonRequest'}}}}
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/pallets/bind-pending:
|
|
post:
|
|
summary: 扫托盘码并把当前任务全部待绑箱绑定到该托盘
|
|
x-required-authority: platform:firstleg:pda:work
|
|
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/BindPendingRequest'}}}}
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/cartons/{cartonId}/move:
|
|
post:
|
|
summary: 换托,targetPalletNo 为空时退回待绑区
|
|
x-required-authority: platform:firstleg:pda:work
|
|
parameters:
|
|
- {$ref: '#/components/parameters/TaskId'}
|
|
- {name: cartonId, in: path, required: true, schema: {type: integer, format: int64}}
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/MoveCartonRequest'}}}}
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/pallets/{palletId}/seal:
|
|
post:
|
|
summary: 封托;禁止空托、版本冲突和重复归托
|
|
x-required-authority: platform:firstleg:pda:work
|
|
parameters:
|
|
- {$ref: '#/components/parameters/TaskId'}
|
|
- {name: palletId, in: path, required: true, schema: {type: integer, format: int64}}
|
|
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/SealPalletRequest'}}}}
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/tasks/{taskId}/pallets/{palletId}/print:
|
|
get:
|
|
summary: PDA 获取预生成托盘码的 A4 托盘信息单
|
|
description: 测量审核通过并生成托盘码后即可获取;每个托盘固定一页 A4,包含托盘号及其 Code 128 一维码、入仓码、箱数以及已归托 SKU、商品名称和实点数量,不展示作业状态。空托显示暂无已归托 SKU。仅当前仓库、当前操作员可访问。
|
|
x-required-authority: platform:firstleg:pda:view
|
|
parameters:
|
|
- {$ref: '#/components/parameters/TaskId'}
|
|
- {name: palletId, in: path, required: true, schema: {type: integer, format: int64}}
|
|
- {$ref: '#/components/parameters/WarehouseId'}
|
|
responses:
|
|
'200': {description: A4 托盘信息单 PDF, content: {application/pdf: {schema: {type: string, format: binary}}}}
|
|
/api/platform/v1/first-leg/pda-dropship/inbound-orders/{inboundId}/pallets:
|
|
get:
|
|
summary: Admin 查询入仓单权威托盘结果
|
|
x-required-authority: firstleg:inbound:list
|
|
responses: {'200': {description: OK}}
|
|
/api/platform/v1/first-leg/pda-dropship/inbound-orders/{inboundId}/pallets/{palletId}/print:
|
|
get:
|
|
summary: 获取包含托盘码、入仓码和 SKU 实收汇总的 A4 托盘信息单
|
|
x-required-authority: firstleg:inbound:list
|
|
responses: {'200': {description: PDF}}
|
|
components:
|
|
parameters:
|
|
TaskId: {name: taskId, in: path, required: true, schema: {type: integer, format: int64}}
|
|
WarehouseId: {name: warehouseId, in: query, required: true, schema: {type: integer, format: int64}}
|
|
schemas:
|
|
Task:
|
|
type: object
|
|
description: 一件代发清点组托任务;palletSetupReady=false 时禁止领取、解析箱码和提交清点。
|
|
required: [taskId, totalCartons, countedCartons, boundCartons, unboundCartons, expectedPalletCount, generatedPalletCount, palletSetupReady, taskStatus, pallets]
|
|
properties:
|
|
taskId: {type: integer, format: int64}
|
|
totalCartons: {type: integer, minimum: 1}
|
|
countedCartons: {type: integer, minimum: 0}
|
|
boundCartons: {type: integer, minimum: 0}
|
|
unboundCartons: {type: integer, minimum: 0}
|
|
expectedPalletCount: {type: integer, minimum: 1}
|
|
generatedPalletCount: {type: integer, minimum: 0}
|
|
palletSetupReady: {type: boolean}
|
|
palletSetupMessage: {type: string, nullable: true}
|
|
taskStatus: {type: string, enum: [PENDING, CLAIMED, COMPLETED]}
|
|
pallets: {type: array, items: {$ref: '#/components/schemas/Pallet'}}
|
|
Carton:
|
|
type: object
|
|
properties:
|
|
cartonId: {type: integer, format: int64, nullable: true}
|
|
boxCode: {type: string}
|
|
inboundId: {type: integer, format: int64}
|
|
inboundCode: {type: string}
|
|
skuLines: {type: array, minItems: 1, items: {$ref: '#/components/schemas/CartonSkuLine'}, description: 当前物理箱内全部SKU清点行}
|
|
countStatus: {type: string, enum: [UNCOUNTED, COUNTED_UNBOUND, BOUND]}
|
|
palletId: {type: integer, format: int64, nullable: true}
|
|
palletNo: {$ref: '#/components/schemas/NullablePalletNo'}
|
|
canCount: {type: boolean}
|
|
blockReason: {type: string, nullable: true}
|
|
CartonSkuLine:
|
|
type: object
|
|
required: [inboundDetailId, skuCode, expectedQuantity]
|
|
properties:
|
|
inboundDetailId: {type: integer, format: int64}
|
|
skuCode: {type: string}
|
|
cargoName: {type: string, nullable: true}
|
|
expectedQuantity: {type: integer, minimum: 1}
|
|
actualQuantity: {type: integer, minimum: 0, nullable: true}
|
|
discrepancyStatus: {type: string, enum: [MATCH, ACCEPTED_VARIANCE], nullable: true}
|
|
discrepancyRemark: {type: string, nullable: true}
|
|
Pallet:
|
|
type: object
|
|
properties:
|
|
palletId: {type: integer, format: int64}
|
|
palletNo: {$ref: '#/components/schemas/PalletNo'}
|
|
status: {type: string, enum: [OPEN, SEALED]}
|
|
cartonCount: {type: integer, minimum: 0}
|
|
skuCount: {type: integer, minimum: 0}
|
|
discrepancyCartons: {type: integer, minimum: 0}
|
|
weightKg: {type: number, minimum: 0}
|
|
volumeCbm: {type: number, minimum: 0}
|
|
version: {type: integer, minimum: 1}
|
|
items: {type: array, items: {type: object}}
|
|
cartons: {type: array, items: {$ref: '#/components/schemas/Carton'}, description: 含稳定 cartonId,换托必须使用该 ID}
|
|
sealedAt: {type: string, format: date-time, nullable: true}
|
|
ClaimRequest:
|
|
type: object
|
|
required: [warehouseId]
|
|
properties: {warehouseId: {type: integer, format: int64}}
|
|
CountCartonRequest:
|
|
type: object
|
|
required: [warehouseId, boxCode, skuLines, operationId]
|
|
properties:
|
|
warehouseId: {type: integer, format: int64}
|
|
boxCode: {type: string, maxLength: 80}
|
|
palletNo: {$ref: '#/components/schemas/NullablePalletNo'}
|
|
skuLines:
|
|
type: array
|
|
minItems: 1
|
|
items:
|
|
type: object
|
|
required: [inboundDetailId, skuCode, actualQuantity, discrepancyAction]
|
|
properties:
|
|
inboundDetailId: {type: integer, format: int64}
|
|
skuCode: {type: string, maxLength: 128}
|
|
actualQuantity: {type: integer, minimum: 0}
|
|
discrepancyAction: {type: string, enum: [MATCH, ACCEPT_VARIANCE]}
|
|
discrepancyRemark: {type: string, maxLength: 500, nullable: true}
|
|
operationId: {type: string, maxLength: 128}
|
|
BindPendingRequest:
|
|
type: object
|
|
required: [warehouseId, palletNo, operationId]
|
|
properties:
|
|
warehouseId: {type: integer, format: int64}
|
|
palletNo: {$ref: '#/components/schemas/PalletNo'}
|
|
operationId: {type: string, maxLength: 128}
|
|
MoveCartonRequest:
|
|
type: object
|
|
required: [warehouseId, operationId]
|
|
properties:
|
|
warehouseId: {type: integer, format: int64}
|
|
targetPalletNo: {$ref: '#/components/schemas/NullablePalletNo'}
|
|
operationId: {type: string, maxLength: 128}
|
|
SealPalletRequest:
|
|
type: object
|
|
required: [warehouseId, expectedVersion, operationId]
|
|
properties:
|
|
warehouseId: {type: integer, format: int64}
|
|
expectedVersion: {type: integer, minimum: 1}
|
|
operationId: {type: string, maxLength: 128}
|
|
PalletNo: {type: string, pattern: '^DP-[0-9]{6}-[0-9]{4}$'}
|
|
NullablePalletNo: {type: string, pattern: '^DP-[0-9]{6}-[0-9]{4}$', nullable: true}
|