2026-08-20 19:55:21 +08:00
SET NAMES utf8mb4 ;
2026-08-19 16:24:02 +08:00
CREATE DATABASE IF NOT EXISTS baiyue_lastleg DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
USE baiyue_lastleg ;
CREATE TABLE IF NOT EXISTS ll_loading_event_inbox (
event_id VARCHAR ( 128 ) NOT NULL COMMENT '事件全局唯一标识' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '租户/客户账号标识' ,
event_type VARCHAR ( 64 ) NOT NULL COMMENT '事件类型' ,
event_version INT NOT NULL COMMENT '事件契约版本' ,
payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '规范化事件负载 SHA-256 摘要' ,
payload_json JSON NOT NULL COMMENT '事件冻结负载 JSON' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'RECEIVED' COMMENT '消费状态:RECEIVED/PROCESSED' ,
received_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '接收时间' ,
processed_at DATETIME ( 3 ) NULL COMMENT '处理完成时间' ,
last_error VARCHAR ( 1000 ) NULL COMMENT '最近一次处理错误' ,
PRIMARY KEY ( event_id ),
UNIQUE KEY uk_ll_loading_inbox_tenant_key ( customer_id , event_type , event_id )
) ENGINE = InnoDB COMMENT = '头程装柜完成事件接收幂等箱' ;
CREATE TABLE IF NOT EXISTS ll_order (
id BIGINT NOT NULL COMMENT '雪花 ID' ,
order_no VARCHAR ( 32 ) NOT NULL COMMENT '尾程单号' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '租户/客户账号标识' ,
2026-08-21 10:43:25 +08:00
order_type VARCHAR ( 32 ) NOT NULL DEFAULT 'FIRST_LEG' COMMENT '订单类型:FIRST_LEG头程订单、RELABEL_APPLICATION换标下单、WAREHOUSE_TRANSFER仓储转运、LOCAL_LOOSEBOARD本土散板、RETURN_RELABEL退货换标、ONE_CLICK_DROPSHIP一件代发' ,
2026-08-24 17:15:48 +08:00
destination_type VARCHAR ( 32 ) NULL COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码' ,
2026-08-19 16:24:02 +08:00
inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓码' ,
source_region VARCHAR ( 32 ) NOT NULL COMMENT '来源区域/系统' ,
source_inbound_id VARCHAR ( 128 ) NOT NULL COMMENT '最终实装 LOADED 分片 ID,建单幂等键' ,
root_inbound_id VARCHAR ( 128 ) COMMENT '根入仓单 ID' ,
source_order_id VARCHAR ( 128 ) COMMENT '来源订单 ID' ,
source_order_no VARCHAR ( 128 ) COMMENT '来源订单号' ,
root_order_id VARCHAR ( 128 ) COMMENT '根订单 ID' ,
customer_name VARCHAR ( 255 ) COMMENT '货主名称' ,
2026-08-24 21:46:19 +08:00
source_warehouse_id VARCHAR ( 128 ) COMMENT '来源国内装柜仓 ID 快照' ,
source_warehouse_name VARCHAR ( 255 ) COMMENT '来源国内装柜仓名称快照' ,
overseas_warehouse_id VARCHAR ( 128 ) COMMENT '海外实际收货仓 ID,由绑定仓库的PDA操作员认领柜号时冻结' ,
2026-08-19 16:24:02 +08:00
overseas_warehouse_name VARCHAR ( 255 ) COMMENT '海外仓名称' ,
transfer_warehouse_id VARCHAR ( 128 ) COMMENT '转入目的仓 ID' ,
transfer_warehouse_code VARCHAR ( 128 ) COMMENT '转入目的仓编码' ,
transfer_warehouse_name VARCHAR ( 255 ) COMMENT '转入目的仓名称' ,
fba_warehouse_code VARCHAR ( 128 ) COMMENT 'FBA 仓库编码' ,
container_no VARCHAR ( 64 ) COMMENT '集装箱号' ,
container_status VARCHAR ( 32 ) DEFAULT '待转柜' COMMENT '货柜状态' ,
abnormal TINYINT NOT NULL DEFAULT 0 COMMENT '是否异常:0否1是' ,
detained TINYINT NOT NULL DEFAULT 0 COMMENT '是否暂扣:0否1是' ,
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 '累计已拣箱数' ,
shipped_package_count INT NOT NULL DEFAULT 0 COMMENT '累计已出库箱数' ,
volume_cbm DECIMAL ( 18 , 4 ) COMMENT '体积(立方米)' ,
product_quantity INT COMMENT '货物数量' ,
volume_weight_kg DECIMAL ( 18 , 4 ) COMMENT '体积重量(千克)' ,
estimated_arrival_at DATETIME ( 3 ) COMMENT '预计到港时间' ,
actual_arrival_at DATETIME ( 3 ) COMMENT '实际到港时间' ,
estimated_warehouse_at DATETIME ( 3 ) COMMENT '预计到仓时间' ,
inbound_order_no VARCHAR ( 128 ) COMMENT '入库单号' ,
outbound_order_no VARCHAR ( 128 ) COMMENT '出库单号' ,
delivery_order_no VARCHAR ( 128 ) COMMENT '派送单号' ,
relabel_order_no VARCHAR ( 128 ) COMMENT '换标单号' ,
relabel_status VARCHAR ( 32 ) COMMENT '换标状态' ,
pallet_merge_flag VARCHAR ( 32 ) COMMENT '合托标记' ,
2026-08-21 10:43:25 +08:00
current_status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '当前业务状态:PENDING_ASSIGNMENT待分配、PENDING_INBOUND待入库、INBOUND_COMPLETED入库完成、PENDING_DELIVERY待派送、DELIVERING派送中、DELIVERED派送完成' ,
2026-08-19 16:24:02 +08:00
sub_order_status VARCHAR ( 255 ) NULL COMMENT '子单据状态汇总' ,
private_remark VARCHAR ( 1000 ) COMMENT '备注(仅自己)' ,
customer_remark VARCHAR ( 1000 ) COMMENT '备注(客户)' ,
warehouse_remark VARCHAR ( 1000 ) COMMENT '备注(仓库)' ,
source_event_id VARCHAR ( 128 ) NOT NULL COMMENT '来源事件 ID' ,
source_loading_plan_id VARCHAR ( 128 ) NOT NULL COMMENT '来源装柜计划 ID' ,
2026-08-20 15:20:05 +08:00
source_container_booking_id VARCHAR ( 128 ) NULL COMMENT '来源头程货柜预订ID' ,
2026-08-19 16:24:02 +08:00
source_loading_plan_version BIGINT COMMENT '来源装柜计划版本' ,
source_handover_version BIGINT COMMENT '交接版本' ,
source_payload_hash VARCHAR ( 71 ) 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_order_source ( customer_id , source_region , source_inbound_id ),
KEY idx_ll_order_group ( customer_id , order_no ),
KEY idx_ll_order_container ( customer_id , container_no ),
KEY idx_ll_order_list ( customer_id , current_status , created_at )
) ENGINE = InnoDB COMMENT = '尾程订单主表' ;
CREATE TABLE IF NOT EXISTS ll_order_detail (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单明细主键' ,
2026-08-24 11:55:50 +08:00
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户数据隔离键' ,
2026-08-19 16:24:02 +08:00
order_id BIGINT NOT NULL COMMENT '尾程订单 ID' ,
source_inbound_detail_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓明细 ID' ,
sku_code VARCHAR ( 128 ) COMMENT 'SKU 编码' ,
product_name_zh VARCHAR ( 255 ) COMMENT '中文品名' ,
product_name_en VARCHAR ( 255 ) COMMENT '英文品名' ,
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' ,
product_quantity INT COMMENT '数量' ,
pallet_count INT COMMENT '托数' ,
gross_weight_kg DECIMAL ( 18 , 4 ) COMMENT '毛重(千克)' ,
net_weight_kg DECIMAL ( 18 , 4 ) COMMENT '净重(千克)' ,
dimensional_weight_kg DECIMAL ( 18 , 4 ) COMMENT '体积重量(千克)' ,
volume_cbm DECIMAL ( 18 , 4 ) COMMENT '体积(立方米)' ,
destination_warehouse_id VARCHAR ( 128 ) COMMENT '目的仓 ID' ,
destination_warehouse_code VARCHAR ( 128 ) COMMENT '目的仓编码' ,
destination_warehouse_name VARCHAR ( 255 ) COMMENT '目的仓名称' ,
fba_tracking_no VARCHAR ( 255 ) COMMENT 'FBA跟踪号' ,
shipment_no VARCHAR ( 255 ) COMMENT '货件编号' ,
shipping_mark VARCHAR ( 255 ) COMMENT '唛头' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_detail_source ( order_id , source_inbound_detail_id ),
2026-08-24 11:55:50 +08:00
KEY idx_ll_detail_order ( order_id ),
KEY idx_ll_detail_customer_order ( customer_id , order_id , id )
2026-08-19 16:24:02 +08:00
) ENGINE = InnoDB COMMENT = '尾程订单实装商品冻结明细' ;
CREATE TABLE IF NOT EXISTS ll_loading_order_status_history (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '状态历史主键' ,
2026-08-24 10:33:05 +08:00
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户数据隔离键' ,
2026-08-19 16:24:02 +08:00
order_id BIGINT NOT NULL COMMENT '尾程订单 ID' ,
from_status VARCHAR ( 32 ) COMMENT '变更前状态' ,
to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' ,
event_id VARCHAR ( 128 ) COMMENT '触发事件 ID' ,
remark VARCHAR ( 500 ) COMMENT '状态变更备注' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '记录时间' ,
PRIMARY KEY ( id ),
2026-08-24 10:33:05 +08:00
KEY idx_ll_loading_history_customer_order ( customer_id , order_id , created_at )
2026-08-19 16:24:02 +08:00
) ENGINE = InnoDB COMMENT = '尾程订单状态变更历史' ;
CREATE TABLE IF NOT EXISTS ll_event_conflict (
id BIGINT NOT NULL COMMENT '冲突记录主键' , event_id VARCHAR ( 128 ) NOT NULL COMMENT '冲突事件 ID' ,
customer_id BIGINT NOT NULL COMMENT '租户 ID' , conflict_type VARCHAR ( 64 ) NOT NULL COMMENT '冲突类型' ,
conflict_message VARCHAR ( 512 ) NOT NULL COMMENT '冲突说明' , created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ,
PRIMARY KEY ( id ), KEY idx_ll_conflict_event ( event_id , customer_id )
) ENGINE = InnoDB COMMENT = '事件冲突记录' ;
CREATE TABLE IF NOT EXISTS ll_event_inbox (
id BIGINT NOT NULL COMMENT '事件接收记录主键' , event_id VARCHAR ( 128 ) NOT NULL COMMENT '事件全局唯一 ID' ,
customer_id BIGINT NOT NULL COMMENT '租户 ID' , event_type VARCHAR ( 128 ) NOT NULL COMMENT '事件类型' ,
aggregate_type VARCHAR ( 64 ) NOT NULL COMMENT '聚合类型' , aggregate_id VARCHAR ( 128 ) NOT NULL COMMENT '聚合 ID' ,
aggregate_version BIGINT NOT NULL COMMENT '聚合版本' , payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '负载摘要' ,
status VARCHAR ( 32 ) NOT NULL COMMENT '消费状态' , error_message VARCHAR ( 512 ) NULL COMMENT '错误信息' ,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_inbox_event ( event_id ), KEY idx_ll_inbox_source ( customer_id , aggregate_id )
) ENGINE = InnoDB COMMENT = '通用事件接收幂等箱' ;
CREATE TABLE IF NOT EXISTS ll_inbound_order (
2026-08-24 17:37:15 +08:00
id BIGINT NOT NULL COMMENT '入仓单主键' , customer_id BIGINT NOT NULL COMMENT '客户账号标识' , source_region VARCHAR ( 32 ) NOT NULL COMMENT '来源区域' ,
2026-08-19 16:24:02 +08:00
source_inbound_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓分片 ID' , root_inbound_id VARCHAR ( 128 ) NULL COMMENT '根入仓单 ID' ,
source_order_id VARCHAR ( 128 ) NULL COMMENT '来源订单 ID' , source_order_no VARCHAR ( 128 ) NULL COMMENT '来源订单号' , root_order_id VARCHAR ( 128 ) NULL COMMENT '根订单 ID' ,
inbound_code 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 '目的仓名称' ,
2026-08-24 17:15:48 +08:00
destination_type VARCHAR ( 32 ) NULL COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码' ,
2026-08-19 16:24:02 +08:00
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' , product_quantity INT NULL COMMENT '数量' , pallet_count INT NULL COMMENT '托数' ,
gross_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '毛重(千克)' , net_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '净重(千克)' , volume_cbm DECIMAL ( 18 , 6 ) NULL COMMENT '体积(立方米)' ,
source_event_id VARCHAR ( 128 ) NOT NULL COMMENT '来源事件 ID' , source_loading_plan_id VARCHAR ( 128 ) NOT NULL COMMENT '装柜计划 ID' ,
source_loading_plan_version BIGINT NOT NULL COMMENT '装柜计划版本' , handover_version BIGINT NOT NULL COMMENT '交接版本' , payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '负载摘要' ,
status VARCHAR ( 32 ) NOT NULL COMMENT '入仓单状态' , exception_flag VARCHAR ( 32 ) NOT NULL DEFAULT 'NONE' COMMENT '异常标记' ,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_order_source ( customer_id , source_region , source_inbound_id ), UNIQUE KEY uk_ll_order_event ( source_event_id , source_inbound_id )
) ENGINE = InnoDB COMMENT = '尾程入仓单快照' ;
CREATE TABLE IF NOT EXISTS ll_inbound_order_item (
id BIGINT NOT NULL COMMENT '入仓明细主键' , customer_id BIGINT NOT NULL COMMENT '租户 ID' , order_id BIGINT NOT NULL COMMENT '入仓单 ID' ,
source_inbound_detail_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓明细 ID' , package_count INT NOT NULL COMMENT '箱数' , product_quantity INT NULL COMMENT '数量' , pallet_count INT NULL COMMENT '托数' ,
gross_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '毛重(千克)' , net_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '净重(千克)' , dimensional_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '体积重量(千克)' , volume_cbm DECIMAL ( 18 , 6 ) NULL COMMENT '体积(立方米)' ,
destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓 ID' , destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码' , destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称' ,
fba_tracking_no VARCHAR ( 128 ) NULL COMMENT 'FBA跟踪号' , shipment_no VARCHAR ( 128 ) NULL COMMENT '货件编号' , shipping_mark VARCHAR ( 255 ) NULL COMMENT '唛头' ,
sku_code VARCHAR ( 128 ) NULL COMMENT 'SKU 编码' , product_name_zh VARCHAR ( 255 ) NULL COMMENT '中文品名' , product_name_en VARCHAR ( 255 ) NULL COMMENT '英文品名' ,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , PRIMARY KEY ( id ), KEY idx_ll_item_order ( customer_id , order_id )
) ENGINE = InnoDB COMMENT = '尾程入仓商品明细快照' ;
CREATE TABLE IF NOT EXISTS ll_order_status_history (
id BIGINT NOT NULL COMMENT '订单状态历史主键' , customer_id BIGINT NOT NULL COMMENT '租户 ID' , order_id BIGINT NOT NULL COMMENT '订单 ID' ,
from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' , to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' , reason VARCHAR ( 255 ) NULL COMMENT '变更原因' ,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间' , PRIMARY KEY ( id )
) ENGINE = InnoDB COMMENT = '尾程订单状态历史' ;
-- 幂等注释迁移:CREATE TABLE IF NOT EXISTS 对已有表不会更新表/字段注释。
ALTER TABLE ll_loading_event_inbox COMMENT = '头程装柜完成事件接收幂等箱' ;
ALTER TABLE ll_order COMMENT = '尾程订单主表' ;
2026-08-20 15:20:05 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_order' AND column_name = 'source_container_booking_id' ), 'SELECT 1' , 'ALTER TABLE ll_order ADD COLUMN source_container_booking_id VARCHAR(128) NULL COMMENT ''来源头程货柜预订ID'' AFTER source_loading_plan_id' ));
PREPARE lastleg_order_container_booking_stmt FROM @ ddl ; EXECUTE lastleg_order_container_booking_stmt ; DEALLOCATE PREPARE lastleg_order_container_booking_stmt ;
2026-08-24 17:15:48 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_order' AND column_name = 'destination_type' ), 'SELECT 1' , 'ALTER TABLE ll_order ADD COLUMN destination_type VARCHAR(32) NULL COMMENT ''目的类型:FBA按箱数接收、OVERSEAS逐箱扫码'' AFTER order_type' ));
PREPARE lastleg_order_destination_type_stmt FROM @ ddl ; EXECUTE lastleg_order_destination_type_stmt ; DEALLOCATE PREPARE lastleg_order_destination_type_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_order' AND column_name = 'destination_type' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_order ADD COLUMN destination_type VARCHAR(32) NULL COMMENT ''目的类型:FBA按箱数接收、OVERSEAS逐箱扫码'' AFTER destination_warehouse_name' ));
PREPARE lastleg_inbound_destination_type_stmt FROM @ ddl ; EXECUTE lastleg_inbound_destination_type_stmt ; DEALLOCATE PREPARE lastleg_inbound_destination_type_stmt ;
2026-08-19 16:24:02 +08:00
ALTER TABLE ll_order_detail COMMENT = '尾程订单实装商品冻结明细' ;
ALTER TABLE ll_loading_order_status_history COMMENT = '尾程订单状态变更历史' ;
ALTER TABLE ll_event_conflict COMMENT = '事件冲突记录' ;
ALTER TABLE ll_event_inbox COMMENT = '通用事件接收幂等箱' ;
ALTER TABLE ll_inbound_order COMMENT = '尾程入仓单快照' ;
ALTER TABLE ll_inbound_order_item COMMENT = '尾程入仓商品明细快照' ;
ALTER TABLE ll_order_status_history COMMENT = '尾程订单状态历史' ;
ALTER TABLE ll_event_conflict
MODIFY COLUMN id BIGINT NOT NULL COMMENT '冲突记录主键' , MODIFY COLUMN event_id VARCHAR ( 128 ) NOT NULL COMMENT '冲突事件 ID' ,
MODIFY COLUMN customer_id BIGINT NOT NULL COMMENT '租户 ID' , MODIFY COLUMN conflict_type VARCHAR ( 64 ) NOT NULL COMMENT '冲突类型' ,
MODIFY COLUMN conflict_message VARCHAR ( 512 ) NOT NULL COMMENT '冲突说明' , MODIFY COLUMN created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ;
ALTER TABLE ll_event_inbox
MODIFY COLUMN id BIGINT NOT NULL COMMENT '事件接收记录主键' , MODIFY COLUMN event_id VARCHAR ( 128 ) NOT NULL COMMENT '事件全局唯一 ID' , MODIFY COLUMN customer_id BIGINT NOT NULL COMMENT '租户 ID' ,
MODIFY COLUMN event_type VARCHAR ( 128 ) NOT NULL COMMENT '事件类型' , MODIFY COLUMN aggregate_type VARCHAR ( 64 ) NOT NULL COMMENT '聚合类型' , MODIFY COLUMN aggregate_id VARCHAR ( 128 ) NOT NULL COMMENT '聚合 ID' , MODIFY COLUMN aggregate_version BIGINT NOT NULL COMMENT '聚合版本' , MODIFY COLUMN payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '负载摘要' , MODIFY COLUMN status VARCHAR ( 32 ) NOT NULL COMMENT '消费状态' , MODIFY COLUMN error_message VARCHAR ( 512 ) NULL COMMENT '错误信息' , MODIFY COLUMN created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , MODIFY COLUMN updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ;
ALTER TABLE ll_inbound_order
MODIFY COLUMN id BIGINT NOT NULL COMMENT '入仓单主键' , MODIFY COLUMN customer_id BIGINT NOT NULL COMMENT '租户 ID' , MODIFY COLUMN source_region VARCHAR ( 32 ) NOT NULL COMMENT '来源区域' , MODIFY COLUMN source_inbound_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓分片 ID' , MODIFY COLUMN root_inbound_id VARCHAR ( 128 ) NULL COMMENT '根入仓单 ID' , MODIFY COLUMN source_order_id VARCHAR ( 128 ) NULL COMMENT '来源订单 ID' , MODIFY COLUMN source_order_no VARCHAR ( 128 ) NULL COMMENT '来源订单号' , MODIFY COLUMN root_order_id VARCHAR ( 128 ) NULL COMMENT '根订单 ID' , MODIFY COLUMN inbound_code VARCHAR ( 128 ) NULL COMMENT '入仓码' , MODIFY COLUMN destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓 ID' , MODIFY COLUMN destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码' , MODIFY COLUMN destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称' , MODIFY COLUMN package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' , MODIFY COLUMN product_quantity INT NULL COMMENT '数量' , MODIFY COLUMN pallet_count INT NULL COMMENT '托数' , MODIFY COLUMN gross_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '毛重(千克)' , MODIFY COLUMN net_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '净重(千克)' , MODIFY COLUMN volume_cbm DECIMAL ( 18 , 6 ) NULL COMMENT '体积(立方米)' , MODIFY COLUMN source_event_id VARCHAR ( 128 ) NOT NULL COMMENT '来源事件 ID' , MODIFY COLUMN source_loading_plan_id VARCHAR ( 128 ) NOT NULL COMMENT '装柜计划 ID' , MODIFY COLUMN source_loading_plan_version BIGINT NOT NULL COMMENT '装柜计划版本' , MODIFY COLUMN handover_version BIGINT NOT NULL COMMENT '交接版本' , MODIFY COLUMN payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '负载摘要' , MODIFY COLUMN status VARCHAR ( 32 ) NOT NULL COMMENT '入仓单状态' , MODIFY COLUMN exception_flag VARCHAR ( 32 ) NOT NULL DEFAULT 'NONE' COMMENT '异常标记' , MODIFY COLUMN created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , MODIFY COLUMN updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ;
ALTER TABLE ll_inbound_order_item
MODIFY COLUMN id BIGINT NOT NULL COMMENT '入仓明细主键' , MODIFY COLUMN customer_id BIGINT NOT NULL COMMENT '租户ID' , MODIFY COLUMN order_id BIGINT NOT NULL COMMENT '入仓单ID' , MODIFY COLUMN source_inbound_detail_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓明细ID' , MODIFY COLUMN package_count INT NOT NULL COMMENT '箱数' , MODIFY COLUMN product_quantity INT NULL COMMENT '数量' , MODIFY COLUMN pallet_count INT NULL COMMENT '托数' , MODIFY COLUMN gross_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '毛重(千克)' , MODIFY COLUMN net_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '净重(千克)' , MODIFY COLUMN dimensional_weight_kg DECIMAL ( 18 , 3 ) NULL COMMENT '体积重量(千克)' , MODIFY COLUMN volume_cbm DECIMAL ( 18 , 6 ) NULL COMMENT '体积(立方米)' , MODIFY COLUMN destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID' , MODIFY COLUMN destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码' , MODIFY COLUMN destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称' , MODIFY COLUMN fba_tracking_no VARCHAR ( 128 ) NULL COMMENT 'FBA跟踪号' , MODIFY COLUMN shipment_no VARCHAR ( 128 ) NULL COMMENT '货件编号' , MODIFY COLUMN shipping_mark VARCHAR ( 255 ) NULL COMMENT '唛头' , MODIFY COLUMN sku_code VARCHAR ( 128 ) NULL COMMENT 'SKU编码' , MODIFY COLUMN product_name_zh VARCHAR ( 255 ) NULL COMMENT '中文品名' , MODIFY COLUMN product_name_en VARCHAR ( 255 ) NULL COMMENT '英文品名' , MODIFY COLUMN created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ;
ALTER TABLE ll_order_status_history
MODIFY COLUMN id BIGINT NOT NULL COMMENT '订单状态历史主键' , MODIFY COLUMN customer_id BIGINT NOT NULL COMMENT '租户 ID' , MODIFY COLUMN order_id BIGINT NOT NULL COMMENT '订单 ID' , MODIFY COLUMN from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' , MODIFY COLUMN to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' , MODIFY COLUMN reason VARCHAR ( 255 ) NULL COMMENT '变更原因' , MODIFY COLUMN created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间' ;
ALTER TABLE ll_loading_event_inbox
MODIFY COLUMN event_id VARCHAR ( 128 ) NOT NULL COMMENT '事件全局唯一标识' ,
MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '租户/客户账号标识' ,
MODIFY COLUMN event_type VARCHAR ( 64 ) NOT NULL COMMENT '事件类型' ,
MODIFY COLUMN event_version INT NOT NULL COMMENT '事件契约版本' ,
MODIFY COLUMN payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '规范化事件负载 SHA-256 摘要' ,
MODIFY COLUMN payload_json JSON NOT NULL COMMENT '事件冻结负载 JSON' ,
MODIFY COLUMN status VARCHAR ( 32 ) NOT NULL DEFAULT 'RECEIVED' COMMENT '消费状态:RECEIVED/PROCESSED' ,
MODIFY COLUMN received_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '接收时间' ,
MODIFY COLUMN processed_at DATETIME ( 3 ) NULL COMMENT '处理完成时间' ,
MODIFY COLUMN last_error VARCHAR ( 1000 ) NULL COMMENT '最近一次处理错误' ;
ALTER TABLE ll_order
MODIFY COLUMN id BIGINT NOT NULL COMMENT '雪花 ID' ,
MODIFY COLUMN order_no VARCHAR ( 32 ) NOT NULL COMMENT '尾程单号' ,
MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '租户/客户账号标识' ,
MODIFY COLUMN order_type VARCHAR ( 32 ) NOT NULL DEFAULT 'FIRST_LEG' COMMENT '订单类型' ,
MODIFY COLUMN inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓码' ,
MODIFY COLUMN source_region VARCHAR ( 32 ) NOT NULL COMMENT '来源区域/系统' ,
MODIFY COLUMN source_inbound_id VARCHAR ( 128 ) NOT NULL COMMENT '最终实装 LOADED 分片 ID,建单幂等键' ,
MODIFY COLUMN root_inbound_id VARCHAR ( 128 ) NULL COMMENT '根入仓单 ID' ,
MODIFY COLUMN source_order_id VARCHAR ( 128 ) NULL COMMENT '来源订单 ID' ,
MODIFY COLUMN source_order_no VARCHAR ( 128 ) NULL COMMENT '来源订单号' ,
MODIFY COLUMN root_order_id VARCHAR ( 128 ) NULL COMMENT '根订单 ID' ,
MODIFY COLUMN customer_name VARCHAR ( 255 ) NULL COMMENT '货主名称' ,
MODIFY COLUMN overseas_warehouse_id VARCHAR ( 128 ) NULL COMMENT '海外仓 ID' ,
MODIFY COLUMN overseas_warehouse_name VARCHAR ( 255 ) NULL COMMENT '海外仓名称' ,
MODIFY COLUMN fba_warehouse_code VARCHAR ( 128 ) NULL COMMENT 'FBA 仓库编码' ,
MODIFY COLUMN container_no VARCHAR ( 64 ) NULL COMMENT '集装箱号' ,
MODIFY COLUMN container_status VARCHAR ( 32 ) NULL DEFAULT '待转柜' COMMENT '货柜状态' ,
MODIFY COLUMN abnormal TINYINT NOT NULL DEFAULT 0 COMMENT '是否异常:0否1是' ,
MODIFY COLUMN detained TINYINT NOT NULL DEFAULT 0 COMMENT '是否暂扣:0否1是' ,
MODIFY COLUMN pallet_count INT NOT NULL DEFAULT 0 COMMENT '托数' ,
MODIFY COLUMN package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' ,
MODIFY COLUMN volume_cbm DECIMAL ( 18 , 4 ) NULL COMMENT '体积(立方米)' ,
MODIFY COLUMN product_quantity INT NULL COMMENT '货物数量' ,
MODIFY COLUMN volume_weight_kg DECIMAL ( 18 , 4 ) NULL COMMENT '体积重量(千克)' ,
MODIFY COLUMN estimated_arrival_at DATETIME ( 3 ) NULL COMMENT '预计到港时间' ,
MODIFY COLUMN actual_arrival_at DATETIME ( 3 ) NULL COMMENT '实际到港时间' ,
MODIFY COLUMN estimated_warehouse_at DATETIME ( 3 ) NULL COMMENT '预计到仓时间' ,
MODIFY COLUMN inbound_order_no VARCHAR ( 128 ) NULL COMMENT '入库单号' ,
MODIFY COLUMN outbound_order_no VARCHAR ( 128 ) NULL COMMENT '出库单号' ,
MODIFY COLUMN delivery_order_no VARCHAR ( 128 ) NULL COMMENT '派送单号' ,
MODIFY COLUMN relabel_order_no VARCHAR ( 128 ) NULL COMMENT '换标单号' ,
MODIFY COLUMN relabel_status VARCHAR ( 32 ) NULL COMMENT '换标状态' ,
MODIFY COLUMN pallet_merge_flag VARCHAR ( 32 ) NULL COMMENT '合托标记' ,
MODIFY COLUMN current_status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_ASSIGNMENT' COMMENT '当前业务状态' ,
MODIFY COLUMN private_remark VARCHAR ( 1000 ) NULL COMMENT '备注(仅自己)' ,
MODIFY COLUMN customer_remark VARCHAR ( 1000 ) NULL COMMENT '备注(客户)' ,
MODIFY COLUMN warehouse_remark VARCHAR ( 1000 ) NULL COMMENT '备注(仓库)' ,
MODIFY COLUMN source_event_id VARCHAR ( 128 ) NOT NULL COMMENT '来源事件 ID' ,
MODIFY COLUMN source_loading_plan_id VARCHAR ( 128 ) NOT NULL COMMENT '来源装柜计划 ID' ,
2026-08-20 15:20:05 +08:00
MODIFY COLUMN source_container_booking_id VARCHAR ( 128 ) NULL COMMENT '来源头程货柜预订ID' ,
2026-08-19 16:24:02 +08:00
MODIFY COLUMN source_loading_plan_version BIGINT NULL COMMENT '来源装柜计划版本' ,
MODIFY COLUMN source_handover_version BIGINT NULL COMMENT '交接版本' ,
MODIFY COLUMN source_payload_hash VARCHAR ( 71 ) NOT NULL COMMENT '来源事件负载摘要' ,
MODIFY COLUMN created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
MODIFY COLUMN updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT '更新时间' ;
-- Existing installations: convert the row identity to an assigned Snowflake ID and
-- make order_no a container/loading-plan grouping number rather than a row-unique key.
SET @ ll_add_transfer_warehouse_id = (
SELECT IF ( COUNT ( * ) = 0 ,
'ALTER TABLE ll_order ADD COLUMN transfer_warehouse_id VARCHAR(128) NULL COMMENT ''转入目的仓ID'' AFTER overseas_warehouse_name' ,
'SELECT 1' )
FROM information_schema . columns
WHERE table_schema = DATABASE () AND table_name = 'll_order'
AND column_name = 'transfer_warehouse_id'
);
PREPARE ll_add_transfer_warehouse_id_stmt FROM @ ll_add_transfer_warehouse_id ;
EXECUTE ll_add_transfer_warehouse_id_stmt ;
DEALLOCATE PREPARE ll_add_transfer_warehouse_id_stmt ;
SET @ ll_add_transfer_warehouse_code = (
SELECT IF ( COUNT ( * ) = 0 ,
'ALTER TABLE ll_order ADD COLUMN transfer_warehouse_code VARCHAR(128) NULL COMMENT ''转入目的仓编码'' AFTER transfer_warehouse_id' ,
'SELECT 1' )
FROM information_schema . columns
WHERE table_schema = DATABASE () AND table_name = 'll_order'
AND column_name = 'transfer_warehouse_code'
);
PREPARE ll_add_transfer_warehouse_code_stmt FROM @ ll_add_transfer_warehouse_code ;
EXECUTE ll_add_transfer_warehouse_code_stmt ;
DEALLOCATE PREPARE ll_add_transfer_warehouse_code_stmt ;
SET @ ll_add_transfer_warehouse_name = (
SELECT IF ( COUNT ( * ) = 0 ,
'ALTER TABLE ll_order ADD COLUMN transfer_warehouse_name VARCHAR(255) NULL COMMENT ''转入目的仓名称'' AFTER transfer_warehouse_code' ,
'SELECT 1' )
FROM information_schema . columns
WHERE table_schema = DATABASE () AND table_name = 'll_order'
AND column_name = 'transfer_warehouse_name'
);
PREPARE ll_add_transfer_warehouse_name_stmt FROM @ ll_add_transfer_warehouse_name ;
EXECUTE ll_add_transfer_warehouse_name_stmt ;
DEALLOCATE PREPARE ll_add_transfer_warehouse_name_stmt ;
ALTER TABLE ll_order
MODIFY COLUMN transfer_warehouse_id VARCHAR ( 128 ) NULL COMMENT '转入目的仓ID' ,
MODIFY COLUMN transfer_warehouse_code VARCHAR ( 128 ) NULL COMMENT '转入目的仓编码' ,
MODIFY COLUMN transfer_warehouse_name VARCHAR ( 255 ) NULL COMMENT '转入目的仓名称' ;
SET @ ll_drop_order_no_unique = (
SELECT IF ( COUNT ( * ) > 0 ,
'ALTER TABLE ll_order DROP INDEX uk_ll_order_no' ,
'SELECT 1' )
FROM information_schema . statistics
WHERE table_schema = DATABASE () AND table_name = 'll_order'
AND index_name = 'uk_ll_order_no' AND non_unique = 0
);
PREPARE ll_drop_order_no_unique_stmt FROM @ ll_drop_order_no_unique ;
EXECUTE ll_drop_order_no_unique_stmt ;
DEALLOCATE PREPARE ll_drop_order_no_unique_stmt ;
SET @ ll_add_order_group_index = (
SELECT IF ( COUNT ( * ) = 0 ,
'CREATE INDEX idx_ll_order_group ON ll_order(customer_id,order_no)' ,
'SELECT 1' )
FROM information_schema . statistics
WHERE table_schema = DATABASE () AND table_name = 'll_order'
AND index_name = 'idx_ll_order_group'
);
PREPARE ll_add_order_group_index_stmt FROM @ ll_add_order_group_index ;
EXECUTE ll_add_order_group_index_stmt ;
DEALLOCATE PREPARE ll_add_order_group_index_stmt ;
ALTER TABLE ll_order_detail
MODIFY COLUMN id BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单明细主键' ,
MODIFY COLUMN order_id BIGINT NOT NULL COMMENT '尾程订单 ID' ,
MODIFY COLUMN source_inbound_detail_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓明细 ID' ,
MODIFY COLUMN sku_code VARCHAR ( 128 ) NULL COMMENT 'SKU 编码' ,
MODIFY COLUMN product_name_zh VARCHAR ( 255 ) NULL COMMENT '中文品名' ,
MODIFY COLUMN product_name_en VARCHAR ( 255 ) NULL COMMENT '英文品名' ,
MODIFY COLUMN package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' ,
MODIFY COLUMN product_quantity INT NULL COMMENT '数量' ,
MODIFY COLUMN pallet_count INT NULL COMMENT '托数' ,
MODIFY COLUMN gross_weight_kg DECIMAL ( 18 , 4 ) NULL COMMENT '毛重(千克)' ,
MODIFY COLUMN net_weight_kg DECIMAL ( 18 , 4 ) NULL COMMENT '净重(千克)' ,
MODIFY COLUMN dimensional_weight_kg DECIMAL ( 18 , 4 ) NULL COMMENT '体积重量(千克)' ,
MODIFY COLUMN volume_cbm DECIMAL ( 18 , 4 ) NULL COMMENT '体积(立方米)' ,
MODIFY COLUMN destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓 ID' ,
MODIFY COLUMN destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码' ,
MODIFY COLUMN destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称' ,
MODIFY COLUMN fba_tracking_no VARCHAR ( 255 ) NULL COMMENT 'FBA跟踪号' ,
MODIFY COLUMN shipment_no VARCHAR ( 255 ) NULL COMMENT '货件编号' ,
MODIFY COLUMN shipping_mark VARCHAR ( 255 ) NULL COMMENT '唛头' ;
CREATE TABLE IF NOT EXISTS ll_inbound_plan (
id BIGINT NOT NULL COMMENT '入库计划ID(雪花ID) ' ,
plan_no VARCHAR ( 32 ) NOT NULL COMMENT '入库单号' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '租户/客户账号标识' ,
2026-08-20 13:34:34 +08:00
source_order_id BIGINT NOT NULL COMMENT '来源尾程订单ID,一张入仓单对应一张入库计划' ,
2026-08-19 16:24:02 +08:00
container_no VARCHAR ( 64 ) NOT NULL COMMENT '集装箱号' ,
2026-08-24 21:46:19 +08:00
overseas_warehouse_id BIGINT NULL COMMENT '海外实际收货共享物理仓ID,由PDA认领柜号时冻结' ,
2026-08-19 16:24:02 +08:00
status VARCHAR ( 32 ) NOT NULL DEFAULT 'PLANNED' COMMENT '入库计划状态' ,
line_count INT NOT NULL DEFAULT 0 COMMENT '入仓码明细数量' ,
pallet_count INT NOT NULL DEFAULT 0 COMMENT '系统自动分配托盘数量' ,
total_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 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_inbound_plan_no ( plan_no ),
2026-08-20 13:34:34 +08:00
UNIQUE KEY uk_ll_inbound_plan_source_order ( customer_id , source_order_id ),
KEY idx_ll_inbound_plan_container ( customer_id , container_no )
) ENGINE = InnoDB COMMENT = '尾程入库计划表:每张来源入仓单生成一张入库计划,同柜计划共享集装箱号' ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_inbound_plan_line (
id BIGINT NOT NULL COMMENT '入库计划明细ID(雪花ID) ' ,
2026-08-24 17:15:48 +08:00
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ,
2026-08-19 16:24:02 +08:00
plan_id BIGINT NOT NULL COMMENT '入库计划ID' ,
order_id BIGINT NOT NULL COMMENT '尾程订单ID' ,
inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '头程入仓码快照' ,
2026-08-24 17:15:48 +08:00
destination_type VARCHAR ( 32 ) NOT NULL DEFAULT 'OVERSEAS' COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码' ,
2026-08-19 16:24:02 +08:00
destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID快照' ,
destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码快照' ,
destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' ,
volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '入仓码体积(立方米)' ,
planned_pallet_count INT NOT NULL DEFAULT 0 COMMENT '该明细分配的托盘数量' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_inbound_line_order ( plan_id , order_id ),
2026-08-24 17:37:15 +08:00
KEY idx_ll_inbound_line_plan ( plan_id ),
KEY idx_ll_inbound_line_customer_plan ( customer_id , plan_id )
2026-08-19 16:24:02 +08:00
) ENGINE = InnoDB COMMENT = '尾程入库计划明细表:按入仓码和尾程订单维度记录' ;
2026-08-20 13:34:34 +08:00
CREATE TABLE IF NOT EXISTS ll_inbound_plan_carton (
id BIGINT NOT NULL COMMENT '箱唛作业主键' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
2026-08-22 10:16:45 +08:00
order_id BIGINT NULL COMMENT '生成尾程订单时绑定的尾程订单ID' , source_inbound_detail_id VARCHAR ( 128 ) NOT NULL COMMENT '来源入库明细ID' ,
2026-08-20 13:34:34 +08:00
sku_code VARCHAR ( 128 ) NULL COMMENT 'SKU编码快照' , carton_mark VARCHAR ( 128 ) NOT NULL COMMENT '国内冻结箱唛' ,
destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID快照' , destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码快照' ,
destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' , plan_id BIGINT NULL COMMENT '海外入库计划ID' ,
line_id BIGINT NULL COMMENT '入库计划明细ID' , plan_pallet_id BIGINT NULL COMMENT '海外计划托盘ID' , warehouse_pallet_id BIGINT NULL COMMENT '海外实物托盘ID' ,
warehouse_location_id BIGINT NULL COMMENT '海外库位ID' , pda_task_id BIGINT NULL COMMENT '首次扫码PDA任务ID' ,
2026-08-24 17:15:48 +08:00
status VARCHAR ( 32 ) NOT NULL COMMENT '箱唛状态:UNASSIGNED、ON_PALLET、BULK_RECEIVED、AVAILABLE' , version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' ,
2026-08-20 13:34:34 +08:00
bound_at DATETIME ( 3 ) NULL COMMENT '绑定托盘时间' , received_at DATETIME ( 3 ) NULL COMMENT '完成入库时间' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT '更新时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_inbound_carton_mark ( customer_id , carton_mark ),
KEY idx_ll_inbound_carton_plan ( plan_id , status ), KEY idx_ll_inbound_carton_pallet ( plan_pallet_id , status ),
KEY idx_ll_inbound_carton_order ( order_id , status )
) ENGINE = InnoDB COMMENT = '柜次冻结箱唛及海外入库箱级作业账' ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_inbound_plan_pallet (
id BIGINT NOT NULL COMMENT '计划托盘ID(雪花ID) ' ,
2026-08-24 17:37:15 +08:00
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ,
2026-08-19 16:24:02 +08:00
plan_id BIGINT NOT NULL COMMENT '入库计划ID' ,
pallet_no VARCHAR ( 64 ) NOT NULL COMMENT '计划托盘编号' ,
destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID快照' ,
destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码快照' ,
destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' ,
capacity_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 2 . 0000 COMMENT '托盘容量,固定为2立方米' ,
allocated_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '已分配体积(立方米)' ,
sequence_no INT NOT NULL COMMENT '计划内托盘序号' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_inbound_pallet_no ( pallet_no ),
UNIQUE KEY uk_ll_inbound_pallet_sequence ( plan_id , sequence_no ),
2026-08-24 17:37:15 +08:00
KEY idx_ll_inbound_pallet_plan ( plan_id ),
KEY idx_ll_inbound_pallet_customer_plan ( customer_id , plan_id )
2026-08-19 16:24:02 +08:00
) ENGINE = InnoDB COMMENT = '尾程入库计划托盘表:按目的仓隔离合托' ;
CREATE TABLE IF NOT EXISTS ll_inbound_plan_pallet_allocation (
id BIGINT NOT NULL COMMENT '托盘分配记录ID(雪花ID) ' ,
2026-08-24 17:37:15 +08:00
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ,
2026-08-19 16:24:02 +08:00
plan_id BIGINT NOT NULL COMMENT '入库计划ID' ,
line_id BIGINT NOT NULL COMMENT '入库计划明细ID' ,
pallet_id BIGINT NOT NULL COMMENT '计划托盘ID' ,
allocated_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT '该明细分配到托盘的体积(立方米)' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_inbound_allocation ( line_id , pallet_id ),
KEY idx_ll_inbound_allocation_plan ( plan_id ),
2026-08-24 17:37:15 +08:00
KEY idx_ll_inbound_allocation_customer_plan ( customer_id , plan_id ),
2026-08-19 16:24:02 +08:00
KEY idx_ll_inbound_allocation_pallet ( pallet_id )
) ENGINE = InnoDB COMMENT = '尾程入库计划托盘分配表:记录入仓码明细与计划托盘的分配关系' ;
2026-08-20 13:34:34 +08:00
-- 修复既有入库计划表的注释;历史“每柜一张计划”记录不在这里猜测拆分。
ALTER TABLE ll_inbound_plan COMMENT = '尾程入库计划表:每张来源入仓单生成一张入库计划,同柜计划共享集装箱号' ;
2026-08-20 15:20:05 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan' AND column_name = 'source_order_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan ADD COLUMN source_order_id BIGINT NOT NULL DEFAULT 0 COMMENT ''来源尾程订单ID,一张入仓单对应一张入库计划'' AFTER customer_id' ));
PREPARE inbound_plan_source_order_stmt FROM @ ddl ; EXECUTE inbound_plan_source_order_stmt ; DEALLOCATE PREPARE inbound_plan_source_order_stmt ;
2026-08-19 16:24:02 +08:00
ALTER TABLE ll_inbound_plan
MODIFY COLUMN id BIGINT NOT NULL COMMENT '入库计划ID(雪花ID) ' ,
MODIFY COLUMN plan_no VARCHAR ( 32 ) NOT NULL COMMENT '入库单号' ,
MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '租户/客户账号标识' ,
2026-08-20 13:34:34 +08:00
MODIFY COLUMN source_order_id BIGINT NOT NULL COMMENT '来源尾程订单ID,一张入仓单对应一张入库计划' ,
2026-08-19 16:24:02 +08:00
MODIFY COLUMN container_no VARCHAR ( 64 ) NOT NULL COMMENT '集装箱号' ,
MODIFY COLUMN status VARCHAR ( 32 ) NOT NULL DEFAULT 'PLANNED' COMMENT '入库计划状态' ,
MODIFY COLUMN line_count INT NOT NULL DEFAULT 0 COMMENT '入仓码明细数量' ,
MODIFY COLUMN pallet_count INT NOT NULL DEFAULT 0 COMMENT '系统自动分配托盘数量' ,
MODIFY COLUMN total_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '集装箱总体积(立方米)' ,
MODIFY COLUMN created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
MODIFY COLUMN updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) ON UPDATE CURRENT_TIMESTAMP ( 3 ) COMMENT '更新时间' ;
ALTER TABLE ll_inbound_plan_line COMMENT = '尾程入库计划明细表:按入仓码和尾程订单维度记录' ;
ALTER TABLE ll_inbound_plan_line
MODIFY COLUMN id BIGINT NOT NULL COMMENT '入库计划明细ID(雪花ID) ' ,
2026-08-24 17:37:15 +08:00
MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ,
2026-08-19 16:24:02 +08:00
MODIFY COLUMN plan_id BIGINT NOT NULL COMMENT '入库计划ID' ,
MODIFY COLUMN order_id BIGINT NOT NULL COMMENT '尾程订单ID' ,
MODIFY COLUMN inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '头程入仓码快照' ,
2026-08-24 17:37:15 +08:00
MODIFY COLUMN destination_type VARCHAR ( 32 ) NOT NULL DEFAULT 'OVERSEAS' COMMENT '目的类型:FBA按箱数接收、OVERSEAS逐箱扫码' ,
2026-08-19 16:24:02 +08:00
MODIFY COLUMN destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID快照' ,
MODIFY COLUMN destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码快照' ,
MODIFY COLUMN destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' ,
MODIFY COLUMN volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '入仓码体积(立方米)' ,
MODIFY COLUMN planned_pallet_count INT NOT NULL DEFAULT 0 COMMENT '该明细分配的托盘数量' ;
ALTER TABLE ll_inbound_plan_pallet COMMENT = '尾程入库计划托盘表:按目的仓隔离合托' ;
ALTER TABLE ll_inbound_plan_pallet
MODIFY COLUMN id BIGINT NOT NULL COMMENT '计划托盘ID(雪花ID) ' ,
MODIFY COLUMN plan_id BIGINT NOT NULL COMMENT '入库计划ID' ,
MODIFY COLUMN pallet_no VARCHAR ( 64 ) NOT NULL COMMENT '计划托盘编号' ,
MODIFY COLUMN destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID快照' ,
MODIFY COLUMN destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码快照' ,
MODIFY COLUMN destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' ,
MODIFY COLUMN capacity_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 2 . 0000 COMMENT '托盘容量,固定为2立方米' ,
MODIFY COLUMN allocated_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '已分配体积(立方米)' ,
MODIFY COLUMN sequence_no INT NOT NULL COMMENT '计划内托盘序号' ;
ALTER TABLE ll_inbound_plan_pallet_allocation COMMENT = '尾程入库计划托盘分配表:记录入仓码明细与计划托盘的分配关系' ;
ALTER TABLE ll_inbound_plan_pallet_allocation
MODIFY COLUMN id BIGINT NOT NULL COMMENT '托盘分配记录ID(雪花ID) ' ,
MODIFY COLUMN plan_id BIGINT NOT NULL COMMENT '入库计划ID' ,
MODIFY COLUMN line_id BIGINT NOT NULL COMMENT '入库计划明细ID' ,
MODIFY COLUMN pallet_id BIGINT NOT NULL COMMENT '计划托盘ID' ,
MODIFY COLUMN allocated_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL COMMENT '该明细分配到托盘的体积(立方米)' ;
-- Additive inbound picking schema. Guarded statements preserve existing rows on restart.
ALTER TABLE ll_inbound_plan MODIFY COLUMN status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_ASSIGNMENT' ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_line' AND column_name = 'required_package_count' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_line ADD COLUMN required_package_count INT NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'warehouse_pallet_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN warehouse_pallet_id BIGINT NULL' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'warehouse_location_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN warehouse_location_id BIGINT NULL' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'warehouse_resource_lock_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN warehouse_resource_lock_id BIGINT NULL' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'assignment_status' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN assignment_status VARCHAR(32) NOT NULL DEFAULT ''UNASSIGNED''' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'locked_at' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN locked_at DATETIME(3) NULL' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'actual_volume_cbm' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN actual_volume_cbm DECIMAL(18,4) NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'actual_package_count' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN actual_package_count INT NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'planned_package_count' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN planned_package_count INT NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'counted_package_count' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN counted_package_count INT NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'picked_package_count' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN picked_package_count INT NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'actual_volume_cbm' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN actual_volume_cbm DECIMAL(18,4) NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'status' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN status VARCHAR(32) NOT NULL DEFAULT ''PENDING_COUNT''' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'version' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN version INT NOT NULL DEFAULT 0' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
CREATE TABLE IF NOT EXISTS ll_inbound_pda_task (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , plan_id BIGINT NOT NULL COMMENT '入仓计划ID' ,
task_no VARCHAR ( 64 ) NOT NULL COMMENT 'PDA任务号' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING' COMMENT '业务状态' ,
operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' , operator_name VARCHAR ( 255 ) NULL COMMENT '操作人姓名' ,
pushed_at DATETIME ( 3 ) NULL COMMENT '任务下发时间' , started_at DATETIME ( 3 ) NULL COMMENT '开始时间' , completed_at DATETIME ( 3 ) NULL COMMENT '完成时间' ,
2026-08-20 15:20:05 +08:00
unload_photo_file_ids JSON NULL COMMENT '卸柜照片文件ID列表' , unload_photo_uploaded_at DATETIME ( 3 ) NULL COMMENT '卸柜照片上传成功时间' ,
estimated_empty_return_at DATETIME ( 3 ) NULL COMMENT '预计报空时间(卸柜照片上传成功后两天)' ,
2026-08-19 16:24:02 +08:00
version INT NOT NULL DEFAULT 0 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_inbound_pda_task_plan ( customer_id , plan_id ),
UNIQUE KEY uk_ll_inbound_pda_task_no ( task_no )
) ENGINE = InnoDB COMMENT = '入仓PDA作业任务' ;
2026-08-20 15:20:05 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_pda_task' AND column_name = 'unload_photo_file_ids' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_pda_task ADD COLUMN unload_photo_file_ids JSON NULL COMMENT ''卸柜照片文件ID列表'' AFTER completed_at' ));
PREPARE inbound_pda_photo_stmt FROM @ ddl ; EXECUTE inbound_pda_photo_stmt ; DEALLOCATE PREPARE inbound_pda_photo_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_pda_task' AND column_name = 'unload_photo_uploaded_at' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_pda_task ADD COLUMN unload_photo_uploaded_at DATETIME(3) NULL COMMENT ''卸柜照片上传成功时间'' AFTER unload_photo_file_ids' ));
PREPARE inbound_pda_photo_stmt FROM @ ddl ; EXECUTE inbound_pda_photo_stmt ; DEALLOCATE PREPARE inbound_pda_photo_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_pda_task' AND column_name = 'estimated_empty_return_at' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_pda_task ADD COLUMN estimated_empty_return_at DATETIME(3) NULL COMMENT ''预计报空时间(卸柜照片上传成功后两天)'' AFTER unload_photo_uploaded_at' ));
PREPARE inbound_pda_photo_stmt FROM @ ddl ; EXECUTE inbound_pda_photo_stmt ; DEALLOCATE PREPARE inbound_pda_photo_stmt ;
CREATE TABLE IF NOT EXISTS ll_event_outbox (
id BIGINT NOT NULL COMMENT '事件主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
aggregate_type VARCHAR ( 64 ) NOT NULL COMMENT '聚合类型' , aggregate_id VARCHAR ( 128 ) NOT NULL COMMENT '聚合标识' ,
event_type VARCHAR ( 64 ) NOT NULL COMMENT '事件类型' , event_version INT NOT NULL COMMENT '事件版本' ,
event_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , payload_json LONGTEXT NOT NULL COMMENT '事件载荷JSON' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING' COMMENT '发布状态' , retry_count INT NOT NULL DEFAULT 0 COMMENT '重试次数' ,
next_retry_at DATETIME ( 3 ) NULL COMMENT '下次重试时间' , published_at DATETIME ( 3 ) NULL COMMENT '发布时间' ,
2026-08-20 18:02:38 +08:00
locked_at DATETIME ( 3 ) NULL COMMENT '投递租约获取时间' , locked_by VARCHAR ( 128 ) NULL COMMENT '投递租约持有者' ,
2026-08-20 15:20:05 +08:00
last_error VARCHAR ( 1000 ) NULL COMMENT '最后一次发布错误' , created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_event_outbox_key ( event_key ),
KEY idx_ll_event_outbox_publish ( status , next_retry_at , created_at )
) ENGINE = InnoDB COMMENT = '尾程跨区业务事件发件箱' ;
2026-08-20 18:02:38 +08:00
CREATE TABLE IF NOT EXISTS ll_overseas_quote (
id BIGINT NOT NULL COMMENT '报价ID' , name VARCHAR ( 128 ) NOT NULL COMMENT '报价名称' ,
warehouse_id BIGINT NOT NULL COMMENT '国内平台海外合作仓ID' , warehouse_code VARCHAR ( 64 ) NOT NULL COMMENT '合作仓编码快照' ,
warehouse_name VARCHAR ( 128 ) NOT NULL COMMENT '合作仓名称快照' , country_code VARCHAR ( 2 ) NOT NULL COMMENT '国家二字码快照' ,
provider_name VARCHAR ( 128 ) NOT NULL COMMENT '报价方' , currency CHAR ( 3 ) NOT NULL COMMENT '币种' ,
effective_start DATE NOT NULL COMMENT '生效开始日期' , effective_end DATE NOT NULL COMMENT '生效结束日期' ,
version_code VARCHAR ( 64 ) NOT NULL COMMENT '业务版本号' , status VARCHAR ( 16 ) NOT NULL DEFAULT 'INACTIVE' COMMENT '状态:ACTIVE/INACTIVE' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' , record_version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' ,
created_by VARCHAR ( 128 ) NOT NULL COMMENT '创建人' , updated_by VARCHAR ( 128 ) NOT NULL COMMENT '更新人' ,
created_at DATETIME ( 3 ) NOT NULL COMMENT '创建时间' , updated_at DATETIME ( 3 ) NOT NULL COMMENT '更新时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_quote_warehouse_provider_version ( warehouse_id , provider_name , version_code ),
KEY idx_ll_quote_page ( status , updated_at , id ), KEY idx_ll_quote_effective ( warehouse_id , provider_name , currency , effective_start , effective_end )
) ENGINE = InnoDB COMMENT = '海外仓报价主表' ;
CREATE TABLE IF NOT EXISTS ll_overseas_quote_fee (
id BIGINT NOT NULL COMMENT '费用明细ID' , quote_id BIGINT NOT NULL COMMENT '报价ID' , sequence_no INT NOT NULL COMMENT '显示顺序' ,
item VARCHAR ( 128 ) NOT NULL COMMENT '费用项目' , billing_unit VARCHAR ( 64 ) NOT NULL COMMENT '计费单位' ,
unit_price DECIMAL ( 18 , 4 ) NOT NULL COMMENT '单价' , minimum_charge DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '最低收费' ,
remark VARCHAR ( 500 ) NULL COMMENT '备注' , PRIMARY KEY ( id ), UNIQUE KEY uk_ll_quote_fee_sequence ( quote_id , sequence_no ),
KEY idx_ll_quote_fee_quote ( quote_id )
) ENGINE = InnoDB COMMENT = '海外仓报价仓库费用' ;
CREATE TABLE IF NOT EXISTS ll_overseas_quote_transit_price (
id BIGINT NOT NULL COMMENT '中转价格ID' , quote_id BIGINT NOT NULL COMMENT '报价ID' , sequence_no INT NOT NULL COMMENT '显示顺序' ,
fba_warehouse_code VARCHAR ( 64 ) NOT NULL COMMENT 'FBA仓编码' , delivery_method VARCHAR ( 64 ) NOT NULL COMMENT '报价运输方式' ,
estimated_miles DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '预估英里数' , price DECIMAL ( 18 , 4 ) NOT NULL COMMENT '报价金额' ,
minimum_charge DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '最低收费' , remark VARCHAR ( 500 ) NULL COMMENT '备注' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_quote_transit_sequence ( quote_id , sequence_no ),
KEY idx_ll_quote_transit_quote ( quote_id )
) ENGINE = InnoDB COMMENT = '海外仓报价中转价格明细' ;
CREATE TABLE IF NOT EXISTS ll_monthly_exchange_rate (
id BIGINT NOT NULL COMMENT '月度汇率ID' , rate_month CHAR ( 7 ) NOT NULL COMMENT '汇率月份,格式yyyy-MM' ,
base_currency CHAR ( 3 ) NOT NULL DEFAULT 'USD' COMMENT '基准币种' , quote_currency CHAR ( 3 ) NOT NULL DEFAULT 'CNY' COMMENT '报价币种' ,
usd_to_cny_average DECIMAL ( 18 , 8 ) NOT NULL COMMENT '美元兑人民币月平均汇率' , status VARCHAR ( 16 ) NOT NULL DEFAULT 'ACTIVE' COMMENT '状态:ACTIVE/INACTIVE' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' , record_version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' ,
created_by VARCHAR ( 128 ) NOT NULL COMMENT '创建人' , updated_by VARCHAR ( 128 ) NOT NULL COMMENT '更新人' ,
created_at DATETIME ( 3 ) NOT NULL COMMENT '创建时间' , updated_at DATETIME ( 3 ) NOT NULL COMMENT '更新时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_exchange_rate_month ( rate_month ),
KEY idx_ll_exchange_rate_page ( status , rate_month )
) ENGINE = InnoDB COMMENT = '美元兑人民币月度平均汇率' ;
CREATE TABLE IF NOT EXISTS ll_monthly_exchange_rate_history (
id BIGINT NOT NULL COMMENT '汇率变更历史ID' , exchange_rate_id BIGINT NOT NULL COMMENT '月度汇率ID' ,
before_rate DECIMAL ( 18 , 8 ) NULL COMMENT '变更前汇率' , after_rate DECIMAL ( 18 , 8 ) NOT NULL COMMENT '变更后汇率' ,
before_status VARCHAR ( 16 ) NULL COMMENT '变更前状态' , after_status VARCHAR ( 16 ) NOT NULL COMMENT '变更后状态' ,
operator_id VARCHAR ( 128 ) NOT NULL COMMENT '操作人' , remark VARCHAR ( 1000 ) NULL COMMENT '变更说明' ,
created_at DATETIME ( 3 ) NOT NULL COMMENT '创建时间' , PRIMARY KEY ( id ),
KEY idx_ll_exchange_rate_history ( exchange_rate_id , created_at )
) ENGINE = InnoDB COMMENT = '月度汇率变更历史' ;
CREATE TABLE IF NOT EXISTS ll_vehicle (
id BIGINT NOT NULL COMMENT '车辆档案ID' , plate_number VARCHAR ( 64 ) NOT NULL COMMENT '车牌号' ,
model VARCHAR ( 128 ) NOT NULL COMMENT '车型' , fuel_consumption_per100_km DECIMAL ( 10 , 2 ) NOT NULL COMMENT '百公里油耗,单位升' ,
mileage_km BIGINT NOT NULL COMMENT '当前公里码,单位公里' , driver_or_dispatch_company VARCHAR ( 128 ) NULL COMMENT '司机姓名或外派单位' ,
phone VARCHAR ( 64 ) NULL COMMENT '司机或外派单位联系电话' , region VARCHAR ( 16 ) NOT NULL COMMENT '区域:DOMESTIC/OVERSEAS' ,
ownership VARCHAR ( 16 ) NOT NULL COMMENT '车辆归属:OWNED/DISPATCHED' ,
status VARCHAR ( 32 ) NOT NULL COMMENT '状态:IN_SERVICE/DISPATCHED/MAINTENANCE/INACTIVE/RETURNED' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' , record_version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' ,
created_by VARCHAR ( 128 ) NOT NULL COMMENT '创建人' , updated_by VARCHAR ( 128 ) NOT NULL COMMENT '更新人' ,
created_at DATETIME ( 3 ) NOT NULL COMMENT '创建时间' , updated_at DATETIME ( 3 ) NOT NULL COMMENT '更新时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_vehicle_plate ( plate_number ),
KEY idx_ll_vehicle_page ( ownership , region , status , updated_at , id )
) ENGINE = InnoDB COMMENT = '平台车辆主数据' ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_event_outbox' AND column_name = 'locked_at' ), 'SELECT 1' , 'ALTER TABLE ll_event_outbox ADD COLUMN locked_at DATETIME(3) NULL COMMENT ''投递租约获取时间'' AFTER published_at' ));
PREPARE ll_outbox_lease_stmt FROM @ ddl ; EXECUTE ll_outbox_lease_stmt ; DEALLOCATE PREPARE ll_outbox_lease_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_event_outbox' AND column_name = 'locked_by' ), 'SELECT 1' , 'ALTER TABLE ll_event_outbox ADD COLUMN locked_by VARCHAR(128) NULL COMMENT ''投递租约持有者'' AFTER locked_at' ));
PREPARE ll_outbox_lease_stmt FROM @ ddl ; EXECUTE ll_outbox_lease_stmt ; DEALLOCATE PREPARE ll_outbox_lease_stmt ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_inbound_pda_operation (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , task_id BIGINT NOT NULL COMMENT 'PDA任务ID' ,
allocation_id BIGINT NULL COMMENT '分配记录ID' , action VARCHAR ( 32 ) NOT NULL COMMENT '操作动作' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' ,
request_hash VARCHAR ( 128 ) NOT NULL COMMENT '请求内容哈希' , request_json LONGTEXT NOT NULL COMMENT '请求内容JSON' , result_json LONGTEXT NOT NULL COMMENT '处理结果JSON' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_inbound_pda_operation_key ( customer_id , idempotency_key ),
KEY idx_ll_inbound_pda_operation_task ( task_id ), KEY idx_ll_inbound_pda_operation_allocation ( allocation_id )
) ENGINE = InnoDB COMMENT = '入仓PDA操作幂等记录' ;
CREATE TABLE IF NOT EXISTS ll_inbound_pallet_merge (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , task_id BIGINT NOT NULL COMMENT 'PDA任务ID' ,
merge_group_no VARCHAR ( 64 ) NOT NULL COMMENT '合托分组号' , source_pallet_id BIGINT NOT NULL COMMENT '来源托盘ID' , target_pallet_id BIGINT NOT NULL COMMENT '目标托盘ID' ,
source_allocation_id BIGINT NOT NULL COMMENT '来源分配记录ID' , target_allocation_id BIGINT NOT NULL COMMENT '目标分配记录ID' ,
source_line_id BIGINT NOT NULL COMMENT '来源计划明细ID' , target_line_id BIGINT NOT NULL COMMENT '目标计划明细ID' ,
source_order_id BIGINT NOT NULL COMMENT '来源订单ID' , target_order_id BIGINT NOT NULL COMMENT '目标订单ID' ,
moved_package_count INT NOT NULL COMMENT '移动箱数' , moved_volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '移动体积(立方米)' ,
source_pallet_scrapped TINYINT NOT NULL DEFAULT 0 COMMENT '来源托盘是否已报废' , status VARCHAR ( 32 ) NOT NULL COMMENT '业务状态' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
KEY idx_ll_inbound_merge_task ( customer_id , task_id ), KEY idx_ll_inbound_merge_group ( merge_group_no )
) ENGINE = InnoDB COMMENT = '入仓托盘合托记录' ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_line' AND column_name = 'fba_warehouse_code' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_line ADD COLUMN fba_warehouse_code VARCHAR(128) NULL AFTER inbound_code' ));
PREPARE inbound_schema_stmt FROM @ ddl ; EXECUTE inbound_schema_stmt ; DEALLOCATE PREPARE inbound_schema_stmt ;
2026-08-24 17:37:15 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_line' AND column_name = 'customer_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_line ADD COLUMN customer_id VARCHAR(128) NOT NULL DEFAULT '''' COMMENT ''客户账号标识'' AFTER id' ));
2026-08-24 17:15:48 +08:00
PREPARE receiving_container_line_stmt FROM @ ddl ; EXECUTE receiving_container_line_stmt ; DEALLOCATE PREPARE receiving_container_line_stmt ;
2026-08-24 17:48:08 +08:00
UPDATE ll_inbound_plan_line l JOIN ll_inbound_plan p ON p . id = l . plan_id SET l . customer_id = p . customer_id WHERE l . customer_id IS NULL OR l . customer_id = '' ;
2026-08-24 17:15:48 +08:00
ALTER TABLE ll_inbound_plan_line MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ;
2026-08-24 17:37:15 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . statistics WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_line' AND index_name = 'idx_ll_inbound_line_customer_plan' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_line ADD KEY idx_ll_inbound_line_customer_plan(customer_id,plan_id)' ));
PREPARE inbound_customer_scope_stmt FROM @ ddl ; EXECUTE inbound_customer_scope_stmt ; DEALLOCATE PREPARE inbound_customer_scope_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND column_name = 'customer_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD COLUMN customer_id VARCHAR(128) NOT NULL DEFAULT '''' COMMENT ''客户账号标识'' AFTER id' ));
PREPARE inbound_customer_scope_stmt FROM @ ddl ; EXECUTE inbound_customer_scope_stmt ; DEALLOCATE PREPARE inbound_customer_scope_stmt ;
2026-08-24 17:48:08 +08:00
UPDATE ll_inbound_plan_pallet v JOIN ll_inbound_plan p ON p . id = v . plan_id SET v . customer_id = p . customer_id WHERE v . customer_id IS NULL OR v . customer_id = '' ;
2026-08-24 17:37:15 +08:00
ALTER TABLE ll_inbound_plan_pallet MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . statistics WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet' AND index_name = 'idx_ll_inbound_pallet_customer_plan' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet ADD KEY idx_ll_inbound_pallet_customer_plan(customer_id,plan_id)' ));
PREPARE inbound_customer_scope_stmt FROM @ ddl ; EXECUTE inbound_customer_scope_stmt ; DEALLOCATE PREPARE inbound_customer_scope_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND column_name = 'customer_id' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD COLUMN customer_id VARCHAR(128) NOT NULL DEFAULT '''' COMMENT ''客户账号标识'' AFTER id' ));
PREPARE inbound_customer_scope_stmt FROM @ ddl ; EXECUTE inbound_customer_scope_stmt ; DEALLOCATE PREPARE inbound_customer_scope_stmt ;
2026-08-24 17:48:08 +08:00
UPDATE ll_inbound_plan_pallet_allocation a JOIN ll_inbound_plan p ON p . id = a . plan_id SET a . customer_id = p . customer_id WHERE a . customer_id IS NULL OR a . customer_id = '' ;
2026-08-24 17:37:15 +08:00
ALTER TABLE ll_inbound_plan_pallet_allocation MODIFY COLUMN customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . statistics WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_pallet_allocation' AND index_name = 'idx_ll_inbound_allocation_customer_plan' ), 'SELECT 1' , 'ALTER TABLE ll_inbound_plan_pallet_allocation ADD KEY idx_ll_inbound_allocation_customer_plan(customer_id,plan_id)' ));
PREPARE inbound_customer_scope_stmt FROM @ ddl ; EXECUTE inbound_customer_scope_stmt ; DEALLOCATE PREPARE inbound_customer_scope_stmt ;
2026-08-24 17:48:08 +08:00
DROP PROCEDURE IF EXISTS assert_inbound_plan_customer_scope_ready ;
DELIMITER $$
CREATE PROCEDURE assert_inbound_plan_customer_scope_ready ()
BEGIN
IF EXISTS ( SELECT 1 FROM ll_inbound_plan_line l LEFT JOIN ll_inbound_plan p ON p . id = l . plan_id WHERE l . customer_id IS NULL OR l . customer_id = '' OR p . id IS NULL OR l . customer_id <> p . customer_id )
OR EXISTS ( SELECT 1 FROM ll_inbound_plan_pallet v LEFT JOIN ll_inbound_plan p ON p . id = v . plan_id WHERE v . customer_id IS NULL OR v . customer_id = '' OR p . id IS NULL OR v . customer_id <> p . customer_id )
OR EXISTS ( SELECT 1 FROM ll_inbound_plan_pallet_allocation a LEFT JOIN ll_inbound_plan p ON p . id = a . plan_id WHERE a . customer_id IS NULL OR a . customer_id = '' OR p . id IS NULL OR a . customer_id <> p . customer_id ) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Inbound plan child customer scope migration is incomplete' ;
END IF ;
END $$
DELIMITER ;
CALL assert_inbound_plan_customer_scope_ready ();
DROP PROCEDURE assert_inbound_plan_customer_scope_ready ;
2026-08-24 17:15:48 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_inbound_plan_line' AND column_name = 'destination_type' ), 'ALTER TABLE ll_inbound_plan_line MODIFY COLUMN destination_type VARCHAR(32) NOT NULL DEFAULT ''OVERSEAS'' COMMENT ''目的类型:FBA按箱数接收、OVERSEAS逐箱扫码''' , 'ALTER TABLE ll_inbound_plan_line ADD COLUMN destination_type VARCHAR(32) NOT NULL DEFAULT ''OVERSEAS'' COMMENT ''目的类型:FBA按箱数接收、OVERSEAS逐箱扫码'' AFTER inbound_code' ));
PREPARE receiving_container_line_stmt FROM @ ddl ; EXECUTE receiving_container_line_stmt ; DEALLOCATE PREPARE receiving_container_line_stmt ;
2026-08-19 16:24:02 +08:00
UPDATE ll_inbound_plan_line l JOIN ll_order o ON o . id = l . order_id
2026-08-24 17:15:48 +08:00
SET l . fba_warehouse_code = o . fba_warehouse_code ,
l . destination_type = COALESCE ( NULLIF ( o . destination_type , '' ), CASE WHEN NULLIF ( o . fba_warehouse_code , '' ) IS NULL THEN 'OVERSEAS' ELSE 'FBA' END )
WHERE ( l . fba_warehouse_code IS NULL AND o . fba_warehouse_code IS NOT NULL )
OR l . destination_type IS NULL OR l . destination_type = '' OR l . destination_type = 'OVERSEAS' ;
CREATE TABLE IF NOT EXISTS ll_receiving_container_session (
2026-08-24 21:00:22 +08:00
id BIGINT NOT NULL COMMENT '柜号签收会话ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '所选柜解析出的客户标识' ,
2026-08-24 21:46:19 +08:00
container_no VARCHAR ( 64 ) NOT NULL COMMENT '集装箱号' , overseas_warehouse_id BIGINT NOT NULL COMMENT '操作员Token绑定并冻结的海外实际收货共享物理仓ID' , overseas_warehouse_name VARCHAR ( 255 ) NOT NULL COMMENT '仓库服务校验后的海外实际收货共享物理仓名称快照' , operator_key VARCHAR ( 128 ) NOT NULL COMMENT '操作账号唯一标识' ,
2026-08-24 21:00:22 +08:00
operator_name VARCHAR ( 255 ) NULL COMMENT '操作账号名称' , active_operator_key VARCHAR ( 255 ) NULL COMMENT '未完成会话平台操作账号全局唯一锁键' ,
active_container_key VARCHAR ( 255 ) NULL COMMENT '未完成会话柜号全局唯一锁键' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'WAIT_SIGN' COMMENT '会话状态:WAIT_SIGN、SIGNED、RECEIVING、COMPLETED' ,
2026-08-24 19:28:32 +08:00
sign_photos JSON NULL COMMENT '签收卸柜照片角色与文件ID列表' , prepared_at DATETIME ( 3 ) NULL COMMENT '选择柜号时间' ,
2026-08-24 17:15:48 +08:00
signed_at DATETIME ( 3 ) NULL COMMENT '签收时间' , receiving_at DATETIME ( 3 ) 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 '更新时间' , version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_receiving_active_operator ( active_operator_key ), UNIQUE KEY uk_ll_receiving_active_container ( active_container_key ),
KEY idx_ll_receiving_container ( customer_id , container_no , status ), KEY idx_ll_receiving_operator ( customer_id , operator_key , created_at )
) ENGINE = InnoDB COMMENT = '海外PDA柜号签收收货会话' ;
2026-08-24 19:28:32 +08:00
CREATE TABLE IF NOT EXISTS ll_receiving_sku_receipt (
id BIGINT NOT NULL COMMENT 'FBA SKU实收进度ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ,
session_id BIGINT NOT NULL COMMENT '柜号签收会话ID' , plan_id BIGINT NOT NULL COMMENT '入仓计划ID' ,
line_id BIGINT NOT NULL COMMENT '入仓计划明细ID' , pallet_id BIGINT NOT NULL COMMENT '计划托盘ID' ,
order_id BIGINT NOT NULL COMMENT '尾程订单ID' , inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓码快照' ,
sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码快照' , product_name VARCHAR ( 255 ) NULL COMMENT '产品名称快照' ,
received_packages INT NOT NULL COMMENT 'SKU实收箱数' , 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 '更新时间' ,
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' , PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_receiving_sku_pallet ( customer_id , line_id , pallet_id , sku_code ),
KEY idx_ll_receiving_sku_session ( customer_id , session_id , line_id ),
KEY idx_ll_receiving_sku_plan ( customer_id , plan_id , line_id )
) ENGINE = InnoDB COMMENT = '海外PDA柜号FBA SKU实收进度' ;
2026-08-24 17:15:48 +08:00
CREATE TABLE IF NOT EXISTS ll_receiving_container_operation (
id BIGINT NOT NULL COMMENT '柜号收货操作ID' , session_id BIGINT NOT NULL COMMENT '柜号签收会话ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户账号标识' ,
operator_key VARCHAR ( 128 ) NOT NULL COMMENT '操作账号唯一标识' , action VARCHAR ( 32 ) NOT NULL COMMENT '操作动作' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '客户端幂等键' ,
request_hash VARCHAR ( 128 ) NOT NULL COMMENT '请求内容哈希' , request_json LONGTEXT NOT NULL COMMENT '请求内容快照' , result_json LONGTEXT NOT NULL COMMENT '响应内容快照' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
2026-08-24 21:00:22 +08:00
UNIQUE KEY uk_ll_receiving_operation ( operator_key , idempotency_key ), KEY idx_ll_receiving_operation_session ( session_id , created_at )
2026-08-24 17:15:48 +08:00
) ENGINE = InnoDB COMMENT = '海外PDA柜号收货幂等审计记录' ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_inbound_fba_appointment (
id BIGINT NOT NULL COMMENT '主键ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
appointment_no VARCHAR ( 64 ) NOT NULL COMMENT '预约单号' ,
appointment_at DATETIME ( 3 ) NOT NULL COMMENT '预约时间' ,
2026-08-20 18:06:07 +08:00
expected_loading_at DATETIME ( 3 ) NOT NULL COMMENT '预计装车时间' ,
2026-08-19 16:24:02 +08:00
appointment_status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING' COMMENT '预约状态' ,
appointment_remark VARCHAR ( 1000 ) NULL COMMENT '预约备注' ,
fba_warehouse_code VARCHAR ( 128 ) NOT NULL COMMENT 'FBA仓库编码' ,
selected_count INT NOT NULL DEFAULT 0 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_fba_appointment_no ( customer_id , appointment_no ),
KEY idx_ll_fba_appointment_list ( customer_id , appointment_status , fba_warehouse_code , created_at )
) ENGINE = InnoDB COMMENT = 'FBA入仓预约单' ;
CREATE TABLE IF NOT EXISTS ll_inbound_fba_appointment_item (
id BIGINT NOT NULL COMMENT '主键ID' ,
appointment_id BIGINT NOT NULL COMMENT '预约单ID' ,
plan_id BIGINT NOT NULL COMMENT '入仓计划ID' ,
line_id BIGINT NOT NULL COMMENT '入仓计划明细ID' ,
order_id BIGINT NOT NULL COMMENT '订单ID' ,
inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓单号快照' ,
fba_warehouse_code VARCHAR ( 128 ) NOT NULL COMMENT 'FBA仓库编码' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_fba_appointment_item_line ( appointment_id , line_id ),
KEY idx_ll_fba_appointment_item_plan ( plan_id ),
KEY idx_ll_fba_appointment_item_order ( order_id )
) ENGINE = InnoDB COMMENT = 'FBA入仓预约明细' ;
ALTER TABLE ll_loading_order_status_history
MODIFY COLUMN id BIGINT NOT NULL AUTO_INCREMENT COMMENT '状态历史主键' ,
MODIFY COLUMN order_id BIGINT NOT NULL COMMENT '尾程订单 ID' ,
MODIFY COLUMN from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' ,
MODIFY COLUMN to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' ,
MODIFY COLUMN event_id VARCHAR ( 128 ) NULL COMMENT '触发事件 ID' ,
MODIFY COLUMN remark VARCHAR ( 500 ) NULL COMMENT '状态变更备注' ,
MODIFY COLUMN created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '记录时间' ;
CREATE TABLE IF NOT EXISTS ll_inventory_balance (
id BIGINT NOT NULL COMMENT '主键ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , customer_name VARCHAR ( 255 ) NULL COMMENT '客户名称快照' ,
overseas_warehouse_id VARCHAR ( 128 ) NOT NULL COMMENT '海外仓ID' ,
overseas_warehouse_code VARCHAR ( 128 ) NULL COMMENT '海外仓编码快照' ,
overseas_warehouse_name VARCHAR ( 255 ) NULL COMMENT '海外仓名称快照' ,
destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID' ,
destination_warehouse_code VARCHAR ( 128 ) NOT NULL DEFAULT '' COMMENT '目的仓编码快照' ,
destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' ,
inbound_order_id BIGINT NOT NULL COMMENT '入仓单ID' ,
inbound_order_no VARCHAR ( 128 ) NULL COMMENT '入仓单号快照' ,
inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓单号快照' ,
2026-08-22 10:16:45 +08:00
sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU快照;多SKU汇总时为MIXED,不参与当前库存唯一维度' ,
2026-08-20 18:02:38 +08:00
product_name_zh VARCHAR ( 255 ) NULL COMMENT '中文品名快照' ,
product_name_en VARCHAR ( 255 ) NULL COMMENT '英文品名快照' ,
2026-08-19 16:24:02 +08:00
available_packages BIGINT NOT NULL DEFAULT 0 COMMENT '可用箱数' , hold_packages BIGINT NOT NULL DEFAULT 0 COMMENT '冻结箱数' ,
allocated_packages BIGINT NOT NULL DEFAULT 0 COMMENT '已分配箱数' , picked_packages BIGINT NOT NULL DEFAULT 0 COMMENT '已拣箱数' ,
in_transit_packages BIGINT NOT NULL DEFAULT 0 COMMENT '在途箱数' , receiving_packages BIGINT NOT NULL DEFAULT 0 COMMENT '收货处理中箱数' ,
procurement_packages BIGINT NOT NULL DEFAULT 0 COMMENT '采购业务占用箱数' ,
version BIGINT NOT NULL DEFAULT 0 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 ),
2026-08-22 10:16:45 +08:00
UNIQUE KEY uk_ll_inventory_dimension ( customer_id , overseas_warehouse_id , destination_warehouse_code , inbound_order_id , inbound_code ),
2026-08-19 16:24:02 +08:00
KEY idx_ll_inventory_list ( customer_id , overseas_warehouse_id , updated_at ),
2026-08-20 18:02:38 +08:00
KEY idx_ll_inventory_inbound ( customer_id , inbound_code ),
KEY idx_ll_inventory_sku ( customer_id , sku_code , updated_at )
2026-08-22 10:16:45 +08:00
) ENGINE = InnoDB COMMENT = '客户入仓单与海外目的仓维度实时库存余额' ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_inventory_position (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , balance_id BIGINT NOT NULL COMMENT '库存余额记录ID' ,
overseas_warehouse_id VARCHAR ( 128 ) NOT NULL COMMENT '海外仓ID' , destination_warehouse_code VARCHAR ( 128 ) NOT NULL DEFAULT '' COMMENT '目的仓编码快照' ,
pallet_id BIGINT NOT NULL COMMENT '托盘ID' , pallet_no VARCHAR ( 64 ) NOT NULL COMMENT '托盘号' ,
batch_no VARCHAR ( 128 ) NOT NULL DEFAULT '' COMMENT '库存批次号' , warehouse_location_id BIGINT NULL COMMENT '仓库库位ID' ,
warehouse_location_code VARCHAR ( 128 ) NOT NULL COMMENT '仓库库位编码' ,
available_packages BIGINT NOT NULL DEFAULT 0 COMMENT '可用箱数' , hold_packages BIGINT NOT NULL DEFAULT 0 COMMENT '冻结箱数' ,
allocated_packages BIGINT NOT NULL DEFAULT 0 COMMENT '已分配箱数' , picked_packages BIGINT NOT NULL DEFAULT 0 COMMENT '已拣箱数' ,
receiving_packages BIGINT NOT NULL DEFAULT 0 COMMENT '收货处理中箱数' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'ACTIVE' COMMENT '业务状态' , version BIGINT NOT NULL DEFAULT 0 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_inventory_position ( balance_id , pallet_id , batch_no ),
KEY idx_ll_inventory_position_pallet ( customer_id , pallet_id ),
KEY idx_ll_inventory_position_location ( customer_id , overseas_warehouse_id , warehouse_location_code )
) ENGINE = InnoDB COMMENT = '托盘库位批次库存明细' ;
CREATE TABLE IF NOT EXISTS ll_inventory_ledger (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
balance_id BIGINT NOT NULL COMMENT '库存余额记录ID' , position_id BIGINT NULL COMMENT '库存仓位记录ID' , overseas_warehouse_id VARCHAR ( 128 ) NOT NULL COMMENT '海外仓ID' ,
destination_warehouse_code VARCHAR ( 128 ) NOT NULL DEFAULT '' COMMENT '目的仓编码快照' , inbound_order_id BIGINT NOT NULL COMMENT '入仓单ID' ,
pallet_id BIGINT NULL COMMENT '托盘ID' , pallet_no VARCHAR ( 64 ) NULL COMMENT '托盘号' , batch_no VARCHAR ( 128 ) NULL COMMENT '库存批次号' ,
warehouse_location_code VARCHAR ( 128 ) NULL COMMENT '仓库库位编码' , sku_code VARCHAR ( 128 ) NULL COMMENT 'SKU编码' , carton_mark VARCHAR ( 128 ) NULL COMMENT '箱唛' , carton_packages BIGINT NULL COMMENT '箱内箱数' ,
business_type VARCHAR ( 32 ) NOT NULL COMMENT '业务类型' ,
business_order_id BIGINT NULL COMMENT '业务单据ID' , business_order_no VARCHAR ( 128 ) NULL COMMENT '业务单号' , inbound_code VARCHAR ( 128 ) NULL COMMENT '入仓单号快照' ,
inbound_order_no VARCHAR ( 128 ) NULL COMMENT '入仓单号快照' , outbound_order_no VARCHAR ( 128 ) NULL COMMENT '出库单号' ,
source_event_id VARCHAR ( 128 ) NULL COMMENT '来源事件ID' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' ,
status_from VARCHAR ( 32 ) NULL COMMENT '操作前状态' , status_to VARCHAR ( 32 ) NULL COMMENT '操作后状态' ,
before_packages BIGINT NOT NULL COMMENT '变动前箱数' , delta_packages BIGINT NOT NULL COMMENT '箱数变动量' , after_packages BIGINT NOT NULL COMMENT '变动后箱数' ,
operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' , remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
occurred_at DATETIME ( 3 ) NOT NULL COMMENT '业务发生时间' , created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_inventory_ledger_idempotency ( customer_id , idempotency_key ),
KEY idx_ll_inventory_ledger_query ( customer_id , overseas_warehouse_id , occurred_at ),
KEY idx_ll_inventory_ledger_inbound ( customer_id , inbound_code , occurred_at ),
KEY idx_ll_inventory_ledger_business ( customer_id , business_type , business_order_no )
) ENGINE = InnoDB COMMENT = '不可变库存变动流水' ;
CREATE TABLE IF NOT EXISTS ll_inventory_operation (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , operation_type VARCHAR ( 32 ) NOT NULL COMMENT '操作类型' ,
request_hash VARCHAR ( 128 ) NOT NULL COMMENT '请求内容哈希' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'PROCESSING' COMMENT '库存命令处理状态' ,
result_json LONGTEXT NULL COMMENT '处理结果JSON' , last_error VARCHAR ( 2000 ) 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_inventory_operation_key ( customer_id , idempotency_key ),
KEY idx_ll_inventory_operation_status ( customer_id , status , updated_at )
) ENGINE = InnoDB COMMENT = '库存命令幂等记录' ;
CREATE TABLE IF NOT EXISTS ll_inbound_stock_receipt (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
plan_id BIGINT NOT NULL COMMENT '入仓计划ID' , task_id BIGINT NOT NULL COMMENT 'PDA任务ID' , allocation_id BIGINT NOT NULL COMMENT '分配记录ID' ,
line_id BIGINT NOT NULL COMMENT '入仓计划明细ID' , order_id BIGINT NOT NULL COMMENT '订单ID' , inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓单号快照' ,
2026-08-20 18:02:38 +08:00
sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码快照' , product_name_zh VARCHAR ( 255 ) NULL COMMENT '中文品名快照' ,
product_name_en VARCHAR ( 255 ) NULL COMMENT '英文品名快照' ,
2026-08-19 16:24:02 +08:00
warehouse_pallet_id BIGINT NOT NULL COMMENT '仓库实物托盘ID' , pallet_no VARCHAR ( 64 ) NOT NULL COMMENT '托盘号' ,
warehouse_location_id BIGINT NULL COMMENT '仓库库位ID' , warehouse_location_code VARCHAR ( 128 ) NULL COMMENT '仓库库位编码' ,
batch_no VARCHAR ( 128 ) NOT NULL COMMENT '库存批次号' , received_packages BIGINT NOT NULL COMMENT '实收箱数' ,
inventory_balance_id BIGINT NOT NULL COMMENT '库存余额记录ID' , inventory_position_id BIGINT NOT NULL COMMENT '库存仓位记录ID' ,
inventory_operation_key VARCHAR ( 255 ) NOT NULL COMMENT '库存操作幂等键' , received_at DATETIME ( 3 ) NOT NULL COMMENT '实收时间' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
2026-08-20 18:02:38 +08:00
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_stock_receipt_task_allocation_sku ( customer_id , task_id , allocation_id , sku_code ),
2026-08-19 16:24:02 +08:00
KEY idx_ll_stock_receipt_plan ( customer_id , plan_id , line_id ), KEY idx_ll_stock_receipt_inventory ( inventory_balance_id , inventory_position_id )
) 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 '车辆预约状态' ,
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 '更新时间' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_dispatch_order_no ( customer_id , 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 = '尾程派车单' ;
CREATE TABLE IF NOT EXISTS ll_dispatch_item (
id BIGINT NOT NULL COMMENT '主键ID' ,
dispatch_order_id BIGINT NOT NULL COMMENT '派车单ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
plan_id BIGINT NULL COMMENT '入仓计划ID' ,
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_refs VARCHAR ( 2000 ) NULL COMMENT '关联订单信息' ,
inbound_code VARCHAR ( 128 ) NULL COMMENT '入仓单号快照' ,
pallet_no VARCHAR ( 128 ) NOT NULL COMMENT '托盘号' ,
overseas_warehouse_id VARCHAR ( 128 ) NULL COMMENT '海外仓ID' ,
overseas_warehouse_name VARCHAR ( 255 ) NULL COMMENT '海外仓名称快照' ,
destination_warehouse_id VARCHAR ( 128 ) NULL COMMENT '目的仓ID' ,
destination_warehouse_code VARCHAR ( 128 ) NULL COMMENT '目的仓编码快照' ,
destination_warehouse_name VARCHAR ( 255 ) NULL COMMENT '目的仓名称快照' ,
fba_warehouse_code VARCHAR ( 128 ) NULL COMMENT 'FBA仓库编码' ,
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' ,
volume_cbm DECIMAL ( 18 , 4 ) NOT NULL DEFAULT 0 COMMENT '体积(立方米)' ,
source_stage VARCHAR ( 32 ) NOT NULL COMMENT '数据来源阶段' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_dispatch_item_source ( dispatch_order_id , plan_pallet_id , warehouse_pallet_id ),
KEY idx_ll_dispatch_item_order ( customer_id , order_id ),
KEY idx_ll_dispatch_item_inbound ( customer_id , inbound_code ),
KEY idx_ll_dispatch_item_pallet ( customer_id , plan_pallet_id , warehouse_pallet_id )
) ENGINE = InnoDB COMMENT = '派车货物冻结明细' ;
2026-08-21 17:38:14 +08:00
CREATE TABLE IF NOT EXISTS ll_dispatch_pallet_lock (
2026-08-19 16:24:02 +08:00
id BIGINT NOT NULL COMMENT '主键ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
source_pallet_key VARCHAR ( 160 ) NOT NULL COMMENT '来源托盘业务键' ,
active_key VARCHAR ( 160 ) NULL COMMENT '生效中的资源排他键' ,
plan_id BIGINT NULL COMMENT '入仓计划ID' ,
plan_pallet_id BIGINT NULL COMMENT '计划托盘ID' ,
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘ID' ,
2026-08-21 17:38:14 +08:00
dispatch_order_id BIGINT NULL COMMENT '正式派车单ID,草稿锁阶段为空' ,
draft_container_id BIGINT NULL COMMENT '智能排车草稿装车托盘ID' ,
2026-08-21 17:21:26 +08:00
draft_token VARCHAR ( 64 ) NULL COMMENT '智能排车草稿随机标识' ,
operator_id VARCHAR ( 128 ) NULL COMMENT '草稿锁操作人ID' ,
2026-08-19 16:24:02 +08:00
status VARCHAR ( 32 ) NOT NULL DEFAULT 'ACTIVE' COMMENT '业务状态' ,
locked_at DATETIME ( 3 ) NOT NULL COMMENT '锁定时间' ,
2026-08-21 17:21:26 +08:00
expires_at DATETIME ( 3 ) NULL COMMENT '草稿锁失效时间,正式派车锁为空' ,
2026-08-19 16:24:02 +08:00
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_active_pallet ( customer_id , active_key ),
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 )
2026-08-21 17:38:14 +08:00
) ENGINE = InnoDB COMMENT = '派车托盘排他锁' ;
CREATE TABLE IF NOT EXISTS ll_dispatch_draft (
2026-08-22 10:20:38 +08:00
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 '草稿失效时间' ,
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 '更新时间' ,
2026-08-21 17:38:14 +08:00
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_dispatch_draft_token ( draft_token ), KEY idx_ll_dispatch_draft_operator ( operator_id , status )
) ENGINE = InnoDB COMMENT = '智能排车草稿' ;
CREATE TABLE IF NOT EXISTS ll_dispatch_draft_container (
2026-08-22 10:20:38 +08:00
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 '草稿车厢顺序号' ,
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 ),
2026-08-21 17:38:14 +08:00
KEY idx_ll_dispatch_draft_container_token ( draft_token )
) ENGINE = InnoDB 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 ;
2026-08-19 16:24:02 +08:00
2026-08-21 17:21:26 +08:00
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_token' ), 'SELECT 1' , 'ALTER TABLE ll_dispatch_pallet_lock ADD COLUMN draft_token VARCHAR(64) NULL COMMENT ''智能排车草稿随机标识'' AFTER dispatch_order_id' ));
PREPARE dispatch_schema_stmt FROM @ ddl ; EXECUTE dispatch_schema_stmt ; DEALLOCATE PREPARE dispatch_schema_stmt ;
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 = 'operator_id' ), 'SELECT 1' , 'ALTER TABLE ll_dispatch_pallet_lock ADD COLUMN operator_id VARCHAR(128) NULL COMMENT ''草稿锁操作人ID'' AFTER draft_token' ));
PREPARE dispatch_schema_stmt FROM @ ddl ; EXECUTE dispatch_schema_stmt ; DEALLOCATE PREPARE dispatch_schema_stmt ;
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 = 'expires_at' ), 'SELECT 1' , 'ALTER TABLE ll_dispatch_pallet_lock ADD COLUMN expires_at DATETIME(3) NULL COMMENT ''草稿锁失效时间,正式派车锁为空'' AFTER locked_at' ));
PREPARE dispatch_schema_stmt FROM @ ddl ; EXECUTE dispatch_schema_stmt ; DEALLOCATE PREPARE dispatch_schema_stmt ;
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 = 'dispatch_order_id' AND is_nullable = 'YES' ), 'SELECT 1' , 'ALTER TABLE ll_dispatch_pallet_lock MODIFY COLUMN dispatch_order_id BIGINT NULL COMMENT ''正式派车单ID,草稿锁阶段为空''' ));
PREPARE dispatch_schema_stmt FROM @ ddl ; EXECUTE dispatch_schema_stmt ; DEALLOCATE PREPARE dispatch_schema_stmt ;
2026-08-19 16:24:02 +08:00
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_dispatch_item' AND column_name = 'order_refs' ), 'SELECT 1' , 'ALTER TABLE ll_dispatch_item ADD COLUMN order_refs VARCHAR(2000) NULL AFTER order_no' ));
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' ,
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 ) NULL COMMENT '仓库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 ),
UNIQUE KEY uk_ll_dispatch_pda_task_no ( customer_id , task_no )
) 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' ,
dispatch_item_id BIGINT NOT NULL COMMENT '派车明细ID' , inventory_position_id BIGINT NOT NULL COMMENT '库存仓位记录ID' ,
packages BIGINT NOT NULL COMMENT '本次操作箱数' , product_quantity BIGINT NOT NULL DEFAULT 0 COMMENT '产品数量' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' ,
picked_at DATETIME ( 3 ) NOT NULL COMMENT '拣货时间' , created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ), UNIQUE KEY uk_ll_dispatch_pda_pick_key ( customer_id , idempotency_key ),
KEY idx_ll_dispatch_pda_pick_item ( customer_id , task_id , dispatch_item_id )
) ENGINE = InnoDB COMMENT = '派车PDA拣货记录' ;
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_operation (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , task_id BIGINT NULL COMMENT 'PDA任务ID' ,
operation_type VARCHAR ( 32 ) NOT NULL COMMENT 'PDA操作类型' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , request_hash CHAR ( 64 ) NOT NULL COMMENT '请求内容哈希' ,
result_json LONGTEXT NULL COMMENT '处理结果JSON' , status VARCHAR ( 32 ) NOT NULL COMMENT 'PDA操作处理状态' ,
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_operation_key ( customer_id , idempotency_key )
) ENGINE = InnoDB COMMENT = '派车PDA操作幂等记录' ;
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_pick_order (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , pick_id BIGINT NOT NULL COMMENT 'PDA拣货记录ID' ,
receipt_id BIGINT NOT NULL COMMENT '入仓实收记录ID' , order_id BIGINT NOT NULL COMMENT '订单ID' , packages BIGINT NOT NULL COMMENT '本次操作箱数' ,
product_quantity BIGINT NOT NULL DEFAULT 0 COMMENT '产品数量' , created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ), KEY idx_ll_dispatch_pick_order_pick ( customer_id , pick_id ),
KEY idx_ll_dispatch_pick_order_receipt ( customer_id , receipt_id )
) ENGINE = InnoDB COMMENT = 'PDA拣货订单归属记录' ;
-- Transfer a dispatch to delivery: one outbound header, many pallet rows, one delivery header.
CREATE TABLE IF NOT EXISTS ll_outbound_order (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
outbound_no VARCHAR ( 64 ) NOT NULL COMMENT '出库单号' , dispatch_order_id BIGINT NOT NULL COMMENT '派车单ID' , dispatch_no VARCHAR ( 64 ) NOT NULL COMMENT '派车单号' ,
overseas_warehouse_id VARCHAR ( 128 ) NULL COMMENT '海外仓ID' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'WAIT_OUTBOUND' COMMENT '业务状态' ,
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' , pallet_count INT NOT NULL DEFAULT 0 COMMENT '托盘数' ,
idempotency_key VARCHAR ( 255 ) NOT 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_outbound_no ( customer_id , outbound_no ),
UNIQUE KEY uk_ll_outbound_idempotency ( customer_id , idempotency_key ), UNIQUE KEY uk_ll_outbound_dispatch ( customer_id , dispatch_order_id ),
KEY idx_ll_outbound_list ( customer_id , status , created_at )
) ENGINE = InnoDB COMMENT = '尾程出库单' ;
CREATE TABLE IF NOT EXISTS ll_outbound_pallet_item (
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 '箱数' , 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 ),
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 = '出库托盘明细' ;
CREATE TABLE IF NOT EXISTS ll_delivery_order (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
delivery_no VARCHAR ( 64 ) NOT NULL COMMENT '派送单号' , outbound_order_id BIGINT NOT NULL COMMENT '出库单ID' , outbound_no VARCHAR ( 64 ) NOT NULL COMMENT '出库单号' ,
dispatch_order_id BIGINT NOT NULL COMMENT '派车单ID' , dispatch_no VARCHAR ( 64 ) NOT NULL COMMENT '派车单号' , overseas_warehouse_id VARCHAR ( 128 ) NULL COMMENT '海外仓ID' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'WAIT_DELIVERY' COMMENT '业务状态' , package_count INT NOT NULL DEFAULT 0 COMMENT '箱数' , pallet_count INT NOT NULL DEFAULT 0 COMMENT '托盘数' ,
idempotency_key VARCHAR ( 255 ) NOT 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_delivery_no ( customer_id , delivery_no ),
UNIQUE KEY uk_ll_delivery_idempotency ( customer_id , idempotency_key ), UNIQUE KEY uk_ll_delivery_outbound ( customer_id , outbound_order_id ),
KEY idx_ll_delivery_list ( customer_id , status , created_at )
) ENGINE = InnoDB COMMENT = '尾程派送单' ;
-- Customer warehouse transfer: generated tail order plus selected historical order/inbound bindings.
CREATE TABLE IF NOT EXISTS ll_warehouse_transfer_order (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
transfer_no VARCHAR ( 64 ) NOT NULL COMMENT '转仓单号' , inbound_order_id BIGINT NOT NULL COMMENT '入仓单ID' , inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓单号快照' ,
lastleg_order_id BIGINT NOT NULL COMMENT '尾程订单ID' , lastleg_order_no VARCHAR ( 32 ) NOT NULL COMMENT '尾程订单号' ,
operating_warehouse_id VARCHAR ( 128 ) NOT NULL COMMENT '作业仓库ID' , fba_warehouse_code VARCHAR ( 128 ) NOT NULL COMMENT 'FBA仓库编码' ,
delivery_address VARCHAR ( 1000 ) NOT NULL COMMENT '派送地址' , package_count INT NOT NULL COMMENT '箱数' , delivery_method VARCHAR ( 64 ) NOT NULL COMMENT '派送方式' ,
estimated_arrival_at DATETIME ( 3 ) NOT NULL COMMENT '预计到达时间' , fba_shipment_no VARCHAR ( 128 ) NOT NULL COMMENT 'FBA货件编号' ,
tracking_no VARCHAR ( 255 ) NULL COMMENT '物流跟踪号' , fba_box_nos VARCHAR ( 2000 ) NULL COMMENT 'FBA箱号集合' , remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
need_relabel TINYINT NOT NULL DEFAULT 0 COMMENT '是否需要换标' , relabel_application_id BIGINT NULL COMMENT '换标申请单ID' , relabel_no VARCHAR ( 64 ) NULL COMMENT '换标申请单号' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_REVIEW' COMMENT '业务状态' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' ,
allocation_idempotency_key VARCHAR ( 255 ) NULL COMMENT '库存分配幂等键' ,
allocation_request_hash CHAR ( 64 ) NULL COMMENT '库存分配请求哈希' ,
outbound_idempotency_key VARCHAR ( 255 ) NULL COMMENT '出库幂等键' ,
outbound_request_hash CHAR ( 64 ) NULL COMMENT '出库请求哈希' ,
outbound_at DATETIME ( 3 ) NULL COMMENT '出库时间' ,
request_hash CHAR ( 64 ) NOT 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_wh_transfer_no ( customer_id , transfer_no ),
UNIQUE KEY uk_ll_wh_transfer_key ( customer_id , idempotency_key ),
UNIQUE KEY uk_ll_wh_transfer_tail_order ( lastleg_order_id ),
KEY idx_ll_wh_transfer_list ( customer_id , status , created_at ), KEY idx_ll_wh_transfer_inbound ( customer_id , inbound_code )
) ENGINE = InnoDB COMMENT = '客户转仓单' ;
2026-08-21 18:12:07 +08:00
-- 兼容已存在的旧版转仓单表:CREATE TABLE IF NOT EXISTS 不会补充新增字段。
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_warehouse_transfer_order' AND column_name = 'allocation_idempotency_key' ), 'SELECT 1' , 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN allocation_idempotency_key VARCHAR(255) NULL COMMENT ''库存分配幂等键'' AFTER status' ));
PREPARE transfer_allocation_key_stmt FROM @ ddl ; EXECUTE transfer_allocation_key_stmt ; DEALLOCATE PREPARE transfer_allocation_key_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_warehouse_transfer_order' AND column_name = 'allocation_request_hash' ), 'SELECT 1' , 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN allocation_request_hash CHAR(64) NULL COMMENT ''库存分配请求哈希'' AFTER allocation_idempotency_key' ));
PREPARE transfer_allocation_hash_stmt FROM @ ddl ; EXECUTE transfer_allocation_hash_stmt ; DEALLOCATE PREPARE transfer_allocation_hash_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_warehouse_transfer_order' AND column_name = 'outbound_idempotency_key' ), 'SELECT 1' , 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN outbound_idempotency_key VARCHAR(255) NULL COMMENT ''出库幂等键'' AFTER allocation_request_hash' ));
PREPARE transfer_outbound_key_stmt FROM @ ddl ; EXECUTE transfer_outbound_key_stmt ; DEALLOCATE PREPARE transfer_outbound_key_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_warehouse_transfer_order' AND column_name = 'outbound_request_hash' ), 'SELECT 1' , 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN outbound_request_hash CHAR(64) NULL COMMENT ''出库请求哈希'' AFTER outbound_idempotency_key' ));
PREPARE transfer_outbound_hash_stmt FROM @ ddl ; EXECUTE transfer_outbound_hash_stmt ; DEALLOCATE PREPARE transfer_outbound_hash_stmt ;
SET @ ddl = ( SELECT IF ( EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE () AND table_name = 'll_warehouse_transfer_order' AND column_name = 'outbound_at' ), 'SELECT 1' , 'ALTER TABLE ll_warehouse_transfer_order ADD COLUMN outbound_at DATETIME(3) NULL COMMENT ''出库时间'' AFTER outbound_request_hash' ));
PREPARE transfer_outbound_at_stmt FROM @ ddl ; EXECUTE transfer_outbound_at_stmt ; DEALLOCATE PREPARE transfer_outbound_at_stmt ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_warehouse_transfer_source_order (
id BIGINT NOT NULL COMMENT '主键ID' , transfer_order_id BIGINT NOT NULL COMMENT '转仓单ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
source_lastleg_order_id BIGINT NOT NULL COMMENT '来源尾程订单ID' , source_lastleg_order_no VARCHAR ( 32 ) NOT NULL COMMENT '来源尾程订单号' ,
inbound_order_id BIGINT NOT NULL COMMENT '入仓单ID' , inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓单号快照' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_wh_transfer_source ( transfer_order_id , source_lastleg_order_id ),
KEY idx_ll_wh_transfer_source_list ( customer_id , transfer_order_id )
) ENGINE = InnoDB COMMENT = '转仓来源历史订单绑定' ;
CREATE TABLE IF NOT EXISTS ll_warehouse_transfer_item (
id BIGINT NOT NULL COMMENT '主键ID' , transfer_order_id BIGINT NOT NULL COMMENT '转仓单ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码' , product_name_zh VARCHAR ( 255 ) NOT NULL COMMENT '产品中文名称' ,
package_count INT NOT NULL COMMENT '箱数' , shipping_mark VARCHAR ( 255 ) NULL COMMENT '运输唛头' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
KEY idx_ll_wh_transfer_item_list ( customer_id , transfer_order_id ), KEY idx_ll_wh_transfer_item_sku ( customer_id , sku_code )
) ENGINE = InnoDB COMMENT = '转仓货物冻结明细' ;
CREATE TABLE IF NOT EXISTS ll_warehouse_transfer_inventory_allocation (
id BIGINT NOT NULL COMMENT '雪花主键' ,
transfer_order_id BIGINT NOT NULL COMMENT '转仓单ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
inventory_position_id BIGINT NOT NULL COMMENT '来源库存仓位记录ID' ,
inventory_balance_id BIGINT NOT NULL COMMENT '来源库存余额记录ID' ,
inbound_order_id BIGINT NOT NULL COMMENT '来源入仓单ID' ,
inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '来源入仓单号快照' ,
pallet_id BIGINT NOT NULL COMMENT '来源托盘ID' ,
pallet_no VARCHAR ( 128 ) NOT NULL COMMENT '来源托盘号快照' ,
package_count INT NOT NULL COMMENT '分配箱数' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'RESERVED' COMMENT '分配状态' ,
active_position_key VARCHAR ( 255 ) NULL COMMENT '生效中的仓位排他键' ,
allocated_at DATETIME ( 3 ) NOT NULL COMMENT '分配时间' ,
shipped_at DATETIME ( 3 ) NULL COMMENT '出库时间' ,
received_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_wh_transfer_allocation_position ( transfer_order_id , inventory_position_id ),
UNIQUE KEY uk_ll_wh_transfer_active_position ( customer_id , active_position_key ),
KEY idx_ll_wh_transfer_allocation_list ( customer_id , transfer_order_id , status )
) ENGINE = InnoDB COMMENT = '转仓单来源库存分配记录' ;
CREATE TABLE IF NOT EXISTS ll_warehouse_transfer_receipt (
id BIGINT NOT NULL COMMENT '雪花主键' ,
transfer_order_id BIGINT NOT NULL COMMENT '转仓单ID' ,
allocation_id BIGINT NOT NULL COMMENT '库存分配记录ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
source_inventory_position_id BIGINT NOT NULL COMMENT '来源库存仓位记录ID' ,
destination_inventory_balance_id BIGINT NOT NULL COMMENT '目标库存余额记录ID' ,
destination_inventory_position_id BIGINT NOT NULL COMMENT '目标库存仓位记录ID' ,
package_count INT NOT NULL COMMENT '收货箱数' ,
idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '收货幂等键' ,
request_hash CHAR ( 64 ) NOT NULL COMMENT '收货请求哈希' ,
inventory_operation_key VARCHAR ( 255 ) NOT NULL COMMENT '库存操作幂等键' ,
created_by VARCHAR ( 128 ) NULL COMMENT '创建人ID' ,
received_at DATETIME ( 3 ) NOT NULL COMMENT '收货时间' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_wh_transfer_receipt_source ( transfer_order_id , source_inventory_position_id ),
UNIQUE KEY uk_ll_wh_transfer_receipt_key ( customer_id , idempotency_key ),
UNIQUE KEY uk_ll_wh_transfer_receipt_operation ( customer_id , inventory_operation_key ),
KEY idx_ll_wh_transfer_receipt_list ( customer_id , transfer_order_id , received_at )
) ENGINE = InnoDB COMMENT = '转仓来源仓位的目标库存收货记录' ;
-- Customer relabel application: header, item snapshots, and immutable process history.
CREATE TABLE IF NOT EXISTS ll_relabel_application (
id BIGINT NOT NULL COMMENT '主键ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
relabel_no VARCHAR ( 64 ) NOT NULL COMMENT '换标申请单号' ,
lastleg_order_id BIGINT NOT NULL COMMENT '尾程订单ID' ,
customer_order_no VARCHAR ( 128 ) NOT NULL COMMENT '客户订单号' ,
overseas_warehouse_id VARCHAR ( 128 ) NOT NULL COMMENT '海外仓ID' ,
label_deadline DATETIME ( 3 ) NOT NULL COMMENT '换标截止时间' ,
contact_name VARCHAR ( 128 ) NOT NULL COMMENT '联系人姓名' ,
contact_phone VARCHAR ( 64 ) NOT NULL COMMENT '联系人电话' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_PROCESSING' COMMENT '业务状态' ,
item_count INT NOT NULL DEFAULT 0 COMMENT '明细数量' ,
total_package_count INT NOT NULL DEFAULT 0 COMMENT '总箱数' ,
notified_package_count INT NOT NULL DEFAULT 0 COMMENT '已通知箱数' ,
idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' ,
request_hash CHAR ( 64 ) NOT 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_relabel_application_no ( customer_id , relabel_no ),
UNIQUE KEY uk_ll_relabel_application_idempotency ( customer_id , idempotency_key ),
UNIQUE KEY uk_ll_relabel_application_order ( lastleg_order_id ),
KEY idx_ll_relabel_application_list ( customer_id , status , created_at ),
KEY idx_ll_relabel_application_customer ( customer_id , customer_order_no ),
KEY idx_ll_relabel_application_warehouse ( customer_id , overseas_warehouse_id )
) ENGINE = InnoDB COMMENT = '客户换标申请单' ;
CREATE TABLE IF NOT EXISTS ll_relabel_item (
id BIGINT NOT NULL COMMENT '主键ID' ,
application_id BIGINT NOT NULL COMMENT '申请单ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码' ,
product_image_file_id VARCHAR ( 128 ) NULL COMMENT '产品图片文件ID' ,
product_image_file_name VARCHAR ( 255 ) NULL COMMENT '产品图片文件名' ,
product_image_url VARCHAR ( 1000 ) NULL COMMENT '产品图片地址' ,
product_name_zh VARCHAR ( 255 ) NOT NULL COMMENT '产品中文名称' ,
total_package_count INT NOT NULL COMMENT '总箱数' ,
notified_package_count INT NOT NULL COMMENT '已通知箱数' ,
shipment_no VARCHAR ( 128 ) NOT NULL COMMENT '货件编号' ,
tracking_code VARCHAR ( 255 ) NULL COMMENT '物流跟踪编码' ,
new_sku_code VARCHAR ( 128 ) NOT NULL COMMENT '换标后SKU编码' ,
label_requirement VARCHAR ( 1000 ) NULL COMMENT '换标要求' ,
relabel_file_id VARCHAR ( 128 ) NULL COMMENT '换标文件ID' ,
relabel_file_name VARCHAR ( 255 ) NULL COMMENT '换标文件名' ,
relabel_file_url VARCHAR ( 1000 ) NULL COMMENT '换标文件地址' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ),
KEY idx_ll_relabel_item_application ( customer_id , application_id ),
KEY idx_ll_relabel_item_sku ( customer_id , sku_code )
) ENGINE = InnoDB COMMENT = '换标货物冻结明细' ;
CREATE TABLE IF NOT EXISTS ll_relabel_status_history (
id BIGINT NOT NULL COMMENT '主键ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
application_id BIGINT NOT NULL COMMENT '申请单ID' ,
from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' ,
to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' ,
operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ),
KEY idx_ll_relabel_status_history_application ( customer_id , application_id , created_at )
) ENGINE = InnoDB COMMENT = '换标状态变更历史' ;
CREATE TABLE IF NOT EXISTS ll_dropship_order_profile (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , order_id BIGINT NOT NULL COMMENT '订单ID' ,
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘ID' , pallet_no VARCHAR ( 128 ) NULL COMMENT '托盘号' ,
source_pallet_no VARCHAR ( 128 ) NOT NULL COMMENT '来源托盘号快照' ,
inventory_position_id BIGINT NULL COMMENT '库存仓位记录ID' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_INBOUND' COMMENT '业务状态' ,
idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , version BIGINT NOT NULL DEFAULT 0 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_dropship_profile_order_pallet ( customer_id , order_id , source_pallet_no ),
UNIQUE KEY uk_ll_dropship_profile_key ( customer_id , idempotency_key ), KEY idx_ll_dropship_profile_order ( customer_id , order_id )
) ENGINE = InnoDB COMMENT = '一件代发托盘档案' ;
CREATE TABLE IF NOT EXISTS ll_dropship_carton (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , order_id BIGINT NOT NULL COMMENT '订单ID' , profile_id BIGINT NOT NULL COMMENT '托盘档案ID' ,
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘ID' , pallet_no VARCHAR ( 128 ) NULL COMMENT '托盘号' , sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码' , carton_mark VARCHAR ( 128 ) NOT NULL COMMENT '箱唛' ,
carton_sequence INT NOT NULL COMMENT '箱唛序号' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_INBOUND' COMMENT '业务状态' , outbound_order_no VARCHAR ( 128 ) NULL COMMENT '出库单号' ,
version BIGINT NOT NULL DEFAULT 0 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_dropship_carton ( customer_id , order_id , carton_mark ),
KEY idx_ll_dropship_carton_status ( customer_id , status ), KEY idx_ll_dropship_carton_sku ( customer_id , sku_code , status )
) ENGINE = InnoDB COMMENT = '一件代发箱唛明细' ;
CREATE TABLE IF NOT EXISTS ll_dropship_sku_inventory (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , order_id BIGINT NOT NULL COMMENT '订单ID' , profile_id BIGINT NOT NULL COMMENT '托盘档案ID' ,
sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码' , product_name VARCHAR ( 255 ) NULL COMMENT '产品名称' , package_count BIGINT NOT NULL COMMENT '箱数' , product_quantity BIGINT 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_dropship_sku_inventory ( profile_id , sku_code ),
KEY idx_ll_dropship_sku_order ( customer_id , order_id , sku_code )
) ENGINE = InnoDB COMMENT = '一件代发SKU库存汇总' ;
CREATE TABLE IF NOT EXISTS ll_dropship_carton_ledger (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , order_id BIGINT NOT NULL COMMENT '订单ID' , carton_id BIGINT NOT NULL COMMENT '箱唛记录ID' ,
carton_mark VARCHAR ( 128 ) NOT NULL COMMENT '箱唛' , sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码' , operation_type VARCHAR ( 32 ) NOT NULL COMMENT '操作类型' ,
before_packages BIGINT NOT NULL COMMENT '变动前箱数' , delta_packages BIGINT NOT NULL COMMENT '箱数变动量' , after_packages BIGINT NOT NULL COMMENT '变动后箱数' ,
business_order_no VARCHAR ( 128 ) NULL COMMENT '业务单号' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
occurred_at DATETIME ( 3 ) NOT NULL COMMENT '业务发生时间' , created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_dropship_ledger_key ( customer_id , idempotency_key ), KEY idx_ll_dropship_ledger_sku ( customer_id , sku_code , carton_mark )
) ENGINE = InnoDB COMMENT = '一件代发箱唛库存流水' ;
CREATE TABLE IF NOT EXISTS ll_cargo_discard_application (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
discard_no VARCHAR ( 64 ) NOT NULL COMMENT '废弃申请单号' , overseas_warehouse_id VARCHAR ( 128 ) NOT NULL COMMENT '海外仓ID' ,
overseas_warehouse_name VARCHAR ( 255 ) NULL COMMENT '海外仓名称快照' , inbound_codes VARCHAR ( 2000 ) NOT NULL COMMENT '入仓单号集合' ,
total_packages INT NOT NULL COMMENT '总箱数' , fee_per_package DECIMAL ( 18 , 2 ) NOT NULL COMMENT '每箱处理费用' ,
total_fee DECIMAL ( 18 , 2 ) NOT NULL COMMENT '费用合计' , currency CHAR ( 3 ) NOT NULL DEFAULT 'USD' COMMENT '币种' ,
status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_REVIEW' COMMENT '业务状态' , remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , request_hash CHAR ( 64 ) NOT NULL COMMENT '请求内容哈希' ,
created_by VARCHAR ( 128 ) NULL COMMENT '创建人ID' , reviewed_by VARCHAR ( 128 ) NULL COMMENT '审核人ID' , review_remark VARCHAR ( 1000 ) NULL COMMENT '审核备注' ,
reviewed_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_cargo_discard_no ( customer_id , discard_no ),
UNIQUE KEY uk_ll_cargo_discard_key ( customer_id , idempotency_key ),
KEY idx_ll_cargo_discard_list ( customer_id , status , created_at ),
KEY idx_ll_cargo_discard_warehouse ( customer_id , overseas_warehouse_id , created_at )
) ENGINE = InnoDB COMMENT = '货物废弃申请单' ;
CREATE TABLE IF NOT EXISTS ll_cargo_discard_item (
id BIGINT NOT NULL COMMENT '主键ID' , application_id BIGINT NOT NULL COMMENT '申请单ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
order_id BIGINT NOT NULL COMMENT '订单ID' , inbound_code VARCHAR ( 128 ) NOT NULL COMMENT '入仓单号快照' , profile_id BIGINT NOT NULL COMMENT '托盘档案ID' ,
sku_inventory_id BIGINT NOT NULL COMMENT 'SKU库存记录ID' , sku_code VARCHAR ( 128 ) NOT NULL COMMENT 'SKU编码' , product_name VARCHAR ( 255 ) NULL COMMENT '产品名称' ,
available_packages_snapshot INT NOT NULL COMMENT '可用箱数快照' , discard_packages INT NOT NULL COMMENT '废弃箱数' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_cargo_discard_item ( application_id , profile_id , sku_code ),
KEY idx_ll_cargo_discard_item_list ( customer_id , application_id ),
KEY idx_ll_cargo_discard_item_inbound ( customer_id , inbound_code , sku_code )
) ENGINE = InnoDB COMMENT = '货物废弃SKU明细' ;
CREATE TABLE IF NOT EXISTS ll_cargo_discard_carton (
id BIGINT NOT NULL COMMENT '主键ID' , application_id BIGINT NOT NULL COMMENT '申请单ID' , item_id BIGINT NOT NULL COMMENT '明细ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' , carton_id BIGINT NOT NULL COMMENT '箱唛记录ID' , carton_mark VARCHAR ( 128 ) NOT NULL COMMENT '箱唛' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_cargo_discard_carton ( application_id , carton_id ),
KEY idx_ll_cargo_discard_carton_application ( customer_id , application_id , item_id ),
KEY idx_ll_cargo_discard_carton_identity ( customer_id , carton_id )
) ENGINE = InnoDB COMMENT = '货物废弃锁定箱明细' ;
CREATE TABLE IF NOT EXISTS ll_cargo_discard_status_history (
id BIGINT NOT NULL COMMENT '主键ID' , application_id BIGINT NOT NULL COMMENT '申请单ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' , to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' , operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' , created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
KEY idx_ll_cargo_discard_history ( customer_id , application_id , created_at )
) ENGINE = InnoDB COMMENT = '货物废弃审批历史' ;
CREATE TABLE IF NOT EXISTS ll_overseas_procurement_order (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
customer_name VARCHAR ( 255 ) NULL COMMENT '客户名称快照' , order_no VARCHAR ( 64 ) NOT NULL COMMENT '订单号' ,
purchase_category VARCHAR ( 128 ) NOT NULL COMMENT '采购品类' , product_name VARCHAR ( 255 ) NOT NULL COMMENT '产品名称' ,
product_specification VARCHAR ( 500 ) NULL COMMENT '产品规格' , product_url VARCHAR ( 2000 ) NULL COMMENT '产品链接' ,
purchase_quantity BIGINT NOT NULL COMMENT '采购数量' , budget_unit_price DECIMAL ( 18 , 2 ) NULL COMMENT '预算单价' ,
currency CHAR ( 3 ) NOT NULL DEFAULT 'USD' COMMENT '币种' , receiving_address VARCHAR ( 1000 ) NULL COMMENT '收货地址' ,
contact_name VARCHAR ( 128 ) NOT NULL COMMENT '联系人姓名' , contact_phone VARCHAR ( 64 ) NOT NULL COMMENT '联系人电话' ,
purchase_warehouse_id VARCHAR ( 128 ) NULL COMMENT '采购入仓仓库ID' , purchase_warehouse_name VARCHAR ( 255 ) NULL COMMENT '采购入仓仓库名称' ,
2026-08-20 18:02:38 +08:00
inbound_quantity BIGINT NOT NULL DEFAULT 0 COMMENT '采购单据累计入库数量' ,
2026-08-19 16:24:02 +08:00
domestic_carrier VARCHAR ( 128 ) NULL COMMENT '境内承运商' , domestic_tracking_no VARCHAR ( 128 ) NULL COMMENT '境内物流单号' ,
overseas_carrier VARCHAR ( 128 ) NULL COMMENT '海外承运商' , overseas_tracking_no VARCHAR ( 128 ) NULL COMMENT '海外物流单号' ,
estimated_arrival_at DATETIME ( 3 ) NULL COMMENT '预计到达时间' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_REVIEW' COMMENT '业务状态' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' , request_hash CHAR ( 64 ) NOT NULL COMMENT '请求内容哈希' ,
created_by VARCHAR ( 128 ) NULL COMMENT '创建人ID' , reviewed_by VARCHAR ( 128 ) NULL COMMENT '审核人ID' , review_remark VARCHAR ( 1000 ) NULL COMMENT '审核备注' ,
reviewed_at DATETIME ( 3 ) NULL COMMENT '审核时间' , version BIGINT NOT NULL DEFAULT 0 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_overseas_procurement_order_no ( customer_id , order_no ),
UNIQUE KEY uk_ll_overseas_procurement_order_key ( customer_id , idempotency_key ),
KEY idx_ll_overseas_procurement_list ( customer_id , status , created_at ),
KEY idx_ll_overseas_procurement_warehouse ( customer_id , purchase_warehouse_id , created_at )
) ENGINE = InnoDB COMMENT = '海外采购订单' ;
CREATE TABLE IF NOT EXISTS ll_overseas_procurement_status_history (
id BIGINT NOT NULL COMMENT '主键ID' , order_id BIGINT NOT NULL COMMENT '订单ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
2026-08-20 18:02:38 +08:00
operation_type VARCHAR ( 32 ) NOT NULL COMMENT '操作类型:CREATE、REVIEW或UPDATE' ,
2026-08-19 16:24:02 +08:00
from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' , to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' , operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' ,
2026-08-20 18:02:38 +08:00
change_detail JSON NULL COMMENT '字段变更前后值JSON' , remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
2026-08-19 16:24:02 +08:00
PRIMARY KEY ( id ), KEY idx_ll_overseas_procurement_history ( customer_id , order_id , created_at )
2026-08-20 18:02:38 +08:00
) ENGINE = InnoDB COMMENT = '海外采购操作流水' ;
2026-08-19 16:24:02 +08:00
CREATE TABLE IF NOT EXISTS ll_us_truck_order (
id BIGINT NOT NULL COMMENT '主键ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
order_no VARCHAR ( 64 ) NOT NULL COMMENT '订单号' ,
transport_type VARCHAR ( 32 ) NOT NULL COMMENT '运输类型' ,
origin VARCHAR ( 255 ) NOT NULL COMMENT '起运地' ,
origin_address VARCHAR ( 500 ) NULL COMMENT '起运地址' ,
destination VARCHAR ( 255 ) NOT NULL COMMENT '目的地' ,
destination_address VARCHAR ( 500 ) NULL COMMENT '目的地址' ,
container_type VARCHAR ( 32 ) NULL COMMENT '历史兼容设备类型,零担托盘业务不采集' ,
pallet_count INT NOT NULL DEFAULT 1 COMMENT '客户申报托盘数' ,
package_count INT NULL COMMENT '可选箱数,零或空值均有效' ,
received_pallet_count INT NOT NULL DEFAULT 0 COMMENT 'PDA实收托盘数' ,
allocated_pallet_count INT NOT NULL DEFAULT 0 COMMENT '已分配到合车行程的托盘数' ,
shipped_pallet_count INT NOT NULL DEFAULT 0 COMMENT '已出库托盘数' ,
total_weight_kg DECIMAL ( 18 , 3 ) NOT NULL DEFAULT 0 COMMENT '总重量(千克)' ,
total_volume_cbm DECIMAL ( 18 , 6 ) NOT NULL DEFAULT 0 COMMENT '总体积(立方米)' ,
budget_amount DECIMAL ( 18 , 2 ) NULL COMMENT '预算金额' ,
currency VARCHAR ( 3 ) NOT NULL DEFAULT 'USD' COMMENT '币种' ,
contact_name VARCHAR ( 128 ) NOT NULL COMMENT '联系人姓名' ,
contact_info VARCHAR ( 128 ) NOT NULL COMMENT '联系人联系方式' ,
requested_date DATE NOT NULL COMMENT '要求服务日期' ,
status VARCHAR ( 32 ) NOT NULL COMMENT '美国卡车订单状态' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
receipt_idempotency_key VARCHAR ( 255 ) NULL COMMENT '实物收货幂等键' ,
receipt_request_hash CHAR ( 64 ) NULL COMMENT '实物收货请求哈希' ,
idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '业务幂等键' ,
request_hash CHAR ( 64 ) NOT NULL COMMENT '请求内容哈希' ,
created_by VARCHAR ( 128 ) NULL COMMENT '创建人ID' ,
version BIGINT NOT NULL DEFAULT 0 COMMENT '乐观锁版本' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
updated_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '更新时间' ,
PRIMARY KEY ( id ),
UNIQUE KEY uk_ll_us_truck_order_no ( customer_id , order_no ),
UNIQUE KEY uk_ll_us_truck_order_key ( customer_id , idempotency_key ),
UNIQUE KEY uk_ll_us_truck_receipt_key ( customer_id , receipt_idempotency_key ),
KEY idx_ll_us_truck_order_list ( customer_id , status , created_at ),
KEY idx_ll_us_truck_order_date ( customer_id , requested_date , created_at )
) ENGINE = InnoDB COMMENT = '美国卡车运输订单' ;
CREATE TABLE IF NOT EXISTS ll_us_truck_order_pallet (
id BIGINT NOT NULL COMMENT '托盘记录ID' ,
order_id BIGINT NOT NULL COMMENT '美国卡车订单ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
pallet_no VARCHAR ( 128 ) NOT NULL COMMENT '业务托盘号' ,
sequence_no INT NOT NULL COMMENT '订单内托盘序号' ,
source VARCHAR ( 32 ) NOT NULL COMMENT '托盘来源:订单计划或PDA超收' ,
status VARCHAR ( 32 ) NOT NULL COMMENT '托盘状态:待收、已收或超收待审核' ,
warehouse_pallet_id BIGINT NULL COMMENT '仓库实物托盘资源ID' ,
package_count INT NULL COMMENT '托盘箱数' ,
received_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_us_truck_order_pallet_no ( customer_id , order_id , pallet_no ),
UNIQUE KEY uk_ll_us_truck_order_pallet_seq ( customer_id , order_id , sequence_no ),
KEY idx_ll_us_truck_order_pallet_list ( customer_id , order_id , status )
) ENGINE = InnoDB COMMENT = '美国卡车订单托盘实收记录' ;
CREATE TABLE IF NOT EXISTS ll_us_truck_order_status_history (
id BIGINT NOT NULL COMMENT '主键ID' ,
order_id BIGINT NOT NULL COMMENT '订单ID' ,
customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' ,
to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' ,
operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' ,
PRIMARY KEY ( id ),
KEY idx_ll_us_truck_history ( customer_id , order_id , created_at )
) ENGINE = InnoDB COMMENT = '美国卡车订单状态历史' ;
2026-08-20 18:02:38 +08:00
CREATE TABLE IF NOT EXISTS ll_local_looseboard_order (
id BIGINT NOT NULL COMMENT '主键ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
2026-08-22 12:35:32 +08:00
lastleg_order_id BIGINT NULL COMMENT '关联尾程主订单ID' ,
2026-08-20 18:02:38 +08:00
order_no VARCHAR ( 64 ) NOT NULL COMMENT '本土散板订单号' , transport_mode VARCHAR ( 32 ) NOT NULL COMMENT '运输方式:拼车或优先拼载' ,
pallet_required VARCHAR ( 8 ) NOT NULL COMMENT '是否需要打盘:YES或NO' , transport_type VARCHAR ( 32 ) NOT NULL COMMENT '运输类型' ,
origin VARCHAR ( 255 ) NOT NULL COMMENT '起运地' , origin_address VARCHAR ( 500 ) NULL COMMENT '起运详细地址' ,
destination VARCHAR ( 255 ) NOT NULL COMMENT '目的地' , destination_address VARCHAR ( 500 ) NULL COMMENT '目的详细地址、码头或仓号' ,
container_type VARCHAR ( 32 ) NULL COMMENT '柜型' , package_count INT NOT NULL DEFAULT 0 COMMENT '货物件数' ,
total_weight_kg DECIMAL ( 18 , 3 ) NOT NULL DEFAULT 0 COMMENT '总重量(千克)' ,
total_volume_cbm DECIMAL ( 18 , 6 ) NOT NULL DEFAULT 0 COMMENT '总体积(立方米)' ,
budget_amount DECIMAL ( 18 , 2 ) NULL COMMENT '预算总价' , currency CHAR ( 3 ) NOT NULL DEFAULT 'USD' COMMENT '预算币种' ,
contact_name VARCHAR ( 128 ) NULL COMMENT '联系人姓名' , contact_info VARCHAR ( 128 ) NULL COMMENT '联系人联系方式' ,
requested_date DATE NULL COMMENT '要求服务日期' , status VARCHAR ( 32 ) NOT NULL DEFAULT 'PENDING_ACCEPTANCE' COMMENT '本土散板订单状态' ,
remark VARCHAR ( 1000 ) NULL COMMENT '备注' , idempotency_key VARCHAR ( 255 ) NOT NULL COMMENT '创建幂等键' ,
request_hash CHAR ( 64 ) NOT NULL COMMENT '创建请求内容哈希' , created_by VARCHAR ( 128 ) NULL COMMENT '创建人ID' ,
version BIGINT NOT NULL DEFAULT 0 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_local_looseboard_no ( customer_id , order_no ),
2026-08-22 12:35:32 +08:00
UNIQUE KEY uk_ll_local_looseboard_lastleg ( lastleg_order_id ),
2026-08-20 18:02:38 +08:00
UNIQUE KEY uk_ll_local_looseboard_key ( customer_id , idempotency_key ),
KEY idx_ll_local_looseboard_list ( customer_id , status , created_at ),
KEY idx_ll_local_looseboard_date ( customer_id , requested_date , created_at )
) ENGINE = InnoDB COMMENT = '本土散板订单' ;
CREATE TABLE IF NOT EXISTS ll_local_looseboard_history (
id BIGINT NOT NULL COMMENT '主键ID' , order_id BIGINT NOT NULL COMMENT '本土散板订单ID' , customer_id VARCHAR ( 128 ) NOT NULL COMMENT '客户租户ID' ,
operation_type VARCHAR ( 32 ) NOT NULL COMMENT '操作类型:CREATE、UPDATE或STATUS' , from_status VARCHAR ( 32 ) NULL COMMENT '变更前状态' ,
to_status VARCHAR ( 32 ) NOT NULL COMMENT '变更后状态' , operator_id VARCHAR ( 128 ) NULL COMMENT '操作人ID' ,
change_detail JSON NULL COMMENT '字段变更前后值JSON' , remark VARCHAR ( 1000 ) NULL COMMENT '操作备注' ,
created_at DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '创建时间' , PRIMARY KEY ( id ),
KEY idx_ll_local_looseboard_history ( customer_id , order_id , created_at )
) ENGINE = InnoDB COMMENT = '本土散板操作流水' ;