Files
baiyue-firstleg/lastleg-service/src/main/resources/openapi/appointment-work-v1.yaml
T

1497 lines
44 KiB
YAML
Raw Normal View History

openapi: "3.0.3"
info:
title: "预约工作事项"
version: "1.0.0"
description: "工作事项只保存需求、路线、责任、跟进及影响基线。提柜/还空、预约、PDA和Fleet计划与执行事实由原业务提供。独立DDL仍需总控集成。"
security:
-
bearerAuth: []
paths:
/api/platform/v1/last-leg/appointment-work/items/resolve:
get:
operationId: appointmentWorkResolveBatch
summary: 按当前权威批次精确进入送仓事项
description: "要求platform:appointment:list及原来源读取资格。batchKey使用原业务返回的完整稳定键;customerId来自所选客户货源。精确匹配返回detail,未传客户且存在多个客户时detail为空并返回candidates,必须选择后重新解析;不得选首项或回退已替代旧批次。需求关系未同步返回409,未生成返回404。"
parameters:
- name: batchKey
in: query
required: true
schema:
type: string
pattern: '^(FBA_APPOINTMENT|DISPATCH):[1-9][0-9]*$'
- name: customerId
in: query
required: false
schema: {type: string, minLength: 1}
responses:
200:
description: data为客户送仓精确解析结果或可见客户候选
content:
application/json:
schema:
type: object
required: [code, data]
properties:
code: {type: string}
message: {type: string, nullable: true}
data:
$ref: '#/components/schemas/BatchWorkResolution'
400:
description: 批次键无效
403:
description: 缺少平台或原来源读取资格
404:
description: 当前批次未生成活动送仓事项
409:
description: 需求关系尚未同步或存在不唯一的事项关系
/api/platform/v1/last-leg/appointment-work/calendar:
get:
operationId: "appointmentWorkCalendar"
summary: "完整日期区间的工作聚合"
description: "platform:appointment:list并逐事项核验来源读取资格;最大62个当地日期;五个桶互斥;到港参考不计工作量。完整扫描未就绪、scopeVersion变化或任一权威事实失败均拒绝伪造统计。"
parameters:
-
name: "from"
in: "query"
required: true
schema:
type: "string"
format: "date"
-
name: "to"
in: "query"
required: true
schema:
type: "string"
format: "date"
-
name: "flow"
in: "query"
required: false
schema:
"$ref": "#/components/schemas/Flow"
-
name: "types"
in: "query"
required: false
schema:
type: "array"
items:
type: "string"
enum:
- "PICKUP"
- "WAREHOUSE_RECEIPT"
- "DELIVERY"
- "TRANSPORT"
- "EMPTY_RETURN"
responses:
200:
description: "code为字符串200时成功;data为业务结果"
content:
application/json:
schema:
type: "object"
additionalProperties: false
required:
- "code"
- "data"
properties:
code:
type: "string"
message:
type: "string"
nullable: true
data:
"$ref": "#/components/schemas/CalendarResult"
400:
description: "参数、时区或判别式payload不合法"
403:
description: "非平台或缺少关联来源/命令权限"
404:
description: "事项不存在"
409:
description: "版本、来源集合、影响版本或并发冲突;必须刷新"
503:
description: "权威来源/原域适配/目录未就绪;不得显示零值或假成功"
/api/platform/v1/last-leg/appointment-work/summary:
get:
operationId: "appointmentWorkSummary"
summary: "全部活动事项全局统计"
description: "不接收月份/流程/类型条件。集合可重叠;无日期有跟进日仍是未定日期。未知地点提醒按America/Los_Angeles业务默认时区判断并在missingFields说明。"
responses:
200:
description: "code为字符串200时成功;data为业务结果"
content:
application/json:
schema:
type: "object"
additionalProperties: false
required:
- "code"
- "data"
properties:
code:
type: "string"
message:
type: "string"
nullable: true
data:
"$ref": "#/components/schemas/Summary"
400:
description: "参数、时区或判别式payload不合法"
403:
description: "非平台或缺少关联来源/命令权限"
404:
description: "事项不存在"
409:
description: "版本、来源集合、影响版本或并发冲突;必须刷新"
503:
description: "权威来源/原域适配/目录未就绪;不得显示零值或假成功"
/api/platform/v1/last-leg/appointment-work/items:
get:
operationId: "appointmentWorkItems"
summary: "工作明细"
description: "ALL不传date时排除已完成;传date时包含当日已完成。共享车次按稳定车次键仅一项,containers中任一柜均可命中。"
parameters:
-
name: "view"
in: "query"
required: false
schema:
type: "string"
enum:
- "ALL"
- "FOLLOW_TODAY"
- "OVERDUE"
- "UNDATED"
- "REVIEW"
default: "ALL"
-
name: "page"
in: "query"
required: false
schema:
type: "integer"
minimum: 1
default: 1
-
name: "size"
in: "query"
required: false
schema:
type: "integer"
minimum: 1
maximum: 100
default: 20
-
name: "date"
in: "query"
required: false
schema:
type: "string"
format: "date"
-
name: "flow"
in: "query"
required: false
schema:
"$ref": "#/components/schemas/Flow"
-
name: "types"
in: "query"
required: false
schema:
type: "array"
items:
"$ref": "#/components/schemas/Type"
-
name: "containerBookingId"
in: "query"
required: false
schema:
type: "string"
-
name: "bucket"
in: "query"
required: false
schema:
type: "string"
enum:
- "PENDING"
- "CONFIRMED"
- "NO_BOOKING_REQUIRED"
- "REVIEW"
- "COMPLETED"
-
name: "keyword"
in: "query"
required: false
schema:
type: "string"
maxLength: 128
responses:
200:
description: "code为字符串200时成功;data为业务结果"
content:
application/json:
schema:
type: "object"
additionalProperties: false
required:
- "code"
- "data"
properties:
code:
type: "string"
message:
type: "string"
nullable: true
data:
"$ref": "#/components/schemas/Page"
400:
description: "参数、时区或判别式payload不合法"
403:
description: "非平台或缺少关联来源/命令权限"
404:
description: "事项不存在"
409:
description: "版本、来源集合、影响版本或并发冲突;必须刷新"
503:
description: "权威来源/原域适配/目录未就绪;不得显示零值或假成功"
/api/platform/v1/last-leg/appointment-work/items/{workItemKey}:
parameters:
-
name: "workItemKey"
in: "path"
required: true
schema:
type: "string"
get:
operationId: "appointmentWorkDetail"
summary: "事项、业务引用、关联与历史"
responses:
200:
description: "code为字符串200时成功;data为业务结果"
content:
application/json:
schema:
type: "object"
additionalProperties: false
required:
- "code"
- "data"
properties:
code:
type: "string"
message:
type: "string"
nullable: true
data:
"$ref": "#/components/schemas/WorkDetail"
400:
description: "参数、时区或判别式payload不合法"
403:
description: "非平台或缺少关联来源/命令权限"
404:
description: "事项不存在"
409:
description: "版本、来源集合、影响版本或并发冲突;必须刷新"
503:
description: "权威来源/原域适配/目录未就绪;不得显示零值或假成功"
/api/platform/v1/last-leg/appointment-work/items/{workItemKey}/commands:
parameters:
-
name: "workItemKey"
in: "path"
required: true
schema:
type: "string"
post:
operationId: "appointmentWorkCommand"
summary: "执行事项自有数据命令"
description: "SAVE_FOLLOWUP/RESOLVE_REVIEW要求platform:appointment:followup;其他命令要求platform:appointment:manage-work,同时核验list与来源资格。USER本人接手;外部责任方须运营记录明确反馈。只确认责任,不写实际还空。事务幂等键按事项唯一,同操作者同内容重放原响应;未知字段拒绝;不支持标为完成。"
requestBody:
required: true
content:
application/json:
schema:
"$ref": "#/components/schemas/CommandRequest"
responses:
200:
description: "code为字符串200时成功;data为业务结果"
content:
application/json:
schema:
type: "object"
additionalProperties: false
required:
- "code"
- "data"
properties:
code:
type: "string"
message:
type: "string"
nullable: true
data:
"$ref": "#/components/schemas/CommandResult"
400:
description: "参数、时区或判别式payload不合法"
403:
description: "非平台或缺少关联来源/命令权限"
404:
description: "事项不存在"
409:
description: "版本、来源集合、影响版本或并发冲突;必须刷新"
503:
description: "权威来源/原域适配/目录未就绪;不得显示零值或假成功"
/internal/lastleg/appointment-work/synchronize:
post:
operationId: "synchronizeAppointmentWork"
summary: "服务端分页同步完整已开船事项"
description: "仅X-Internal-Service-Token,不经公网Gateway。由后台编排分页调用;GET不写库。afterContainerBookingId为空开始完整扫描,逐页回传nextCursor直到complete。跨页scopeVersion漂移拒绝;首次完整扫描前查询拒绝零值。未出现在新候选页的旧未还空工作保留。"
security:
-
internalToken: []
requestBody:
required: true
content:
application/json:
schema:
"$ref": "#/components/schemas/SyncRequest"
responses:
200:
description: "code为字符串200时成功;data为业务结果"
content:
application/json:
schema:
type: "object"
additionalProperties: false
required:
- "code"
- "data"
properties:
code:
type: "string"
message:
type: "string"
nullable: true
data:
"$ref": "#/components/schemas/SyncResult"
400:
description: "参数、时区或判别式payload不合法"
403:
description: "非平台或缺少关联来源/命令权限"
404:
description: "事项不存在"
409:
description: "版本、来源集合、影响版本或并发冲突;必须刷新"
503:
description: "权威来源/原域适配/目录未就绪;不得显示零值或假成功"
/internal/lastleg/appointment-work/containers/{id}/route:
get:
operationId: readAppointmentWorkContainerRoute
summary: 读取本地已确认路线,不锁工作守卫或回调Firstleg
security: [{internalToken: []}]
parameters:
- {name: id, in: path, required: true, schema: {type: string}}
responses:
'200':
description: ApiResponse包装的本地持久路线
content:
application/json:
schema:
type: object
properties:
code: {type: string}
message: {type: string, nullable: true}
data:
type: object
required: [flow]
properties:
flow: {type: string, enum: [TRANSFER, DIRECT, UNKNOWN]}
'403': {description: 内部身份无效}
'409': {description: 当前有效事项路线冲突}
/api/platform/v1/last-leg/appointment-planning/batches/{batchKey}/dispatch-candidates:
get:
operationId: appointmentWorkBatchDispatchCandidates
summary: 按不可变FBA预约批次读取逐票实物排车候选
description: 客户仓使用原排车单批次键DISPATCH:<id>,逐票实物由原排车事务生成;按工作项batchNo进入原排车单并关联车次,不调用本FBA候选接口。平台主体且同时具有platform:appointment:list、platform:overseas-warehouse:last-mile-order:list、platform:overseas-warehouse:inbound-order:list。候选不足不补造数量;超过500托拒绝截断。写入沿用dispatches/pre-arrange及drafts/pre-arrange的batchAllocations,跨客户分别生成排车单后绑定同一车次。
security: [{bearerAuth: []}]
parameters:
- {name: batchKey, in: path, required: true, schema: {type: string}}
responses:
'200':
description: ApiResponse包装的完整候选及阻断原因
content:
application/json:
schema:
type: object
properties:
code: {type: string}
message: {type: string, nullable: true}
data: {$ref: '#/components/schemas/BatchDispatchCandidates'}
'403': {description: 非平台主体或无来源读取权限}
'409': {description: 批次或实物范围不能完整读取}
'503': {description: 原来源目录不可用}
components:
securitySchemes:
bearerAuth:
type: "http"
scheme: "bearer"
bearerFormat: "JWT"
internalToken:
type: "apiKey"
in: "header"
name: "X-Internal-Service-Token"
schemas:
Flow:
type: "string"
enum:
- "TRANSFER"
- "DIRECT"
- "UNKNOWN"
Type:
type: "string"
enum:
- "ROUTE"
- "PICKUP"
- "WAREHOUSE_RECEIPT"
- "DELIVERY"
- "TRANSPORT"
- "EMPTY_RETURN"
Command:
type: "string"
enum:
- "CONFIRM_ROUTE"
- "SAVE_FOLLOWUP"
- "RESOLVE_REVIEW"
- "SAVE_REQUIREMENT"
- "HANDOFF_RETURN"
- "ACCEPT_RETURN"
ActionCode:
type: "string"
enum:
- "VIEW_DETAIL"
- "SAVE_PLAN"
- "REQUEST_BOOKING"
- "RECORD_CONFIRMATION"
- "CHANGE_BOOKING"
- "CANCEL_BOOKING"
- "VERIFY_CARGO"
- "EDIT_BATCH"
- "ARRANGE_TRANSPORT"
- "RECORD_EXECUTION"
- "CONFIRM_ROUTE"
- "SAVE_FOLLOWUP"
- "RESOLVE_REVIEW"
- "SAVE_REQUIREMENT"
- "HANDOFF_RETURN"
- "ACCEPT_RETURN"
- "VIEW_HISTORY"
Slot:
type: "object"
additionalProperties: false
required:
- "date"
- "startTime"
- "endDate"
- "endTime"
- "timezone"
properties:
date:
type: "string"
format: "date"
startTime:
type: "string"
pattern: "^\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?$"
nullable: true
endDate:
type: "string"
format: "date"
nullable: true
description: "与endTime同时为空或同时填写;不推断次日"
endTime:
type: "string"
pattern: "^\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?$"
nullable: true
timezone:
type: "string"
nullable: true
description: "原业务缺失时区可为空并标SOURCE_TIMEZONE;SAVE_REQUIREMENT写入仍须有效IANA时区"
Actual:
type: "object"
additionalProperties: false
description: "occurredAt与localOccurredAt至少一个非空;未知时区按原始当地日期展示,不推断UTC"
required:
- "occurredAt"
- "localOccurredAt"
- "timezone"
properties:
occurredAt:
type: "string"
format: "date-time"
nullable: true
localOccurredAt:
type: "string"
description: "无偏移的原始当地日期时间"
nullable: true
timezone:
type: "string"
nullable: true
Owner:
type: "object"
additionalProperties: false
required:
- "id"
- "name"
properties:
id:
type: "string"
name:
type: "string"
ContainerReference:
type: "object"
additionalProperties: false
required:
- "containerBookingId"
- "bookingNo"
- "containerNo"
properties:
containerBookingId:
type: "string"
bookingNo:
type: "string"
nullable: true
containerNo:
type: "string"
nullable: true
SourceReference:
type: "object"
additionalProperties: false
required:
- "customerId"
- "sourceKey"
- "destinationKey"
properties:
customerId:
type: "string"
sourceKey:
type: "string"
pattern: "^(ORDER|BOOKING):.+$"
destinationKey:
type: "string"
nullable: true
BusinessReference:
type: "object"
additionalProperties: false
required:
- "kind"
- "key"
- "businessNo"
- "label"
properties:
kind:
type: "string"
key:
type: "string"
businessNo:
type: "string"
nullable: true
label:
type: "string"
Responsibility:
type: "object"
additionalProperties: false
required:
- "kind"
- "id"
- "name"
properties:
kind:
type: "string"
enum:
- "USER"
- "SUPPLIER"
- "EXTERNAL"
id:
type: "string"
nullable: true
name:
type: "string"
minLength: 1
maxLength: 200
WorkTarget:
type: "object"
additionalProperties: false
required:
- "kind"
- "command"
properties:
kind:
type: "string"
enum:
- "WORK_COMMAND"
command:
"$ref": "#/components/schemas/Command"
CargoTarget:
type: "object"
additionalProperties: false
required:
- "kind"
- "source"
properties:
kind:
type: "string"
enum:
- "CARGO_VERIFICATION"
source:
"$ref": "#/components/schemas/SourceReference"
AppointmentTarget:
type: "object"
additionalProperties: false
required:
- "kind"
- "appointmentId"
- "batchKey"
- "sources"
properties:
kind:
type: "string"
enum:
- "FBA_APPOINTMENT"
appointmentId:
type: "string"
nullable: true
batchKey:
type: "string"
nullable: true
sources:
type: "array"
items:
"$ref": "#/components/schemas/SourceReference"
ContainerTarget:
type: "object"
additionalProperties: false
required:
- "kind"
- "containerBookingId"
properties:
kind:
type: "string"
enum:
- "FIRSTLEG_CONTAINER"
containerBookingId:
type: "string"
TripTarget:
type: "object"
description: FLEET_TRIP动作。tripId存在时维护原车次,业务车次号取工作项businessNo。未绑定车次的客户仓批次以DISPATCH:<原排车单不可变ID>放入batchKeys,原排车业务号取工作项batchNo;直接进入该原排车单关联车次,不能解析为FBA预约或再建立排车。FBA批次仍通过实物候选及batchAllocations安排。
additionalProperties: false
required:
- "kind"
- "tripId"
- "batchKeys"
properties:
kind:
type: "string"
enum:
- "FLEET_TRIP"
tripId:
type: "string"
nullable: true
batchKeys:
type: "array"
items:
type: "string"
ReceiptTarget:
type: "object"
additionalProperties: false
required:
- "kind"
- "inboundPlanId"
- "inboundPlanNo"
- "customerId"
- "containerBookingId"
properties:
kind:
type: "string"
enum:
- "WAREHOUSE_RECEIPT"
inboundPlanId:
type: "string"
nullable: true
inboundPlanNo:
type: "string"
nullable: true
customerId:
type: "string"
nullable: true
containerBookingId:
type: "string"
ReadTarget:
type: "object"
description: 原业务只读入口。客户仓派送使用DELIVERY引用(key与businessNo均为派送业务号);DISPATCH引用的key为DISPATCH:<原排车单ID>,businessNo为原排车单号。仅供导航,不代表已经执行写入动作。
additionalProperties: false
required:
- "kind"
- "references"
properties:
kind:
type: "string"
enum:
- "READ_ONLY"
references:
type: "array"
items:
"$ref": "#/components/schemas/BusinessReference"
ActionTarget:
oneOf:
-
"$ref": "#/components/schemas/WorkTarget"
-
"$ref": "#/components/schemas/CargoTarget"
-
"$ref": "#/components/schemas/AppointmentTarget"
-
"$ref": "#/components/schemas/ContainerTarget"
-
"$ref": "#/components/schemas/TripTarget"
-
"$ref": "#/components/schemas/ReceiptTarget"
-
"$ref": "#/components/schemas/ReadTarget"
discriminator:
propertyName: "kind"
mapping:
WORK_COMMAND: "#/components/schemas/WorkTarget"
CARGO_VERIFICATION: "#/components/schemas/CargoTarget"
FBA_APPOINTMENT: "#/components/schemas/AppointmentTarget"
FIRSTLEG_CONTAINER: "#/components/schemas/ContainerTarget"
FLEET_TRIP: "#/components/schemas/TripTarget"
WAREHOUSE_RECEIPT: "#/components/schemas/ReceiptTarget"
READ_ONLY: "#/components/schemas/ReadTarget"
Action:
type: "object"
additionalProperties: false
required:
- "code"
- "label"
- "targetWorkItemKey"
- "target"
properties:
code:
"$ref": "#/components/schemas/ActionCode"
label:
type: "string"
targetWorkItemKey:
type: "string"
nullable: true
target:
"$ref": "#/components/schemas/ActionTarget"
WorkItem:
type: "object"
additionalProperties: false
required:
- "workItemKey"
- "version"
- "type"
- "flow"
- "title"
- "businessNo"
- "containers"
- "requirementKey"
- "batchKey"
- "batchNo"
- "originName"
- "destinationName"
- "planStatus"
- "executionStatus"
- "reviewRequired"
- "target"
- "confirmed"
- "actual"
- "calendarDate"
- "dateBasis"
- "timezone"
- "owner"
- "followupDate"
- "overdueReasons"
- "allowedActions"
- "nextAction"
- "blockReasons"
- "missingFields"
properties:
workItemKey:
type: "string"
version:
type: "integer"
minimum: 0
type:
"$ref": "#/components/schemas/Type"
flow:
"$ref": "#/components/schemas/Flow"
title:
type: "string"
businessNo:
type: "string"
nullable: true
containers:
type: "array"
items:
"$ref": "#/components/schemas/ContainerReference"
requirementKey:
type: "string"
nullable: true
batchKey:
type: "string"
nullable: true
batchNo:
type: "string"
nullable: true
originName:
type: "string"
nullable: true
destinationName:
type: "string"
nullable: true
planStatus:
type: "string"
enum:
- "UNPLANNED"
- "TARGET_SET"
- "AWAITING_REPLY"
- "CONFIRMED"
- "NOT_REQUIRED"
executionStatus:
type: "string"
enum:
- "PENDING"
- "IN_PROGRESS"
- "COMPLETED"
reviewRequired:
type: "boolean"
target:
"$ref": "#/components/schemas/Slot"
nullable: true
confirmed:
"$ref": "#/components/schemas/Slot"
nullable: true
actual:
"$ref": "#/components/schemas/Actual"
nullable: true
calendarDate:
type: "string"
format: "date"
nullable: true
dateBasis:
type: "string"
enum:
- "ACTUAL"
- "CONFIRMED"
- "TARGET"
- "NONE"
timezone:
type: "string"
nullable: true
owner:
"$ref": "#/components/schemas/Owner"
nullable: true
followupDate:
type: "string"
format: "date"
nullable: true
overdueReasons:
type: "array"
items:
type: "string"
allowedActions:
type: "array"
items:
"$ref": "#/components/schemas/Action"
nextAction:
"$ref": "#/components/schemas/Action"
nullable: true
description: "按当前权限和白名单目标引导;已确认送仓预约可指向本批车辆安排或本车复核,不代表授权发车。取消预约沿原批次重新预约,不恢复旧确认。"
blockReasons:
type: "array"
items:
type: "string"
missingFields:
type: "array"
description: "未完成事项分别提示负责人、下次跟进日期和作业日期等缺口;跟进日期不能作为作业日历日期。"
items:
type: "string"
Review:
type: "object"
additionalProperties: false
required:
- "version"
- "reasons"
properties:
version:
type: "integer"
minimum: 0
reasons:
type: "array"
items:
type: "string"
RequirementDetails:
type: "object"
additionalProperties: false
required:
- "bookingRequired"
- "receivingRequirements"
- "reason"
properties:
bookingRequired:
type: "boolean"
receivingRequirements:
type: "string"
reason:
type: "string"
nullable: true
ReturnHandoff:
type: "object"
additionalProperties: false
required:
- "version"
- "from"
- "to"
- "status"
- "reason"
properties:
version:
type: "integer"
minimum: 0
from:
"$ref": "#/components/schemas/Responsibility"
to:
"$ref": "#/components/schemas/Responsibility"
status:
type: "string"
enum:
- "PENDING_ACCEPTANCE"
- "ACCEPTED"
reason:
type: "string"
HistoryEntry:
type: "object"
additionalProperties: false
required:
- "occurredAt"
- "operatorName"
- "action"
- "summary"
properties:
occurredAt:
type: "string"
format: "date-time"
operatorName:
type: "string"
nullable: true
action:
type: "string"
summary:
type: "string"
BatchWorkResolution:
type: object
required: [batchKey, candidates]
properties:
batchKey: {type: string}
customerId: {type: string, nullable: true}
detail:
nullable: true
allOf:
- $ref: '#/components/schemas/WorkDetail'
candidates:
type: array
items:
type: object
required: [customerId, workItemKey]
properties:
customerId: {type: string}
workItemKey: {type: string}
batchNo: {type: string, nullable: true}
WorkDetail:
type: "object"
additionalProperties: false
required:
- "item"
- "relatedItems"
- "references"
- "history"
- "review"
- "requirement"
- "returnHandoff"
properties:
item:
"$ref": "#/components/schemas/WorkItem"
relatedItems:
type: "array"
items:
"$ref": "#/components/schemas/WorkItem"
references:
type: "array"
items:
"$ref": "#/components/schemas/BusinessReference"
history:
type: "array"
items:
"$ref": "#/components/schemas/HistoryEntry"
review:
"$ref": "#/components/schemas/Review"
nullable: true
requirement:
"$ref": "#/components/schemas/RequirementDetails"
nullable: true
returnHandoff:
"$ref": "#/components/schemas/ReturnHandoff"
nullable: true
Summary:
type: "object"
additionalProperties: false
required:
- "all"
- "followToday"
- "overdue"
- "undated"
- "review"
properties:
all:
type: "integer"
minimum: 0
followToday:
type: "integer"
minimum: 0
overdue:
type: "integer"
minimum: 0
undated:
type: "integer"
minimum: 0
review:
type: "integer"
minimum: 0
BucketCounts:
type: "object"
additionalProperties: false
required:
- "pending"
- "confirmed"
- "noBookingRequired"
- "review"
- "completed"
properties:
pending:
type: "integer"
minimum: 0
confirmed:
type: "integer"
minimum: 0
noBookingRequired:
type: "integer"
minimum: 0
review:
type: "integer"
minimum: 0
completed:
type: "integer"
minimum: 0
DayAggregate:
type: "object"
additionalProperties: false
required:
- "date"
- "total"
- "typeCounts"
- "counts"
properties:
date:
type: "string"
format: "date"
total:
type: "integer"
minimum: 0
typeCounts:
type: "object"
additionalProperties:
type: "integer"
minimum: 0
counts:
"$ref": "#/components/schemas/BucketCounts"
CalendarResult:
type: "object"
additionalProperties: false
required:
- "from"
- "to"
- "total"
- "counts"
- "days"
properties:
from:
type: "string"
format: "date"
to:
type: "string"
format: "date"
total:
type: "integer"
minimum: 0
counts:
"$ref": "#/components/schemas/BucketCounts"
days:
type: "array"
items:
"$ref": "#/components/schemas/DayAggregate"
Page:
type: "object"
additionalProperties: false
required:
- "records"
- "page"
- "size"
- "total"
- "pages"
properties:
records:
type: "array"
items:
"$ref": "#/components/schemas/WorkItem"
page:
type: "integer"
minimum: 1
size:
type: "integer"
minimum: 1
maximum: 100
total:
type: "integer"
minimum: 0
pages:
type: "integer"
minimum: 0
CommandResult:
type: "object"
additionalProperties: false
required:
- "item"
- "affectedWorkItemKeys"
properties:
item:
"$ref": "#/components/schemas/WorkItem"
affectedWorkItemKeys:
type: "array"
items:
type: "string"
SyncRequest:
type: "object"
additionalProperties: false
required:
- "size"
properties:
afterContainerBookingId:
type: "string"
nullable: true
maxLength: 128
size:
type: "integer"
minimum: 1
maximum: 100
SyncResult:
type: "object"
additionalProperties: false
required:
- "sources"
- "created"
- "nextCursor"
- "complete"
properties:
sources:
type: "integer"
minimum: 0
created:
type: "integer"
minimum: 0
nextCursor:
type: "string"
nullable: true
complete:
type: "boolean"
CONFIRM_ROUTERequest:
type: "object"
additionalProperties: false
required:
- "command"
- "expectedVersion"
- "idempotencyKey"
- "payload"
properties:
command:
type: "string"
enum:
- "CONFIRM_ROUTE"
expectedVersion:
type: "integer"
minimum: 0
idempotencyKey:
type: "string"
minLength: 1
maxLength: 64
payload:
type: "object"
additionalProperties: false
required:
- "flow"
properties:
flow:
type: "string"
enum:
- "TRANSFER"
- "DIRECT"
reason:
type: "string"
nullable: true
maxLength: 1000
SAVE_FOLLOWUPRequest:
type: "object"
additionalProperties: false
required:
- "command"
- "expectedVersion"
- "idempotencyKey"
- "payload"
properties:
command:
type: "string"
enum:
- "SAVE_FOLLOWUP"
expectedVersion:
type: "integer"
minimum: 0
idempotencyKey:
type: "string"
minLength: 1
maxLength: 64
payload:
type: "object"
additionalProperties: false
required:
- "ownerId"
- "followupDate"
- "note"
properties:
ownerId:
type: "string"
minLength: 1
maxLength: 64
followupDate:
type: "string"
format: "date"
nullable: true
note:
type: "string"
minLength: 1
maxLength: 1000
RESOLVE_REVIEWRequest:
type: "object"
description: "须匹配当前影响版本,并核对本事项及关联安排的最新权威影响;需求关系未同步或出现新影响时拒绝清除。车次货物成员变化仅要求相关客户及车辆核对,未变化客户预约不连带复核;车辆、司机、时间变化影响当前关联预约。复核不恢复取消的确认、不修改原预约和车辆,也不制造新的业务影响。"
additionalProperties: false
required:
- "command"
- "expectedVersion"
- "idempotencyKey"
- "payload"
properties:
command:
type: "string"
enum:
- "RESOLVE_REVIEW"
expectedVersion:
type: "integer"
minimum: 0
idempotencyKey:
type: "string"
minLength: 1
maxLength: 64
payload:
type: "object"
additionalProperties: false
required:
- "reviewVersion"
- "note"
properties:
reviewVersion:
type: "integer"
minimum: 0
note:
type: "string"
minLength: 1
maxLength: 1000
SAVE_REQUIREMENTRequest:
type: "object"
additionalProperties: false
required:
- "command"
- "expectedVersion"
- "idempotencyKey"
- "payload"
properties:
command:
type: "string"
enum:
- "SAVE_REQUIREMENT"
expectedVersion:
type: "integer"
minimum: 0
idempotencyKey:
type: "string"
minLength: 1
maxLength: 64
payload:
type: "object"
additionalProperties: false
required:
- "target"
- "bookingRequired"
- "receivingRequirements"
- "reason"
properties:
target:
"$ref": "#/components/schemas/Slot"
nullable: true
bookingRequired:
type: "boolean"
receivingRequirements:
type: "string"
nullable: true
maxLength: 1000
reason:
type: "string"
minLength: 1
maxLength: 1000
HANDOFF_RETURNRequest:
type: "object"
additionalProperties: false
required:
- "command"
- "expectedVersion"
- "idempotencyKey"
- "payload"
properties:
command:
type: "string"
enum:
- "HANDOFF_RETURN"
expectedVersion:
type: "integer"
minimum: 0
idempotencyKey:
type: "string"
minLength: 1
maxLength: 64
payload:
type: "object"
additionalProperties: false
required:
- "recipient"
- "reason"
properties:
recipient:
"$ref": "#/components/schemas/Responsibility"
reason:
type: "string"
minLength: 1
maxLength: 1000
ACCEPT_RETURNRequest:
type: "object"
additionalProperties: false
required:
- "command"
- "expectedVersion"
- "idempotencyKey"
- "payload"
properties:
command:
type: "string"
enum:
- "ACCEPT_RETURN"
expectedVersion:
type: "integer"
minimum: 0
idempotencyKey:
type: "string"
minLength: 1
maxLength: 64
payload:
type: "object"
additionalProperties: false
required:
- "handoffVersion"
- "note"
properties:
handoffVersion:
type: "integer"
minimum: 0
note:
type: "string"
nullable: true
maxLength: 1000
CommandRequest:
description: SAVE_REQUIREMENT新增目标须为分钟精度且有IANA时区;原业务Slot允许保留秒、纳秒及未知时区。
oneOf:
-
"$ref": "#/components/schemas/CONFIRM_ROUTERequest"
-
"$ref": "#/components/schemas/SAVE_FOLLOWUPRequest"
-
"$ref": "#/components/schemas/RESOLVE_REVIEWRequest"
-
"$ref": "#/components/schemas/SAVE_REQUIREMENTRequest"
-
"$ref": "#/components/schemas/HANDOFF_RETURNRequest"
-
"$ref": "#/components/schemas/ACCEPT_RETURNRequest"
discriminator:
propertyName: "command"
mapping:
CONFIRM_ROUTE: "#/components/schemas/CONFIRM_ROUTERequest"
SAVE_FOLLOWUP: "#/components/schemas/SAVE_FOLLOWUPRequest"
RESOLVE_REVIEW: "#/components/schemas/RESOLVE_REVIEWRequest"
SAVE_REQUIREMENT: "#/components/schemas/SAVE_REQUIREMENTRequest"
HANDOFF_RETURN: "#/components/schemas/HANDOFF_RETURNRequest"
ACCEPT_RETURN: "#/components/schemas/ACCEPT_RETURNRequest"
DispatchBatchAllocation:
type: object
additionalProperties: false
required: [planPalletId, batchKey, customerId, sourceKey, destinationKey, packageCount]
properties:
planPalletId: {type: integer, format: int64}
batchKey: {type: string, pattern: '^FBA_APPOINTMENT:[1-9][0-9]*$'}
customerId: {type: string}
sourceKey: {type: string}
destinationKey: {type: string}
packageCount: {type: integer, minimum: 1}
BatchDispatchCandidates:
type: object
required: [batchKey, version, candidates, blockReasons]
properties:
batchKey: {type: string}
version: {type: integer}
blockReasons: {type: array, items: {type: string}}
candidates:
type: array
items:
type: object
required: [planPalletId, palletNo, planId, planNo, customerId, sourceStage, packageCount, allocations, blockReasons]
properties:
planPalletId: {type: integer, format: int64}
palletNo: {type: string}
planId: {type: integer, format: int64}
planNo: {type: string}
customerId: {type: string}
sourceStage: {type: string, enum: [PLAN, RECEIVED]}
packageCount: {type: integer, nullable: true}
allocations: {type: array, items: {$ref: '#/components/schemas/DispatchBatchAllocation'}}
blockReasons: {type: array, items: {type: string}}