feat(db): add production migration chain

This commit is contained in:
2026-09-28 15:39:15 +08:00
parent 7a4486b1bc
commit 08bf8f9a5a
8 changed files with 631 additions and 5 deletions
@@ -0,0 +1,85 @@
-- Region: CN
-- Schema: baiyue_iam
-- Purpose: 补齐国内 PDA、墨家 SKU 同步和船期日历所需权限,并增加国内作业仓绑定索引。
-- Preconditions: 连接必须指向 baiyue_iam;角色和权限基线已存在;不执行数据回填。
-- Postconditions: 国内成员可绑定作业仓,新增权限和角色授权与当前 IAM 基线一致。
SET NAMES utf8mb4;
SET @guard = IF(
NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = 'iam_membership'),
'SELECT 1 FROM migration_blocked_iam_membership_table_missing',
'SELECT 1'
);
PREPARE stmt FROM @guard; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(
NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'iam_membership' AND column_name = 'domestic_warehouse_id'),
'ALTER TABLE iam_membership ADD COLUMN domestic_warehouse_id BIGINT NULL COMMENT ''国内头程PDA操作员绑定的唯一国内作业仓ID'' AFTER overseas_warehouse_id',
'SELECT 1'
);
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @ddl = IF(
NOT EXISTS (SELECT 1 FROM information_schema.statistics WHERE table_schema = DATABASE() AND table_name = 'iam_membership' AND index_name = 'idx_membership_domestic_warehouse'),
'ALTER TABLE iam_membership ADD KEY idx_membership_domestic_warehouse (tenant_id, domestic_warehouse_id, status)',
'SELECT 1'
);
PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
INSERT INTO iam_permission (
id, tenant_id, app_code, permission_type, parent_id, permission_code,
permission_name, route_path, http_method, sort_no, status, built_in, deleted
)
VALUES
(5102131, 0, 'PLATFORM', 'MENU', 5103000, 'platform:mojia-sku-sync:list', '称重机器', '/general/mojia-sku-sync', 'GET', 130, 'ACTIVE', 1, 0),
(5102132, 0, 'PLATFORM', 'BUTTON', 5102131, 'platform:mojia-sku-sync:edit', '编辑SKU测量数据', NULL, 'PUT', 10, 'ACTIVE', 1, 0),
(5102133, 0, 'PLATFORM', 'BUTTON', 5102131, 'platform:mojia-sku-sync:retry', '重新推送SKU测量', NULL, 'POST', 20, 'ACTIVE', 1, 0)
ON DUPLICATE KEY UPDATE
permission_type = VALUES(permission_type), permission_name = VALUES(permission_name), parent_id = VALUES(parent_id),
http_method = VALUES(http_method), status = 'ACTIVE', built_in = 1, deleted = 0;
INSERT IGNORE INTO iam_role_permission (role_id, permission_id, tenant_id)
SELECT r.id, p.id, 0
FROM iam_role r
JOIN iam_permission p ON p.tenant_id = 0 AND p.app_code = 'PLATFORM'
WHERE r.tenant_id = 0 AND r.app_code = 'PLATFORM'
AND r.role_code IN ('PLATFORM_ADMIN', 'ORDER_OPERATOR')
AND p.permission_code IN ('platform:mojia-sku-sync:list', 'platform:mojia-sku-sync:edit', 'platform:mojia-sku-sync:retry');
INSERT IGNORE INTO iam_role_permission (role_id, permission_id, tenant_id)
SELECT r.id, p.id, 0
FROM iam_role r
JOIN iam_permission p ON p.tenant_id = 0 AND p.app_code = 'PLATFORM'
WHERE r.tenant_id = 0 AND r.app_code = 'PLATFORM'
AND r.role_code = 'WAREHOUSE_OPERATOR'
AND p.permission_code IN ('platform:firstleg:preload:list', 'platform:firstleg:preload:edit', 'platform:firstleg:pda:assign');
INSERT INTO iam_permission (
id, tenant_id, app_code, permission_type, parent_id, permission_code,
permission_name, route_path, http_method, sort_no, status, built_in, deleted
)
VALUES
(5102206, 0, 'PLATFORM', 'MENU', 5102000, 'platform:firstleg:sailing-calendar:list', '船期日历', '/sailing-calendar', 'GET', 125, 'ACTIVE', 1, 0),
(5102207, 0, 'PLATFORM', 'BUTTON', 5102206, 'platform:firstleg:sailing-calendar:create', '新增船期', '/sailing-calendar', 'POST', 10, 'ACTIVE', 1, 0),
(5102208, 0, 'PLATFORM', 'BUTTON', 5102206, 'platform:firstleg:sailing-calendar:edit', '编辑船期', '/sailing-calendar', 'PUT', 20, 'ACTIVE', 1, 0),
(5102209, 0, 'PLATFORM', 'BUTTON', 5102206, 'platform:firstleg:sailing-template:manage', '管理渠道与周模板', '/sailing-calendar', 'POST', 30, 'ACTIVE', 1, 0),
(5102210, 0, 'PLATFORM', 'BUTTON', 5102206, 'platform:firstleg:sailing-booking:link', '关联订舱', '/sailing-calendar', 'POST', 40, 'ACTIVE', 1, 0),
(5102211, 0, 'PLATFORM', 'BUTTON', 5102206, 'platform:firstleg:sailing-volume:forecast-manage', '维护货量预报', '/sailing-calendar', 'POST', 50, 'ACTIVE', 1, 0),
(5102212, 0, 'PLATFORM', 'BUTTON', 5102206, 'platform:firstleg:sailing-volume:exception-reassign', '异常重新安排', '/sailing-calendar', 'POST', 60, 'ACTIVE', 1, 0)
ON DUPLICATE KEY UPDATE
parent_id = VALUES(parent_id), permission_code = VALUES(permission_code), permission_name = VALUES(permission_name),
route_path = VALUES(route_path), http_method = VALUES(http_method), sort_no = VALUES(sort_no),
status = 'ACTIVE', built_in = 1, deleted = 0;
INSERT IGNORE INTO iam_role_permission (role_id, permission_id, tenant_id)
SELECT r.id, p.id, 0
FROM iam_role r
JOIN iam_permission p ON p.tenant_id = 0 AND p.app_code = 'PLATFORM'
WHERE r.tenant_id = 0 AND r.app_code = 'PLATFORM'
AND r.role_code IN ('PLATFORM_ADMIN', 'ORDER_OPERATOR')
AND p.permission_code IN (
'platform:firstleg:sailing-calendar:list', 'platform:firstleg:sailing-calendar:create',
'platform:firstleg:sailing-calendar:edit', 'platform:firstleg:sailing-template:manage',
'platform:firstleg:sailing-booking:link', 'platform:firstleg:sailing-volume:forecast-manage',
'platform:firstleg:sailing-volume:exception-reassign');