优化
This commit is contained in:
@@ -1103,8 +1103,8 @@ CREATE TABLE ll_fleet_trip (
|
||||
max_pallet_spaces INT NULL COMMENT '分配时托位容量快照',
|
||||
max_load_kg DECIMAL(12,3) NULL COMMENT '分配时载重千克',
|
||||
max_volume_cbm DECIMAL(12,3) NULL COMMENT '分配时可用容积立方米',
|
||||
planned_departure_at DATETIME(3) NOT NULL COMMENT '计划发车UTC',
|
||||
expected_driver_end_at DATETIME(3) NOT NULL COMMENT '司机预计任务结束UTC,含承担的返程转场',
|
||||
planned_departure_at DATETIME(3) NULL COMMENT '计划发车UTC,空单草稿可未填写,提交审核前核齐',
|
||||
expected_driver_end_at DATETIME(3) NULL COMMENT '司机预计任务结束UTC,含返程转场,草稿可未填写',
|
||||
departed_at DATETIME(3) NULL COMMENT '实际发车UTC',
|
||||
completed_at DATETIME(3) NULL COMMENT '实际运输完成UTC',
|
||||
stops_json JSON NOT NULL COMMENT '按顺序保存的路线站点',
|
||||
@@ -1276,20 +1276,18 @@ CREATE TABLE ll_fleet_resource_assignment (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆及司机当前车次占用,释放后删除锁行,历史保留在车次';
|
||||
|
||||
CREATE TABLE ll_fleet_trip_dispatch (
|
||||
dispatch_id BIGINT NOT NULL COMMENT '客户排车单内部引用,唯一有效车次关联',
|
||||
dispatch_no VARCHAR(64) NOT NULL COMMENT '客户排车业务单号',
|
||||
customer_id VARCHAR(128) NOT NULL COMMENT '排车单自身客户归属',
|
||||
trip_id BIGINT NOT NULL COMMENT '共享运输车次内部引用',
|
||||
trip_no VARCHAR(32) NOT NULL COMMENT '共享运输车次业务编号',
|
||||
dispatch_id BIGINT NOT NULL COMMENT '整车排车单内部引用,一车一个有效资源关联',
|
||||
dispatch_no VARCHAR(64) NOT NULL COMMENT '整车排车业务单号',
|
||||
trip_id BIGINT NOT NULL COMMENT '本趟运输资源记录内部引用',
|
||||
trip_no VARCHAR(32) NOT NULL COMMENT '本趟运输资源业务编号',
|
||||
package_count INT NOT NULL COMMENT '关联时待发运箱数快照',
|
||||
bound_by VARCHAR(64) NOT NULL COMMENT '关联操作人',
|
||||
bound_at DATETIME(3) NOT NULL COMMENT '关联UTC时间',
|
||||
review_json LONGTEXT NULL COMMENT '客户排车调度审核快照,空值为待审核',
|
||||
PRIMARY KEY (dispatch_id),
|
||||
UNIQUE KEY uk_fleet_trip_dispatch_no (dispatch_no),
|
||||
KEY idx_fleet_trip_dispatch_trip (trip_id,dispatch_id),
|
||||
UNIQUE KEY uk_fleet_trip_dispatch_trip (trip_id),
|
||||
CONSTRAINT fk_fleet_trip_dispatch_trip FOREIGN KEY (trip_id) REFERENCES ll_fleet_trip(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车次与各客户排车单的有效关联,解除前快照保留在车次历史';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='整车排车与本趟资源记录一对一关联,历史独立保留';
|
||||
|
||||
CREATE TABLE ll_fleet_trip_history (
|
||||
id BIGINT NOT NULL COMMENT '内部主键',
|
||||
@@ -1892,38 +1890,68 @@ CREATE TABLE IF NOT EXISTS ll_inbound_stock_receipt (
|
||||
) ENGINE=InnoDB COMMENT='入仓PDA库存实收快照';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_order (
|
||||
id BIGINT NOT NULL COMMENT '主键ID',
|
||||
customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID',
|
||||
dispatch_no VARCHAR(64) NOT NULL COMMENT '派车单号',
|
||||
overseas_warehouse_id VARCHAR(128) NULL COMMENT '海外仓ID',
|
||||
overseas_warehouse_name VARCHAR(255) NULL COMMENT '海外仓名称快照',
|
||||
vehicle_plate VARCHAR(64) NULL COMMENT '车牌号',
|
||||
driver_name VARCHAR(128) NULL COMMENT '司机姓名',
|
||||
driver_phone VARCHAR(64) NULL COMMENT '司机电话',
|
||||
carrier_name VARCHAR(255) NULL COMMENT '承运商名称',
|
||||
route VARCHAR(255) NULL COMMENT '运输路线',
|
||||
depart_at DATETIME(3) NULL COMMENT '发车时间',
|
||||
fba_appointment_no VARCHAR(64) NULL COMMENT 'FBA预约号',
|
||||
fba_appointment_status VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT 'FBA预约状态',
|
||||
vehicle_appointment_status VARCHAR(32) NOT NULL DEFAULT 'PENDING' COMMENT '车辆预约状态',
|
||||
id BIGINT NOT NULL COMMENT '整车排车主单内部主键',
|
||||
dispatch_no VARCHAR(64) NOT NULL COMMENT '真实排车业务号',
|
||||
trip_id BIGINT NOT NULL COMMENT '本趟唯一车辆资源记录ID',
|
||||
overseas_warehouse_id VARCHAR(128) NOT NULL COMMENT '真实起运海外仓ID',
|
||||
overseas_warehouse_code VARCHAR(128) NULL COMMENT '起运海外仓编码快照',
|
||||
overseas_warehouse_name VARCHAR(255) NULL COMMENT '起运海外仓名称快照',
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'ACTIVE' COMMENT '主单生命周期:ACTIVE有效、CANCELLED已取消',
|
||||
stage VARCHAR(32) NOT NULL DEFAULT 'BEFORE_LOADING' COMMENT '作业阶段:BEFORE_LOADING装车前、LOADING装车中、AFTER_LOADING装车后、DELIVERING派送中、DELIVERED派送完成',
|
||||
record_version BIGINT NOT NULL DEFAULT 0 COMMENT '整车公共并发版本,首版为零',
|
||||
cargo_revision BIGINT NOT NULL DEFAULT 0 COMMENT '本趟货物修订版本',
|
||||
cargo_hash CHAR(64) NOT NULL COMMENT '当前整车真实货物及来源摘要',
|
||||
review_state VARCHAR(32) NOT NULL DEFAULT 'DRAFT' COMMENT '审核子流程当前状态',
|
||||
review_round BIGINT NOT NULL DEFAULT 0 COMMENT '当前审核轮次',
|
||||
review_basis_hash CHAR(64) NULL COMMENT '本审核轮次核对的货物和资源依据摘要',
|
||||
dispatch_review_json JSON NULL COMMENT '当前调度审核事实快照',
|
||||
loading_review_json JSON NULL COMMENT '当前理货审核事实快照',
|
||||
resources_json JSON NULL COMMENT '本趟主档或临时车辆司机的真实资源快照',
|
||||
vehicle_plate VARCHAR(64) NULL COMMENT '本趟车辆真实车牌快照',
|
||||
route VARCHAR(2000) NULL COMMENT '真实运输路线展示快照',
|
||||
planned_departure_at DATETIME(3) NULL COMMENT '计划发车时间,草稿未知时为空',
|
||||
estimated_arrival_at DATETIME(3) NULL COMMENT '预计到达时间',
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'PENDING_DEPARTURE' COMMENT '业务状态',
|
||||
item_count INT NOT NULL DEFAULT 0 COMMENT '明细数量',
|
||||
pallet_count INT NOT NULL DEFAULT 0 COMMENT '托盘数',
|
||||
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数',
|
||||
picked_package_count INT NOT NULL DEFAULT 0 COMMENT 'PDA累计已拣箱数',
|
||||
shipped_package_count INT NOT NULL DEFAULT 0 COMMENT '累计已出库箱数',
|
||||
partial_completion_reason VARCHAR(1000) NULL COMMENT '部分完成原因',
|
||||
created_by VARCHAR(128) NULL COMMENT '创建人ID',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||||
loading_completed_at DATETIME(3) NULL COMMENT '实际确认装车完成时间',
|
||||
loading_completion_hash CHAR(64) NULL COMMENT '实际装车完成事实摘要',
|
||||
loading_confirmation_json JSON NULL COMMENT '装车确认时逐实托真实实载完整快照',
|
||||
arrangement_key VARCHAR(128) NULL COMMENT '本车唯一派送安排事实标识',
|
||||
arrangement_business_hash CHAR(64) NULL COMMENT '本车派送安排业务内容摘要',
|
||||
departed_at DATETIME(3) NULL COMMENT '本趟实际发车时间',
|
||||
delivery_completed_at DATETIME(3) NULL COMMENT '全部派送正常签收后的整车完成时间',
|
||||
item_count INT NOT NULL DEFAULT 0 COMMENT '当前排车作业明细数',
|
||||
pallet_count INT NOT NULL DEFAULT 0 COMMENT '真实实物托盘去重数',
|
||||
package_count INT NOT NULL DEFAULT 0 COMMENT '本车计划箱数',
|
||||
picked_package_count INT NOT NULL DEFAULT 0 COMMENT 'PDA真实累计已拣箱数',
|
||||
shipped_package_count INT NOT NULL DEFAULT 0 COMMENT '本车实际发运箱数',
|
||||
remark VARCHAR(2000) NULL COMMENT '排车业务备注',
|
||||
created_by VARCHAR(128) NULL COMMENT '可信建单主体ID',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '主单创建时间',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '主单最后更新时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_dispatch_order_no (dispatch_no),
|
||||
KEY idx_ll_dispatch_order_list (customer_id,status,depart_at),
|
||||
KEY idx_ll_dispatch_order_vehicle (customer_id,vehicle_plate)
|
||||
) ENGINE=InnoDB COMMENT='尾程派车单';
|
||||
UNIQUE KEY uk_dispatch_trip (trip_id),
|
||||
KEY idx_ll_dispatch_order_list (overseas_warehouse_id,status,stage,created_at,id),
|
||||
KEY idx_ll_dispatch_order_vehicle (vehicle_plate,status,created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='平台整车排车作业主单,客户归属在真实明细';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_history (
|
||||
id BIGINT NOT NULL COMMENT '排车历史内部主键',
|
||||
dispatch_id BIGINT NOT NULL COMMENT '本次历史所属整车主单ID',
|
||||
record_version BIGINT NOT NULL COMMENT '操作完成后的整车公共版本',
|
||||
action VARCHAR(40) NOT NULL COMMENT '本次真实业务动作',
|
||||
operator_id VARCHAR(128) NOT NULL COMMENT '可信操作主体ID',
|
||||
reason VARCHAR(2000) NULL COMMENT '审核驳回或变更原因',
|
||||
snapshot_json JSON NOT NULL COMMENT '动作完成当时的完整主单事实快照',
|
||||
occurred_at DATETIME(3) NOT NULL COMMENT '真实操作发生时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_dispatch_history_version (dispatch_id,record_version,id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车版本与审核轮次的追加历史';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_item (
|
||||
customer_name VARCHAR(255) NULL COMMENT '本条真实客户名称快照',
|
||||
source_key VARCHAR(255) NOT NULL COMMENT '本条货物稳定权威来源键',
|
||||
source_version CHAR(64) NOT NULL COMMENT '选货时核对的真实来源版本摘要',
|
||||
source_snapshot_json JSON NOT NULL COMMENT '本条货物不可变来源及关联事实快照',
|
||||
id BIGINT NOT NULL COMMENT '主键ID',
|
||||
dispatch_order_id BIGINT NOT NULL COMMENT '派车单ID',
|
||||
customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID',
|
||||
@@ -1931,7 +1959,7 @@ CREATE TABLE IF NOT EXISTS ll_dispatch_item (
|
||||
plan_pallet_id BIGINT NULL COMMENT '计划托盘ID',
|
||||
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘ID',
|
||||
order_id BIGINT NULL COMMENT '订单ID',
|
||||
order_no VARCHAR(64) NULL COMMENT '订单号',
|
||||
order_no VARCHAR(128) NULL COMMENT '本条真实来源订单业务号快照',
|
||||
order_refs VARCHAR(2000) NULL COMMENT '关联订单信息',
|
||||
inbound_code VARCHAR(128) NULL COMMENT '入仓单号快照',
|
||||
pallet_no VARCHAR(128) NOT NULL COMMENT '托盘号',
|
||||
@@ -1975,6 +2003,7 @@ SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE tab
|
||||
customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID',
|
||||
source_pallet_key VARCHAR(160) NOT NULL COMMENT '来源托盘业务键',
|
||||
active_key VARCHAR(160) NULL COMMENT '生效中的资源排他键',
|
||||
active_warehouse_pallet_id BIGINT NULL COMMENT '活动占用的真实仓库托盘,释放后为空,跨客户及来源别名唯一',
|
||||
plan_id BIGINT NULL COMMENT '入仓计划ID',
|
||||
plan_pallet_id BIGINT NULL COMMENT '计划托盘ID',
|
||||
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘ID',
|
||||
@@ -1992,15 +2021,19 @@ SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE tab
|
||||
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_dispatch_active_pallet (customer_id,active_key),
|
||||
UNIQUE KEY uk_ll_dispatch_active_warehouse_pallet (active_warehouse_pallet_id),
|
||||
KEY idx_ll_dispatch_pallet_lock_order (customer_id,dispatch_order_id,status),
|
||||
KEY idx_ll_dispatch_pallet_lock_source (customer_id,source_pallet_key,status)
|
||||
) ENGINE=InnoDB COMMENT='派车托盘排他锁';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_draft (
|
||||
id BIGINT NOT NULL COMMENT '主键ID', draft_token VARCHAR(64) NOT NULL COMMENT '智能排车草稿随机标识',
|
||||
customer_id VARCHAR(128) NULL COMMENT '客户租户ID', operator_id VARCHAR(128) NULL COMMENT '草稿操作人ID',
|
||||
plan_ids_json VARCHAR(4000) NULL COMMENT '所选入仓计划ID列表JSON', containers_json LONGTEXT NULL COMMENT '草稿装车布局JSON快照',
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '草稿状态', expires_at DATETIME(3) NULL COMMENT '草稿失效时间',
|
||||
operator_id VARCHAR(128) NOT NULL COMMENT '草稿拥有者身份,仅本人可维护及恢复命令',
|
||||
warehouse_id BIGINT NOT NULL COMMENT '本草稿唯一起运公共仓库引用',
|
||||
record_version BIGINT NOT NULL DEFAULT 0 COMMENT '草稿并发版本,显式零版本合法',
|
||||
sources_json LONGTEXT NOT NULL COMMENT '服务端核验的真实来源及客户版本快照数组',
|
||||
plan_ids_json LONGTEXT NULL COMMENT '所选入仓计划ID列表JSON,容纳最多五百个完整长整型引用', containers_json LONGTEXT NULL COMMENT '草稿装车布局JSON快照',
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE' COMMENT '草稿状态:ACTIVE有效、RELEASED释放、CONVERTED已整批转换', expires_at DATETIME(3) NULL COMMENT '草稿失效时间',
|
||||
released_at DATETIME(3) NULL COMMENT '草稿释放时间', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||||
PRIMARY KEY(id), UNIQUE KEY uk_ll_dispatch_draft_token(draft_token), KEY idx_ll_dispatch_draft_operator(operator_id,status)
|
||||
@@ -2009,10 +2042,25 @@ SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE tab
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_draft_container (
|
||||
id BIGINT NOT NULL COMMENT '主键ID', draft_id BIGINT NOT NULL COMMENT '智能排车草稿ID',
|
||||
draft_token VARCHAR(64) NOT NULL COMMENT '智能排车草稿随机标识', sequence_no INT NOT NULL COMMENT '草稿车厢顺序号',
|
||||
source_keys_json LONGTEXT NOT NULL COMMENT '本装车容器已取得本草稿占用的来源键数组',
|
||||
capacity INT NOT NULL COMMENT '草稿车厢托盘容量', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间', PRIMARY KEY(id),
|
||||
UNIQUE KEY uk_ll_dispatch_draft_container_sequence(draft_id,sequence_no),
|
||||
KEY idx_ll_dispatch_draft_container_token(draft_token)
|
||||
) ENGINE=InnoDB COMMENT='智能排车草稿装车托盘';
|
||||
) ENGINE=InnoDB COMMENT='智能排车草稿装车容器,每个非空容器转换一张整车单';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_draft_command (
|
||||
id BIGINT NOT NULL COMMENT '草稿命令内部主键',
|
||||
idempotency_key VARCHAR(128) NOT NULL COMMENT '草稿操作全局唯一幂等键',
|
||||
operator_id VARCHAR(64) NOT NULL COMMENT '原命令操作主体,恢复必须为本人',
|
||||
action VARCHAR(32) NOT NULL COMMENT '草稿创建、维护、选货、释放或转换动作',
|
||||
target_token VARCHAR(128) NOT NULL COMMENT '命令目标草稿标识或创建范围标识',
|
||||
request_hash CHAR(64) NOT NULL COMMENT '原动作、主体、版本及完整载荷摘要',
|
||||
result_json LONGTEXT NULL COMMENT '本事务完成后保存的不可变原结果,不提交空结果',
|
||||
created_at DATETIME(3) NOT NULL COMMENT '命令创建UTC时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_dispatch_draft_command_key (idempotency_key)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='智能排车草稿持久命令及原结果';
|
||||
|
||||
SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='ll_dispatch_pallet_lock' AND column_name='draft_container_id'), 'SELECT 1', 'ALTER TABLE ll_dispatch_pallet_lock ADD COLUMN draft_container_id BIGINT NULL COMMENT ''智能排车草稿装车托盘ID'' AFTER dispatch_order_id'));
|
||||
PREPARE dispatch_draft_container_column_stmt FROM @ddl; EXECUTE dispatch_draft_container_column_stmt; DEALLOCATE PREPARE dispatch_draft_container_column_stmt;
|
||||
@@ -2030,15 +2078,15 @@ SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE tab
|
||||
PREPARE dispatch_schema_stmt FROM @ddl; EXECUTE dispatch_schema_stmt; DEALLOCATE PREPARE dispatch_schema_stmt;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_task (
|
||||
id BIGINT NOT NULL COMMENT '主键ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID', dispatch_order_id BIGINT NOT NULL COMMENT '派车单ID',
|
||||
id BIGINT NOT NULL COMMENT '主键ID', dispatch_order_id BIGINT NOT NULL COMMENT '唯一整车排车单引用,客户归属保留在扫码明细',
|
||||
task_no VARCHAR(64) NOT NULL COMMENT 'PDA任务号', status VARCHAR(32) NOT NULL COMMENT '业务状态', operator_id VARCHAR(128) NULL COMMENT '操作人ID',
|
||||
warehouse_id VARCHAR(128) NOT NULL COMMENT 'Token绑定的海外仓库ID',
|
||||
operator_name VARCHAR(128) NULL COMMENT '操作人姓名', pushed_at DATETIME(3) NOT NULL COMMENT '任务下发时间', completed_at DATETIME(3) NULL COMMENT '完成时间',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||||
PRIMARY KEY (id), UNIQUE KEY uk_ll_dispatch_pda_task_dispatch (customer_id,dispatch_order_id),
|
||||
PRIMARY KEY (id), UNIQUE KEY uk_ll_dispatch_pda_task_dispatch (dispatch_order_id),
|
||||
UNIQUE KEY uk_ll_dispatch_pda_task_no (task_no)
|
||||
) ENGINE=InnoDB COMMENT='派车PDA拣货任务';
|
||||
) ENGINE=InnoDB COMMENT='整车PDA拣货任务,一张排车单仅一条任务';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_pick (
|
||||
id BIGINT NOT NULL COMMENT '主键ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID', task_id BIGINT NOT NULL COMMENT 'PDA任务ID',
|
||||
@@ -2116,13 +2164,77 @@ CREATE TABLE IF NOT EXISTS ll_outbound_order (
|
||||
KEY idx_ll_outbound_list (customer_id,status,created_at)
|
||||
) ENGINE=InnoDB COMMENT='尾程出库单';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_command (
|
||||
id BIGINT NOT NULL COMMENT '持久命令内部主键',
|
||||
dispatch_id BIGINT NOT NULL COMMENT '命令所属整车排车主单ID',
|
||||
dispatch_no VARCHAR(64) NOT NULL COMMENT '命令所属真实排车业务号',
|
||||
action VARCHAR(40) NOT NULL COMMENT '本次整车作业动作',
|
||||
operator_id VARCHAR(128) NOT NULL COMMENT '原始可信操作主体ID',
|
||||
idempotency_key VARCHAR(255) NOT NULL COMMENT '跨操作主体全局唯一的原始请求键',
|
||||
record_version BIGINT NOT NULL COMMENT '原请求明确提交的排车版本,零为合法首版',
|
||||
command_hash CHAR(64) NOT NULL COMMENT '绑定原主体动作业务号版本和完整载荷的严格摘要',
|
||||
result_json LONGTEXT NOT NULL COMMENT '按动作类型恢复的不可变成功结果JSON',
|
||||
created_at DATETIME(3) NOT NULL COMMENT '成功命令记录时间,使用UTC',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_dispatch_command_key (idempotency_key),
|
||||
KEY idx_dispatch_command_history (dispatch_id,created_at,id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车公共持久命令账本';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_delivery_arrangement (
|
||||
id BIGINT NOT NULL COMMENT '安排事实内部主键',
|
||||
dispatch_order_id BIGINT NOT NULL COMMENT '唯一整车排车主单ID',
|
||||
dispatch_no VARCHAR(128) NOT NULL COMMENT '真实排车业务号',
|
||||
arrangement_key VARCHAR(128) NOT NULL COMMENT '本次唯一安排业务事实标识',
|
||||
business_hash CHAR(64) NOT NULL COMMENT '排除操作者及纯并发版本的安排业务摘要',
|
||||
cargo_hash CHAR(64) NOT NULL COMMENT '本车实际拣货来源摘要',
|
||||
loading_completion_hash CHAR(64) NOT NULL COMMENT '装车完成事实摘要',
|
||||
original_command_key VARCHAR(255) NOT NULL COMMENT '首次安排的全局请求键',
|
||||
original_operator_id VARCHAR(128) NOT NULL COMMENT '首次安排操作主体',
|
||||
result_json JSON NOT NULL COMMENT '全部客户出库及客户目的地派送不可变结果',
|
||||
cargo_json JSON NOT NULL COMMENT '逐客户逐拣货归属的不可变真实来源',
|
||||
created_at DATETIME(3) NOT NULL COMMENT '本次安排实际创建时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_dispatch_arrangement_dispatch (dispatch_order_id),
|
||||
UNIQUE KEY uk_dispatch_arrangement_key (arrangement_key),
|
||||
UNIQUE KEY uk_dispatch_arrangement_command (original_command_key)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='整车排车唯一派送安排事实';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_delivery_facts_changed (
|
||||
id BIGINT NOT NULL COMMENT '持久信号内部主键',
|
||||
customer_id VARCHAR(128) NOT NULL COMMENT '真实签收货物客户ID',
|
||||
dispatch_id BIGINT NOT NULL COMMENT '整车排车主单ID',
|
||||
dispatch_no VARCHAR(128) NOT NULL COMMENT '真实排车业务号',
|
||||
delivery_id BIGINT NOT NULL COMMENT '本客户派送单ID',
|
||||
delivery_no VARCHAR(128) NOT NULL COMMENT '真实派送业务号',
|
||||
delivery_version BIGINT NOT NULL COMMENT '触发信号的真实派送版本',
|
||||
facts_hash CHAR(64) NOT NULL COMMENT '该版本真实签收事实摘要',
|
||||
occurred_at DATETIME(3) NOT NULL COMMENT '签收事实实际发生时间',
|
||||
state VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '待核对PENDING或已核对PROCESSED',
|
||||
attempt_count INT NOT NULL DEFAULT 0 COMMENT '已记录的汇总失败次数',
|
||||
next_attempt_at DATETIME(3) NOT NULL COMMENT '下次可重试时间',
|
||||
last_error_code VARCHAR(64) NULL COMMENT '最近失败诊断码不保存敏感异常正文',
|
||||
processed_at DATETIME(3) NULL COMMENT '与主阶段汇总同事务确认时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_delivery_fact_version (customer_id,delivery_id,delivery_version),
|
||||
KEY idx_delivery_fact_due (state,next_attempt_at,id),
|
||||
KEY idx_delivery_fact_dispatch (dispatch_id,state,id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='正常签收事实变化的本地持久待汇总信号';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_outbound_pallet_item (
|
||||
dispatch_item_id BIGINT NULL COMMENT '本次整车排车作业明细ID',
|
||||
source_attribution_id BIGINT NULL COMMENT '不可变PDA真实拣货归属ID',
|
||||
source_order_id BIGINT NULL COMMENT '本行真实来源尾程订单ID',
|
||||
source_inventory_position_id BIGINT NULL COMMENT '本行实际拣货库存仓位ID',
|
||||
source_return_receipt_id BIGINT NULL COMMENT '本行实际退回再派实收记录ID',
|
||||
source_return_carton_id BIGINT NULL COMMENT '本行实际退货换标来源箱ID',
|
||||
carton_marks VARCHAR(4000) NULL COMMENT '本行真实拣货箱唛快照',
|
||||
id BIGINT NOT NULL COMMENT '主键ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID', outbound_order_id BIGINT NOT NULL COMMENT '出库单ID',
|
||||
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘ID', pallet_no VARCHAR(128) NULL COMMENT '托盘号',
|
||||
destination_warehouse_id VARCHAR(128) NULL COMMENT '目的仓ID', destination_warehouse_code VARCHAR(128) NULL COMMENT '目的仓编码快照', destination_warehouse_name VARCHAR(255) NULL COMMENT '目的仓名称快照',
|
||||
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数', gross_weight_kg DECIMAL(18,3) NULL COMMENT '毛重(千克),来源未确认时为空', volume_weight_kg DECIMAL(18,3) NOT NULL DEFAULT 0 COMMENT '材积重(千克)', volume_cbm DECIMAL(18,4) NULL COMMENT '体积(立方米),来源未确认时为空', picked_package_count INT NOT NULL DEFAULT 0 COMMENT '已拣箱数', status VARCHAR(32) NOT NULL DEFAULT 'WAIT_PICK' COMMENT '拣货状态', sku_code VARCHAR(128) NULL COMMENT '一件代发SKU', return_sku_quantity BIGINT NULL COMMENT '退货单SKU本来源计划出库件数快照,NULL为历史整箱出库', order_refs VARCHAR(2000) NULL COMMENT '关联订单信息', inbound_code VARCHAR(128) NULL COMMENT '入仓单号快照',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间', PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_outbound_pallet (customer_id,outbound_order_id,warehouse_pallet_id,inbound_code,sku_code),
|
||||
UNIQUE KEY uk_outbound_source_attribution (customer_id,source_attribution_id),
|
||||
KEY idx_ll_outbound_pallet_list (customer_id,outbound_order_id), KEY idx_ll_outbound_pallet_destination (customer_id,destination_warehouse_code)
|
||||
) ENGINE=InnoDB COMMENT='出库托盘明细';
|
||||
|
||||
|
||||
@@ -5,28 +5,6 @@ info:
|
||||
security:
|
||||
- bearerAuth: []
|
||||
paths:
|
||||
/api/platform/v1/last-leg/fleet/trips/prepare:
|
||||
post:
|
||||
summary: 原子新建或加入车次并关联所选排车单
|
||||
description: '权限:platform:fleet:trip:edit;新建另需platform:fleet:trip:create和platform:fleet:trip:assign。新建、资源分配和全部关联在同一事务,失败回滚;幂等键同载荷重放原结果,异载荷拒绝。同仓、未执行、未绑定其他车次;不确认容量、不审批、不发车。'
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema: {$ref: '#/components/schemas/Prepare'}
|
||||
responses:
|
||||
'200': {description: '统一ApiResponse,data为FleetTripModels.Detail;code=200才成功'}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/dispatch-candidates:
|
||||
parameters: [{$ref: './fleet-trips-v1.yaml#/components/parameters/TripNo'}]
|
||||
get:
|
||||
summary: 本仓未关联且未开始执行的排车候选
|
||||
description: '权限:platform:fleet:trip:list。数据库筛选后分页,绑定时重新锁定校验。候选不代表预约、装载或审核已完成。'
|
||||
parameters:
|
||||
- {name: keyword, in: query, schema: {type: string}}
|
||||
- {name: page, in: query, schema: {type: integer, minimum: 1, default: 1}}
|
||||
- {name: size, in: query, schema: {type: integer, minimum: 1, maximum: 100, default: 20}}
|
||||
responses:
|
||||
'200': {description: '统一分页data:records含dispatchNo、customerId、warehouseId、packageCount、route及total/page/size/pages;内部身份不作为用户业务编号'}
|
||||
/api/platform/v1/last-leg/fleet/capacity-offers/inquiries/{bookingNo}/save-and-confirm:
|
||||
parameters: [{$ref: './fleet-trips-v1.yaml#/components/parameters/BookingNo'}]
|
||||
post:
|
||||
@@ -74,7 +52,7 @@ paths:
|
||||
parameters: [{$ref: './fleet-trips-v1.yaml#/components/parameters/BookingNo'}]
|
||||
post:
|
||||
summary: 实收后复用或生成排车并原子排入本车
|
||||
description: '权限:platform:fleet:capacity-offer:manage、platform:fleet:trip:booking-edit、platform:fleet:trip:edit和platform:overseas-warehouse:inbound-order:smart-dispatch。锁原车次和本票来货,先校验实收快照、车辆、有效容量;来源有多张排车或不完整时拒绝,不另建。无排车时复用真实预排命令;任何校验或绑定失败整体回滚。同键重放不重复建单。成功将预留替换为BOUND,旧计划失效待核对,仍需审核和现场作业。'
|
||||
description: '权限:platform:fleet:capacity-offer:manage、platform:fleet:trip:booking-edit、platform:fleet:trip:edit和platform:overseas-warehouse:dispatch:create。核对本车唯一排车主单与本票真实客户来货,校验实收快照、车辆及有效容量;货物加入该唯一主单,不能另建或挂入第二张客户排车。校验或整车加货失败整体回滚。同键重放不重复建单。成功将预留替换为BOUND,旧计划失效待核对,仍需审核和现场作业。'
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
|
||||
@@ -116,11 +116,6 @@ paths:
|
||||
size: {type: integer}
|
||||
total: {type: integer}
|
||||
pages: {type: integer}
|
||||
post:
|
||||
summary: 幂等创建车次计划
|
||||
description: '权限:platform:fleet:trip:create;起运仓使用公共有效海外仓目录;不推断GPS路线。'
|
||||
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/Create'}}}}
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}}
|
||||
/api/platform/v1/last-leg/fleet/trips/customer-options:
|
||||
get:
|
||||
summary: 查询有效委托客户候选
|
||||
@@ -221,22 +216,6 @@ paths:
|
||||
summary: 查询车次详情和当前司机资格
|
||||
description: '权限:platform:fleet:trip:list;司机资格仅是详情预览,实际命令必须重新核验。'
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/dispatches/{dispatchNo}/review:
|
||||
parameters:
|
||||
- {$ref: '#/components/parameters/TripNo'}
|
||||
- {name: dispatchNo, in: path, required: true, schema: {type: string}}
|
||||
post:
|
||||
summary: 通过或打回单张客户排车调度审核
|
||||
description: '权限:platform:fleet:trip:dispatch-review;仅PLANNED;审核所属车次内的排车单,成功后理货审核待审;审批不扣库存。'
|
||||
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/Review'}}}}
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}, '409': {description: 版本、关联或资格冲突}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/loading-review:
|
||||
parameters: [{$ref: '#/components/parameters/TripNo'}]
|
||||
post:
|
||||
summary: 通过或打回整车理货审核
|
||||
description: '权限:platform:fleet:trip:loading-review;仅PLANNED;通过要求全部调度审核、拣货和实际装载确认已完成,当前司机资格有效。'
|
||||
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/Review'}}}}
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}, '409': {description: 版本、调度审核、装载或资格冲突}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/plan:
|
||||
parameters: [{$ref: '#/components/parameters/TripNo'}]
|
||||
put:
|
||||
@@ -278,20 +257,6 @@ paths:
|
||||
recordVersion: {type: integer, format: int64, minimum: 0}
|
||||
reason: {type: string, minLength: 1, maxLength: 1000}
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/dispatches/bind:
|
||||
parameters: [{$ref: '#/components/parameters/TripNo'}]
|
||||
post:
|
||||
summary: 将客户排车单关联到车次
|
||||
description: '权限:platform:fleet:trip:edit;按业务单号解析客户归属,同仓且未开工;关联、车/司机快照同步及按真实货物目的地标识补齐卸货站原子提交;目的地缺失拒绝关联,已有有效站点顺序与索引保留,初始默认占位站替换为真实目的地。'
|
||||
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/BindingCommand'}}}}
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/dispatches/unbind:
|
||||
parameters: [{$ref: '#/components/parameters/TripNo'}]
|
||||
post:
|
||||
summary: 解除尚未执行的客户排车单关联
|
||||
description: '权限:platform:fleet:trip:edit;清除排车及派送单当前车辆司机快照,历史保留;已拣货禁止直接解除。'
|
||||
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/BindingCommand'}}}}
|
||||
responses: {'200': {$ref: '#/components/responses/Detail'}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/history:
|
||||
parameters: [{$ref: '#/components/parameters/TripNo'}]
|
||||
get:
|
||||
@@ -324,12 +289,6 @@ paths:
|
||||
description: '权限:platform:fleet:trip:list;返回各客户货物组成、manifestHash和当前装载确认,实际重量不得使用计费材积重。'
|
||||
responses:
|
||||
'200': {description: 统一响应data为Loading, content: {application/json: {schema: {$ref: '#/components/schemas/LoadingEnvelope'}}}}
|
||||
post:
|
||||
summary: 确认整车实际装载及逐段容量
|
||||
description: '权限:platform:fleet:trip:edit;全部客户拣货核平且转派送后确认;同一实物托盘只计量一次。货物hash或车次版本变化拒绝,托盘卸货站须匹配原货物目的地。'
|
||||
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/ConfirmLoad'}}}}
|
||||
responses:
|
||||
'200': {description: 已确认装载快照,统一响应data为Loading, content: {application/json: {schema: {$ref: '#/components/schemas/LoadingEnvelope'}}}}
|
||||
/api/platform/v1/last-leg/fleet/trips/{tripNo}/completion:
|
||||
parameters: [{$ref: '#/components/parameters/TripNo'}]
|
||||
get:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,39 +8,292 @@ security:
|
||||
paths:
|
||||
/api/pda/v1/last-leg/dispatches:
|
||||
get:
|
||||
summary: 查询Token绑定仓的排车PDA任务
|
||||
description: 仅 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate;跨客户读取绑定仓任务,不接收customerId或warehouseId。
|
||||
parameters: [{ name: status, in: query, required: false, schema: { type: string } }]
|
||||
responses: { '200': { description: 排车任务列表 }, '403': { description: 角色、权限或仓库绑定缺失 } }
|
||||
summary: 读取Token绑定仓五阶段整车任务
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。不接收客户或仓库范围参数;真实客户归属保留在items,整车公共版本及Gate由服务端返回。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- type: array
|
||||
items:
|
||||
$ref: overseas-business-v1.yaml#/components/schemas/DispatchPdaTask
|
||||
nullable: true
|
||||
parameters:
|
||||
- name: stage
|
||||
in: query
|
||||
schema:
|
||||
$ref: overseas-business-v1.yaml#/components/schemas/DispatchStage
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}:
|
||||
get:
|
||||
summary: 查询绑定仓排车任务详情
|
||||
description: 返回 tripNo、tripRecordVersion、tripDispatchCount、driverWarning、canDepart、departBlockReason、canPick 与 pickBlockReason;门禁反映整车所有客户单据、实际装载及当前司机资格,PDA 不得仅按当前子单拣货数量推断。canPick/pickBlockReason仅反映当前客户排车单调度审核,不以其他客户审核结果替代。未关联车次不可拣货或发车;列表按车次复用同次查询的门禁结果。证照30天内到期但覆盖任务时driverWarning提醒且仍允许,预计结束前过期则阻断。
|
||||
parameters: [{ name: dispatchNo, in: path, required: true, schema: { type: string } }]
|
||||
responses: { '200': { description: 排车托盘、目的仓与库存位置详情 }, '404': { description: 当前绑定仓无此排车任务 } }
|
||||
summary: 读取本仓整车任务及真实货物
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- $ref: overseas-business-v1.yaml#/components/schemas/DispatchPdaTask
|
||||
nullable: true
|
||||
parameters:
|
||||
- name: dispatchNo
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}/loading:
|
||||
get:
|
||||
summary: 读取本车拣货核平和实际测量依据
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- $ref: overseas-business-v1.yaml#/components/schemas/DispatchLoadingPreview
|
||||
nullable: true
|
||||
parameters:
|
||||
- name: dispatchNo
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}/commands/{idempotencyKey}:
|
||||
get:
|
||||
summary: 核对本人本仓原命令结果
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- $ref: overseas-business-v1.yaml#/components/schemas/DispatchCommandResult
|
||||
nullable: true
|
||||
parameters:
|
||||
- name: dispatchNo
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: idempotencyKey
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}/items/{itemId}/pick:
|
||||
post:
|
||||
summary: 扫码拣取排车托盘包裹
|
||||
description: 新请求须当前排车调度审核通过;同键同内容重放已保存结果不重新扣库存。
|
||||
parameters:
|
||||
- { name: dispatchNo, in: path, required: true, schema: { type: string } }
|
||||
- { name: itemId, in: path, required: true, schema: { type: string, pattern: '^[0-9]+$' } }
|
||||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/DispatchPick' } } } }
|
||||
responses: { '200': { description: 本次及累计拣货结果;同键同请求重放既有结果 }, '409': { description: 跨仓、跨客户、库存、数量或幂等冲突 } }
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}/complete:
|
||||
summary: 按本车真实货物来源执行扫码拣货
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。只用整车recordVersion和全载荷幂等键;扫码执行真实库存SHIP,装车完成和发车不重复SHIP。错误或结果未知保留原请求核对。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- $ref: overseas-business-v1.yaml#/components/schemas/DispatchCommandResult
|
||||
nullable: true
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: overseas-business-v1.yaml#/components/schemas/DispatchPick
|
||||
parameters:
|
||||
- name: dispatchNo
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: itemId
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}/loading-complete:
|
||||
post:
|
||||
summary: 完成排车拣货
|
||||
description: 当前排车调度审核通过且每个要求托盘及全部包裹必须精确完成;不允许部分完成。
|
||||
parameters: [{ name: dispatchNo, in: path, required: true, schema: { type: string } }]
|
||||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/IdempotentAction' } } } }
|
||||
responses: { '200': { description: READY_TO_DEPART结果 }, '409': { description: 未全部拣货或幂等冲突 } }
|
||||
summary: 真实拣货核平后显式确认装车完成
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。只用整车recordVersion和全载荷幂等键;扫码执行真实库存SHIP,装车完成和发车不重复SHIP。错误或结果未知保留原请求核对。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- $ref: overseas-business-v1.yaml#/components/schemas/DispatchCommandResult
|
||||
nullable: true
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: overseas-business-v1.yaml#/components/schemas/DispatchLoadingComplete
|
||||
parameters:
|
||||
- name: dispatchNo
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
/api/pda/v1/last-leg/dispatches/{dispatchNo}/depart:
|
||||
post:
|
||||
summary: 从排车任务确认所属车次整车发车
|
||||
description: 按Token绑定仓锁定车次,校验期望车次版本、车辆占用、全部调度审核、实际装载、整车理货审核及全部客户拣货和待出库单,重新核验司机证照、当前海外区域和身份;区域或身份变化与预览门禁一致阻断。一个事务推进所有子单,任一失败全车回滚。扫码阶段已扣库存不重复扣减;同键同内容重放整车结果,不同内容冲突。DEPARTING仅是同事务内部状态,不对外提交。
|
||||
parameters: [{ name: dispatchNo, in: path, required: true, schema: { type: string } }]
|
||||
requestBody: { required: true, content: { application/json: { schema: { $ref: '#/components/schemas/DepartAction' } } } }
|
||||
responses: { '200': { description: '统一响应data包含tripNo、status=IN_TRANSIT、departedAt、shippedPackages、dispatches数组(dispatchNo/shippedPackages)和replayed;每张子排车状态均为DEPARTED' }, '409': { description: 车次版本、装载、资格、拣货、出库或幂等门禁未满足 } }
|
||||
summary: 完整安排派送后确认实际发车
|
||||
description: 权限 OVERSEAS_WAREHOUSE_PDA_OPERATOR + lastleg:pda:operate。只用整车recordVersion和全载荷幂等键;扫码执行真实库存SHIP,装车完成和发车不重复SHIP。错误或结果未知保留原请求核对。
|
||||
security:
|
||||
- bearerAuth: []
|
||||
responses:
|
||||
'200':
|
||||
description: 统一ApiResponse;业务失败通过code返回,不能仅凭HTTP200判断成功。
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
requestId:
|
||||
type: string
|
||||
nullable: true
|
||||
traceId:
|
||||
type: string
|
||||
nullable: true
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
data:
|
||||
allOf:
|
||||
- $ref: overseas-business-v1.yaml#/components/schemas/DispatchCommandResult
|
||||
nullable: true
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: overseas-business-v1.yaml#/components/schemas/DispatchDepart
|
||||
parameters:
|
||||
- name: dispatchNo
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
/api/pda/v1/last-leg/outbound-tasks:
|
||||
get:
|
||||
summary: 查询Token绑定仓的一件代发出库任务
|
||||
@@ -962,24 +1215,6 @@ components:
|
||||
type: object
|
||||
required: [idempotencyKey]
|
||||
properties: { idempotencyKey: { type: string, minLength: 1, maxLength: 255 } }
|
||||
DepartAction:
|
||||
type: object
|
||||
required: [recordVersion, idempotencyKey]
|
||||
properties:
|
||||
recordVersion: { type: integer, format: int64, minimum: 0, description: 当前车次版本,来自tripRecordVersion}
|
||||
idempotencyKey: { type: string, minLength: 8, maxLength: 128 }
|
||||
remark: { type: string, maxLength: 1000, nullable: true }
|
||||
DispatchPick:
|
||||
type: object
|
||||
description: 普通库存提交positionId;原生退货换标箱提交cartonMark、positionId为空、packages=1,productQuantity必须与箱快照一致。两类来源互斥。
|
||||
required: [packages, productQuantity, idempotencyKey]
|
||||
properties:
|
||||
positionId: { type: string, pattern: '^[0-9]+$', nullable: true }
|
||||
cartonMark: { type: string, maxLength: 255, description: 本排车来源的系统箱唛 }
|
||||
packages: { type: integer, format: int64, minimum: 1 }
|
||||
productQuantity: { type: integer, format: int64, minimum: 0 }
|
||||
idempotencyKey: { type: string, minLength: 1, maxLength: 255 }
|
||||
remark: { type: string, maxLength: 1000, nullable: true }
|
||||
OutboundPick:
|
||||
type: object
|
||||
required: [outboundPalletItemId, packages, idempotencyKey]
|
||||
|
||||
Reference in New Issue
Block a user