fix(sql): use mysql8 compatible PDA migrations
This commit is contained in:
@@ -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;
|
||||
|
||||
+11
@@ -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()));
|
||||
|
||||
Reference in New Issue
Block a user