test(firstleg): cover phase3 container loading flow
This commit is contained in:
@@ -4893,6 +4893,92 @@ CREATE TABLE IF NOT EXISTS fl_loading_pick_history (
|
||||
CONSTRAINT fk_loading_pick_history_item FOREIGN KEY (pick_item_id) REFERENCES fl_loading_pick_item (id)
|
||||
) ENGINE=InnoDB COMMENT='PDA拣货幂等和操作审计历史';
|
||||
|
||||
DROP PROCEDURE IF EXISTS repair_phase3_loading_pick_task_foreign_keys;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE repair_phase3_loading_pick_task_foreign_keys()
|
||||
BEGIN
|
||||
DECLARE item_fk_count INT DEFAULT 0;
|
||||
DECLARE item_target_count INT DEFAULT 0;
|
||||
DECLARE history_fk_count INT DEFAULT 0;
|
||||
DECLARE history_target_count INT DEFAULT 0;
|
||||
DECLARE item_drop_clauses TEXT;
|
||||
DECLARE history_drop_clauses TEXT;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM fl_loading_pick_item item
|
||||
LEFT JOIN fl_loading_pick_task task ON task.id = item.pick_task_id
|
||||
WHERE task.id IS NULL
|
||||
) THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '柜次PDA明细存在无法迁移到智能装柜任务的引用';
|
||||
END IF;
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM fl_loading_pick_history history
|
||||
LEFT JOIN fl_loading_pick_task task ON task.id = history.pick_task_id
|
||||
WHERE task.id IS NULL
|
||||
) THEN
|
||||
SIGNAL SQLSTATE '45000'
|
||||
SET MESSAGE_TEXT = '柜次PDA历史存在无法迁移到智能装柜任务的引用';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*),
|
||||
SUM(k.referenced_table_name = 'fl_loading_pick_task'
|
||||
AND k.referenced_column_name = 'id'
|
||||
AND (SELECT COUNT(*) FROM information_schema.key_column_usage peer
|
||||
WHERE peer.constraint_schema = k.constraint_schema
|
||||
AND peer.table_name = k.table_name
|
||||
AND peer.constraint_name = k.constraint_name) = 1),
|
||||
GROUP_CONCAT(CONCAT('DROP FOREIGN KEY `', REPLACE(k.constraint_name, '`', '``'), '`')
|
||||
ORDER BY k.constraint_name SEPARATOR ', ')
|
||||
INTO item_fk_count, item_target_count, item_drop_clauses
|
||||
FROM information_schema.key_column_usage k
|
||||
WHERE k.constraint_schema = 'baiyue_firstleg'
|
||||
AND k.table_name = 'fl_loading_pick_item'
|
||||
AND k.column_name = 'pick_task_id'
|
||||
AND k.referenced_table_name IS NOT NULL;
|
||||
IF item_fk_count <> 1 OR item_target_count <> 1 THEN
|
||||
IF item_drop_clauses IS NOT NULL THEN
|
||||
SET @phase3_fk_ddl = CONCAT('ALTER TABLE fl_loading_pick_item ', item_drop_clauses);
|
||||
PREPARE phase3_fk_statement FROM @phase3_fk_ddl;
|
||||
EXECUTE phase3_fk_statement;
|
||||
DEALLOCATE PREPARE phase3_fk_statement;
|
||||
END IF;
|
||||
ALTER TABLE fl_loading_pick_item
|
||||
ADD CONSTRAINT fk_loading_pick_item_task
|
||||
FOREIGN KEY (pick_task_id) REFERENCES fl_loading_pick_task (id);
|
||||
END IF;
|
||||
|
||||
SELECT COUNT(*),
|
||||
SUM(k.referenced_table_name = 'fl_loading_pick_task'
|
||||
AND k.referenced_column_name = 'id'
|
||||
AND (SELECT COUNT(*) FROM information_schema.key_column_usage peer
|
||||
WHERE peer.constraint_schema = k.constraint_schema
|
||||
AND peer.table_name = k.table_name
|
||||
AND peer.constraint_name = k.constraint_name) = 1),
|
||||
GROUP_CONCAT(CONCAT('DROP FOREIGN KEY `', REPLACE(k.constraint_name, '`', '``'), '`')
|
||||
ORDER BY k.constraint_name SEPARATOR ', ')
|
||||
INTO history_fk_count, history_target_count, history_drop_clauses
|
||||
FROM information_schema.key_column_usage k
|
||||
WHERE k.constraint_schema = 'baiyue_firstleg'
|
||||
AND k.table_name = 'fl_loading_pick_history'
|
||||
AND k.column_name = 'pick_task_id'
|
||||
AND k.referenced_table_name IS NOT NULL;
|
||||
IF history_fk_count <> 1 OR history_target_count <> 1 THEN
|
||||
IF history_drop_clauses IS NOT NULL THEN
|
||||
SET @phase3_fk_ddl = CONCAT('ALTER TABLE fl_loading_pick_history ', history_drop_clauses);
|
||||
PREPARE phase3_fk_statement FROM @phase3_fk_ddl;
|
||||
EXECUTE phase3_fk_statement;
|
||||
DEALLOCATE PREPARE phase3_fk_statement;
|
||||
END IF;
|
||||
ALTER TABLE fl_loading_pick_history
|
||||
ADD CONSTRAINT fk_loading_pick_history_task
|
||||
FOREIGN KEY (pick_task_id) REFERENCES fl_loading_pick_task (id);
|
||||
END IF;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
CALL repair_phase3_loading_pick_task_foreign_keys();
|
||||
DROP PROCEDURE repair_phase3_loading_pick_task_foreign_keys;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_container_booking_before_update;
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER trg_container_booking_before_update
|
||||
@@ -5443,6 +5529,40 @@ BEGIN
|
||||
'uk_loading_pick_history_operation')) <> 3 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '智能装柜迁移失败:PDA唯一索引缺失';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM information_schema.key_column_usage
|
||||
WHERE constraint_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_loading_pick_item'
|
||||
AND column_name = 'pick_task_id'
|
||||
AND referenced_table_name IS NOT NULL) <> 1
|
||||
OR (SELECT COUNT(*) FROM information_schema.key_column_usage outer_fk
|
||||
WHERE outer_fk.constraint_schema = 'baiyue_firstleg'
|
||||
AND outer_fk.table_name = 'fl_loading_pick_item'
|
||||
AND outer_fk.column_name = 'pick_task_id'
|
||||
AND outer_fk.referenced_table_name = 'fl_loading_pick_task'
|
||||
AND outer_fk.referenced_column_name = 'id'
|
||||
AND (SELECT COUNT(*) FROM information_schema.key_column_usage peer
|
||||
WHERE peer.constraint_schema = outer_fk.constraint_schema
|
||||
AND peer.table_name = outer_fk.table_name
|
||||
AND peer.constraint_name = outer_fk.constraint_name) = 1) <> 1 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '智能装柜迁移失败:柜次PDA明细任务外键不唯一或指向错误';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM information_schema.key_column_usage
|
||||
WHERE constraint_schema = 'baiyue_firstleg'
|
||||
AND table_name = 'fl_loading_pick_history'
|
||||
AND column_name = 'pick_task_id'
|
||||
AND referenced_table_name IS NOT NULL) <> 1
|
||||
OR (SELECT COUNT(*) FROM information_schema.key_column_usage outer_fk
|
||||
WHERE outer_fk.constraint_schema = 'baiyue_firstleg'
|
||||
AND outer_fk.table_name = 'fl_loading_pick_history'
|
||||
AND outer_fk.column_name = 'pick_task_id'
|
||||
AND outer_fk.referenced_table_name = 'fl_loading_pick_task'
|
||||
AND outer_fk.referenced_column_name = 'id'
|
||||
AND (SELECT COUNT(*) FROM information_schema.key_column_usage peer
|
||||
WHERE peer.constraint_schema = outer_fk.constraint_schema
|
||||
AND peer.table_name = outer_fk.table_name
|
||||
AND peer.constraint_name = outer_fk.constraint_name) = 1) <> 1 THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '智能装柜迁移失败:柜次PDA历史任务外键不唯一或指向错误';
|
||||
END IF;
|
||||
IF (SELECT COUNT(*) FROM information_schema.triggers
|
||||
WHERE trigger_schema = 'baiyue_firstleg'
|
||||
AND trigger_name IN ('trg_container_booking_before_update',
|
||||
@@ -6489,10 +6609,10 @@ ON DUPLICATE KEY UPDATE
|
||||
status = 'ACTIVE', built_in = 1, deleted = 0;
|
||||
|
||||
INSERT INTO iam_role_permission (role_id, permission_id, tenant_id)
|
||||
SELECT 4000001, id, 0
|
||||
FROM iam_permission
|
||||
WHERE tenant_id = 0 AND app_code = 'PLATFORM'
|
||||
AND permission_code IN (
|
||||
SELECT role.id, permission.id, role.tenant_id
|
||||
FROM iam_role role
|
||||
JOIN iam_permission permission ON permission.tenant_id = 0 AND permission.app_code = 'PLATFORM'
|
||||
AND permission.permission_code IN (
|
||||
'firstleg:inbound:split',
|
||||
'firstleg:inbound:preload',
|
||||
'firstleg:inbound:preload-view',
|
||||
@@ -6503,6 +6623,7 @@ WHERE tenant_id = 0 AND app_code = 'PLATFORM'
|
||||
'platform:firstleg:inbound:picking:edit',
|
||||
'platform:firstleg:inbound:picking:view'
|
||||
)
|
||||
WHERE role.tenant_id = 0 AND role.role_code IN ('PLATFORM_ADMIN', 'ORDER_OPERATOR')
|
||||
ON DUPLICATE KEY UPDATE tenant_id = VALUES(tenant_id);
|
||||
|
||||
INSERT IGNORE INTO iam_role_permission (role_id, permission_id, tenant_id)
|
||||
|
||||
Reference in New Issue
Block a user