初始化
This commit is contained in:
41
sql/add_file_menu.sql
Normal file
41
sql/add_file_menu.sql
Normal file
@@ -0,0 +1,41 @@
|
||||
-- 文件对象储存菜单 + 权限 (QA & PROD 通用)
|
||||
-- 需要先查 gateway 系统ID 和 "系统管理" 目录ID,然后执行
|
||||
|
||||
-- ====== QA 数据库 ======
|
||||
USE mokeegatewayqa;
|
||||
|
||||
SET @gw_id = (SELECT id FROM sys_system WHERE system_code='gateway');
|
||||
SET @sys_mgmt_id = (SELECT id FROM sys_menu WHERE system_id=@gw_id AND parent_id='0' AND menu_name='系统管理' AND menu_type=1);
|
||||
|
||||
-- 文件对象储存菜单 (type=2 菜单)
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, menu_path, component, icon, permission, sort_order, status, created_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), @gw_id, @sys_mgmt_id, '文件对象储存', 2, '/admin/file', 'admin/file/FileList', 'FolderOpened', 'system:file:list', 4, 1, NOW());
|
||||
|
||||
SET @file_menu_id = (SELECT id FROM sys_menu WHERE system_id=@gw_id AND menu_path='/admin/file');
|
||||
|
||||
-- 按钮权限
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, permission, sort_order, status, created_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), @gw_id, @file_menu_id, '上传文件', 3, 'system:file:upload', 1, 1, NOW());
|
||||
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, permission, sort_order, status, created_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), @gw_id, @file_menu_id, '删除文件', 3, 'system:file:delete', 2, 1, NOW());
|
||||
|
||||
-- ====== PROD 数据库 ======
|
||||
USE mokeegateway;
|
||||
|
||||
SET @gw_id = (SELECT id FROM sys_system WHERE system_code='gateway');
|
||||
SET @sys_mgmt_id = (SELECT id FROM sys_menu WHERE system_id=@gw_id AND parent_id='0' AND menu_name='系统管理' AND menu_type=1);
|
||||
|
||||
-- 文件对象储存菜单
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, menu_path, component, icon, permission, sort_order, status, created_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), @gw_id, @sys_mgmt_id, '文件对象储存', 2, '/admin/file', 'admin/file/FileList', 'FolderOpened', 'system:file:list', 4, 1, NOW());
|
||||
|
||||
SET @file_menu_id = (SELECT id FROM sys_menu WHERE system_id=@gw_id AND menu_path='/admin/file');
|
||||
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, permission, sort_order, status, created_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), @gw_id, @file_menu_id, '上传文件', 3, 'system:file:upload', 1, 1, NOW());
|
||||
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, permission, sort_order, status, created_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), @gw_id, @file_menu_id, '删除文件', 3, 'system:file:delete', 2, 1, NOW());
|
||||
|
||||
SELECT 'QA:' AS env, id, menu_name, menu_type, permission FROM sys_menu WHERE menu_path='/admin/file' OR permission LIKE 'system:file:%';
|
||||
36
sql/add_file_storage.sql
Normal file
36
sql/add_file_storage.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
-- ============================================================================
|
||||
-- 文件对象存储:sys_config 表 + sys_file 字段扩展 + 菜单更新
|
||||
-- 执行环境:QA / PROD 均需执行
|
||||
-- ============================================================================
|
||||
|
||||
-- 1. 系统配置表
|
||||
CREATE TABLE IF NOT EXISTS sys_config (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
config_key VARCHAR(128) NOT NULL COMMENT '配置键',
|
||||
config_value TEXT COMMENT '配置值',
|
||||
description VARCHAR(256) COMMENT '配置说明',
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_config_key (config_key)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
|
||||
|
||||
-- 2. 种子数据:文件存储磁盘路径
|
||||
INSERT IGNORE INTO sys_config (id, config_key, config_value, description, updated_at)
|
||||
VALUES (REPLACE(UUID(),'-',''), 'file.storage.disk.path', '/data/mokee/gw/file', '文件对象存储磁盘根目录', NOW());
|
||||
|
||||
-- 3. sys_file 加字段(存储文件名 + 上传者显示名)
|
||||
ALTER TABLE sys_file ADD COLUMN IF NOT EXISTS storage_file_name VARCHAR(256) DEFAULT NULL COMMENT '磁盘存储的实际文件名';
|
||||
ALTER TABLE sys_file ADD COLUMN IF NOT EXISTS upload_user_name VARCHAR(64) DEFAULT NULL COMMENT '上传者显示名(用户姓名或系统名)';
|
||||
|
||||
-- 4. 菜单改:文件管理 → 文件对象储存
|
||||
UPDATE sys_menu SET menu_name = '文件对象储存' WHERE menu_path = '/admin/file' AND menu_type = 2;
|
||||
|
||||
-- 5. 新增"系统配置"菜单(系统管理 > 系统配置,sortOrder=5)
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, menu_path, component, icon, sort_order, status, created_at)
|
||||
SELECT REPLACE(UUID(),'-',''), m1.system_id, m1.id, '系统配置', 2, '/admin/config', 'admin/config/SystemConfig', 'Setting', 5, 1, NOW()
|
||||
FROM sys_menu m1
|
||||
WHERE m1.menu_name = '系统管理' AND m1.menu_type = 1 AND m1.parent_id = '0'
|
||||
AND NOT EXISTS (SELECT 1 FROM sys_menu m2 WHERE m2.menu_path = '/admin/config' AND m2.menu_type = 2);
|
||||
|
||||
-- 6. 菜单改:旧菜单文件图标改为 FolderOpened (如果之前是默认图标)
|
||||
-- UPDATE sys_menu SET icon = 'FolderOpened' WHERE menu_path = '/admin/file' AND menu_type = 2 AND icon = 'Folder';
|
||||
157
sql/fix_all_permissions.sql
Normal file
157
sql/fix_all_permissions.sql
Normal file
@@ -0,0 +1,157 @@
|
||||
-- ============================================================
|
||||
-- 完整按钮权限修复 SQL(PROD 执行)
|
||||
-- 功能:
|
||||
-- 1. 补充所有按钮权限菜单(INSERT IGNORE,幂等安全)
|
||||
-- 2. 将所有 gateway 系统菜单(含按钮)绑定到 super_admin
|
||||
-- 3. 执行后 super_admin 重新登录即可看到所有按钮
|
||||
--
|
||||
-- 执行方式:mysql -u root -p < sql/fix_all_permissions.sql
|
||||
-- ============================================================
|
||||
USE mokeegateway;
|
||||
|
||||
-- ========================================
|
||||
-- 一、补充按钮权限菜单(INSERT IGNORE)
|
||||
-- ========================================
|
||||
|
||||
-- 1. 系统列表 按钮权限
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增系统', 3, 1, 1, 'system:system:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑系统', 3, 2, 1, 'system:system:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除系统', 3, 3, 1, 'system:system:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
|
||||
-- 2. 用户管理 按钮权限
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增用户', 3, 1, 1, 'system:user:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑用户', 3, 2, 1, 'system:user:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除用户', 3, 3, 1, 'system:user:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
|
||||
-- 3. 角色管理 按钮权限
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增角色', 3, 1, 1, 'system:role:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑角色', 3, 2, 1, 'system:role:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除角色', 3, 3, 1, 'system:role:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '分配菜单', 3, 4, 1, 'system:role:assignMenu'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
|
||||
-- 4. 菜单管理 按钮权限(重点:新增/编辑/删除)
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增菜单', 3, 1, 1, 'system:menu:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑菜单', 3, 2, 1, 'system:menu:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除菜单', 3, 3, 1, 'system:menu:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
|
||||
-- 5. 接口管理 按钮权限(重点:新增/编辑/删除)
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增接口', 3, 1, 1, 'system:api:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑接口', 3, 2, 1, 'system:api:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除接口', 3, 3, 1, 'system:api:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
|
||||
-- 6. 数据字典 按钮权限
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增字典', 3, 1, 1, 'system:dict:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑字典', 3, 2, 1, 'system:dict:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除字典', 3, 3, 1, 'system:dict:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
|
||||
-- 7. 文件对象储存 按钮权限
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '上传文件', 3, 1, 1, 'system:file:upload'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='文件对象储存';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除文件', 3, 2, 1, 'system:file:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='文件对象储存';
|
||||
|
||||
-- 8. 邮件管理 按钮权限
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '发送邮件', 3, 1, 1, 'system:email:send'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='邮件管理';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除邮件', 3, 2, 1, 'system:email:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='邮件管理';
|
||||
|
||||
-- 9. 个人中心 按钮权限(parent_id='0',独立权限,不挂在页面菜单下)
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, '0', '保存个人信息', 3, 1, 1, 'system:profile:edit'
|
||||
FROM sys_system s WHERE s.system_code='gateway';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, '0', '修改密码', 3, 2, 1, 'system:profile:password'
|
||||
FROM sys_system s WHERE s.system_code='gateway';
|
||||
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, '0', '更换头像', 3, 3, 1, 'system:profile:avatar'
|
||||
FROM sys_system s WHERE s.system_code='gateway';
|
||||
|
||||
|
||||
-- ========================================
|
||||
-- 二、绑定所有 gateway 菜单到 super_admin
|
||||
-- ========================================
|
||||
INSERT IGNORE INTO sys_role_menu (id, role_id, menu_id)
|
||||
SELECT REPLACE(UUID(),'-',''), r.id, m.id
|
||||
FROM sys_role r, sys_menu m, sys_system s
|
||||
WHERE r.role_code='super_admin' AND r.system_id=s.id AND m.system_id=s.id AND s.system_code='gateway';
|
||||
|
||||
-- ========================================
|
||||
-- 三、验证查询(检查结果)
|
||||
-- ========================================
|
||||
SELECT '=== 按钮权限检查 ===' AS info;
|
||||
SELECT m.menu_name AS '按钮名称', m.permission AS '权限标识',
|
||||
CASE WHEN rm.id IS NOT NULL THEN '已绑定' ELSE '未绑定' END AS 'super_admin绑定状态'
|
||||
FROM sys_menu m
|
||||
LEFT JOIN sys_system s ON m.system_id = s.id AND s.system_code = 'gateway'
|
||||
LEFT JOIN sys_role r ON r.system_id = s.id AND r.role_code = 'super_admin'
|
||||
LEFT JOIN sys_role_menu rm ON rm.menu_id = m.id AND rm.role_id = r.id
|
||||
WHERE m.menu_type = 3 AND s.system_code = 'gateway'
|
||||
ORDER BY m.permission;
|
||||
|
||||
SELECT '=== super_admin 权限总数 ===' AS info;
|
||||
SELECT COUNT(DISTINCT m.permission) AS '权限数量'
|
||||
FROM sys_role r, sys_role_menu rm, sys_menu m, sys_system s
|
||||
WHERE r.role_code = 'super_admin' AND r.system_id = s.id AND s.system_code = 'gateway'
|
||||
AND r.id = rm.role_id AND rm.menu_id = m.id AND m.permission IS NOT NULL AND m.permission != '';
|
||||
|
||||
SELECT '=== 修复完成!请 super_admin 重新登录 ===' AS result;
|
||||
103
sql/init_prod_migrate.py
Normal file
103
sql/init_prod_migrate.py
Normal file
@@ -0,0 +1,103 @@
|
||||
"""PROD数据库 UUID 迁移 — 保留现有数据"""
|
||||
import pymysql, uuid
|
||||
|
||||
conn = pymysql.connect(host='db1.prod.zgitm.com', port=3306, user='mokeegateway', password='mokee.', database='mokeegateway', charset='utf8mb4')
|
||||
cur = conn.cursor()
|
||||
|
||||
def uid(): return uuid.uuid4().hex
|
||||
|
||||
def ex(sql, *args):
|
||||
cur.execute(sql, args)
|
||||
conn.commit()
|
||||
|
||||
# 1. 为所有表添加 uuid_id 列(每次单独执行,忽略已存在错误)
|
||||
tables = ['sys_system','sys_user','sys_role','sys_menu','sys_api','sys_dict','sys_file','sys_user_system','sys_user_role','sys_role_menu','sys_login_log','sys_operation_log']
|
||||
for t in tables:
|
||||
try: ex(f"ALTER TABLE {t} ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT ''")
|
||||
except Exception as e: print(f'{t} add col: {e}')
|
||||
|
||||
# 2. 生成UUID
|
||||
for t in tables:
|
||||
ex(f"UPDATE {t} SET uuid_id = REPLACE(UUID(),'-','')")
|
||||
print('UUID generated')
|
||||
|
||||
# 3. 收集新旧ID映射(先收集所有,避免 JOIN 更新时列类型冲突)
|
||||
id_map = {}
|
||||
for t in tables:
|
||||
cur.execute(f"SELECT id, uuid_id FROM {t}")
|
||||
id_map[t] = {str(old): new for old, new in cur.fetchall()}
|
||||
print('ID maps collected')
|
||||
|
||||
# 4. 先将所有FK列扩大为VARCHAR(64) (允许NULL先)
|
||||
print('Modifying FK columns to VARCHAR...')
|
||||
for child_tbl, fks in {
|
||||
'sys_api': ['system_id'],
|
||||
'sys_role': ['system_id'],
|
||||
'sys_menu': ['system_id','parent_id'],
|
||||
'sys_user_system': ['user_id','system_id'],
|
||||
'sys_user_role': ['user_id','role_id'],
|
||||
'sys_role_menu': ['role_id','menu_id'],
|
||||
'sys_login_log': ['user_id','system_id'],
|
||||
'sys_operation_log': ['user_id','system_id'],
|
||||
'sys_system': ['created_by','updated_by'],
|
||||
}.items():
|
||||
for col in fks:
|
||||
try: ex(f"ALTER TABLE {child_tbl} MODIFY {col} VARCHAR(64)")
|
||||
except: pass
|
||||
try: ex("ALTER TABLE sys_role MODIFY created_by VARCHAR(64)")
|
||||
except: pass
|
||||
try: ex("ALTER TABLE sys_role MODIFY updated_by VARCHAR(64)")
|
||||
except: pass
|
||||
print('FK columns widened')
|
||||
|
||||
# 5. 更新外键引用
|
||||
fk_updates = {
|
||||
'sys_api': {'system_id': 'sys_system'},
|
||||
'sys_role': {'system_id': 'sys_system'},
|
||||
'sys_menu': {'system_id': 'sys_system'},
|
||||
'sys_user_system': {'system_id': 'sys_system', 'user_id': 'sys_user'},
|
||||
'sys_user_role': {'user_id': 'sys_user', 'role_id': 'sys_role'},
|
||||
'sys_role_menu': {'role_id': 'sys_role', 'menu_id': 'sys_menu'},
|
||||
'sys_login_log': {'user_id': 'sys_user', 'system_id': 'sys_system'},
|
||||
'sys_operation_log':{'user_id': 'sys_user', 'system_id': 'sys_system'},
|
||||
}
|
||||
|
||||
for child_tbl, fks in fk_updates.items():
|
||||
for fk_col, parent_tbl in fks.items():
|
||||
# 读取当前FK值,通过id_map转换后更新
|
||||
cur.execute(f"SELECT id, {fk_col} FROM {child_tbl}")
|
||||
rows = cur.fetchall()
|
||||
for row_id, old_fk in rows:
|
||||
if old_fk and str(old_fk) in id_map.get(parent_tbl, {}):
|
||||
new_fk = id_map[parent_tbl][str(old_fk)]
|
||||
ex(f"UPDATE {child_tbl} SET {fk_col}=%s WHERE id=%s", new_fk, row_id)
|
||||
print(f'{child_tbl}.{fk_col} updated')
|
||||
|
||||
# 6. menu parent_id 自引用
|
||||
cur.execute(f"SELECT id, parent_id FROM sys_menu WHERE parent_id != '0'")
|
||||
for mid, pid in cur.fetchall():
|
||||
if str(pid) in id_map['sys_menu']:
|
||||
ex(f"UPDATE sys_menu SET parent_id=%s WHERE id=%s", id_map['sys_menu'][str(pid)], mid)
|
||||
print('menu parent_id updated')
|
||||
|
||||
# 7. 切换主键
|
||||
for t in tables:
|
||||
cur.execute(f"ALTER TABLE {t} DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id)")
|
||||
print('PK switched')
|
||||
|
||||
# 8. 重建索引
|
||||
try: ex("ALTER TABLE sys_api DROP INDEX uk_system_path_method"); ex("ALTER TABLE sys_api ADD UNIQUE KEY uk_system_path_method (system_id, api_path, api_method)")
|
||||
except: pass
|
||||
try: ex("ALTER TABLE sys_role DROP INDEX uk_system_role_code"); ex("ALTER TABLE sys_role ADD UNIQUE KEY uk_system_role_code (system_id, role_code)")
|
||||
except: pass
|
||||
|
||||
# 验证
|
||||
cur.execute('SELECT id, username FROM sys_user LIMIT 1')
|
||||
r = cur.fetchone()
|
||||
print(f'验证: user id len={len(str(r[0]))}, username={r[1]}')
|
||||
for t in tables:
|
||||
cur.execute(f"SELECT COUNT(*) FROM {t}")
|
||||
print(f'{t}: {cur.fetchone()[0]}')
|
||||
|
||||
cur.close(); conn.close()
|
||||
print('PROD MIGRATION DONE')
|
||||
113
sql/init_qa.py
Normal file
113
sql/init_qa.py
Normal file
@@ -0,0 +1,113 @@
|
||||
"""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:9000', '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')
|
||||
34
sql/prod_add_email_tables.sql
Normal file
34
sql/prod_add_email_tables.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
-- PROD数据库: 添加邮件发送记录表和Token日志表
|
||||
-- 与 QA 的 qa_ddl.sql 对齐
|
||||
USE mokeegateway;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_email_log (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
to_address VARCHAR(256) NOT NULL COMMENT '收件人',
|
||||
subject VARCHAR(512) NOT NULL COMMENT '主题',
|
||||
content TEXT COMMENT '邮件内容',
|
||||
content_type VARCHAR(16) NOT NULL DEFAULT 'html' COMMENT '格式 html/text',
|
||||
status TINYINT NOT NULL DEFAULT 0 COMMENT '0-失败 1-成功',
|
||||
error_msg VARCHAR(1024) DEFAULT NULL COMMENT '错误信息',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_created_at (created_at),
|
||||
KEY idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邮件发送记录表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_open_token_log (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) DEFAULT NULL COMMENT '系统ID',
|
||||
system_code VARCHAR(64) NOT NULL COMMENT '系统编码',
|
||||
token_id VARCHAR(64) NOT NULL COMMENT 'Token唯一ID',
|
||||
token_preview VARCHAR(64) DEFAULT NULL COMMENT 'Token预览',
|
||||
acquired_at DATETIME DEFAULT NULL COMMENT '获取时间',
|
||||
consumed TINYINT NOT NULL DEFAULT 0 COMMENT '0-未消费 1-已消费',
|
||||
consumed_at DATETIME DEFAULT NULL COMMENT '消费时间',
|
||||
consume_api VARCHAR(256) DEFAULT NULL COMMENT '消费接口',
|
||||
consume_ip VARCHAR(64) DEFAULT NULL COMMENT '消费IP',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_token_id (token_id),
|
||||
KEY idx_system_code (system_code),
|
||||
KEY idx_acquired_at (acquired_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='开放API Token日志表';
|
||||
4
sql/prod_add_file_url_compat.sql
Normal file
4
sql/prod_add_file_url_compat.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
-- PROD sys_file 兼容列 — 旧jar过渡期需要
|
||||
-- 新jar部署后可删除此列
|
||||
ALTER TABLE sys_file ADD COLUMN file_url VARCHAR(512) DEFAULT NULL COMMENT 'file access path (deprecated, new code uses file_data)' AFTER file_name;
|
||||
SHOW COLUMNS FROM sys_file;
|
||||
65
sql/prod_add_permissions.sql
Normal file
65
sql/prod_add_permissions.sql
Normal file
@@ -0,0 +1,65 @@
|
||||
-- PROD 添加按钮权限菜单
|
||||
-- 依赖: 网关系统已存在, 子菜单ID通过子查询获取
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增系统', 3, 1, 1, 'system:system:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑系统', 3, 2, 1, 'system:system:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除系统', 3, 3, 1, 'system:system:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增用户', 3, 1, 1, 'system:user:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑用户', 3, 2, 1, 'system:user:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除用户', 3, 3, 1, 'system:user:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增角色', 3, 1, 1, 'system:role:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑角色', 3, 2, 1, 'system:role:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除角色', 3, 3, 1, 'system:role:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '分配菜单', 3, 4, 1, 'system:role:assignMenu'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增菜单', 3, 1, 1, 'system:menu:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑菜单', 3, 2, 1, 'system:menu:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除菜单', 3, 3, 1, 'system:menu:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增接口', 3, 1, 1, 'system:api:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑接口', 3, 2, 1, 'system:api:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除接口', 3, 3, 1, 'system:api:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增字典', 3, 1, 1, 'system:dict:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑字典', 3, 2, 1, 'system:dict:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除字典', 3, 3, 1, 'system:dict:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
|
||||
-- 将按钮权限分配给超级管理员
|
||||
INSERT IGNORE INTO sys_role_menu (id, role_id, menu_id)
|
||||
SELECT REPLACE(UUID(),'-',''), r.id, m.id
|
||||
FROM sys_role r, sys_menu m, sys_system s
|
||||
WHERE r.role_code='super_admin' AND r.system_id=s.id AND m.system_id=s.id AND s.system_code='gateway' AND m.menu_type=3;
|
||||
33
sql/prod_align_qa.sql
Normal file
33
sql/prod_align_qa.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
-- PROD数据库对齐QA结构
|
||||
USE mokeegateway;
|
||||
|
||||
-- 1. sys_system: 补充 gateway_url 列, 统一 doc_token 长度
|
||||
ALTER TABLE sys_system ADD COLUMN gateway_url VARCHAR(256) NOT NULL DEFAULT '' AFTER backend_url;
|
||||
ALTER TABLE sys_system MODIFY doc_token VARCHAR(128) DEFAULT NULL;
|
||||
-- 去重约束
|
||||
ALTER TABLE sys_system ADD UNIQUE KEY uk_gateway_url (gateway_url);
|
||||
-- 更新现有数据: 给每个系统一个不同的 gateway_url
|
||||
UPDATE sys_system SET gateway_url = CONCAT('http://127.0.0.1:9000/', system_code) WHERE gateway_url = '';
|
||||
|
||||
-- 2. sys_file: 重建为新结构(文件二进制存入数据库)
|
||||
DROP TABLE IF EXISTS sys_file;
|
||||
CREATE TABLE sys_file (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) DEFAULT NULL COMMENT '所属系统ID',
|
||||
file_name VARCHAR(256) NOT NULL COMMENT '原始文件名',
|
||||
file_type VARCHAR(64) DEFAULT 'other' COMMENT '文件类型(icon/avatar/doc/other)',
|
||||
file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
mime_type VARCHAR(128) DEFAULT NULL COMMENT 'MIME类型',
|
||||
md5 VARCHAR(64) DEFAULT NULL COMMENT '文件MD5摘要',
|
||||
upload_user_id VARCHAR(64) DEFAULT NULL COMMENT '上传用户ID',
|
||||
file_data LONGBLOB COMMENT '文件二进制数据',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_system_id (system_id),
|
||||
INDEX idx_file_type (file_type),
|
||||
INDEX idx_upload_user_id (upload_user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
|
||||
-- 3. sys_login_log: 统一列宽
|
||||
ALTER TABLE sys_login_log MODIFY browser VARCHAR(64) DEFAULT NULL;
|
||||
ALTER TABLE sys_login_log MODIFY os VARCHAR(64) DEFAULT NULL;
|
||||
3
sql/prod_alter_20260613.sql
Normal file
3
sql/prod_alter_20260613.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
-- 生产环境新增列
|
||||
ALTER TABLE sys_login_log ADD COLUMN real_name VARCHAR(64) DEFAULT NULL COMMENT '用户真实姓名' AFTER username;
|
||||
ALTER TABLE sys_operation_log ADD COLUMN response_body TEXT DEFAULT NULL COMMENT '接口返回报文(截断至2000字符)' AFTER error_msg;
|
||||
88
sql/prod_fix_data.sql
Normal file
88
sql/prod_fix_data.sql
Normal file
@@ -0,0 +1,88 @@
|
||||
-- PROD 数据修复: 清理 UUID 迁移残留 + 同步 QA 结构
|
||||
USE mokeegateway;
|
||||
|
||||
-- 1. 清理孤儿关联记录(user_id 还是旧 BIGINT 值, 已无对应真实用户)
|
||||
DELETE FROM sys_user_system WHERE user_id NOT IN (SELECT id FROM sys_user);
|
||||
DELETE FROM sys_user_role WHERE user_id NOT IN (SELECT id FROM sys_user);
|
||||
DELETE FROM sys_role_menu WHERE role_id NOT IN (SELECT id FROM sys_role);
|
||||
DELETE FROM sys_role_menu WHERE menu_id NOT IN (SELECT id FROM sys_menu);
|
||||
|
||||
-- 2. 清理多余的孤儿角色(不属于任何现有系统)
|
||||
DELETE FROM sys_role WHERE system_id NOT IN (SELECT id FROM sys_system);
|
||||
|
||||
-- 3. 补充 admin → gateway 系统绑定(如果缺失)
|
||||
INSERT IGNORE INTO sys_user_system (id, user_id, system_id)
|
||||
SELECT REPLACE(UUID(),'-',''), u.id, s.id
|
||||
FROM sys_user u, sys_system s
|
||||
WHERE u.username='admin' AND s.system_code='gateway';
|
||||
|
||||
-- 4. 补充 admin → gateway super_admin 角色(如果缺失)
|
||||
INSERT IGNORE INTO sys_user_role (id, user_id, role_id)
|
||||
SELECT REPLACE(UUID(),'-',''), u.id, r.id
|
||||
FROM sys_user u, sys_role r, sys_system s
|
||||
WHERE u.username='admin' AND r.role_code='super_admin' AND r.system_id=s.id AND s.system_code='gateway';
|
||||
|
||||
-- 5. 补充按钮权限(如果缺失)
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增系统', 3, 1, 1, 'system:system:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑系统', 3, 2, 1, 'system:system:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除系统', 3, 3, 1, 'system:system:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='系统列表';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增用户', 3, 1, 1, 'system:user:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑用户', 3, 2, 1, 'system:user:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除用户', 3, 3, 1, 'system:user:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='用户管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增角色', 3, 1, 1, 'system:role:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑角色', 3, 2, 1, 'system:role:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除角色', 3, 3, 1, 'system:role:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '分配菜单', 3, 4, 1, 'system:role:assignMenu'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='角色管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增菜单', 3, 1, 1, 'system:menu:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑菜单', 3, 2, 1, 'system:menu:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除菜单', 3, 3, 1, 'system:menu:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='菜单管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增接口', 3, 1, 1, 'system:api:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑接口', 3, 2, 1, 'system:api:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除接口', 3, 3, 1, 'system:api:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='接口管理';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '新增字典', 3, 1, 1, 'system:dict:add'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '编辑字典', 3, 2, 1, 'system:dict:edit'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
INSERT IGNORE INTO sys_menu (id, system_id, parent_id, menu_name, menu_type, sort_order, status, permission)
|
||||
SELECT REPLACE(UUID(),'-',''), s.id, m.id, '删除字典', 3, 3, 1, 'system:dict:delete'
|
||||
FROM sys_system s, sys_menu m WHERE s.system_code='gateway' AND m.system_id=s.id AND m.menu_name='数据字典';
|
||||
|
||||
-- 6. 给 super_admin 角色补全所有菜单绑定
|
||||
INSERT IGNORE INTO sys_role_menu (id, role_id, menu_id)
|
||||
SELECT REPLACE(UUID(),'-',''), r.id, m.id
|
||||
FROM sys_role r, sys_menu m, sys_system s
|
||||
WHERE r.role_code='super_admin' AND r.system_id=s.id AND m.system_id=s.id AND s.system_code='gateway';
|
||||
34
sql/prod_migrate_sys_file.sql
Normal file
34
sql/prod_migrate_sys_file.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
-- ============================================
|
||||
-- PROD sys_file 表结构迁移
|
||||
-- 旧结构 → 新结构(文件二进制存入数据库)
|
||||
-- 执行前请确认 sys_file 表数据已备份(如有)
|
||||
-- ============================================
|
||||
|
||||
USE mokeegateway;
|
||||
|
||||
-- 1. 检查当前表结构
|
||||
-- SELECT COUNT(*) FROM sys_file; -- 如有数据请先备份
|
||||
|
||||
-- 2. 重建 sys_file 表(数据为空则直接重建)
|
||||
DROP TABLE IF EXISTS sys_file;
|
||||
|
||||
CREATE TABLE sys_file (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) DEFAULT NULL COMMENT '所属系统ID',
|
||||
file_name VARCHAR(256) NOT NULL COMMENT '原始文件名',
|
||||
file_type VARCHAR(64) DEFAULT 'other' COMMENT '文件类型(icon/avatar/doc/other)',
|
||||
file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
mime_type VARCHAR(128) DEFAULT NULL COMMENT 'MIME类型',
|
||||
md5 VARCHAR(64) DEFAULT NULL COMMENT '文件MD5摘要',
|
||||
upload_user_id VARCHAR(64) DEFAULT NULL COMMENT '上传用户ID',
|
||||
file_data LONGBLOB COMMENT '文件二进制数据',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_system_id (system_id),
|
||||
INDEX idx_file_type (file_type),
|
||||
INDEX idx_upload_user_id (upload_user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
|
||||
-- 验证
|
||||
SHOW CREATE TABLE sys_file;
|
||||
SELECT COUNT(*) FROM sys_file;
|
||||
83
sql/prod_migrate_uuid.sql
Normal file
83
sql/prod_migrate_uuid.sql
Normal file
@@ -0,0 +1,83 @@
|
||||
-- ============================================
|
||||
-- PROD 数据库: BIGINT → UUID 迁移 (保留数据)
|
||||
-- 数据库: mokeegateway
|
||||
-- 执行前务必备份!
|
||||
-- ============================================
|
||||
|
||||
-- 步骤1: 所有表添加 UUID 列
|
||||
ALTER TABLE sys_system ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_user ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_role ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_menu ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_api ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_dict ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_file ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_user_system ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_user_role ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_role_menu ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_login_log ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
ALTER TABLE sys_operation_log ADD COLUMN uuid_id VARCHAR(64) NOT NULL DEFAULT '' AFTER id;
|
||||
|
||||
-- 步骤2: 生成 UUID
|
||||
UPDATE sys_system SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_user SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_role SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_menu SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_api SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_dict SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_file SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_user_system SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_user_role SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_role_menu SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_login_log SET uuid_id = REPLACE(UUID(),'-','');
|
||||
UPDATE sys_operation_log SET uuid_id = REPLACE(UUID(),'-','');
|
||||
|
||||
-- 步骤3: 更新所有外键引用
|
||||
UPDATE sys_api a JOIN sys_system s ON a.system_id = s.id SET a.system_id = s.uuid_id;
|
||||
UPDATE sys_role r JOIN sys_system s ON r.system_id = s.id SET r.system_id = s.uuid_id;
|
||||
UPDATE sys_menu m JOIN sys_system s ON m.system_id = s.id SET m.system_id = s.uuid_id;
|
||||
UPDATE sys_user_system us JOIN sys_system s ON us.system_id = s.id SET us.system_id = s.uuid_id;
|
||||
UPDATE sys_user_system us JOIN sys_user u ON us.user_id = u.id SET us.user_id = u.uuid_id;
|
||||
UPDATE sys_user_role ur JOIN sys_user u ON ur.user_id = u.id SET ur.user_id = u.uuid_id;
|
||||
UPDATE sys_user_role ur JOIN sys_role r ON ur.role_id = r.id SET ur.role_id = r.uuid_id;
|
||||
UPDATE sys_role_menu rm JOIN sys_role r ON rm.role_id = r.id SET rm.role_id = r.uuid_id;
|
||||
UPDATE sys_role_menu rm JOIN sys_menu m ON rm.menu_id = m.id SET rm.menu_id = m.uuid_id;
|
||||
UPDATE sys_login_log l JOIN sys_user u ON l.user_id = u.id SET l.user_id = u.uuid_id;
|
||||
UPDATE sys_login_log l JOIN sys_system s ON l.system_id = s.id SET l.system_id = s.uuid_id;
|
||||
UPDATE sys_operation_log o JOIN sys_user u ON o.user_id = u.id SET o.user_id = u.uuid_id;
|
||||
UPDATE sys_operation_log o JOIN sys_system s ON o.system_id = s.id SET o.system_id = s.uuid_id;
|
||||
-- menu parent_id 自引用
|
||||
UPDATE sys_menu child JOIN sys_menu parent ON child.parent_id = parent.id SET child.parent_id = parent.uuid_id WHERE child.parent_id != '0';
|
||||
|
||||
-- 步骤4: 删除旧主键, 切换到 UUID 主键
|
||||
ALTER TABLE sys_system DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_user DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_role DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_menu DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_api DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_dict DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_file DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_user_system DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_user_role DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_role_menu DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_login_log DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
ALTER TABLE sys_operation_log DROP PRIMARY KEY, DROP COLUMN id, CHANGE uuid_id id VARCHAR(64) NOT NULL, ADD PRIMARY KEY (id);
|
||||
|
||||
-- 步骤5: 调整外键类型为 VARCHAR(64)
|
||||
ALTER TABLE sys_api MODIFY system_id VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE sys_role MODIFY system_id VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE sys_menu MODIFY system_id VARCHAR(64) NOT NULL, MODIFY parent_id VARCHAR(64) NOT NULL DEFAULT '0';
|
||||
ALTER TABLE sys_user_system MODIFY user_id VARCHAR(64) NOT NULL, MODIFY system_id VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE sys_user_role MODIFY user_id VARCHAR(64) NOT NULL, MODIFY role_id VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE sys_role_menu MODIFY role_id VARCHAR(64) NOT NULL, MODIFY menu_id VARCHAR(64) NOT NULL;
|
||||
ALTER TABLE sys_login_log MODIFY user_id VARCHAR(64), MODIFY system_id VARCHAR(64);
|
||||
ALTER TABLE sys_operation_log MODIFY user_id VARCHAR(64), MODIFY system_id VARCHAR(64);
|
||||
ALTER TABLE sys_file MODIFY upload_by VARCHAR(64);
|
||||
ALTER TABLE sys_system MODIFY created_by VARCHAR(64), MODIFY updated_by VARCHAR(64);
|
||||
ALTER TABLE sys_role MODIFY created_by VARCHAR(64), MODIFY updated_by VARCHAR(64);
|
||||
|
||||
-- 步骤6: 重建唯一索引 (FK列类型变更后需要重建)
|
||||
ALTER TABLE sys_api DROP INDEX uk_system_path_method, ADD UNIQUE KEY uk_system_path_method (system_id, api_path, api_method);
|
||||
ALTER TABLE sys_role DROP INDEX uk_system_role_code, ADD UNIQUE KEY uk_system_role_code (system_id, role_code);
|
||||
|
||||
-- 完成
|
||||
128
sql/qa_data.sql
Normal file
128
sql/qa_data.sql
Normal file
@@ -0,0 +1,128 @@
|
||||
-- QA 初始化数据 (UUID直写, 无变量)
|
||||
USE mokeegatewayqa;
|
||||
|
||||
-- 管理员 (密码: admin123, BCrypt)
|
||||
INSERT INTO sys_user (id, username, password, real_name, email, phone, post, status)
|
||||
VALUES (REPLACE(UUID(),'-',''), 'admin', '$2b$10$ffAZHF6lmUuNV6OJITADXeduD5mMTS0.7kElPI7zno2zGn/RF5uC6', '管理员', 'admin@mokee.com', '13800000000', '管理员', 1);
|
||||
|
||||
-- 测试系统
|
||||
INSERT INTO sys_system (id, system_code, system_name, front_url, backend_url, gateway_url, status, description)
|
||||
VALUES (REPLACE(UUID(),'-',''), 'test', '测试系统', 'http://127.0.0.1:5001', 'http://127.0.0.1:9000', 'http://127.0.0.1:9000/test', 1, '测试用业务系统');
|
||||
|
||||
-- Gateway 系统
|
||||
INSERT INTO sys_system (id, system_code, system_name, front_url, backend_url, gateway_url, icon, sort_order, status, description, doc_token)
|
||||
VALUES (REPLACE(UUID(),'-',''), 'gateway', '网关管理平台', 'http://127.0.0.1:5001', 'http://127.0.0.1:9000', 'http://127.0.0.1:9000/gateway', '', 0, 1, '统一登录网关管理后台', 'gateway1234567890');
|
||||
|
||||
-- 查询已插入的ID
|
||||
SELECT id INTO @uid FROM sys_user WHERE username='admin';
|
||||
SELECT id INTO @test_sid FROM sys_system WHERE system_code='test';
|
||||
SELECT id INTO @gw_sid FROM sys_system WHERE system_code='gateway';
|
||||
|
||||
-- 管理员绑定两个系统
|
||||
INSERT INTO sys_user_system (id, user_id, system_id) VALUES (REPLACE(UUID(),'-',''), @uid, @test_sid);
|
||||
INSERT INTO sys_user_system (id, user_id, system_id) VALUES (REPLACE(UUID(),'-',''), @uid, @gw_sid);
|
||||
|
||||
-- 测试系统角色
|
||||
INSERT INTO sys_role (id, system_id, role_name, role_code, description, status) VALUES (REPLACE(UUID(),'-',''), @test_sid, '管理员', 'admin', '系统管理员', 1);
|
||||
INSERT INTO sys_role (id, system_id, role_name, role_code, description, status) VALUES (REPLACE(UUID(),'-',''), @test_sid, '普通用户', 'user', '普通用户', 1);
|
||||
|
||||
-- Gateway 系统角色
|
||||
INSERT INTO sys_role (id, system_id, role_name, role_code, description, status) VALUES (REPLACE(UUID(),'-',''), @gw_sid, '超级管理员', 'super_admin', '网关平台超级管理员', 1);
|
||||
INSERT INTO sys_role (id, system_id, role_name, role_code, description, status) VALUES (REPLACE(UUID(),'-',''), @gw_sid, '普通管理员', 'admin', '网关平台普通管理员', 1);
|
||||
|
||||
-- 查询角色ID
|
||||
SELECT id INTO @test_admin_role FROM sys_role WHERE system_id=@test_sid AND role_code='admin';
|
||||
SELECT id INTO @gw_super_admin FROM sys_role WHERE system_id=@gw_sid AND role_code='super_admin';
|
||||
|
||||
-- 分配角色给管理员
|
||||
INSERT INTO sys_user_role (id, user_id, role_id) VALUES (REPLACE(UUID(),'-',''), @uid, @test_admin_role);
|
||||
INSERT INTO sys_user_role (id, user_id, role_id) VALUES (REPLACE(UUID(),'-',''), @uid, @gw_super_admin);
|
||||
|
||||
-- 测试系统菜单 (6个)
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status) VALUES
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '0', '系统管理', '/system', 'Layout', 'Setting', 1, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '0', '业务管理', '/biz', 'Layout', 'Document', 1, 2, 1);
|
||||
SELECT id INTO @m1 FROM sys_menu WHERE system_id=@test_sid AND menu_name='系统管理' LIMIT 1;
|
||||
SELECT id INTO @m2 FROM sys_menu WHERE system_id=@test_sid AND menu_name='业务管理' LIMIT 1;
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status) VALUES
|
||||
(REPLACE(UUID(),'-',''), @test_sid, @m1, '用户管理', '/system/user', 'system/user/index', 'User', 2, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, @m1, '角色管理', '/system/role', 'system/role/index', 'Avatar', 2, 2, 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, @m2, '订单管理', '/biz/order', 'biz/order/index', 'Tickets', 2, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, @m2, '报表查询', '/biz/report', 'biz/report/index', 'TrendCharts', 2, 2, 1);
|
||||
|
||||
-- 角色绑定菜单
|
||||
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 顶级目录 (4个)
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status) VALUES
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '0', '首页', '/admin/dashboard', '', 'HomeFilled', 1, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '0', '系统管理', NULL, '', 'Monitor', 1, 2, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '0', '用户权限', NULL, '', 'User', 1, 3, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '0', '日志审计', NULL, '', 'Notebook', 1, 4, 1);
|
||||
|
||||
SELECT id INTO @g_sys FROM sys_menu WHERE system_id=@gw_sid AND menu_name='系统管理' LIMIT 1;
|
||||
SELECT id INTO @g_usr FROM sys_menu WHERE system_id=@gw_sid AND menu_name='用户权限' LIMIT 1;
|
||||
SELECT id INTO @g_log FROM sys_menu WHERE system_id=@gw_sid AND menu_name='日志审计' LIMIT 1;
|
||||
|
||||
-- 子菜单
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status) VALUES
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_sys, '系统列表', '/admin/system', '', 'List', 2, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_sys, '接口管理', '/admin/api', '', 'Link', 2, 2, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_sys, '数据字典', '/admin/dict', '', 'Collection', 2, 3, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_usr, '用户管理', '/admin/user', '', 'UserFilled', 2, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_usr, '角色管理', '/admin/role', '', 'Avatar', 2, 2, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_usr, '菜单管理', '/admin/menu', '', 'Menu', 2, 3, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_log, '登录日志', '/admin/log/login', '', 'Document', 2, 1, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_log, '操作日志', '/admin/log/operation', '', 'Tickets', 2, 2, 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @g_log, 'Token日志', '/admin/log/token', '', 'Key', 2, 3, 1);
|
||||
|
||||
-- 查询子菜单ID 准备加按钮权限
|
||||
SELECT id INTO @sys_list FROM sys_menu WHERE system_id=@gw_sid AND menu_name='系统列表' LIMIT 1;
|
||||
SELECT id INTO @usr_list FROM sys_menu WHERE system_id=@gw_sid AND menu_name='用户管理' LIMIT 1;
|
||||
SELECT id INTO @role_list FROM sys_menu WHERE system_id=@gw_sid AND menu_name='角色管理' LIMIT 1;
|
||||
SELECT id INTO @menu_list FROM sys_menu WHERE system_id=@gw_sid AND menu_name='菜单管理' LIMIT 1;
|
||||
SELECT id INTO @api_list FROM sys_menu WHERE system_id=@gw_sid AND menu_name='接口管理' LIMIT 1;
|
||||
SELECT id INTO @dict_list FROM sys_menu WHERE system_id=@gw_sid AND menu_name='数据字典' LIMIT 1;
|
||||
|
||||
-- 按钮权限 (menu_type=3)
|
||||
INSERT INTO sys_menu (id, system_id, parent_id, menu_name, menu_path, component, icon, menu_type, sort_order, status, permission) VALUES
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @sys_list, '新增系统', NULL, NULL, '', 3, 1, 1, 'system:system:add'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @sys_list, '编辑系统', NULL, NULL, '', 3, 2, 1, 'system:system:edit'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @sys_list, '删除系统', NULL, NULL, '', 3, 3, 1, 'system:system:delete'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @usr_list, '新增用户', NULL, NULL, '', 3, 1, 1, 'system:user:add'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @usr_list, '编辑用户', NULL, NULL, '', 3, 2, 1, 'system:user:edit'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @usr_list, '删除用户', NULL, NULL, '', 3, 3, 1, 'system:user:delete'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @role_list, '新增角色', NULL, NULL, '', 3, 1, 1, 'system:role:add'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @role_list, '编辑角色', NULL, NULL, '', 3, 2, 1, 'system:role:edit'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @role_list, '删除角色', NULL, NULL, '', 3, 3, 1, 'system:role:delete'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @role_list, '分配菜单', NULL, NULL, '', 3, 4, 1, 'system:role:assignMenu'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @menu_list, '新增菜单', NULL, NULL, '', 3, 1, 1, 'system:menu:add'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @menu_list, '编辑菜单', NULL, NULL, '', 3, 2, 1, 'system:menu:edit'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @menu_list, '删除菜单', NULL, NULL, '', 3, 3, 1, 'system:menu:delete'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @api_list, '新增接口', NULL, NULL, '', 3, 1, 1, 'system:api:add'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @api_list, '编辑接口', NULL, NULL, '', 3, 2, 1, 'system:api:edit'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @api_list, '删除接口', NULL, NULL, '', 3, 3, 1, 'system:api:delete'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @dict_list, '新增字典', NULL, NULL, '', 3, 1, 1, 'system:dict:add'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @dict_list, '编辑字典', NULL, NULL, '', 3, 2, 1, 'system:dict:edit'),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, @dict_list, '删除字典', NULL, NULL, '', 3, 3, 1, 'system:dict:delete');
|
||||
|
||||
-- 角色绑定所有菜单(含按钮)
|
||||
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;
|
||||
INSERT INTO sys_role_menu (id, role_id, menu_id) SELECT REPLACE(UUID(),'-',''), (SELECT id FROM sys_role WHERE system_id=@gw_sid AND role_code='admin'), id FROM sys_menu WHERE system_id=@gw_sid;
|
||||
|
||||
-- 放行接口 (14条)
|
||||
INSERT INTO sys_api (id, system_id, api_path, api_method, api_name, status) VALUES
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/admin/**', 'GET', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/admin/**', 'POST', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/admin/**', 'PUT', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/admin/**', 'DELETE', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/auth/**', 'GET', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/auth/**', 'POST', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @test_sid, '/zgapi/v1/auth/**', 'PUT', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/admin/**', 'GET', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/admin/**', 'POST', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/admin/**', 'PUT', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/admin/**', 'DELETE', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/auth/**', 'GET', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/auth/**', 'POST', '放行接口', 1),
|
||||
(REPLACE(UUID(),'-',''), @gw_sid, '/zgapi/v1/auth/**', 'PUT', '放行接口', 1);
|
||||
226
sql/qa_ddl.sql
Normal file
226
sql/qa_ddl.sql
Normal file
@@ -0,0 +1,226 @@
|
||||
-- ============================================
|
||||
-- QA 数据库 DDL (UUID 版本, 12张表)
|
||||
-- 所有主键和外键均为 VARCHAR(64)
|
||||
-- ============================================
|
||||
USE mokeegatewayqa;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_system (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_code VARCHAR(64) NOT NULL,
|
||||
system_name VARCHAR(128) NOT NULL,
|
||||
front_url VARCHAR(256) NOT NULL,
|
||||
backend_url VARCHAR(256) NOT NULL,
|
||||
gateway_url VARCHAR(256) NOT NULL,
|
||||
icon VARCHAR(512) DEFAULT NULL,
|
||||
sort_order INT DEFAULT 0,
|
||||
status TINYINT NOT NULL DEFAULT 1,
|
||||
description VARCHAR(512) DEFAULT NULL,
|
||||
doc_token VARCHAR(128) DEFAULT NULL,
|
||||
created_by VARCHAR(64) DEFAULT NULL,
|
||||
updated_by VARCHAR(64) DEFAULT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
is_deleted TINYINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (id),
|
||||
-- uk_system_code/uk_gateway_url 唯一性由应用层代码校验
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='业务系统表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_api (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) NOT NULL,
|
||||
api_path VARCHAR(256) NOT NULL,
|
||||
api_method VARCHAR(10) NOT NULL,
|
||||
api_name VARCHAR(128) DEFAULT NULL,
|
||||
api_desc VARCHAR(512) DEFAULT NULL,
|
||||
status TINYINT NOT NULL DEFAULT 1,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_system_id (system_id),
|
||||
UNIQUE KEY uk_system_path_method (system_id, api_path, api_method)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统放行接口表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_user (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
username VARCHAR(64) NOT NULL,
|
||||
password VARCHAR(256) NOT NULL,
|
||||
real_name VARCHAR(64) DEFAULT NULL,
|
||||
email VARCHAR(128) DEFAULT NULL,
|
||||
phone VARCHAR(32) DEFAULT NULL,
|
||||
avatar VARCHAR(512) DEFAULT NULL,
|
||||
post VARCHAR(64) DEFAULT NULL,
|
||||
status TINYINT NOT NULL DEFAULT 1 COMMENT '0-禁用 1-正常 2-锁定',
|
||||
lock_until DATETIME DEFAULT NULL,
|
||||
login_fail_count INT NOT NULL DEFAULT 0,
|
||||
last_login_ip VARCHAR(64) DEFAULT NULL,
|
||||
last_login_time DATETIME DEFAULT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
is_deleted TINYINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (id),
|
||||
-- 用户名/邮箱唯一性由应用层代码校验(MyBatis-Plus @TableLogic 自动过滤已删除记录)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_user_system (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
user_id VARCHAR(64) NOT NULL,
|
||||
system_id VARCHAR(64) NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_user_system (user_id, system_id),
|
||||
KEY idx_system_id (system_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户系统绑定表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_role (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) NOT NULL,
|
||||
role_name VARCHAR(64) NOT NULL,
|
||||
role_code VARCHAR(64) NOT NULL,
|
||||
description VARCHAR(256) DEFAULT NULL,
|
||||
status TINYINT NOT NULL DEFAULT 1,
|
||||
created_by VARCHAR(64) DEFAULT NULL,
|
||||
updated_by VARCHAR(64) DEFAULT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
is_deleted TINYINT NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (id),
|
||||
-- uk_system_role_code 唯一性由应用层代码校验
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_user_role (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
user_id VARCHAR(64) NOT NULL,
|
||||
role_id VARCHAR(64) NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_user_role (user_id, role_id),
|
||||
KEY idx_role_id (role_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_menu (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) NOT NULL,
|
||||
parent_id VARCHAR(64) NOT NULL DEFAULT '0',
|
||||
menu_name VARCHAR(64) NOT NULL,
|
||||
menu_path VARCHAR(256) DEFAULT NULL,
|
||||
component VARCHAR(256) DEFAULT NULL,
|
||||
icon VARCHAR(128) DEFAULT NULL,
|
||||
menu_type TINYINT NOT NULL COMMENT '1-目录 2-菜单 3-按钮',
|
||||
permission VARCHAR(128) DEFAULT NULL COMMENT '权限标识',
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
status TINYINT NOT NULL DEFAULT 1,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_system_id (system_id),
|
||||
KEY idx_parent_id (parent_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_role_menu (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
role_id VARCHAR(64) NOT NULL,
|
||||
menu_id VARCHAR(64) NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_role_menu (role_id, menu_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_login_log (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
user_id VARCHAR(64) DEFAULT NULL,
|
||||
username VARCHAR(64) NOT NULL,
|
||||
real_name VARCHAR(64) DEFAULT NULL COMMENT '用户真实姓名',
|
||||
system_id VARCHAR(64) DEFAULT NULL,
|
||||
login_ip VARCHAR(64) DEFAULT NULL,
|
||||
user_agent VARCHAR(512) DEFAULT NULL,
|
||||
browser VARCHAR(64) DEFAULT NULL,
|
||||
os VARCHAR(64) DEFAULT NULL,
|
||||
status TINYINT NOT NULL COMMENT '0-失败 1-成功',
|
||||
fail_reason VARCHAR(256) DEFAULT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_user_id (user_id),
|
||||
KEY idx_created_at (created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='登录日志表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_operation_log (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
user_id VARCHAR(64) DEFAULT NULL,
|
||||
username VARCHAR(64) DEFAULT NULL,
|
||||
system_id VARCHAR(64) DEFAULT NULL,
|
||||
module VARCHAR(64) DEFAULT NULL,
|
||||
action VARCHAR(32) DEFAULT NULL,
|
||||
request_url VARCHAR(256) DEFAULT NULL,
|
||||
request_method VARCHAR(10) DEFAULT NULL,
|
||||
request_body TEXT DEFAULT NULL,
|
||||
response_status INT DEFAULT NULL,
|
||||
response_body TEXT DEFAULT NULL COMMENT '接口返回报文(截断至2000字符)',
|
||||
error_msg TEXT DEFAULT NULL,
|
||||
cost_time INT DEFAULT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_user_id (user_id),
|
||||
KEY idx_created_at (created_at),
|
||||
KEY idx_system_id (system_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_dict (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
dict_type VARCHAR(64) NOT NULL,
|
||||
dict_label VARCHAR(128) NOT NULL,
|
||||
dict_value VARCHAR(128) NOT NULL,
|
||||
sort_order INT DEFAULT 0,
|
||||
status TINYINT NOT NULL DEFAULT 1,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_type_value (dict_type, dict_value)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据字典表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_file (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) DEFAULT NULL COMMENT '所属系统ID',
|
||||
file_name VARCHAR(256) NOT NULL COMMENT '原始文件名',
|
||||
file_type VARCHAR(64) DEFAULT 'other' COMMENT '文件类型(icon/avatar/doc/other)',
|
||||
file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)',
|
||||
mime_type VARCHAR(128) DEFAULT NULL COMMENT 'MIME类型',
|
||||
md5 VARCHAR(64) DEFAULT NULL COMMENT '文件MD5摘要',
|
||||
upload_user_id VARCHAR(64) DEFAULT NULL COMMENT '上传用户ID',
|
||||
file_data LONGBLOB COMMENT '文件二进制数据',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
|
||||
PRIMARY KEY (id),
|
||||
INDEX idx_system_id (system_id),
|
||||
INDEX idx_file_type (file_type),
|
||||
INDEX idx_upload_user_id (upload_user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文件表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_email_log (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
to_address VARCHAR(256) NOT NULL COMMENT '收件人',
|
||||
subject VARCHAR(512) NOT NULL COMMENT '主题',
|
||||
content TEXT COMMENT '邮件内容',
|
||||
content_type VARCHAR(16) NOT NULL DEFAULT 'html' COMMENT '格式 html/text',
|
||||
status TINYINT NOT NULL DEFAULT 0 COMMENT '0-失败 1-成功',
|
||||
error_msg VARCHAR(1024) DEFAULT NULL COMMENT '错误信息',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_created_at (created_at),
|
||||
KEY idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邮件发送记录表';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS sys_open_token_log (
|
||||
id VARCHAR(64) NOT NULL COMMENT 'UUID主键',
|
||||
system_id VARCHAR(64) DEFAULT NULL COMMENT '系统ID',
|
||||
system_code VARCHAR(64) NOT NULL COMMENT '系统编码',
|
||||
token_id VARCHAR(64) NOT NULL COMMENT 'Token唯一ID',
|
||||
token_preview VARCHAR(64) DEFAULT NULL COMMENT 'Token预览',
|
||||
acquired_at DATETIME DEFAULT NULL COMMENT '获取时间',
|
||||
consumed TINYINT NOT NULL DEFAULT 0 COMMENT '0-未消费 1-已消费',
|
||||
consumed_at DATETIME DEFAULT NULL COMMENT '消费时间',
|
||||
consume_api VARCHAR(256) DEFAULT NULL COMMENT '消费接口',
|
||||
consume_ip VARCHAR(64) DEFAULT NULL COMMENT '消费IP',
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_token_id (token_id),
|
||||
KEY idx_system_code (system_code),
|
||||
KEY idx_acquired_at (acquired_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='开放API Token日志表';
|
||||
6
sql/qa_recreate.sql
Normal file
6
sql/qa_recreate.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
-- ============================================
|
||||
-- QA 数据库重建 (UUID 版本)
|
||||
-- 数据库: mokeegatewayqa
|
||||
-- ============================================
|
||||
DROP DATABASE IF EXISTS mokeegatewayqa;
|
||||
CREATE DATABASE mokeegatewayqa DEFAULT CHARSET utf8mb4;
|
||||
Reference in New Issue
Block a user