2026-08-08 22:36:41 +08:00
openapi : 3.0.3
info :
title : Phase 3 Loading Evidence and Picking API
version : 1.0.0
paths :
/api/platform/v1/inbounds/{inboundId}/loading/evidence:
get :
summary : List loading evidence bound to one customer inbound
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }]
responses :
'200' : {description : Business envelope containing the stable evidence array}
post :
2026-08-10 11:28:57 +08:00
summary : Append one real File service object to a loading evidence type
2026-08-08 22:36:41 +08:00
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }, {$ref : '#/components/parameters/IdempotencyKey' }]
requestBody :
required : true
content :
application/json : {schema : {$ref : '#/components/schemas/UpsertEvidenceRequest' }}
responses :
'200' : {description : Business envelope; ownership, type and version failures use business error codes}
2026-08-10 11:28:57 +08:00
/api/platform/v1/inbounds/{inboundId}/loading/evidence/{evidenceId}/void:
post :
summary : Void an incorrect loading evidence photo without hard deletion
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }, {$ref : '#/components/parameters/EvidenceId' }, {$ref : '#/components/parameters/IdempotencyKey' }]
requestBody :
required : true
content :
application/json : {schema : {$ref : '#/components/schemas/VoidEvidenceRequest' }}
responses :
'200' : {description : Business envelope containing the voided record and audit fields}
2026-08-08 22:36:41 +08:00
/api/platform/v1/inbounds/{inboundId}/loading/picking/start:
post :
2026-08-09 11:21:38 +08:00
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.
2026-08-08 22:36:41 +08:00
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }, {$ref : '#/components/parameters/IdempotencyKey' }]
requestBody :
required : true
content :
application/json : {schema : {$ref : '#/components/schemas/PickingRequest' }}
responses :
'200' : {description : Business envelope containing IN_PROGRESS task}
/api/platform/v1/inbounds/{inboundId}/loading/picking/complete:
post :
2026-08-09 11:21:38 +08:00
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.
2026-08-08 22:36:41 +08:00
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }, {$ref : '#/components/parameters/IdempotencyKey' }]
requestBody :
required : true
content :
application/json : {schema : {$ref : '#/components/schemas/PickingRequest' }}
responses :
'200' : {description : Business envelope containing COMPLETED task}
/api/platform/v1/inbounds/{inboundId}/loading/picking:
get :
summary : Read the inbound-level PDA picking task
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }]
responses :
'200' : {description : Business envelope containing task or null}
/api/platform/v1/inbounds/{inboundId}/loading/complete:
post :
2026-08-10 11:28:57 +08:00
summary : Complete loading only after picking and five evidence types each have an active photo
2026-08-08 22:36:41 +08:00
parameters : [ {$ref : '#/components/parameters/InboundId' }, {$ref : '#/components/parameters/TenantId' }, {$ref : '#/components/parameters/IdempotencyKey' }]
requestBody :
required : true
content :
application/json : {schema : {$ref : '#/components/schemas/CompleteLoadingRequest' }}
responses :
'200' : {description : Business envelope containing LOADED status}
components :
parameters :
InboundId : {name : inboundId, 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 }}
2026-08-10 11:28:57 +08:00
EvidenceId : {name : evidenceId, in : path, required : true, schema : {type : integer, format : int64, minimum : 1 }}
2026-08-08 22:36:41 +08:00
IdempotencyKey : {name : Idempotency-Key, in : header, required : true, schema : {type : string, maxLength : 128 }}
schemas :
UpsertEvidenceRequest :
type : object
required : [ expectedVersion, evidenceType, fileId]
properties :
expectedVersion : {type : integer, minimum : 0 }
2026-08-10 11:28:57 +08:00
evidenceType : {type : string, enum : [PHOTO_STEP_1, PHOTO_STEP_2, PHOTO_STEP_3, PHOTO_STEP_4, SEAL], description : PHOTO_STEP_1=空仓,PHOTO_STEP_2=半仓,PHOTO_STEP_3=满仓,PHOTO_STEP_4=锁仓,SEAL=带锁码照;同类型可多次追加}
2026-08-08 22:36:41 +08:00
fileId : {type : integer, format : int64, minimum : 1 }
fileName : {type : string, maxLength : 255, deprecated : true, description : Ignored; server uses File metadata}
sealNo : {type : string, maxLength : 64, description : Required when evidenceType is SEAL}
remark : {type : string, maxLength : 1000 }
2026-08-10 11:28:57 +08:00
VoidEvidenceRequest :
type : object
required : [ expectedVersion, reason]
properties :
expectedVersion : {type : integer, minimum : 0 }
reason : {type : string, minLength : 1, maxLength : 500, description : 作废原因,记录操作人和时间}
2026-08-08 22:36:41 +08:00
PickingRequest :
type : object
required : [ expectedVersion, expectedCount, pickedCount]
properties :
expectedVersion : {type : integer, minimum : 0 }
expectedCount : {type : integer, minimum : 1 }
pickedCount : {type : integer, minimum : 0 }
remark : {type : string, maxLength : 1000 }
CompleteLoadingRequest :
type : object
required : [ expectedVersion]
properties :
expectedVersion : {type : integer, minimum : 0 }
remark : {type : string, maxLength : 1000 }