| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- # -*- 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()
|