# -*- coding: utf-8 -*- """补齐 UAT 库缺失的 2 个数据平台菜单(业务动作日志/出站回写队列)+ 租户链接。 等价于 AidopMenuLinkSync.EnsureDataPlatformSeedMenus + 租户链接同步的启动效果。 用法:python _fix_uat_dp_menus.py check | fix | revoke """ from __future__ import annotations import sys from datetime import datetime import pymysql CONN = dict(host="123.60.180.165", port=3306, user="aidopremote", password="1234567890aiDOP#", database="aidopdev", charset="utf8mb4", connect_timeout=15) PID = 1320990000400 CREATE_TIME = datetime(2022, 2, 10) MENUS = [ dict(Id=1320990000407, Pid=PID, Type=2, Name="aidopDataPlatformActionRunLogs", Path="/aidop/data-platform/action-run-logs", Component="/aidop/data-platform/actionRunLogs", Title="业务动作日志", Icon="ele-Document", OrderNo=55, Remark="订单评审、排程、下达、采购闭环等动作运行日志"), dict(Id=1320990000408, Pid=PID, Type=2, Name="aidopDataPlatformOutbox", Path="/aidop/data-platform/outbox", Component="/aidop/data-platform/outbox", Title="出站回写队列", Icon="ele-Upload", OrderNo=57, Remark="Outbox 死信监控与手工重推"), ] TM_ID_BASE = 8382990001000 # SysTenantMenu 本次插入 Id 段 def main(): mode = sys.argv[1] if len(sys.argv) > 1 else "check" conn = pymysql.connect(**CONN) try: cur = conn.cursor() marks = ",".join(str(m["Id"]) for m in MENUS) cur.execute(f"SELECT Id, Title, Status FROM SysMenu WHERE Id IN ({marks})") print("SYSMENU", cur.fetchall()) cur.execute("SHOW COLUMNS FROM SysTenantMenu") tm_cols = [r[0] for r in cur.fetchall()] print("TM COLUMNS", tm_cols) cur.execute("SELECT Id FROM SysTenant") tenants = [(r[0], None) for r in cur.fetchall()] print("TENANTS", tenants) if mode == "fix": for m in MENUS: cur.execute( "INSERT INTO SysMenu (Id, Pid, Type, Name, Path, Component, Redirect, Permission, Title, Icon," " IsIframe, OutLink, IsHide, IsKeepAlive, IsAffix, OrderNo, Status, Remark, CreateTime)" " VALUES (%s,%s,%s,%s,%s,%s,NULL,NULL,%s,%s,0,NULL,0,1,0,%s,1,%s,%s)", (m["Id"], m["Pid"], m["Type"], m["Name"], m["Path"], m["Component"], m["Title"], m["Icon"], m["OrderNo"], m["Remark"], CREATE_TIME), ) i = 0 for (tid, _ttype) in tenants: for m in MENUS: cur.execute("SELECT COUNT(*) FROM SysTenantMenu WHERE TenantId=%s AND MenuId=%s", (tid, m["Id"])) if cur.fetchone()[0]: continue cur.execute("INSERT INTO SysTenantMenu (Id, TenantId, MenuId) VALUES (%s,%s,%s)", (TM_ID_BASE + i, tid, m["Id"])) i += 1 conn.commit() print("FIX DONE, tenant links inserted:", i) elif mode == "revoke": cur.execute(f"DELETE FROM SysTenantMenu WHERE Id BETWEEN {TM_ID_BASE} AND {TM_ID_BASE + 999}") cur.execute(f"DELETE FROM SysMenu WHERE Id IN ({marks})") conn.commit() print("REVOKE DONE") finally: conn.close() if __name__ == "__main__": main()