From 053c538f943913b2c573c1bc7e53b90c251e3648 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Fri, 4 Sep 2026 14:09:41 +0800 Subject: [PATCH] fix: preserve pallet snapshots across partial pick --- deploy/sql/头程数据库统一增量-MySQL8.sql | 20 +++++++++++++++---- .../resources/db/phase2-inbound-schema.sql | 2 +- .../PdaSplitSettlementSqlContractTest.java | 5 ++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/deploy/sql/头程数据库统一增量-MySQL8.sql b/deploy/sql/头程数据库统一增量-MySQL8.sql index 5f35a3b51..d9362110d 100644 --- a/deploy/sql/头程数据库统一增量-MySQL8.sql +++ b/deploy/sql/头程数据库统一增量-MySQL8.sql @@ -3163,7 +3163,7 @@ CREATE TABLE IF NOT EXISTS fl_inbound_pallet_allocation ( PRIMARY KEY (id), UNIQUE KEY uk_pallet_allocation_no (tenant_id, inbound_id, allocation_no), UNIQUE KEY uk_pallet_allocation_slot (tenant_id, inbound_id, block_id, slot_no), - UNIQUE KEY uk_pallet_allocation_weight (tenant_id, weight_result_id), + UNIQUE KEY uk_pallet_allocation_weight (tenant_id, inbound_id, weight_result_id), KEY idx_allocation_location (tenant_id, warehouse_id, location_id, allocation_status), KEY idx_allocation_reservation (reservation_id), CONSTRAINT fk_allocation_inbound FOREIGN KEY (inbound_id) REFERENCES fl_inbound_order (id) @@ -10259,9 +10259,16 @@ SET @sql = IF((SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index) 'ALTER TABLE fl_inbound_pallet_allocation ADD UNIQUE KEY uk_pallet_allocation_slot (tenant_id,inbound_id,block_id,slot_no)', 'SELECT 1')); PREPARE statement FROM @sql; EXECUTE statement; DEALLOCATE PREPARE statement; -SET @sql = IF((SELECT COUNT(*) FROM information_schema.statistics - WHERE table_schema=DATABASE() AND table_name='fl_inbound_pallet_allocation' AND index_name='uk_pallet_allocation_weight') = 0, - 'ALTER TABLE fl_inbound_pallet_allocation ADD UNIQUE KEY uk_pallet_allocation_weight (tenant_id,weight_result_id)', 'SELECT 1'); +SET @sql = IF((SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index) + FROM information_schema.statistics + WHERE table_schema=DATABASE() AND table_name='fl_inbound_pallet_allocation' + AND index_name='uk_pallet_allocation_weight') <> 'tenant_id,inbound_id,weight_result_id', + 'ALTER TABLE fl_inbound_pallet_allocation DROP INDEX uk_pallet_allocation_weight, ADD UNIQUE KEY uk_pallet_allocation_weight (tenant_id,inbound_id,weight_result_id)', + IF((SELECT COUNT(*) FROM information_schema.statistics + WHERE table_schema=DATABASE() AND table_name='fl_inbound_pallet_allocation' + AND index_name='uk_pallet_allocation_weight') = 0, + 'ALTER TABLE fl_inbound_pallet_allocation ADD UNIQUE KEY uk_pallet_allocation_weight (tenant_id,inbound_id,weight_result_id)', + 'SELECT 1')); PREPARE statement FROM @sql; EXECUTE statement; DEALLOCATE PREPARE statement; SET @sql = IF((SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='fl_inbound_pallet_allocation' AND index_name='idx_allocation_reservation') = 0, @@ -15017,6 +15024,11 @@ BEGIN WHERE table_schema = 'baiyue_firstleg' AND table_name = 'fl_inbound_pallet_allocation' AND index_name = 'uk_pallet_allocation_slot') <> 'tenant_id,inbound_id,block_id,slot_no' + OR (SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index) + FROM information_schema.statistics + WHERE table_schema = 'baiyue_firstleg' + AND table_name = 'fl_inbound_pallet_allocation' + AND index_name = 'uk_pallet_allocation_weight') <> 'tenant_id,inbound_id,weight_result_id' OR (SELECT COUNT(DISTINCT index_name) FROM information_schema.statistics WHERE table_schema = 'baiyue_firstleg' AND table_name = 'fl_inbound_pallet_allocation' diff --git a/firstleg/src/main/resources/db/phase2-inbound-schema.sql b/firstleg/src/main/resources/db/phase2-inbound-schema.sql index 53320af37..11b4272a1 100644 --- a/firstleg/src/main/resources/db/phase2-inbound-schema.sql +++ b/firstleg/src/main/resources/db/phase2-inbound-schema.sql @@ -736,7 +736,7 @@ CREATE TABLE IF NOT EXISTS fl_inbound_pallet_allocation ( PRIMARY KEY (id), UNIQUE KEY uk_pallet_allocation_no (tenant_id, inbound_id, allocation_no), UNIQUE KEY uk_pallet_allocation_slot (tenant_id, inbound_id, block_id, slot_no), - UNIQUE KEY uk_pallet_allocation_weight (tenant_id, weight_result_id), + UNIQUE KEY uk_pallet_allocation_weight (tenant_id, inbound_id, weight_result_id), KEY idx_allocation_location (tenant_id, warehouse_id, location_id, allocation_status), KEY idx_allocation_reservation (reservation_id), CONSTRAINT fk_allocation_inbound FOREIGN KEY (inbound_id) REFERENCES fl_inbound_order (id) diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java index f6b1b3f0b..58df3a93f 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/PdaSplitSettlementSqlContractTest.java @@ -185,9 +185,12 @@ class PdaSplitSettlementSqlContractTest { assertThat(moduleSql) .contains("UNIQUE KEY uk_pallet_allocation_slot (tenant_id, inbound_id, block_id, slot_no)") + .contains("UNIQUE KEY uk_pallet_allocation_weight (tenant_id, inbound_id, weight_result_id)") .doesNotContain("UNIQUE KEY uk_pallet_allocation_slot (tenant_id, block_id, slot_no)"); assertThat(unifiedSql) .contains("'tenant_id,inbound_id,block_id,slot_no'") - .contains("ADD UNIQUE KEY uk_pallet_allocation_slot (tenant_id,inbound_id,block_id,slot_no)"); + .contains("ADD UNIQUE KEY uk_pallet_allocation_slot (tenant_id,inbound_id,block_id,slot_no)") + .contains("'tenant_id,inbound_id,weight_result_id'") + .contains("ADD UNIQUE KEY uk_pallet_allocation_weight (tenant_id,inbound_id,weight_result_id)"); } }