Files
mokeegateway/sql/init_qa.py
2026-07-16 00:04:27 +08:00

114 lines
8.4 KiB
Python

"""QA数据库初始化 (UUID版本) - 直接用Python处理关联"""
import pymysql, uuid
def uid(): return uuid.uuid4().hex
conn = pymysql.connect(host='db1.qa.zgitm.com', port=3306, user='mokeegatewayqa', password='mokee.', database='mokeegatewayqa', charset='utf8mb4')
cur = conn.cursor()
# 重建
cur.execute('DROP DATABASE IF EXISTS mokeegatewayqa')
cur.execute('CREATE DATABASE mokeegatewayqa DEFAULT CHARSET utf8mb4')
cur.execute('USE mokeegatewayqa')
conn.commit()
# 读DDL执行
with open('E:/AI/claude/new/mokeeGateway/sql/qa_ddl.sql', 'r', encoding='utf-8') as f:
for stmt in f.read().split(';'):
stmt = stmt.strip()
if stmt and not stmt.startswith('--') and 'USE ' not in stmt:
try: cur.execute(stmt); conn.commit()
except Exception as e: print(f'DDL WARN: {e}')
print('DDL done')
# === 管理员 ===
admin_id = uid()
cur.execute("INSERT INTO sys_user (id, username, password, real_name, email, phone, post, status) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
(admin_id, 'admin', '$2b$10$ffAZHF6lmUuNV6OJITADXeduD5mMTS0.7kElPI7zno2zGn/RF5uC6', '管理员', 'admin@mokee.com', '13800000000', '管理员', 1))
# === 系统 ===
test_sid = uid()
gw_sid = uid()
cur.execute("INSERT INTO sys_system (id,system_code,system_name,front_url,backend_url,gateway_url,status,description) VALUES (%s,%s,%s,%s,%s,%s,%s,%s)",
(test_sid, 'test', '测试系统', 'http://127.0.0.1:5001', 'http://127.0.0.1:32000', 'http://127.0.0.1:9000/test', 1, '测试用业务系统'))
cur.execute("INSERT INTO sys_system (id,system_code,system_name,front_url,backend_url,gateway_url,icon,sort_order,status,description,doc_token) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
(gw_sid, 'gateway', '网关管理平台', 'http://127.0.0.1:5001', 'http://127.0.0.1:9000', 'http://127.0.0.1:9000/gateway', '', 0, 1, '统一登录网关管理后台', 'gateway1234567890'))
# === 绑定系统 ===
cur.execute("INSERT INTO sys_user_system (id,user_id,system_id) VALUES (%s,%s,%s)", (uid(), admin_id, test_sid))
cur.execute("INSERT INTO sys_user_system (id,user_id,system_id) VALUES (%s,%s,%s)", (uid(), admin_id, gw_sid))
# === 角色 ===
test_admin_role = uid()
test_user_role = uid()
gw_super_admin = uid()
gw_admin_role = uid()
cur.execute("INSERT INTO sys_role (id,system_id,role_name,role_code,description,status) VALUES (%s,%s,%s,%s,%s,%s)", (test_admin_role, test_sid, '管理员', 'admin', '系统管理员', 1))
cur.execute("INSERT INTO sys_role (id,system_id,role_name,role_code,description,status) VALUES (%s,%s,%s,%s,%s,%s)", (test_user_role, test_sid, '普通用户', 'user', '普通用户', 1))
cur.execute("INSERT INTO sys_role (id,system_id,role_name,role_code,description,status) VALUES (%s,%s,%s,%s,%s,%s)", (gw_super_admin, gw_sid, '超级管理员', 'super_admin', '网关平台超级管理员', 1))
cur.execute("INSERT INTO sys_role (id,system_id,role_name,role_code,description,status) VALUES (%s,%s,%s,%s,%s,%s)", (gw_admin_role, gw_sid, '普通管理员', 'admin', '网关平台普通管理员', 1))
# === 用户角色 ===
cur.execute("INSERT INTO sys_user_role (id,user_id,role_id) VALUES (%s,%s,%s)", (uid(), admin_id, test_admin_role))
cur.execute("INSERT INTO sys_user_role (id,user_id,role_id) VALUES (%s,%s,%s)", (uid(), admin_id, gw_super_admin))
# === 测试系统菜单 ===
m = {}
m['t_sys'] = uid()
m['t_biz'] = uid()
cur.execute("INSERT INTO sys_menu (id,system_id,parent_id,menu_name,menu_path,component,icon,menu_type,sort_order,status) VALUES (%s,%s,'0',%s,%s,%s,%s,1,%s,1)", (m['t_sys'], test_sid, '系统管理', '/system', 'Layout', 'Setting', 1))
cur.execute("INSERT INTO sys_menu (id,system_id,parent_id,menu_name,menu_path,component,icon,menu_type,sort_order,status) VALUES (%s,%s,'0',%s,%s,%s,%s,1,%s,1)", (m['t_biz'], test_sid, '业务管理', '/biz', 'Layout', 'Document', 2))
for nm, path, comp, icon, sort, pid_key in [('用户管理','/system/user','system/user/index','User',1,'t_sys'),('角色管理','/system/role','system/role/index','Avatar',2,'t_sys'),('订单管理','/biz/order','biz/order/index','Tickets',1,'t_biz'),('报表查询','/biz/report','biz/report/index','TrendCharts',2,'t_biz')]:
mid = uid()
m[nm] = mid
cur.execute("INSERT INTO sys_menu (id,system_id,parent_id,menu_name,menu_path,component,icon,menu_type,sort_order,status) VALUES (%s,%s,%s,%s,%s,%s,%s,2,%s,1)", (mid, test_sid, m[pid_key], nm, path, comp, icon, sort))
# 角色绑定菜单
cur.execute(f"INSERT INTO sys_role_menu (id,role_id,menu_id) SELECT REPLACE(UUID(),'-',''), '{test_admin_role}', id FROM sys_menu WHERE system_id='{test_sid}'")
# === Gateway 菜单 ===
gm = {}
for nm, path, comp, icon, sort, mtype in [('首页','/admin/dashboard','','HomeFilled',1,1),('系统管理',None,'','Monitor',2,1),('用户权限',None,'','User',3,1),('日志审计',None,'','Notebook',4,1)]:
mid = uid(); gm[nm] = mid
cur.execute("INSERT INTO sys_menu (id,system_id,parent_id,menu_name,menu_path,component,icon,menu_type,sort_order,status) VALUES (%s,%s,'0',%s,%s,%s,%s,%s,%s,1)", (mid, gw_sid, nm, path, comp, icon, mtype, sort))
for nm, path, comp, icon, sort, pkey, mtype in [
('系统列表','/admin/system','','List',1,'系统管理',2), ('接口管理','/admin/api','','Link',2,'系统管理',2), ('数据字典','/admin/dict','','Collection',3,'系统管理',2),
('用户管理','/admin/user','','UserFilled',1,'用户权限',2), ('角色管理','/admin/role','','Avatar',2,'用户权限',2), ('菜单管理','/admin/menu','','Menu',3,'用户权限',2),
('登录日志','/admin/log/login','','Document',1,'日志审计',2), ('操作日志','/admin/log/operation','','Tickets',2,'日志审计',2), ('Token日志','/admin/log/token','','Key',3,'日志审计',2)]:
mid = uid(); gm[nm] = mid
cur.execute("INSERT INTO sys_menu (id,system_id,parent_id,menu_name,menu_path,component,icon,menu_type,sort_order,status) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,1)", (mid, gw_sid, gm[pkey], nm, path, comp, icon, mtype, sort))
# 按钮权限
for pid_key, label, perm, sort in [
('系统列表','新增系统','system:system:add',1), ('系统列表','编辑系统','system:system:edit',2), ('系统列表','删除系统','system:system:delete',3),
('用户管理','新增用户','system:user:add',1), ('用户管理','编辑用户','system:user:edit',2), ('用户管理','删除用户','system:user:delete',3),
('角色管理','新增角色','system:role:add',1), ('角色管理','编辑角色','system:role:edit',2), ('角色管理','删除角色','system:role:delete',3), ('角色管理','分配菜单','system:role:assignMenu',4),
('菜单管理','新增菜单','system:menu:add',1), ('菜单管理','编辑菜单','system:menu:edit',2), ('菜单管理','删除菜单','system:menu:delete',3),
('接口管理','新增接口','system:api:add',1), ('接口管理','编辑接口','system:api:edit',2), ('接口管理','删除接口','system:api:delete',3),
('数据字典','新增字典','system:dict:add',1), ('数据字典','编辑字典','system:dict:edit',2), ('数据字典','删除字典','system:dict:delete',3)]:
cur.execute("INSERT INTO sys_menu (id,system_id,parent_id,menu_name,menu_path,component,icon,menu_type,sort_order,status,permission) VALUES (%s,%s,%s,%s,NULL,NULL,'',3,%s,1,%s)", (uid(), gw_sid, gm[pid_key], label, sort, perm))
# 角色菜单绑定
cur.execute(f"INSERT INTO sys_role_menu (id,role_id,menu_id) SELECT REPLACE(UUID(),'-',''), '{gw_super_admin}', id FROM sys_menu WHERE system_id='{gw_sid}'")
cur.execute(f"INSERT INTO sys_role_menu (id,role_id,menu_id) SELECT REPLACE(UUID(),'-',''), '{gw_admin_role}', id FROM sys_menu WHERE system_id='{gw_sid}'")
# 放行接口
for sid in [test_sid, gw_sid]:
for method, path in [('GET','/zgapi/v1/admin/**'),('POST','/zgapi/v1/admin/**'),('PUT','/zgapi/v1/admin/**'),('DELETE','/zgapi/v1/admin/**'),('GET','/zgapi/v1/auth/**'),('POST','/zgapi/v1/auth/**'),('PUT','/zgapi/v1/auth/**')]:
cur.execute("INSERT INTO sys_api (id,system_id,api_path,api_method,api_name,status) VALUES (%s,%s,%s,%s,'放行接口',1)", (uid(), sid, path, method))
conn.commit()
# 验证
for tbl in ['sys_system','sys_user','sys_role','sys_menu','sys_api','sys_role_menu','sys_user_system','sys_user_role']:
cur.execute(f'SELECT COUNT(*) FROM {tbl}')
print(f'{tbl}: {cur.fetchone()[0]}')
cur.execute('SELECT id, username FROM sys_user LIMIT 1')
r = cur.fetchone()
print(f'管理员: {r[1]}, ID长度: {len(r[0])}')
cur.close(); conn.close()
print('QA DB INIT DONE')