@@ -1,7 +1,8 @@
-- 尾程贴标申请 / 退货换标 dev 增量(MySQL 8.0)
-- 目标数据库:baiyue_lastleg
-- 依据:2026-09-09 本地 127.0.0.1 与 dev 8.163.49.32 的 information_schema 只读对比。
-- 说明:脚本可重复执行,不删除或修改业务行;DDL 会隐式提交,请先备份并完整执 行。
-- 目标数据库:baiyue_lastleg、baiyue_lastlag_warehouse
-- 依据:2026-09-1 0 本地 127.0.0.1 与 dev 8.163.49.32 的 information_schema 只读对比。
-- 说明:脚本可重复执行,不修改或删除业务 行。
-- MySQL DDL 会隐式提交,请先备份并完整执行。
CREATE DATABASE IF NOT EXISTS baiyue_lastleg
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
@@ -88,9 +89,141 @@ DELIMITER ;
CALL _dev_lastleg_relabel_return_patch ( ) ;
DROP PROCEDURE IF EXISTS _dev_lastleg_relabel_return_patch ;
-- 执行后只读核验:应分别返回 1、1、1、1 。
-- 2026-09-10 本地相对 dev 的最近结构差异:换标完成确认、退货仓联系人及派车来源快照 。
DROP PROCEDURE IF EXISTS _dev_lastleg_recent_patch ;
DELIMITER $ $
CREATE PROCEDURE _dev_lastleg_recent_patch ( )
BEGIN
-- 旧本地库可能缺少仓库主数据与退货列表查询字段。
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = ' baiyue_warehouse ' AND table_name = ' wh_warehouse ' AND column_name = ' internal_code ' ) THEN
SET @ ddl = ' ALTER TABLE baiyue_warehouse.wh_warehouse ADD COLUMN internal_code VARCHAR(16) NULL COMMENT '' FBA内部编号,仅FBA仓可配置 '' AFTER warehouse_code ' ;
PREPARE warehouse_internal_code_stmt FROM @ ddl ; EXECUTE warehouse_internal_code_stmt ; DEALLOCATE PREPARE warehouse_internal_code_stmt ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_return_order ' AND column_name = ' lastleg_order_no ' ) THEN
ALTER TABLE ll_return_order ADD COLUMN lastleg_order_no VARCHAR ( 128 ) NULL COMMENT ' 关联尾程订单号 ' AFTER lastleg_order_id ;
END IF ;
-- 非 FBA 去向的换标不要求货件编号。
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_item ' AND column_name = ' shipment_no ' AND is_nullable = ' NO ' ) THEN
ALTER TABLE ll_relabel_item MODIFY COLUMN shipment_no VARCHAR ( 128 ) NULL COMMENT ' 货件编号(无FBA去向时为空) ' ;
END IF ;
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_item ' AND column_name = ' sku_code ' AND is_nullable = ' NO ' ) THEN
ALTER TABLE ll_relabel_item MODIFY COLUMN sku_code VARCHAR ( 128 ) NULL COMMENT ' SKU编码(组合换标时可为空) ' ;
END IF ;
-- 换标 PDA 完工、客户证据确认,以及卡车/自提/快递履约分流。
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' delivery_method ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN delivery_method VARCHAR ( 32 ) NULL COMMENT ' 派送方式:TRUCK卡车、PICKUP自提、EXPRESS快递;仅涉及箱唛换标时必填 ' AFTER contact_phone ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' print_shipping_label ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN print_shipping_label TINYINT ( 1 ) NOT NULL DEFAULT 0 COMMENT ' 是否需要打印面单 ' AFTER delivery_method ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' shipping_label_file_id ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN shipping_label_file_id VARCHAR ( 128 ) NULL COMMENT ' 客户上传面单文件ID ' AFTER print_shipping_label ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' shipping_label_file_name ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN shipping_label_file_name VARCHAR ( 255 ) NULL COMMENT ' 客户上传面单文件名 ' AFTER shipping_label_file_id ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' shipping_label_file_url ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN shipping_label_file_url VARCHAR ( 1000 ) NULL COMMENT ' 客户上传面单下载地址 ' AFTER shipping_label_file_name ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' fulfillment_status ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN fulfillment_status VARCHAR ( 32 ) NOT NULL DEFAULT ' WAIT_RELABEL ' COMMENT ' 换标后履约状态 ' AFTER shipping_label_file_url ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' customer_confirmation_key ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN customer_confirmation_key VARCHAR ( 255 ) NULL COMMENT ' 客户确认完成幂等键 ' AFTER fulfillment_status ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' customer_confirmed_at ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN customer_confirmed_at DATETIME ( 3 ) NULL COMMENT ' 客户确认换标完成时间 ' AFTER customer_confirmation_key ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_application ' AND column_name = ' outbound_order_no ' ) THEN
ALTER TABLE ll_relabel_application ADD COLUMN outbound_order_no VARCHAR ( 64 ) NULL COMMENT ' 自提或快递生成的换标出库单号 ' AFTER fulfillment_status ;
END IF ;
-- 退货换标:保存操作中转仓联系人。
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_return_order ' AND column_name = ' warehouse_contact_name ' ) THEN
ALTER TABLE ll_return_order ADD COLUMN warehouse_contact_name VARCHAR ( 128 ) NULL COMMENT ' 中转仓联系人快照 ' AFTER overseas_warehouse_id ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_return_order ' AND column_name = ' warehouse_contact_phone ' ) THEN
ALTER TABLE ll_return_order ADD COLUMN warehouse_contact_phone VARCHAR ( 64 ) NULL COMMENT ' 中转仓联系电话快照 ' AFTER warehouse_contact_name ;
END IF ;
-- 仓储转运允许非 FBA 入仓。
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_warehouse_transfer_order ' AND column_name = ' fba_warehouse_code ' AND is_nullable = ' NO ' ) THEN
ALTER TABLE ll_warehouse_transfer_order MODIFY COLUMN fba_warehouse_code VARCHAR ( 128 ) NULL COMMENT ' 可选FBA目的仓编码 ' ;
END IF ;
IF EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_warehouse_transfer_order ' AND column_name = ' fba_shipment_no ' AND is_nullable = ' NO ' ) THEN
ALTER TABLE ll_warehouse_transfer_order MODIFY COLUMN fba_shipment_no VARCHAR ( 128 ) NULL COMMENT ' 可选FBA货件编号 ' ;
END IF ;
-- 换标进入派车/出库后保留来源业务和箱唛快照。
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_dispatch_item ' AND column_name = ' carton_marks ' ) THEN
ALTER TABLE ll_dispatch_item ADD COLUMN carton_marks VARCHAR ( 4000 ) NULL COMMENT ' 换标箱唛映射快照 ' AFTER source_stage ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_dispatch_item ' AND column_name = ' source_business_type ' ) THEN
ALTER TABLE ll_dispatch_item ADD COLUMN source_business_type VARCHAR ( 32 ) NULL COMMENT ' 来源业务类型 ' AFTER carton_marks ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_dispatch_item ' AND column_name = ' source_business_no ' ) THEN
ALTER TABLE ll_dispatch_item ADD COLUMN source_business_no VARCHAR ( 128 ) NULL COMMENT ' 来源业务单号 ' AFTER source_business_type ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_item ' AND column_name = ' return_carton_id ' ) THEN
ALTER TABLE ll_relabel_item ADD COLUMN return_carton_id BIGINT NULL COMMENT ' 退货换箱唛来源退货库存箱ID ' AFTER carton_mark ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_item ' AND column_name = ' source_carton_mark ' ) THEN
ALTER TABLE ll_relabel_item ADD COLUMN source_carton_mark VARCHAR ( 255 ) NULL COMMENT ' 退货换箱唛原箱唛快照 ' AFTER return_carton_id ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_relabel_item ' AND column_name = ' new_carton_mark ' ) THEN
ALTER TABLE ll_relabel_item ADD COLUMN new_carton_mark VARCHAR ( 255 ) NULL COMMENT ' 退货换箱唛新箱唛 ' AFTER source_carton_mark ;
END IF ;
IF NOT EXISTS ( SELECT 1 FROM information_schema . columns WHERE table_schema = DATABASE ( ) AND table_name = ' ll_warehouse_transfer_order ' AND column_name = ' relabel_completed_at ' ) THEN
ALTER TABLE ll_warehouse_transfer_order ADD COLUMN relabel_completed_at DATETIME ( 3 ) NULL COMMENT ' 关联贴标完成时间 ' AFTER relabel_no ;
END IF ;
END $ $
DELIMITER ;
CALL _dev_lastleg_recent_patch ( ) ;
DROP PROCEDURE IF EXISTS _dev_lastleg_recent_patch ;
-- 2026-09-13 换标/合托按托盘维度作业:海外仓物理托盘允许没有库位。
-- 只放宽托盘状态操作审计快照,不改变已有带库位的入仓资源预留逻辑。
CREATE DATABASE IF NOT EXISTS baiyue_lastlag_warehouse
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
USE baiyue_lastlag_warehouse ;
DROP PROCEDURE IF EXISTS _dev_locationless_pallet_patch ;
DELIMITER $ $
CREATE PROCEDURE _dev_locationless_pallet_patch ( )
BEGIN
IF NOT EXISTS ( SELECT 1 FROM information_schema . tables
WHERE table_schema = DATABASE ( ) AND table_name = ' wh_pallet_operation ' ) THEN
SIGNAL SQLSTATE ' 45000 ' SET MESSAGE_TEXT = ' 缺少基础表 wh_pallet_operation,请先执行海外仓基线 ' ;
END IF ;
IF EXISTS ( SELECT 1 FROM information_schema . columns
WHERE table_schema = DATABASE ( ) AND table_name = ' wh_pallet_operation '
AND column_name = ' before_location_id ' AND is_nullable = ' NO ' ) THEN
ALTER TABLE wh_pallet_operation
MODIFY COLUMN before_location_id BIGINT NULL COMMENT ' 变更前库位ID,无库位托盘为空 ' ;
END IF ;
IF EXISTS ( SELECT 1 FROM information_schema . columns
WHERE table_schema = DATABASE ( ) AND table_name = ' wh_pallet_operation '
AND column_name = ' after_location_id ' AND is_nullable = ' NO ' ) THEN
ALTER TABLE wh_pallet_operation
MODIFY COLUMN after_location_id BIGINT NULL COMMENT ' 变更后库位ID,无库位托盘为空 ' ;
END IF ;
END $ $
DELIMITER ;
CALL _dev_locationless_pallet_patch ( ) ;
DROP PROCEDURE IF EXISTS _dev_locationless_pallet_patch ;
USE baiyue_lastleg ;
-- 执行后只读核验:所有结果都应为 1。
SELECT
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_relabel_item ' AND column_name IN ( ' destination_fba_warehouse_code ' , ' operation_type ' , ' sku_relabel_items_json ' , ' source_inventory_balance_id ' , ' source_inventory_position_id ' , ' source_inbound_order_id ' , ' source_inbound_order_no ' , ' source_inbound_code ' , ' source_warehouse_id ' , ' source_warehouse_code ' , ' source_warehouse_name ' ) ) = 11 AS relabel_fields_ready ,
( SELECT is_nullable = ' YES ' FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_relabel_item ' AND column_name = ' shipment_no ' ) AS relabel_shipment_optional_ready ,
( SELECT is_nullable = ' YES ' FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_relabel_item ' AND column_name = ' sku_code ' ) AS relabel_sku_optional_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_relabel_application ' AND column_name IN ( ' delivery_method ' , ' print_shipping_label ' , ' shipping_label_file_id ' , ' shipping_label_file_name ' , ' shipping_label_file_url ' , ' fulfillment_status ' , ' outbound_order_no ' , ' customer_confirmation_key ' , ' customer_confirmed_at ' ) ) = 9 AS relabel_fulfillment_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_return_order ' AND column_name IN ( ' warehouse_contact_name ' , ' warehouse_contact_phone ' ) ) = 2 AS return_order_contact_fields_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_warehouse_transfer_order ' AND column_name IN ( ' fba_warehouse_code ' , ' fba_shipment_no ' ) AND is_nullable = ' YES ' ) = 2 AS transfer_fba_optional_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_dispatch_item ' AND column_name IN ( ' carton_marks ' , ' source_business_type ' , ' source_business_no ' ) ) = 3 AS dispatch_relabel_source_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_relabel_item ' AND column_name IN ( ' return_carton_id ' , ' source_carton_mark ' , ' new_carton_mark ' ) ) = 3 AS return_relabel_binding_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_outbound_pallet_item ' AND column_name = ' carton_marks ' ) = 1 AS outbound_carton_marks_ready ,
( SELECT COUNT ( * ) FROM information_schema . tables WHERE table_schema = ' baiyue_lastleg ' AND table_name = ' ll_overseas_procurement_outbound ' ) = 1 AS procurement_outbound_ready ,
( SELECT COUNT ( * ) FROM information_schema . table_constraints WHERE constraint_schema = ' baiyue_lastleg ' AND table_name = ' ll_return_inventory_carton ' AND constraint_name IN ( ' chk_ll_return_inventory_carton_quantity ' , ' chk_ll_return_inventory_carton_status ' ) ) = 2 AS return_outbounded_checks_ready ;
( SELECT COUNT ( * ) FROM information_schema . table_constraints WHERE constraint_schema = ' baiyue_lastleg ' AND table_name = ' ll_return_inventory_carton ' AND constraint_name IN ( ' chk_ll_return_inventory_carton_quantity ' , ' chk_ll_return_inventory_carton_status ' ) ) = 2 AS return_outbounded_checks_ready ,
( SELECT COUNT ( * ) FROM information_schema . columns WHERE table_schema = ' baiyue_lastlag_warehouse ' AND table_name = ' wh_pallet_operation ' AND column_name IN ( ' before_location_id ' , ' after_location_id ' ) AND is_nullable = ' YES ' ) = 2 AS locationless_pallet_operation_ready ;