From 3aaba2d6a3ce3e344181ee044ff6502e5a471180 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 8 Sep 2026 18:02:47 +0800 Subject: [PATCH] fix: order dropship schema convergence before assertions --- deploy/sql/头程数据库统一增量-MySQL8.sql | 69 +++++++++++++++++-- .../DropshipPalletizationSqlContractTest.java | 1 + 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/deploy/sql/头程数据库统一增量-MySQL8.sql b/deploy/sql/头程数据库统一增量-MySQL8.sql index fb1ef1fef..a11bed90f 100644 --- a/deploy/sql/头程数据库统一增量-MySQL8.sql +++ b/deploy/sql/头程数据库统一增量-MySQL8.sql @@ -8000,6 +8000,57 @@ SELECT role.id, permission.id, role.tenant_id ) WHERE role.tenant_id = 0 AND role.role_code IN ('PLATFORM_ADMIN', 'ORDER_OPERATOR'); +-- 已存在库必须先把装柜分配唯一键收敛到“普通明细或封托托盘”,再执行三期断言。 +USE baiyue_firstleg; +DROP PROCEDURE IF EXISTS converge_loading_assignment_schema; +DELIMITER $$ +CREATE PROCEDURE converge_loading_assignment_schema() +BEGIN + IF NOT EXISTS (SELECT 1 FROM information_schema.columns + WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' + AND column_name='unit_type') THEN + ALTER TABLE fl_loading_plan_item + ADD COLUMN unit_type VARCHAR(24) NOT NULL DEFAULT 'PACKAGE' + COMMENT '分配单元:PACKAGE普通箱、SEALED_PALLET一件代发封托' AFTER product_quantity, + ADD COLUMN pallet_id BIGINT UNSIGNED NULL COMMENT '一件代发封托ID;普通箱为空' AFTER unit_type, + ADD COLUMN pallet_no VARCHAR(32) NULL COMMENT '一件代发系统托盘码快照' AFTER pallet_id, + ADD COLUMN indivisible TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否为不可拆整托单元' AFTER pallet_no; + END IF; + ALTER TABLE fl_loading_plan_item + MODIFY COLUMN unit_type VARCHAR(24) NOT NULL DEFAULT 'PACKAGE' + COMMENT '分配单元:PACKAGE普通箱、SEALED_PALLET一件代发封托', + MODIFY COLUMN pallet_id BIGINT UNSIGNED NULL COMMENT '一件代发封托ID;普通箱为空', + MODIFY COLUMN pallet_no VARCHAR(32) NULL COMMENT '一件代发系统托盘码快照', + MODIFY COLUMN indivisible TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否为不可拆整托单元'; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns + WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' + AND column_name='active_assignment_key') THEN + ALTER TABLE fl_loading_plan_item + ADD COLUMN active_assignment_key VARCHAR(96) + GENERATED ALWAYS AS (CASE WHEN deleted=0 THEN CONCAT(CASE WHEN pallet_id IS NULL THEN 'D:0' ELSE CONCAT('P:',pallet_id) END,':',inbound_detail_id) ELSE NULL END) STORED + COMMENT '普通明细或已封托托盘明细的有效唯一锁' AFTER active_inbound_detail_id; + END IF; + IF EXISTS (SELECT 1 FROM information_schema.statistics + WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' + AND index_name='uk_loading_item_plan_detail') THEN + ALTER TABLE fl_loading_plan_item DROP INDEX uk_loading_item_plan_detail; + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.statistics + WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' + AND index_name='uk_loading_item_plan_assignment') THEN + ALTER TABLE fl_loading_plan_item + ADD UNIQUE KEY uk_loading_item_plan_assignment (loading_plan_id,active_assignment_key); + END IF; + IF NOT EXISTS (SELECT 1 FROM information_schema.statistics + WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' + AND index_name='idx_loading_item_pallet') THEN + ALTER TABLE fl_loading_plan_item ADD KEY idx_loading_item_pallet (pallet_id,deleted); + END IF; +END$$ +DELIMITER ; +CALL converge_loading_assignment_schema(); +DROP PROCEDURE IF EXISTS converge_loading_assignment_schema; + -- 污染存量库必须先完成旧入库权限搬迁和两类授权恢复,再校验智能装柜权限。 USE baiyue_firstleg; CALL assert_phase3_smart_loading_schema(); @@ -17572,8 +17623,11 @@ BEGIN MODIFY COLUMN expected_sku_quantity INT UNSIGNED NOT NULL COMMENT '箱唛冻结的应收SKU数量', MODIFY COLUMN actual_sku_quantity INT UNSIGNED NOT NULL COMMENT 'PDA确认的实收SKU数量', MODIFY COLUMN discrepancy_status VARCHAR(24) NOT NULL COMMENT '差异状态:MATCH或ACCEPTED_VARIANCE', + MODIFY COLUMN discrepancy_remark VARCHAR(500) NULL COMMENT '差异接受说明', + MODIFY COLUMN bind_operation_id VARCHAR(128) NULL COMMENT '批量绑托幂等操作ID', MODIFY COLUMN last_operation_id VARCHAR(128) NOT NULL COMMENT '最后一次绑托或换托操作幂等号', MODIFY COLUMN counted_by BIGINT UNSIGNED NOT NULL COMMENT '清点操作人ID', + MODIFY COLUMN counted_by_name VARCHAR(64) NULL COMMENT '清点操作人姓名快照', MODIFY COLUMN counted_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '清点时间', MODIFY COLUMN bound_by BIGINT UNSIGNED NULL COMMENT '上托操作人ID', MODIFY COLUMN bound_at DATETIME(3) NULL COMMENT '上托时间'; @@ -17594,11 +17648,18 @@ BEGIN WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' AND column_name='unit_type') THEN ALTER TABLE fl_loading_plan_item - ADD COLUMN unit_type VARCHAR(24) NOT NULL DEFAULT 'PACKAGE' AFTER product_quantity, - ADD COLUMN pallet_id BIGINT UNSIGNED NULL AFTER unit_type, - ADD COLUMN pallet_no VARCHAR(32) NULL AFTER pallet_id, - ADD COLUMN indivisible TINYINT(1) NOT NULL DEFAULT 0 AFTER pallet_no; + ADD COLUMN unit_type VARCHAR(24) NOT NULL DEFAULT 'PACKAGE' + COMMENT '分配单元:PACKAGE普通箱、SEALED_PALLET一件代发封托' AFTER product_quantity, + ADD COLUMN pallet_id BIGINT UNSIGNED NULL COMMENT '一件代发封托ID;普通箱为空' AFTER unit_type, + ADD COLUMN pallet_no VARCHAR(32) NULL COMMENT '一件代发系统托盘码快照' AFTER pallet_id, + ADD COLUMN indivisible TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否为不可拆整托单元' AFTER pallet_no; END IF; + ALTER TABLE fl_loading_plan_item + MODIFY COLUMN unit_type VARCHAR(24) NOT NULL DEFAULT 'PACKAGE' + COMMENT '分配单元:PACKAGE普通箱、SEALED_PALLET一件代发封托', + MODIFY COLUMN pallet_id BIGINT UNSIGNED NULL COMMENT '一件代发封托ID;普通箱为空', + MODIFY COLUMN pallet_no VARCHAR(32) NULL COMMENT '一件代发系统托盘码快照', + MODIFY COLUMN indivisible TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否为不可拆整托单元'; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema='baiyue_firstleg' AND table_name='fl_loading_plan_item' AND column_name='active_assignment_key') THEN diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/DropshipPalletizationSqlContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/DropshipPalletizationSqlContractTest.java index 212895723..ed3c1118b 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/DropshipPalletizationSqlContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/DropshipPalletizationSqlContractTest.java @@ -39,6 +39,7 @@ class DropshipPalletizationSqlContractTest { .doesNotContain("CREATE TABLE IF NOT EXISTS fl_loading_work_pallet_carton ("); } assertThat(unified) + .contains("CREATE PROCEDURE converge_loading_assignment_schema()") .contains("CREATE PROCEDURE converge_dropship_palletization_schema()") .contains("CHANGE COLUMN operation_id count_operation_id") .contains("DROP INDEX uk_loading_item_plan_detail")