-- 证书齐备:易制毒外部装送段可人工放行,安排和归档不再校验、不扣购买证与运输证。 -- MySQL 5.7。可重复执行。只给已有「计划段次用证」菜单的角色补这个入口。 SET NAMES utf8mb4; START TRANSACTION; SET @schema_name = DATABASE(); SET @ready_exists = ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = @schema_name AND TABLE_NAME = 'pl_plan' AND COLUMN_NAME = 'quota_cert_waived' ); SET @ready_sql = IF( @ready_exists = 0, 'ALTER TABLE pl_plan ADD COLUMN quota_cert_waived tinyint NOT NULL DEFAULT 0 COMMENT ''证书齐备:1 时安排和归档不校验、不扣购买证与运输证额度'' AFTER hazard_cert_ready_time, ADD COLUMN quota_cert_waived_by varchar(64) DEFAULT NULL COMMENT ''证书齐备确认人ID'' AFTER quota_cert_waived, ADD COLUMN quota_cert_waived_by_name varchar(100) DEFAULT NULL COMMENT ''证书齐备确认人姓名'' AFTER quota_cert_waived_by, ADD COLUMN quota_cert_waived_time datetime DEFAULT NULL COMMENT ''证书齐备确认时间'' AFTER quota_cert_waived_by_name', 'SELECT 1' ); PREPARE ready_stmt FROM @ready_sql; EXECUTE ready_stmt; DEALLOCATE PREPARE ready_stmt; INSERT INTO sys_menu ( id, menu_name, parent_id, menu_type, path, component, perms, is_frame, visible, status, tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_time, del_flag ) SELECT 'PL_CERT_READY', '证书齐备', parent.id, 'C', 'cert-ready', 'pl/cert-ready/index', 'pl:plan-cert:list', 1, '1', '1', parent.tenant_no, plan_leaf.order_num + 1, '待调整排序', 'system', '', NOW(), NOW(), 0 FROM sys_menu plan_leaf JOIN sys_menu parent ON parent.id = plan_leaf.parent_id AND parent.tenant_no = plan_leaf.tenant_no AND parent.del_flag = 0 AND parent.id = 'PL_MENU_ROOT' AND parent.path = '/pl' JOIN sys_menu root ON root.id = parent.parent_id AND root.tenant_no = parent.tenant_no AND root.del_flag = 0 AND root.parent_id = '0' AND root.path = '/web' WHERE plan_leaf.tenant_no = 'shanxia2.0' AND plan_leaf.del_flag = 0 AND plan_leaf.menu_type = 'C' AND plan_leaf.perms = 'pl:plan-cert:list' AND plan_leaf.path = 'plan-cert' AND NOT EXISTS ( SELECT 1 FROM sys_menu existing WHERE existing.id = 'PL_CERT_READY' OR (existing.tenant_no = plan_leaf.tenant_no AND existing.del_flag = 0 AND existing.path = 'cert-ready' AND existing.parent_id = parent.id) ); UPDATE sys_menu sibling JOIN sys_menu created ON created.id = 'PL_CERT_READY' AND created.del_flag = 0 AND created.tenant_no = sibling.tenant_no AND created.parent_id = sibling.parent_id AND created.remark = '待调整排序' SET sibling.order_num = sibling.order_num + 1, sibling.update_time = NOW() WHERE sibling.tenant_no = 'shanxia2.0' AND sibling.del_flag = 0 AND sibling.id <> 'PL_CERT_READY' AND sibling.order_num >= created.order_num; UPDATE sys_menu SET remark = '计划段次用证之后的证书齐备入口', update_time = NOW() WHERE id = 'PL_CERT_READY' AND tenant_no = 'shanxia2.0' AND del_flag = 0 AND remark = '待调整排序'; INSERT INTO sys_role_menu ( id, role_id, menu_id, tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_time, del_flag ) SELECT MD5(CONCAT(access_row.role_id, '|PL_CERT_READY|cert-ready|v1')), access_row.role_id, created.id, access_row.tenant_no, 0, '证书齐备:沿用计划段次用证授权', 'system', '', NOW(), NOW(), 0 FROM sys_role_menu access_row JOIN sys_menu plan_leaf ON plan_leaf.id = access_row.menu_id AND plan_leaf.tenant_no = access_row.tenant_no AND plan_leaf.del_flag = 0 AND plan_leaf.menu_type = 'C' AND plan_leaf.perms = 'pl:plan-cert:list' AND plan_leaf.path = 'plan-cert' JOIN sys_menu created ON created.id = 'PL_CERT_READY' AND created.tenant_no = plan_leaf.tenant_no AND created.del_flag = 0 WHERE access_row.del_flag = 0 AND access_row.tenant_no = 'shanxia2.0' AND NOT EXISTS ( SELECT 1 FROM sys_role_menu existing WHERE existing.role_id = access_row.role_id AND existing.menu_id = created.id AND existing.tenant_no = access_row.tenant_no AND existing.del_flag = 0 ) ON DUPLICATE KEY UPDATE del_flag = 0, update_time = NOW(); COMMIT;