feat(firstleg): converge phase3 loading models and pda
This commit is contained in:
@@ -20,7 +20,9 @@ paths:
|
||||
'200': {description: Business envelope; ownership, type and version failures use business error codes}
|
||||
/api/platform/v1/inbounds/{inboundId}/loading/picking/start:
|
||||
post:
|
||||
summary: Start the inbound-level PDA picking review task
|
||||
summary: Refresh the compatibility projection from canonical container PDA tasks
|
||||
deprecated: true
|
||||
description: expectedCount and pickedCount must exactly match the server-derived container-task aggregate.
|
||||
parameters: [{$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
||||
requestBody:
|
||||
required: true
|
||||
@@ -30,7 +32,9 @@ paths:
|
||||
'200': {description: Business envelope containing IN_PROGRESS task}
|
||||
/api/platform/v1/inbounds/{inboundId}/loading/picking/complete:
|
||||
post:
|
||||
summary: Complete a started PDA picking task when planned and picked counts match
|
||||
summary: Mark the compatibility projection complete after all container PDA tasks are reviewed
|
||||
deprecated: true
|
||||
description: This endpoint cannot complete canonical picking; counts must match the server aggregate and every related container task must already be completed.
|
||||
parameters: [{$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
||||
requestBody:
|
||||
required: true
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Phase 3 Preload and Container Loading Bridge API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/api/platform/v1/inbounds/{inboundId}/preload/loading-plans:
|
||||
get:
|
||||
summary: Query all container loading plans linked to one inbound preload
|
||||
parameters: [{$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/TenantId'}]
|
||||
responses:
|
||||
'200': {description: Business envelope containing zero or more stable links}
|
||||
/api/platform/v1/inbounds/{inboundId}/preload/loading-plans/{loadingPlanId}:
|
||||
post:
|
||||
summary: Atomically link an inbound preload and a container loading plan
|
||||
description: Both optimistic-lock versions must match; either conflict rolls back the whole link operation.
|
||||
parameters: [{$ref: '#/components/parameters/InboundId'}, {$ref: '#/components/parameters/LoadingPlanId'}, {$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json: {schema: {$ref: '#/components/schemas/BindRequest'}}
|
||||
responses:
|
||||
'200': {description: Business envelope containing the persisted link or a business conflict}
|
||||
/api/platform/v1/first-leg/smart-loading/plans/{loadingPlanId}/preloads:
|
||||
get:
|
||||
summary: Query all inbound preloads linked to one container loading plan
|
||||
parameters: [{$ref: '#/components/parameters/LoadingPlanId'}]
|
||||
responses:
|
||||
'200': {description: Business envelope containing links across authorized customers}
|
||||
components:
|
||||
parameters:
|
||||
InboundId: {name: inboundId, in: path, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||||
LoadingPlanId: {name: loadingPlanId, in: path, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||||
TenantId: {name: tenantId, in: query, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||||
IdempotencyKey: {name: Idempotency-Key, in: header, required: true, schema: {type: string, maxLength: 128}}
|
||||
schemas:
|
||||
BindRequest:
|
||||
type: object
|
||||
required: [expectedPreloadVersion, expectedLoadingPlanVersion]
|
||||
properties:
|
||||
expectedPreloadVersion: {type: integer, minimum: 0}
|
||||
expectedLoadingPlanVersion: {type: integer, minimum: 0}
|
||||
Link:
|
||||
type: object
|
||||
required: [id, tenantId, inboundId, preloadPlanId, preloadStatus, preloadVersion, loadingPlanId, containerBookingId, loadingPlanStatus, loadingPlanVersion, allocatedPackageCount, linkedAt]
|
||||
properties:
|
||||
id: {type: integer, format: int64}
|
||||
tenantId: {type: integer, format: int64}
|
||||
inboundId: {type: integer, format: int64}
|
||||
preloadPlanId: {type: integer, format: int64}
|
||||
preloadStatus: {type: string, enum: [PENDING, CONFIRMING, CONFIRMED]}
|
||||
preloadVersion: {type: integer, minimum: 0}
|
||||
loadingPlanId: {type: integer, format: int64}
|
||||
containerBookingId: {type: integer, format: int64}
|
||||
containerNo: {type: string, nullable: true}
|
||||
loadingPlanStatus: {type: string, enum: [EDITING, LOADING, COMPLETED]}
|
||||
loadingPlanVersion: {type: integer, minimum: 0}
|
||||
allocatedPackageCount: {type: integer, minimum: 1}
|
||||
linkedAt: {type: string, format: date-time}
|
||||
@@ -0,0 +1,87 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Phase 3 Container PDA Picking API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/api/platform/v1/first-leg/pda-loading/tasks:
|
||||
get:
|
||||
summary: Find the active container picking task in one platform warehouse
|
||||
parameters:
|
||||
- {name: containerNo, in: query, required: true, schema: {type: string}}
|
||||
- {name: warehouseId, in: query, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||||
responses:
|
||||
'200': {description: Task with assignment, review and item-level versions}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/claim:
|
||||
post:
|
||||
summary: Atomically claim an unassigned task for the authenticated operator
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
||||
requestBody:
|
||||
required: true
|
||||
content: {application/json: {schema: {$ref: '#/components/schemas/ClaimRequest'}}}
|
||||
responses:
|
||||
'200': {description: Claimed task or A0409 when another operator owns it}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/assign:
|
||||
post:
|
||||
summary: Assign or reassign a task with optimistic locking
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
||||
requestBody:
|
||||
required: true
|
||||
content: {application/json: {schema: {$ref: '#/components/schemas/AssignRequest'}}}
|
||||
responses:
|
||||
'200': {description: Assigned task or A0409 on assignment version conflict}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/items/{itemId}/pick:
|
||||
post:
|
||||
summary: Increment a picked item owned by the authenticated assignee
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}, {$ref: '#/components/parameters/ItemId'}]
|
||||
responses: {'200': {description: Updated task}}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/items/{itemId}/partial:
|
||||
post:
|
||||
summary: Record the final partial quantity for one assigned item
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}, {$ref: '#/components/parameters/ItemId'}]
|
||||
responses: {'200': {description: Task awaiting review when every item is resolved}}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/items/{itemId}/skip:
|
||||
post:
|
||||
summary: Resolve an untouched assigned item as skipped
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}, {$ref: '#/components/parameters/ItemId'}]
|
||||
responses: {'200': {description: Task awaiting review when every item is resolved}}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/review:
|
||||
post:
|
||||
summary: Review all resolved items, settle partial and skipped quantities, then complete the plan
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
||||
requestBody:
|
||||
required: true
|
||||
content: {application/json: {schema: {$ref: '#/components/schemas/ReviewRequest'}}}
|
||||
responses:
|
||||
'200': {description: Completed task or A0409 when items or task version changed}
|
||||
/api/platform/v1/first-leg/pda-loading/tasks/{taskId}/operations:
|
||||
get:
|
||||
summary: Read immutable task-level claim, assignment and review audit records
|
||||
parameters: [{$ref: '#/components/parameters/TaskId'}]
|
||||
responses:
|
||||
'200': {description: Ordered operation history}
|
||||
components:
|
||||
parameters:
|
||||
TaskId: {name: taskId, in: path, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||||
ItemId: {name: itemId, in: path, required: true, schema: {type: integer, format: int64, minimum: 1}}
|
||||
schemas:
|
||||
ClaimRequest:
|
||||
type: object
|
||||
required: [expectedAssignmentVersion, operationId]
|
||||
properties:
|
||||
expectedAssignmentVersion: {type: integer, minimum: 0}
|
||||
operationId: {type: string, maxLength: 128}
|
||||
AssignRequest:
|
||||
type: object
|
||||
required: [assigneeId, assigneeName, expectedAssignmentVersion, operationId]
|
||||
properties:
|
||||
assigneeId: {type: integer, format: int64, minimum: 1}
|
||||
assigneeName: {type: string, maxLength: 64}
|
||||
expectedAssignmentVersion: {type: integer, minimum: 0}
|
||||
operationId: {type: string, maxLength: 128}
|
||||
ReviewRequest:
|
||||
type: object
|
||||
required: [expectedTaskVersion, operationId]
|
||||
properties:
|
||||
expectedTaskVersion: {type: integer, minimum: 0}
|
||||
operationId: {type: string, maxLength: 128}
|
||||
remark: {type: string, maxLength: 500}
|
||||
Reference in New Issue
Block a user