fix(sql): use mysql8 compatible PDA migrations

This commit is contained in:
2026-08-10 13:54:28 +08:00
parent d2198fff06
commit 55060c7cbe
2 changed files with 63 additions and 10 deletions
@@ -8856,9 +8856,38 @@ DROP PROCEDURE IF EXISTS assert_phase3_final_schema;
-- PDA 部分拣货释放策略:NULL/AUTO 按比例释放,MANUAL + [] 表示人工明确不释放。
USE baiyue_firstleg;
ALTER TABLE fl_loading_pick_item
ADD COLUMN IF NOT EXISTS release_mode VARCHAR(10) NULL COMMENT 'AUTO按比例释放,MANUAL按人工选择释放' AFTER item_status,
ADD COLUMN IF NOT EXISTS release_location_ids JSON NULL COMMENT '人工选择释放库位ID;空数组表示明确释放0个' AFTER release_mode;
DROP PROCEDURE IF EXISTS phase3_pda_add_column;
DELIMITER $$
CREATE PROCEDURE phase3_pda_add_column(
IN p_table_name VARCHAR(64), IN p_column_name VARCHAR(64), IN p_definition TEXT
)
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = DATABASE() AND table_name = p_table_name AND column_name = p_column_name
) THEN
SET @phase3_pda_column_ddl = CONCAT(
'ALTER TABLE `', p_table_name, '` ADD COLUMN `', p_column_name, '` ', p_definition
);
PREPARE phase3_pda_column_stmt FROM @phase3_pda_column_ddl;
EXECUTE phase3_pda_column_stmt;
DEALLOCATE PREPARE phase3_pda_column_stmt;
END IF;
END$$
DELIMITER ;
CALL phase3_pda_add_column(
'fl_loading_pick_item', 'release_mode',
"VARCHAR(10) NULL COMMENT 'AUTO按比例释放,MANUAL按人工选择释放' AFTER item_status"
);
CALL phase3_pda_add_column(
'fl_loading_pick_item', 'release_location_ids',
"JSON NULL COMMENT '人工选择释放库位ID;空数组表示明确释放0个' AFTER release_mode"
);
CALL phase3_pda_add_column(
'fl_inbound_pallet_allocation', 'reservation_id',
"BIGINT UNSIGNED NULL COMMENT '仓库预占资源唯一ID,A0共享场景用于区分托盘' AFTER location_code"
);
DROP PROCEDURE IF EXISTS phase3_pda_add_column;
-- PDA 多人协作:领取粒度由整柜任务下沉为单条拣货明细。
CREATE TABLE IF NOT EXISTS fl_loading_pick_item_assignment (
pick_item_id BIGINT UNSIGNED NOT NULL,
@@ -8876,10 +8905,26 @@ CREATE TABLE IF NOT EXISTS fl_loading_pick_item_assignment (
CONSTRAINT chk_loading_pick_item_assignment_type CHECK (assignment_type IN ('CLAIMED', 'ASSIGNED'))
) ENGINE=InnoDB COMMENT='PDA拣货明细领取与作业员分配';
ALTER TABLE fl_loading_pick_operation
DROP CHECK IF EXISTS chk_loading_pick_operation_action,
ADD CONSTRAINT chk_loading_pick_operation_action
CHECK (action_type IN ('CLAIM', 'ASSIGN', 'ITEM_CLAIM', 'ITEM_ASSIGN', 'REVIEW'));
DROP PROCEDURE IF EXISTS phase3_pda_replace_operation_check;
DELIMITER $$
CREATE PROCEDURE phase3_pda_replace_operation_check()
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.table_constraints
WHERE constraint_schema = DATABASE()
AND table_name = 'fl_loading_pick_operation'
AND constraint_name = 'chk_loading_pick_operation_action'
AND constraint_type = 'CHECK'
) THEN
ALTER TABLE fl_loading_pick_operation DROP CHECK chk_loading_pick_operation_action;
END IF;
ALTER TABLE fl_loading_pick_operation
ADD CONSTRAINT chk_loading_pick_operation_action
CHECK (action_type IN ('CLAIM', 'ASSIGN', 'ITEM_CLAIM', 'ITEM_ASSIGN', 'REVIEW'));
END$$
DELIMITER ;
CALL phase3_pda_replace_operation_check();
DROP PROCEDURE IF EXISTS phase3_pda_replace_operation_check;
DROP PROCEDURE IF EXISTS assert_phase3_pda_item_assignment_schema;
DELIMITER $$
@@ -8900,9 +8945,6 @@ DELIMITER ;
CALL assert_phase3_pda_item_assignment_schema();
DROP PROCEDURE IF EXISTS assert_phase3_pda_item_assignment_schema;
ALTER TABLE fl_inbound_pallet_allocation
ADD COLUMN IF NOT EXISTS reservation_id BIGINT UNSIGNED NULL COMMENT '仓库预占资源唯一ID,A0共享场景用于区分托盘' AFTER location_code;
-- 来源:firstleg/src/main/resources/db/phase3-carrier-schedule-query-schema.sql
SET NAMES utf8mb4;
USE baiyue_firstleg;
@@ -80,6 +80,17 @@ class Phase3FinalUnifiedSqlContractTest {
.isGreaterThan(sql.lastIndexOf("CALL "));
}
@Test
void unifiedEntryUsesMysql8CompatibleConditionalDdl() throws Exception {
String sql = normalise(Files.readString(resolveUnified()));
assertThat(sql)
.doesNotContain("\n ADD COLUMN IF NOT EXISTS")
.doesNotContain("\n DROP CHECK IF EXISTS")
.contains("CREATE PROCEDURE phase3_pda_add_column")
.contains("CREATE PROCEDURE phase3_pda_replace_operation_check");
}
@Test
void legacySplitIndexesAreOnlyDroppedAndNeverRecreated() throws Exception {
String sql = normalise(Files.readString(resolveUnified()));