From cb6a74fc88762dca6c4eb08dadf49865e68627f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Wed, 22 Apr 2026 13:20:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(flyway):=20=E9=87=8D=E6=9E=84=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E8=84=9A=E6=9C=AC=E5=B9=B6=E4=BF=AE=E5=A4=8D=20WebFlu?= =?UTF-8?q?x=20=E7=8E=AF=E5=A2=83=E4=B8=8B=E6=97=A0=E6=B3=95=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 15 个分散的迁移脚本合并为 4 个清晰的版本 - V1: 创建所有表结构 - V2: 插入初始数据 - V3: 创建索引 - V4: 授权 - 添加 DataSourceConfig 配置 JDBC DataSource - 添加 spring-boot-starter-jdbc 依赖 - 修复 V2 脚本中 ON CONFLICT 语法问题 --- gym-manage-api/manage-app/pom.xml | 4 + .../manage/app/config/DataSourceConfig.java | 29 ++ .../migration/V12__Insert_user_role_data.sql | 51 ---- .../V13__Update_test_user_password.sql | 46 --- .../db/migration/V14__Fix_menu_data.sql | 28 -- .../V15__Add_missing_audit_log_columns.sql | 12 - .../db/migration/V1__Create_all_tables.sql | 220 +++++++++++++-- .../db/migration/V2__Insert_initial_data.sql | 262 ++++++++++++++---- ...ate_indexes.sql => V3__Create_indexes.sql} | 67 ++++- .../migration/V3__Create_user_role_table.sql | 23 -- .../V4__Create_permission_tables.sql | 104 ------- ...missions.sql => V4__Grant_permissions.sql} | 2 +- .../db/migration/V6__Init_menu_data.sql | 90 ------ .../db/migration/V7__Add_audit_log_table.sql | 40 --- .../V8__Create_audit_log_archive_table.sql | 43 --- 15 files changed, 513 insertions(+), 508 deletions(-) create mode 100644 gym-manage-api/manage-app/src/main/java/cn/novalon/gym/manage/app/config/DataSourceConfig.java delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V12__Insert_user_role_data.sql delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V13__Update_test_user_password.sql delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V14__Fix_menu_data.sql delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V15__Add_missing_audit_log_columns.sql rename gym-manage-api/manage-db/src/main/resources/db/migration/{V5__Create_indexes.sql => V3__Create_indexes.sql} (59%) delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_user_role_table.sql delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V4__Create_permission_tables.sql rename gym-manage-api/manage-db/src/main/resources/db/migration/{V9__Grant_permissions.sql => V4__Grant_permissions.sql} (97%) delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V6__Init_menu_data.sql delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V7__Add_audit_log_table.sql delete mode 100644 gym-manage-api/manage-db/src/main/resources/db/migration/V8__Create_audit_log_archive_table.sql diff --git a/gym-manage-api/manage-app/pom.xml b/gym-manage-api/manage-app/pom.xml index 5d5e344..9351954 100644 --- a/gym-manage-api/manage-app/pom.xml +++ b/gym-manage-api/manage-app/pom.xml @@ -70,6 +70,10 @@ org.postgresql postgresql + + org.springframework.boot + spring-boot-starter-jdbc + com.h2database h2 diff --git a/gym-manage-api/manage-app/src/main/java/cn/novalon/gym/manage/app/config/DataSourceConfig.java b/gym-manage-api/manage-app/src/main/java/cn/novalon/gym/manage/app/config/DataSourceConfig.java new file mode 100644 index 0000000..2320a5d --- /dev/null +++ b/gym-manage-api/manage-app/src/main/java/cn/novalon/gym/manage/app/config/DataSourceConfig.java @@ -0,0 +1,29 @@ +package cn.novalon.gym.manage.app.config; + +import com.zaxxer.hikari.HikariDataSource; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.sql.DataSource; + +@Configuration +public class DataSourceConfig { + + @Bean + @Primary + @ConfigurationProperties("spring.datasource") + public DataSourceProperties dataSourceProperties() { + return new DataSourceProperties(); + } + + @Bean + @Primary + public DataSource dataSource(DataSourceProperties properties) { + return properties.initializeDataSourceBuilder() + .type(HikariDataSource.class) + .build(); + } +} diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V12__Insert_user_role_data.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V12__Insert_user_role_data.sql deleted file mode 100644 index bf68b48..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V12__Insert_user_role_data.sql +++ /dev/null @@ -1,51 +0,0 @@ --- Novalon管理系统普通用户角色和数据 --- 版本: V10 --- 描述: 创建普通用户角色并分配权限 - --- 插入普通用户角色 -INSERT INTO sys_role (role_name, role_key, role_sort, status, create_by, update_by) -VALUES ('普通用户', 'user', 2, 1, 'system', 'system') -ON CONFLICT (role_key) DO UPDATE SET - role_name = EXCLUDED.role_name, - role_sort = EXCLUDED.role_sort, - status = EXCLUDED.status; - --- 为普通用户分配基本权限(查看个人信息、修改密码等) --- 注意:这里只分配基本权限,不包含管理功能权限 -INSERT INTO sys_permission (permission_name, permission_key, permission_type, parent_id, path, component, icon, sort, status, create_by, update_by) -VALUES -('个人中心', 'profile', 'MENU', 0, '/profile', 'views/profile/index', 'user', 1, 1, 'system', 'system'), -('个人信息', 'profile:info', 'BUTTON', (SELECT id FROM sys_permission WHERE permission_key = 'profile'), '', '', '', 1, 1, 'system', 'system'), -('修改密码', 'profile:password', 'BUTTON', (SELECT id FROM sys_permission WHERE permission_key = 'profile'), '', '', '', 2, 1, 'system', 'system') -ON CONFLICT (permission_key) DO NOTHING; - --- 为普通用户角色分配权限 -INSERT INTO sys_role_permission (role_id, permission_id, create_by, update_by) -SELECT - r.id as role_id, - p.id as permission_id, - 'system' as create_by, - 'system' as update_by -FROM sys_role r -CROSS JOIN sys_permission p -WHERE r.role_key = 'user' - AND p.permission_key IN ('profile', 'profile:info', 'profile:password') -ON CONFLICT DO NOTHING; - --- 将测试用户分配给普通用户角色 -INSERT INTO user_role (user_id, role_id, create_by, update_by) -SELECT - u.id as user_id, - r.id as role_id, - 'system' as create_by, - 'system' as update_by -FROM sys_user u -CROSS JOIN sys_role r -WHERE u.username = 'user' AND r.role_key = 'user' -ON CONFLICT DO NOTHING; - --- 重置序列值 -SELECT setval('sys_role_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_role)); -SELECT setval('sys_permission_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_permission)); -SELECT setval('sys_role_permission_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_role_permission)); -SELECT setval('user_role_id_seq', (SELECT COALESCE(MAX(id), 1) FROM user_role)); diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V13__Update_test_user_password.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V13__Update_test_user_password.sql deleted file mode 100644 index 998c07b..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V13__Update_test_user_password.sql +++ /dev/null @@ -1,46 +0,0 @@ --- Novalon管理系统测试数据脚本 --- 版本: V11 --- 描述: 更新测试用户密码为Test@123,插入E2E测试所需数据 - --- 更新admin用户密码为Test@123 --- BCrypt哈希值对应明文密码: Test@123 -UPDATE sys_user -SET password = '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C' -WHERE username = 'admin'; - --- 更新user用户密码为Test@123 -UPDATE sys_user -SET password = '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C' -WHERE username = 'user'; - --- 插入测试角色(如果不存在) -INSERT INTO sys_role (role_name, role_key, role_sort, status, create_by, update_by) -VALUES -('测试管理员', 'test_admin', 2, 1, 'system', 'system'), -('普通用户', 'normal_user', 3, 1, 'system', 'system'), -('访客', 'guest', 4, 1, 'system', 'system') -ON CONFLICT (role_key) DO NOTHING; - --- 为admin用户分配超级管理员角色 -INSERT INTO user_role (user_id, role_id, created_by) -SELECT 1, id, 'system' FROM sys_role WHERE role_key = 'admin' -ON CONFLICT DO NOTHING; - --- 为user用户分配普通用户角色 -INSERT INTO user_role (user_id, role_id, created_by) -SELECT 2, id, 'system' FROM sys_role WHERE role_key = 'normal_user' -ON CONFLICT DO NOTHING; - --- 插入E2E测试专用用户 --- BCrypt哈希值对应明文密码: Test@123 -INSERT INTO sys_user (id, username, password, email, phone, nickname, status, create_by, update_by) -VALUES -(10, 'e2e_test_user', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'e2e@test.com', '13900139000', 'E2E测试用户', 1, 'system', 'system') -ON CONFLICT (username) DO UPDATE SET - password = EXCLUDED.password, - status = EXCLUDED.status; - --- 为E2E测试用户分配超级管理员角色 -INSERT INTO user_role (user_id, role_id, created_by) -SELECT 10, id, 'system' FROM sys_role WHERE role_key = 'admin' -ON CONFLICT DO NOTHING; diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V14__Fix_menu_data.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V14__Fix_menu_data.sql deleted file mode 100644 index 06b1852..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V14__Fix_menu_data.sql +++ /dev/null @@ -1,28 +0,0 @@ --- V14__Fix_menu_data.sql --- 清理测试菜单数据 -DELETE FROM sys_menu WHERE menu_name LIKE '%测试%' OR menu_name LIKE '%回归%'; - --- 插入一级菜单 -INSERT INTO sys_menu (menu_name, parent_id, order_num, menu_type, status, created_at, updated_at) VALUES -('系统管理', 0, 1, 'M', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('系统监控', 0, 2, 'M', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('审计日志', 0, 3, 'M', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); - --- 插入二级菜单(系统管理下) -INSERT INTO sys_menu (menu_name, parent_id, order_num, menu_type, component, perms, status, created_at, updated_at) VALUES -('用户管理', (SELECT id FROM sys_menu WHERE menu_name = '系统管理' AND parent_id = 0), 1, 'C', 'system/user/index', 'system:user:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('角色管理', (SELECT id FROM sys_menu WHERE menu_name = '系统管理' AND parent_id = 0), 2, 'C', 'system/role/index', 'system:role:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('菜单管理', (SELECT id FROM sys_menu WHERE menu_name = '系统管理' AND parent_id = 0), 3, 'C', 'system/menu/index', 'system:menu:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('参数配置', (SELECT id FROM sys_menu WHERE menu_name = '系统管理' AND parent_id = 0), 4, 'C', 'system/config/index', 'system:config:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('字典管理', (SELECT id FROM sys_menu WHERE menu_name = '系统管理' AND parent_id = 0), 5, 'C', 'system/dict/index', 'system:dict:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); - --- 插入二级菜单(系统监控下) -INSERT INTO sys_menu (menu_name, parent_id, order_num, menu_type, component, perms, status, created_at, updated_at) VALUES -('文件管理', (SELECT id FROM sys_menu WHERE menu_name = '系统监控' AND parent_id = 0), 1, 'C', 'system/file/index', 'system:file:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('通知公告', (SELECT id FROM sys_menu WHERE menu_name = '系统监控' AND parent_id = 0), 2, 'C', 'system/notice/index', 'system:notice:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); - --- 插入二级菜单(审计日志下) -INSERT INTO sys_menu (menu_name, parent_id, order_num, menu_type, component, perms, status, created_at, updated_at) VALUES -('登录日志', (SELECT id FROM sys_menu WHERE menu_name = '审计日志' AND parent_id = 0), 1, 'C', 'audit/login/index', 'audit:login:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('操作日志', (SELECT id FROM sys_menu WHERE menu_name = '审计日志' AND parent_id = 0), 2, 'C', 'audit/operation/index', 'audit:operation:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP), -('异常日志', (SELECT id FROM sys_menu WHERE menu_name = '审计日志' AND parent_id = 0), 3, 'C', 'audit/exception/index', 'audit:exception:list', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V15__Add_missing_audit_log_columns.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V15__Add_missing_audit_log_columns.sql deleted file mode 100644 index d4a278f..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V15__Add_missing_audit_log_columns.sql +++ /dev/null @@ -1,12 +0,0 @@ --- Novalon管理系统审计日志表补充字段 --- 版本: V15 --- 描述: 为审计日志表添加缺失的基础字段,与BaseDomain保持一致 -ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS create_by VARCHAR(50); -ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS update_by VARCHAR(50); -ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; -ALTER TABLE audit_log ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMP; - -COMMENT ON COLUMN audit_log.create_by IS '创建人'; -COMMENT ON COLUMN audit_log.update_by IS '更新人'; -COMMENT ON COLUMN audit_log.updated_at IS '更新时间'; -COMMENT ON COLUMN audit_log.deleted_at IS '删除时间'; diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V1__Create_all_tables.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V1__Create_all_tables.sql index 3f7c728..88b0986 100644 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V1__Create_all_tables.sql +++ b/gym-manage-api/manage-db/src/main/resources/db/migration/V1__Create_all_tables.sql @@ -1,15 +1,19 @@ -- Novalon管理系统数据库初始化脚本 -- 版本: V1 --- 描述: 创建所有核心表结构 +-- 描述: 创建所有核心表结构(合并版) + +-- ============================================ +-- 用户与角色相关表 +-- ============================================ + -- 用户表 CREATE TABLE IF NOT EXISTS sys_user ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(100), phone VARCHAR(20), nickname VARCHAR(100), - role_id BIGINT, status INTEGER DEFAULT 1, create_by VARCHAR(50), update_by VARCHAR(50), @@ -17,9 +21,10 @@ CREATE TABLE IF NOT EXISTS sys_user ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + -- 角色表 CREATE TABLE IF NOT EXISTS sys_role ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, role_name VARCHAR(100) NOT NULL, role_key VARCHAR(100) NOT NULL UNIQUE, role_sort INTEGER DEFAULT 0, @@ -30,9 +35,60 @@ CREATE TABLE IF NOT EXISTS sys_role ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); --- 菜单表(统一使用sys_menu表名) + +-- 用户角色关联表(支持多对多关系) +CREATE TABLE IF NOT EXISTS user_role ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL, + role_id BIGINT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + created_by VARCHAR(50), + CONSTRAINT fk_user_role_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE, + CONSTRAINT fk_user_role_role FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE, + CONSTRAINT uk_user_role UNIQUE (user_id, role_id) +); + +-- ============================================ +-- 权限相关表 +-- ============================================ + +-- 权限表 +CREATE TABLE IF NOT EXISTS sys_permission ( + id BIGSERIAL PRIMARY KEY, + permission_name VARCHAR(100) NOT NULL, + permission_code VARCHAR(100) NOT NULL UNIQUE, + resource VARCHAR(200) NOT NULL, + action VARCHAR(50) NOT NULL, + description VARCHAR(500), + status INTEGER DEFAULT 1, + create_by VARCHAR(50), + update_by VARCHAR(50), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); + +-- 角色权限关联表 +CREATE TABLE IF NOT EXISTS sys_role_permission ( + id BIGSERIAL PRIMARY KEY, + role_id BIGINT NOT NULL, + permission_id BIGINT NOT NULL, + create_by VARCHAR(50), + update_by VARCHAR(50), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE, + FOREIGN KEY (permission_id) REFERENCES sys_permission(id) ON DELETE CASCADE, + UNIQUE (role_id, permission_id) +); + +-- ============================================ +-- 菜单相关表 +-- ============================================ + +-- 菜单表 CREATE TABLE IF NOT EXISTS sys_menu ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, menu_name VARCHAR(50) NOT NULL, parent_id BIGINT DEFAULT 0, order_num INTEGER DEFAULT 0, @@ -46,9 +102,14 @@ CREATE TABLE IF NOT EXISTS sys_menu ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- ============================================ +-- 字典相关表 +-- ============================================ + -- 字典类型表 CREATE TABLE IF NOT EXISTS sys_dict_type ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, dict_name VARCHAR(100) NOT NULL, dict_type VARCHAR(100) NOT NULL UNIQUE, status VARCHAR(1) DEFAULT '0', @@ -59,9 +120,10 @@ CREATE TABLE IF NOT EXISTS sys_dict_type ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + -- 字典数据表 CREATE TABLE IF NOT EXISTS sys_dict_data ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, dict_sort INTEGER DEFAULT 0, dict_label VARCHAR(100) NOT NULL, dict_value VARCHAR(100) NOT NULL, @@ -76,9 +138,10 @@ CREATE TABLE IF NOT EXISTS sys_dict_data ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + -- 字典表(通用字典) CREATE TABLE IF NOT EXISTS sys_dictionary ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, type VARCHAR(100) NOT NULL, code VARCHAR(100) NOT NULL, name VARCHAR(100) NOT NULL, @@ -90,9 +153,14 @@ CREATE TABLE IF NOT EXISTS sys_dictionary ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- ============================================ +-- 系统配置表 +-- ============================================ + -- 系统配置表 CREATE TABLE IF NOT EXISTS sys_config ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, config_name VARCHAR(100) NOT NULL, config_key VARCHAR(100) NOT NULL UNIQUE, config_value VARCHAR(500) NOT NULL, @@ -103,9 +171,14 @@ CREATE TABLE IF NOT EXISTS sys_config ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- ============================================ +-- 日志相关表 +-- ============================================ + -- 登录日志表 CREATE TABLE IF NOT EXISTS sys_login_log ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, username VARCHAR(50), ip VARCHAR(50), location VARCHAR(255), @@ -115,9 +188,10 @@ CREATE TABLE IF NOT EXISTS sys_login_log ( message VARCHAR(255), login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); + -- 异常日志表 CREATE TABLE IF NOT EXISTS sys_exception_log ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, username VARCHAR(50), title VARCHAR(100), exception_name VARCHAR(100), @@ -128,9 +202,10 @@ CREATE TABLE IF NOT EXISTS sys_exception_log ( ip VARCHAR(50), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); + -- 操作日志表 CREATE TABLE IF NOT EXISTS operation_log ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, username VARCHAR(50), operation VARCHAR(100), method VARCHAR(200), @@ -146,9 +221,53 @@ CREATE TABLE IF NOT EXISTS operation_log ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- 审计日志表 +CREATE TABLE IF NOT EXISTS audit_log ( + id BIGSERIAL PRIMARY KEY, + entity_type VARCHAR(100) NOT NULL, + entity_id BIGINT, + operation_type VARCHAR(20) NOT NULL, + operator VARCHAR(100), + operation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + before_data JSONB, + after_data JSONB, + changed_fields TEXT[], + ip_address VARCHAR(50), + user_agent TEXT, + description TEXT, + create_by VARCHAR(50), + update_by VARCHAR(50), + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP +); + +-- 审计日志归档表 +CREATE TABLE IF NOT EXISTS audit_log_archive ( + id BIGSERIAL PRIMARY KEY, + entity_type VARCHAR(100) NOT NULL, + entity_id BIGINT, + operation_type VARCHAR(20) NOT NULL, + operator VARCHAR(100), + operation_time TIMESTAMP, + before_data JSONB, + after_data JSONB, + changed_fields TEXT[], + ip_address VARCHAR(50), + user_agent TEXT, + description TEXT, + created_at TIMESTAMP, + archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- ============================================ +-- 通知与消息表 +-- ============================================ + -- 系统公告表 CREATE TABLE IF NOT EXISTS sys_notice ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, notice_title VARCHAR(50) NOT NULL, notice_type VARCHAR(1) NOT NULL, notice_content TEXT, @@ -159,9 +278,10 @@ CREATE TABLE IF NOT EXISTS sys_notice ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + -- 用户消息表 CREATE TABLE IF NOT EXISTS sys_user_message ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL, notice_id BIGINT, message_title VARCHAR(255), @@ -174,9 +294,14 @@ CREATE TABLE IF NOT EXISTS sys_user_message ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- ============================================ +-- 文件管理表 +-- ============================================ + -- 文件管理表 CREATE TABLE IF NOT EXISTS sys_file ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, file_name VARCHAR(255) NOT NULL, file_path VARCHAR(500) NOT NULL, file_size BIGINT, @@ -189,9 +314,14 @@ CREATE TABLE IF NOT EXISTS sys_file ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- ============================================ +-- OAuth2相关表 +-- ============================================ + -- OAuth2客户端表 CREATE TABLE IF NOT EXISTS oauth2_client ( - id BIGINT PRIMARY KEY, + id BIGSERIAL PRIMARY KEY, client_id VARCHAR(100) NOT NULL UNIQUE, client_secret VARCHAR(255) NOT NULL, client_name VARCHAR(100), @@ -208,7 +338,31 @@ CREATE TABLE IF NOT EXISTS oauth2_client ( updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, deleted_at TIMESTAMP ); + +-- ============================================ -- 表注释 +-- ============================================ + +COMMENT ON TABLE sys_user IS '系统用户表'; +COMMENT ON TABLE sys_role IS '系统角色表'; +COMMENT ON TABLE user_role IS '用户角色关联表'; +COMMENT ON TABLE sys_permission IS '系统权限表'; +COMMENT ON TABLE sys_role_permission IS '角色权限关联表'; +COMMENT ON TABLE sys_menu IS '系统菜单表'; +COMMENT ON TABLE sys_dict_type IS '字典类型表'; +COMMENT ON TABLE sys_dict_data IS '字典数据表'; +COMMENT ON TABLE sys_dictionary IS '通用字典表'; +COMMENT ON TABLE sys_config IS '系统配置表'; +COMMENT ON TABLE sys_login_log IS '登录日志表'; +COMMENT ON TABLE sys_exception_log IS '异常日志表'; +COMMENT ON TABLE operation_log IS '操作日志表'; +COMMENT ON TABLE audit_log IS '审计日志表'; +COMMENT ON TABLE audit_log_archive IS '审计日志归档表'; +COMMENT ON TABLE sys_notice IS '系统公告表'; +COMMENT ON TABLE sys_user_message IS '用户消息表'; +COMMENT ON TABLE sys_file IS '文件管理表'; +COMMENT ON TABLE oauth2_client IS 'OAuth2客户端表'; + COMMENT ON TABLE sys_exception_log IS '异常日志表'; COMMENT ON COLUMN sys_exception_log.id IS '主键ID'; COMMENT ON COLUMN sys_exception_log.username IS '操作用户'; @@ -220,5 +374,33 @@ COMMENT ON COLUMN sys_exception_log.exception_msg IS '异常消息'; COMMENT ON COLUMN sys_exception_log.exception_stack IS '异常堆栈'; COMMENT ON COLUMN sys_exception_log.ip IS 'IP地址'; COMMENT ON COLUMN sys_exception_log.create_time IS '创建时间'; -COMMENT ON TABLE sys_menu IS '系统菜单表'; -COMMENT ON TABLE sys_login_log IS '登录日志表'; \ No newline at end of file + +COMMENT ON TABLE audit_log IS '审计日志表'; +COMMENT ON COLUMN audit_log.id IS '主键ID'; +COMMENT ON COLUMN audit_log.entity_type IS '实体类型(如User, Role等)'; +COMMENT ON COLUMN audit_log.entity_id IS '实体ID'; +COMMENT ON COLUMN audit_log.operation_type IS '操作类型(CREATE, UPDATE, DELETE)'; +COMMENT ON COLUMN audit_log.operator IS '操作人'; +COMMENT ON COLUMN audit_log.operation_time IS '操作时间'; +COMMENT ON COLUMN audit_log.before_data IS '变更前数据(JSON格式)'; +COMMENT ON COLUMN audit_log.after_data IS '变更后数据(JSON格式)'; +COMMENT ON COLUMN audit_log.changed_fields IS '变更字段列表'; +COMMENT ON COLUMN audit_log.ip_address IS 'IP地址'; +COMMENT ON COLUMN audit_log.description IS '操作描述'; +COMMENT ON COLUMN audit_log.created_at IS '记录创建时间'; + +COMMENT ON TABLE audit_log_archive IS '审计日志归档表'; +COMMENT ON COLUMN audit_log_archive.id IS '主键ID'; +COMMENT ON COLUMN audit_log_archive.entity_type IS '实体类型(如User, Role等)'; +COMMENT ON COLUMN audit_log_archive.entity_id IS '实体ID'; +COMMENT ON COLUMN audit_log_archive.operation_type IS '操作类型(CREATE, UPDATE, DELETE)'; +COMMENT ON COLUMN audit_log_archive.operator IS '操作人'; +COMMENT ON COLUMN audit_log_archive.operation_time IS '操作时间'; +COMMENT ON COLUMN audit_log_archive.before_data IS '变更前数据(JSON格式)'; +COMMENT ON COLUMN audit_log_archive.after_data IS '变更后数据(JSON格式)'; +COMMENT ON COLUMN audit_log_archive.changed_fields IS '变更字段列表'; +COMMENT ON COLUMN audit_log_archive.ip_address IS 'IP地址'; +COMMENT ON COLUMN audit_log_archive.user_agent IS '用户代理'; +COMMENT ON COLUMN audit_log_archive.description IS '操作描述'; +COMMENT ON COLUMN audit_log_archive.created_at IS '记录创建时间'; +COMMENT ON COLUMN audit_log_archive.archived_at IS '归档时间'; diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V2__Insert_initial_data.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V2__Insert_initial_data.sql index faff6d7..447f2c4 100644 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V2__Insert_initial_data.sql +++ b/gym-manage-api/manage-db/src/main/resources/db/migration/V2__Insert_initial_data.sql @@ -1,67 +1,233 @@ -- Novalon管理系统初始数据脚本 -- 版本: V2 --- 描述: 插入必要的初始数据 +-- 描述: 插入所有必要的初始数据(合并版) --- 插入初始角色 -INSERT INTO sys_role (role_name, role_key, role_sort, status, create_by, update_by) -VALUES ('超级管理员', 'admin', 1, 1, 'system', 'system') -ON CONFLICT (role_key) DO NOTHING; +-- ============================================ +-- 角色数据 +-- ============================================ --- 插入初始管理员用户 --- BCrypt哈希值对应明文密码: admin123 -INSERT INTO sys_user (id, username, password, email, phone, status, create_by, update_by) -VALUES (1, 'admin', '$2b$12$SFefXlGRFMA0fvxIufpWPuIAl0OPLgRDoCZPThCvjpiJGPYS8yNYy', 'admin@novalon.com', '13800138000', 1, 'system', 'system') -ON CONFLICT (username) DO UPDATE SET - password = EXCLUDED.password, - status = EXCLUDED.status; - --- 插入测试用户(用于E2E测试) --- BCrypt哈希值对应明文密码: admin123 -INSERT INTO sys_user (id, username, password, email, phone, status, create_by, update_by) -VALUES (2, 'user', '$2b$12$SFefXlGRFMA0fvxIufpWPuIAl0OPLgRDoCZPThCvjpiJGPYS8yNYy', 'user@novalon.com', '13800138001', 1, 'system', 'system') -ON CONFLICT (username) DO UPDATE SET - password = EXCLUDED.password, - status = EXCLUDED.status; - --- 插入初始字典类型 -INSERT INTO sys_dict_type (dict_name, dict_type, status, remark, create_by, update_by) +INSERT INTO sys_role (id, role_name, role_key, role_sort, status, create_by, update_by, created_at, updated_at) VALUES -('用户状态', 'user_status', '0', '用户状态列表', 'system', 'system'), -('菜单状态', 'menu_status', '0', '菜单状态列表', 'system', 'system'), -('角色状态', 'role_status', '0', '角色状态列表', 'system', 'system'), -('系统开关', 'sys_normal_disable', '0', '系统开关列表', 'system', 'system') +(1, '超级管理员', 'admin', 1, 1, 'system', 'system', NOW(), NOW()), +(2, '测试管理员', 'test_admin', 2, 1, 'system', 'system', NOW(), NOW()), +(3, '普通用户', 'normal_user', 3, 1, 'system', 'system', NOW(), NOW()), +(4, '访客', 'guest', 4, 1, 'system', 'system', NOW(), NOW()); + +SELECT setval('sys_role_id_seq', 4); + +-- ============================================ +-- 用户数据 +-- ============================================ + +-- 密码均为: Test@123 (BCrypt哈希) +INSERT INTO sys_user (id, username, password, email, phone, nickname, status, create_by, update_by, created_at, updated_at) +VALUES +(1, 'admin', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'admin@novalon.com', '13800138000', '超级管理员', 1, 'system', 'system', NOW(), NOW()), +(2, 'user', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'user@novalon.com', '13800138001', '普通用户', 1, 'system', 'system', NOW(), NOW()), +(10, 'e2e_test_user', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'e2e@test.com', '13900139000', 'E2E测试用户', 1, 'system', 'system', NOW(), NOW()) +ON CONFLICT (username) DO UPDATE SET + password = EXCLUDED.password, + status = EXCLUDED.status; + +SELECT setval('sys_user_id_seq', 10); + +-- ============================================ +-- 用户角色关联 +-- ============================================ + +-- 为admin用户分配超级管理员角色 +INSERT INTO user_role (user_id, role_id, created_by, created_at) +VALUES +(1, 1, 'system', NOW()), +(2, 3, 'system', NOW()), +(10, 1, 'system', NOW()) +ON CONFLICT (user_id, role_id) DO NOTHING; + +-- ============================================ +-- 权限数据 +-- ============================================ + +INSERT INTO sys_permission (permission_name, permission_code, resource, action, description, status, create_by, update_by, created_at, updated_at) VALUES +('用户查看', 'system:user:view', '/api/users', 'GET', '查看用户列表', 1, 'system', 'system', NOW(), NOW()), +('用户创建', 'system:user:create', '/api/users', 'POST', '创建用户', 1, 'system', 'system', NOW(), NOW()), +('用户编辑', 'system:user:edit', '/api/users', 'PUT', '编辑用户', 1, 'system', 'system', NOW(), NOW()), +('用户删除', 'system:user:delete', '/api/users', 'DELETE', '删除用户', 1, 'system', 'system', NOW(), NOW()), +('角色查看', 'system:role:view', '/api/roles', 'GET', '查看角色列表', 1, 'system', 'system', NOW(), NOW()), +('角色创建', 'system:role:create', '/api/roles', 'POST', '创建角色', 1, 'system', 'system', NOW(), NOW()), +('角色编辑', 'system:role:edit', '/api/roles', 'PUT', '编辑角色', 1, 'system', 'system', NOW(), NOW()), +('角色删除', 'system:role:delete', '/api/roles', 'DELETE', '删除角色', 1, 'system', 'system', NOW(), NOW()), +('角色分配权限', 'system:role:assign', '/api/roles/*/permissions', 'POST', '为角色分配权限', 1, 'system', 'system', NOW(), NOW()), +('权限查看', 'system:permission:view', '/api/permissions', 'GET', '查看权限列表', 1, 'system', 'system', NOW(), NOW()), +('权限创建', 'system:permission:create', '/api/permissions', 'POST', '创建权限', 1, 'system', 'system', NOW(), NOW()), +('权限编辑', 'system:permission:edit', '/api/permissions', 'PUT', '编辑权限', 1, 'system', 'system', NOW(), NOW()), +('权限删除', 'system:permission:delete', '/api/permissions', 'DELETE', '删除权限', 1, 'system', 'system', NOW(), NOW()), +('菜单查看', 'system:menu:view', '/api/menus', 'GET', '查看菜单列表', 1, 'system', 'system', NOW(), NOW()), +('菜单创建', 'system:menu:create', '/api/menus', 'POST', '创建菜单', 1, 'system', 'system', NOW(), NOW()), +('菜单编辑', 'system:menu:edit', '/api/menus', 'PUT', '编辑菜单', 1, 'system', 'system', NOW(), NOW()), +('菜单删除', 'system:menu:delete', '/api/menus', 'DELETE', '删除菜单', 1, 'system', 'system', NOW(), NOW()), +('字典查看', 'system:dict:view', '/api/dict', 'GET', '查看字典列表', 1, 'system', 'system', NOW(), NOW()), +('字典创建', 'system:dict:create', '/api/dict', 'POST', '创建字典', 1, 'system', 'system', NOW(), NOW()), +('字典编辑', 'system:dict:edit', '/api/dict', 'PUT', '编辑字典', 1, 'system', 'system', NOW(), NOW()), +('字典删除', 'system:dict:delete', '/api/dict', 'DELETE', '删除字典', 1, 'system', 'system', NOW(), NOW()), +('配置查看', 'system:config:view', '/api/config', 'GET', '查看系统配置', 1, 'system', 'system', NOW(), NOW()), +('配置创建', 'system:config:create', '/api/config', 'POST', '创建系统配置', 1, 'system', 'system', NOW(), NOW()), +('配置编辑', 'system:config:edit', '/api/config', 'PUT', '编辑系统配置', 1, 'system', 'system', NOW(), NOW()), +('配置删除', 'system:config:delete', '/api/config', 'DELETE', '删除系统配置', 1, 'system', 'system', NOW(), NOW()), +('日志查看', 'system:log:view', '/api/logs', 'GET', '查看日志', 1, 'system', 'system', NOW(), NOW()), +('文件上传', 'system:file:upload', '/api/files/upload', 'POST', '上传文件', 1, 'system', 'system', NOW(), NOW()), +('文件下载', 'system:file:download', '/api/files/download', 'GET', '下载文件', 1, 'system', 'system', NOW(), NOW()), +('文件删除', 'system:file:delete', '/api/files', 'DELETE', '删除文件', 1, 'system', 'system', NOW(), NOW()), +('公告查看', 'system:notice:view', '/api/notices', 'GET', '查看公告', 1, 'system', 'system', NOW(), NOW()), +('公告创建', 'system:notice:create', '/api/notices', 'POST', '创建公告', 1, 'system', 'system', NOW(), NOW()), +('公告编辑', 'system:notice:edit', '/api/notices', 'PUT', '编辑公告', 1, 'system', 'system', NOW(), NOW()), +('公告删除', 'system:notice:delete', '/api/notices', 'DELETE', '删除公告', 1, 'system', 'system', NOW(), NOW()); + +-- 为管理员角色分配所有权限 +INSERT INTO sys_role_permission (role_id, permission_id, create_by, update_by, created_at, updated_at) +SELECT 1, id, 'system', 'system', NOW(), NOW() FROM sys_permission WHERE status = 1; + +-- ============================================ +-- 菜单数据 +-- ============================================ + +-- 一级菜单 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(1, '系统管理', 0, 1, 'M', NULL, NULL, 1, NOW(), NOW()), +(2, '审计日志', 0, 2, 'M', NULL, NULL, 1, NOW(), NOW()), +(3, '系统监控', 0, 3, 'M', NULL, NULL, 1, NOW(), NOW()); + +-- 系统管理子菜单 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(11, '用户管理', 1, 1, 'C', 'system:user:list', 'system/user/index', 1, NOW(), NOW()), +(12, '角色管理', 1, 2, 'C', 'system:role:list', 'system/role/index', 1, NOW(), NOW()), +(13, '菜单管理', 1, 3, 'C', 'system:menu:list', 'system/menu/index', 1, NOW(), NOW()), +(14, '部门管理', 1, 4, 'C', 'system:dept:list', 'system/dept/index', 1, NOW(), NOW()), +(15, '字典管理', 1, 5, 'C', 'system:dict:list', 'system/dict/index', 1, NOW(), NOW()), +(16, '参数管理', 1, 6, 'C', 'system:config:list', 'system/config/index', 1, NOW(), NOW()), +(17, '通知公告', 1, 7, 'C', 'system:notice:list', 'system/notice/index', 1, NOW(), NOW()), +(18, '文件管理', 1, 8, 'C', 'system:file:list', 'system/file/index', 1, NOW(), NOW()); + +-- 用户管理按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(111, '用户查询', 11, 1, 'F', 'system:user:query', NULL, 1, NOW(), NOW()), +(112, '用户新增', 11, 2, 'F', 'system:user:add', NULL, 1, NOW(), NOW()), +(113, '用户修改', 11, 3, 'F', 'system:user:edit', NULL, 1, NOW(), NOW()), +(114, '用户删除', 11, 4, 'F', 'system:user:remove', NULL, 1, NOW(), NOW()), +(115, '用户导出', 11, 5, 'F', 'system:user:export', NULL, 1, NOW(), NOW()), +(116, '用户导入', 11, 6, 'F', 'system:user:import', NULL, 1, NOW(), NOW()), +(117, '重置密码', 11, 7, 'F', 'system:user:resetPwd', NULL, 1, NOW(), NOW()); + +-- 角色管理按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(121, '角色查询', 12, 1, 'F', 'system:role:query', NULL, 1, NOW(), NOW()), +(122, '角色新增', 12, 2, 'F', 'system:role:add', NULL, 1, NOW(), NOW()), +(123, '角色修改', 12, 3, 'F', 'system:role:edit', NULL, 1, NOW(), NOW()), +(124, '角色删除', 12, 4, 'F', 'system:role:remove', NULL, 1, NOW(), NOW()), +(125, '角色导出', 12, 5, 'F', 'system:role:export', NULL, 1, NOW(), NOW()); + +-- 菜单管理按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(131, '菜单查询', 13, 1, 'F', 'system:menu:query', NULL, 1, NOW(), NOW()), +(132, '菜单新增', 13, 2, 'F', 'system:menu:add', NULL, 1, NOW(), NOW()), +(133, '菜单修改', 13, 3, 'F', 'system:menu:edit', NULL, 1, NOW(), NOW()), +(134, '菜单删除', 13, 4, 'F', 'system:menu:remove', NULL, 1, NOW(), NOW()); + +-- 审计日志子菜单 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(21, '操作日志', 2, 1, 'C', 'audit:operation:list', 'audit/operation/index', 1, NOW(), NOW()), +(22, '登录日志', 2, 2, 'C', 'audit:login:list', 'audit/login/index', 1, NOW(), NOW()), +(23, '异常日志', 2, 3, 'C', 'audit:exception:list', 'audit/exception/index', 1, NOW(), NOW()); + +-- 操作日志按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(211, '操作查询', 21, 1, 'F', 'audit:operation:query', NULL, 1, NOW(), NOW()), +(212, '操作删除', 21, 2, 'F', 'audit:operation:remove', NULL, 1, NOW(), NOW()), +(213, '操作导出', 21, 3, 'F', 'audit:operation:export', NULL, 1, NOW(), NOW()); + +-- 登录日志按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(221, '登录查询', 22, 1, 'F', 'audit:login:query', NULL, 1, NOW(), NOW()), +(222, '登录删除', 22, 2, 'F', 'audit:login:remove', NULL, 1, NOW(), NOW()), +(223, '登录导出', 22, 3, 'F', 'audit:login:export', NULL, 1, NOW(), NOW()); + +-- 异常日志按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(231, '异常查询', 23, 1, 'F', 'audit:exception:query', NULL, 1, NOW(), NOW()), +(232, '异常删除', 23, 2, 'F', 'audit:exception:remove', NULL, 1, NOW(), NOW()), +(233, '异常导出', 23, 3, 'F', 'audit:exception:export', NULL, 1, NOW(), NOW()); + +-- 系统监控子菜单 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(31, '在线用户', 3, 1, 'C', 'monitor:online:list', 'monitor/online/index', 1, NOW(), NOW()), +(32, '定时任务', 3, 2, 'C', 'monitor:job:list', 'monitor/job/index', 1, NOW(), NOW()), +(33, '数据监控', 3, 3, 'C', 'monitor:data:list', 'monitor/data/index', 1, NOW(), NOW()), +(34, '服务监控', 3, 4, 'C', 'monitor:server:list', 'monitor/server/index', 1, NOW(), NOW()), +(35, '缓存监控', 3, 5, 'C', 'monitor:cache:list', 'monitor/cache/index', 1, NOW(), NOW()); + +-- 在线用户按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(311, '在线查询', 31, 1, 'F', 'monitor:online:query', NULL, 1, NOW(), NOW()), +(312, '在线强退', 31, 2, 'F', 'monitor:online:forceLogout', NULL, 1, NOW(), NOW()); + +-- 定时任务按钮权限 +INSERT INTO sys_menu (id, menu_name, parent_id, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES +(321, '任务查询', 32, 1, 'F', 'monitor:job:query', NULL, 1, NOW(), NOW()), +(322, '任务新增', 32, 2, 'F', 'monitor:job:add', NULL, 1, NOW(), NOW()), +(323, '任务修改', 32, 3, 'F', 'monitor:job:edit', NULL, 1, NOW(), NOW()), +(324, '任务删除', 32, 4, 'F', 'monitor:job:remove', NULL, 1, NOW(), NOW()), +(325, '任务执行', 32, 5, 'F', 'monitor:job:execute', NULL, 1, NOW(), NOW()); + +SELECT setval('sys_menu_id_seq', 400); + +-- ============================================ +-- 字典数据 +-- ============================================ + +-- 字典类型 +INSERT INTO sys_dict_type (dict_name, dict_type, status, remark, create_by, update_by, created_at, updated_at) +VALUES +('用户状态', 'user_status', '0', '用户状态列表', 'system', 'system', NOW(), NOW()), +('菜单状态', 'menu_status', '0', '菜单状态列表', 'system', 'system', NOW(), NOW()), +('角色状态', 'role_status', '0', '角色状态列表', 'system', 'system', NOW(), NOW()), +('系统开关', 'sys_normal_disable', '0', '系统开关列表', 'system', 'system', NOW(), NOW()) ON CONFLICT (dict_type) DO NOTHING; --- 插入初始字典数据 -INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, update_by) +-- 字典数据 +INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, update_by, created_at, updated_at) VALUES -- 用户状态 -(1, '正常', '1', 'user_status', '', 'primary', 'Y', '0', 'system', 'system'), -(2, '停用', '0', 'user_status', '', 'danger', 'N', '0', 'system', 'system'), +(1, '正常', '1', 'user_status', '', 'primary', 'Y', '0', 'system', 'system', NOW(), NOW()), +(2, '停用', '0', 'user_status', '', 'danger', 'N', '0', 'system', 'system', NOW(), NOW()), -- 菜单状态 -(1, '正常', '0', 'menu_status', '', 'primary', 'Y', '0', 'system', 'system'), -(2, '停用', '1', 'menu_status', '', 'danger', 'N', '0', 'system', 'system'), +(1, '正常', '0', 'menu_status', '', 'primary', 'Y', '0', 'system', 'system', NOW(), NOW()), +(2, '停用', '1', 'menu_status', '', 'danger', 'N', '0', 'system', 'system', NOW(), NOW()), -- 角色状态 -(1, '正常', '0', 'role_status', '', 'primary', 'Y', '0', 'system', 'system'), -(2, '停用', '1', 'role_status', '', 'danger', 'N', '0', 'system', 'system'), +(1, '正常', '0', 'role_status', '', 'primary', 'Y', '0', 'system', 'system', NOW(), NOW()), +(2, '停用', '1', 'role_status', '', 'danger', 'N', '0', 'system', 'system', NOW(), NOW()), -- 系统开关 -(1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'system', 'system'), -(2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'system', 'system') -ON CONFLICT DO NOTHING; +(1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'system', 'system', NOW(), NOW()), +(2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'system', 'system', NOW(), NOW()); --- 插入初始系统配置 -INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, update_by) +-- ============================================ +-- 系统配置 +-- ============================================ + +INSERT INTO sys_config (config_name, config_key, config_value, config_type, create_by, update_by, created_at, updated_at) VALUES -('用户管理-用户初始密码', 'sys.user.initPassword', '123456', 'Y', 'system', 'system'), -('主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'system', 'system'), -('用户自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'system', 'system'), -('用户自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'system', 'system'), -('账号自助-密码验证码', 'sys.account.pwdCaptchaEnabled', 'true', 'Y', 'system', 'system') +('用户管理-用户初始密码', 'sys.user.initPassword', '123456', 'Y', 'system', 'system', NOW(), NOW()), +('主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'system', 'system', NOW(), NOW()), +('用户自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'system', 'system', NOW(), NOW()), +('用户自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'system', 'system', NOW(), NOW()), +('账号自助-密码验证码', 'sys.account.pwdCaptchaEnabled', 'true', 'Y', 'system', 'system', NOW(), NOW()) ON CONFLICT (config_key) DO NOTHING; +-- ============================================ -- 重置序列值 -SELECT setval('sys_user_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_user)); -SELECT setval('sys_role_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_role)); +-- ============================================ + SELECT setval('sys_dict_type_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_dict_type)); SELECT setval('sys_dict_data_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_dict_data)); -SELECT setval('sys_config_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_config)); \ No newline at end of file +SELECT setval('sys_config_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_config)); +SELECT setval('sys_permission_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_permission)); +SELECT setval('sys_role_permission_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_role_permission)); +SELECT setval('user_role_id_seq', (SELECT COALESCE(MAX(id), 1) FROM user_role)); diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V5__Create_indexes.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_indexes.sql similarity index 59% rename from gym-manage-api/manage-db/src/main/resources/db/migration/V5__Create_indexes.sql rename to gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_indexes.sql index 5633553..8fa1aea 100644 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V5__Create_indexes.sql +++ b/gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_indexes.sql @@ -1,7 +1,11 @@ -- Novalon管理系统索引优化脚本 --- 版本: V5 +-- 版本: V3 -- 描述: 为表创建必要的索引以提升查询性能 +-- ============================================ +-- 用户与角色表索引 +-- ============================================ + -- 用户表索引 CREATE INDEX IF NOT EXISTS idx_users_username ON sys_user(username); CREATE INDEX IF NOT EXISTS idx_users_email ON sys_user(email); @@ -13,11 +17,35 @@ CREATE INDEX IF NOT EXISTS idx_roles_role_key ON sys_role(role_key); CREATE INDEX IF NOT EXISTS idx_roles_status ON sys_role(status); CREATE INDEX IF NOT EXISTS idx_roles_deleted_at ON sys_role(deleted_at); +-- 用户角色关联表索引 +CREATE INDEX IF NOT EXISTS idx_user_role_user_id ON user_role(user_id); +CREATE INDEX IF NOT EXISTS idx_user_role_role_id ON user_role(role_id); + +-- ============================================ +-- 权限表索引 +-- ============================================ + +-- 权限表索引 +CREATE INDEX IF NOT EXISTS idx_permission_code ON sys_permission(permission_code); +CREATE INDEX IF NOT EXISTS idx_permission_resource ON sys_permission(resource); +CREATE INDEX IF NOT EXISTS idx_permission_status ON sys_permission(status); + +-- 角色权限关联表索引 +CREATE INDEX IF NOT EXISTS idx_role_permission_role_id ON sys_role_permission(role_id); +CREATE INDEX IF NOT EXISTS idx_role_permission_permission_id ON sys_role_permission(permission_id); + +-- ============================================ -- 菜单表索引 +-- ============================================ + CREATE INDEX IF NOT EXISTS idx_sys_menu_parent_id ON sys_menu(parent_id); CREATE INDEX IF NOT EXISTS idx_sys_menu_status ON sys_menu(status); CREATE INDEX IF NOT EXISTS idx_sys_menu_deleted_at ON sys_menu(deleted_at); +-- ============================================ +-- 字典表索引 +-- ============================================ + -- 字典类型表索引 CREATE INDEX IF NOT EXISTS idx_sys_dict_type_dict_type ON sys_dict_type(dict_type); CREATE INDEX IF NOT EXISTS idx_sys_dict_type_status ON sys_dict_type(status); @@ -29,16 +57,23 @@ CREATE INDEX IF NOT EXISTS idx_sys_dict_data_dict_value ON sys_dict_data(dict_va CREATE INDEX IF NOT EXISTS idx_sys_dict_data_status ON sys_dict_data(status); CREATE INDEX IF NOT EXISTS idx_sys_dict_data_deleted_at ON sys_dict_data(deleted_at); --- 字典表索引 +-- 通用字典表索引 CREATE INDEX IF NOT EXISTS idx_sys_dictionary_type ON sys_dictionary(type); CREATE INDEX IF NOT EXISTS idx_sys_dictionary_type_code ON sys_dictionary(type, code); CREATE INDEX IF NOT EXISTS idx_sys_dictionary_deleted_at ON sys_dictionary(deleted_at); +-- ============================================ -- 系统配置表索引 +-- ============================================ + CREATE INDEX IF NOT EXISTS idx_sys_config_config_key ON sys_config(config_key); CREATE INDEX IF NOT EXISTS idx_sys_config_config_type ON sys_config(config_type); CREATE INDEX IF NOT EXISTS idx_sys_config_deleted_at ON sys_config(deleted_at); +-- ============================================ +-- 日志表索引 +-- ============================================ + -- 登录日志表索引 CREATE INDEX IF NOT EXISTS idx_sys_login_log_username ON sys_login_log(username); CREATE INDEX IF NOT EXISTS idx_sys_login_log_ip ON sys_login_log(ip); @@ -57,6 +92,26 @@ CREATE INDEX IF NOT EXISTS idx_operation_log_created_at ON operation_log(created CREATE INDEX IF NOT EXISTS idx_operation_log_status ON operation_log(status); CREATE INDEX IF NOT EXISTS idx_operation_log_deleted_at ON operation_log(deleted_at); +-- 审计日志表索引 +CREATE INDEX IF NOT EXISTS idx_audit_log_entity_type ON audit_log(entity_type); +CREATE INDEX IF NOT EXISTS idx_audit_log_entity_id ON audit_log(entity_id); +CREATE INDEX IF NOT EXISTS idx_audit_log_operation_type ON audit_log(operation_type); +CREATE INDEX IF NOT EXISTS idx_audit_log_operator ON audit_log(operator); +CREATE INDEX IF NOT EXISTS idx_audit_log_operation_time ON audit_log(operation_time); +CREATE INDEX IF NOT EXISTS idx_audit_log_entity ON audit_log(entity_type, entity_id); + +-- 审计日志归档表索引 +CREATE INDEX IF NOT EXISTS idx_audit_log_archive_entity_type ON audit_log_archive(entity_type); +CREATE INDEX IF NOT EXISTS idx_audit_log_archive_entity_id ON audit_log_archive(entity_id); +CREATE INDEX IF NOT EXISTS idx_audit_log_archive_operation_type ON audit_log_archive(operation_type); +CREATE INDEX IF NOT EXISTS idx_audit_log_archive_operator ON audit_log_archive(operator); +CREATE INDEX IF NOT EXISTS idx_audit_log_archive_operation_time ON audit_log_archive(operation_time); +CREATE INDEX IF NOT EXISTS idx_audit_log_archive_archived_at ON audit_log_archive(archived_at); + +-- ============================================ +-- 通知与消息表索引 +-- ============================================ + -- 系统公告表索引 CREATE INDEX IF NOT EXISTS idx_sys_notice_notice_type ON sys_notice(notice_type); CREATE INDEX IF NOT EXISTS idx_sys_notice_status ON sys_notice(status); @@ -68,11 +123,17 @@ CREATE INDEX IF NOT EXISTS idx_sys_user_message_notice_id ON sys_user_message(no CREATE INDEX IF NOT EXISTS idx_sys_user_message_is_read ON sys_user_message(is_read); CREATE INDEX IF NOT EXISTS idx_sys_user_message_deleted_at ON sys_user_message(deleted_at); +-- ============================================ -- 文件管理表索引 +-- ============================================ + CREATE INDEX IF NOT EXISTS idx_sys_file_file_type ON sys_file(file_type); CREATE INDEX IF NOT EXISTS idx_sys_file_deleted_at ON sys_file(deleted_at); +-- ============================================ -- OAuth2客户端表索引 +-- ============================================ + CREATE INDEX IF NOT EXISTS idx_oauth2_client_client_id ON oauth2_client(client_id); CREATE INDEX IF NOT EXISTS idx_oauth2_client_enabled ON oauth2_client(enabled); -CREATE INDEX IF NOT EXISTS idx_oauth2_client_deleted_at ON oauth2_client(deleted_at); \ No newline at end of file +CREATE INDEX IF NOT EXISTS idx_oauth2_client_deleted_at ON oauth2_client(deleted_at); diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_user_role_table.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_user_role_table.sql deleted file mode 100644 index ba8628d..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V3__Create_user_role_table.sql +++ /dev/null @@ -1,23 +0,0 @@ --- 创建用户角色关联表(支持多对多关系) -CREATE TABLE IF NOT EXISTS user_role ( - id BIGSERIAL PRIMARY KEY, - user_id BIGINT NOT NULL, - role_id BIGINT NOT NULL, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - created_by VARCHAR(50), - CONSTRAINT fk_user_role_user FOREIGN KEY (user_id) REFERENCES sys_user(id) ON DELETE CASCADE, - CONSTRAINT fk_user_role_role FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE, - CONSTRAINT uk_user_role UNIQUE (user_id, role_id) -); - --- 创建索引 -CREATE INDEX IF NOT EXISTS idx_user_role_user_id ON user_role(user_id); -CREATE INDEX IF NOT EXISTS idx_user_role_role_id ON user_role(role_id); - --- 表注释 -COMMENT ON TABLE user_role IS '用户角色关联表'; -COMMENT ON COLUMN user_role.id IS '主键ID'; -COMMENT ON COLUMN user_role.user_id IS '用户ID'; -COMMENT ON COLUMN user_role.role_id IS '角色ID'; -COMMENT ON COLUMN user_role.created_at IS '创建时间'; -COMMENT ON COLUMN user_role.created_by IS '创建人'; \ No newline at end of file diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V4__Create_permission_tables.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V4__Create_permission_tables.sql deleted file mode 100644 index 99e82c0..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V4__Create_permission_tables.sql +++ /dev/null @@ -1,104 +0,0 @@ --- Novalon管理系统权限功能数据库迁移脚本 --- 版本: V4 --- 描述: 创建权限管理相关表结构 - --- 权限表 -CREATE TABLE IF NOT EXISTS sys_permission ( - id BIGSERIAL PRIMARY KEY, - permission_name VARCHAR(100) NOT NULL, - permission_code VARCHAR(100) NOT NULL UNIQUE, - resource VARCHAR(200) NOT NULL, - action VARCHAR(50) NOT NULL, - description VARCHAR(500), - status INTEGER DEFAULT 1, - create_by VARCHAR(50), - update_by VARCHAR(50), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP -); - --- 角色权限关联表 -CREATE TABLE IF NOT EXISTS sys_role_permission ( - id BIGSERIAL PRIMARY KEY, - role_id BIGINT NOT NULL, - permission_id BIGINT NOT NULL, - create_by VARCHAR(50), - update_by VARCHAR(50), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - FOREIGN KEY (role_id) REFERENCES sys_role(id) ON DELETE CASCADE, - FOREIGN KEY (permission_id) REFERENCES sys_permission(id) ON DELETE CASCADE, - UNIQUE (role_id, permission_id) -); - --- 表注释 -COMMENT ON TABLE sys_permission IS '系统权限表'; -COMMENT ON COLUMN sys_permission.id IS '主键ID'; -COMMENT ON COLUMN sys_permission.permission_name IS '权限名称'; -COMMENT ON COLUMN sys_permission.permission_code IS '权限编码'; -COMMENT ON COLUMN sys_permission.resource IS '资源路径'; -COMMENT ON COLUMN sys_permission.action IS '操作类型'; -COMMENT ON COLUMN sys_permission.description IS '权限描述'; -COMMENT ON COLUMN sys_permission.status IS '状态:0-禁用,1-正常'; -COMMENT ON COLUMN sys_permission.create_by IS '创建者'; -COMMENT ON COLUMN sys_permission.update_by IS '更新者'; -COMMENT ON COLUMN sys_permission.created_at IS '创建时间'; -COMMENT ON COLUMN sys_permission.updated_at IS '更新时间'; -COMMENT ON COLUMN sys_permission.deleted_at IS '删除时间'; - -COMMENT ON TABLE sys_role_permission IS '角色权限关联表'; -COMMENT ON COLUMN sys_role_permission.id IS '主键ID'; -COMMENT ON COLUMN sys_role_permission.role_id IS '角色ID'; -COMMENT ON COLUMN sys_role_permission.permission_id IS '权限ID'; -COMMENT ON COLUMN sys_role_permission.create_by IS '创建者'; -COMMENT ON COLUMN sys_role_permission.update_by IS '更新者'; -COMMENT ON COLUMN sys_role_permission.created_at IS '创建时间'; -COMMENT ON COLUMN sys_role_permission.updated_at IS '更新时间'; - --- 创建索引 -CREATE INDEX IF NOT EXISTS idx_permission_code ON sys_permission(permission_code); -CREATE INDEX IF NOT EXISTS idx_permission_resource ON sys_permission(resource); -CREATE INDEX IF NOT EXISTS idx_permission_status ON sys_permission(status); -CREATE INDEX IF NOT EXISTS idx_role_permission_role_id ON sys_role_permission(role_id); -CREATE INDEX IF NOT EXISTS idx_role_permission_permission_id ON sys_role_permission(permission_id); - --- 插入初始权限数据 -INSERT INTO sys_permission (permission_name, permission_code, resource, action, description, status) VALUES -('用户查看', 'system:user:view', '/api/users', 'GET', '查看用户列表', 1), -('用户创建', 'system:user:create', '/api/users', 'POST', '创建用户', 1), -('用户编辑', 'system:user:edit', '/api/users', 'PUT', '编辑用户', 1), -('用户删除', 'system:user:delete', '/api/users', 'DELETE', '删除用户', 1), -('角色查看', 'system:role:view', '/api/roles', 'GET', '查看角色列表', 1), -('角色创建', 'system:role:create', '/api/roles', 'POST', '创建角色', 1), -('角色编辑', 'system:role:edit', '/api/roles', 'PUT', '编辑角色', 1), -('角色删除', 'system:role:delete', '/api/roles', 'DELETE', '删除角色', 1), -('角色分配权限', 'system:role:assign', '/api/roles/*/permissions', 'POST', '为角色分配权限', 1), -('权限查看', 'system:permission:view', '/api/permissions', 'GET', '查看权限列表', 1), -('权限创建', 'system:permission:create', '/api/permissions', 'POST', '创建权限', 1), -('权限编辑', 'system:permission:edit', '/api/permissions', 'PUT', '编辑权限', 1), -('权限删除', 'system:permission:delete', '/api/permissions', 'DELETE', '删除权限', 1), -('菜单查看', 'system:menu:view', '/api/menus', 'GET', '查看菜单列表', 1), -('菜单创建', 'system:menu:create', '/api/menus', 'POST', '创建菜单', 1), -('菜单编辑', 'system:menu:edit', '/api/menus', 'PUT', '编辑菜单', 1), -('菜单删除', 'system:menu:delete', '/api/menus', 'DELETE', '删除菜单', 1), -('字典查看', 'system:dict:view', '/api/dict', 'GET', '查看字典列表', 1), -('字典创建', 'system:dict:create', '/api/dict', 'POST', '创建字典', 1), -('字典编辑', 'system:dict:edit', '/api/dict', 'PUT', '编辑字典', 1), -('字典删除', 'system:dict:delete', '/api/dict', 'DELETE', '删除字典', 1), -('配置查看', 'system:config:view', '/api/config', 'GET', '查看系统配置', 1), -('配置创建', 'system:config:create', '/api/config', 'POST', '创建系统配置', 1), -('配置编辑', 'system:config:edit', '/api/config', 'PUT', '编辑系统配置', 1), -('配置删除', 'system:config:delete', '/api/config', 'DELETE', '删除系统配置', 1), -('日志查看', 'system:log:view', '/api/logs', 'GET', '查看日志', 1), -('文件上传', 'system:file:upload', '/api/files/upload', 'POST', '上传文件', 1), -('文件下载', 'system:file:download', '/api/files/download', 'GET', '下载文件', 1), -('文件删除', 'system:file:delete', '/api/files', 'DELETE', '删除文件', 1), -('公告查看', 'system:notice:view', '/api/notices', 'GET', '查看公告', 1), -('公告创建', 'system:notice:create', '/api/notices', 'POST', '创建公告', 1), -('公告编辑', 'system:notice:edit', '/api/notices', 'PUT', '编辑公告', 1), -('公告删除', 'system:notice:delete', '/api/notices', 'DELETE', '删除公告', 1); - --- 为管理员角色分配所有权限 -INSERT INTO sys_role_permission (role_id, permission_id) -SELECT 1, id FROM sys_permission WHERE status = 1; \ No newline at end of file diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V9__Grant_permissions.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V4__Grant_permissions.sql similarity index 97% rename from gym-manage-api/manage-db/src/main/resources/db/migration/V9__Grant_permissions.sql rename to gym-manage-api/manage-db/src/main/resources/db/migration/V4__Grant_permissions.sql index 268dc90..f20aa1f 100644 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V9__Grant_permissions.sql +++ b/gym-manage-api/manage-db/src/main/resources/db/migration/V4__Grant_permissions.sql @@ -1,5 +1,5 @@ -- Novalon管理系统权限授予脚本 --- 版本: V9 +-- 版本: V4 -- 描述: 为novalon用户授予所有表的访问权限 -- 授予所有表的SELECT, INSERT, UPDATE, DELETE权限 diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V6__Init_menu_data.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V6__Init_menu_data.sql deleted file mode 100644 index d283adb..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V6__Init_menu_data.sql +++ /dev/null @@ -1,90 +0,0 @@ --- 系统菜单初始化数据 --- 版本: V6 --- 描述: 初始化系统菜单数据 - --- 一级菜单 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(1, 0, '系统管理', 1, 'M', NULL, NULL, 1, NOW(), NOW()), -(2, 0, '审计日志', 2, 'M', NULL, NULL, 1, NOW(), NOW()), -(3, 0, '系统监控', 3, 'M', NULL, NULL, 1, NOW(), NOW()); - --- 系统管理子菜单 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(11, 1, '用户管理', 1, 'C', 'system:user:list', 'system/user/index', 1, NOW(), NOW()), -(12, 1, '角色管理', 2, 'C', 'system:role:list', 'system/role/index', 1, NOW(), NOW()), -(13, 1, '菜单管理', 3, 'C', 'system:menu:list', 'system/menu/index', 1, NOW(), NOW()), -(14, 1, '部门管理', 4, 'C', 'system:dept:list', 'system/dept/index', 1, NOW(), NOW()), -(15, 1, '字典管理', 5, 'C', 'system:dict:list', 'system/dict/index', 1, NOW(), NOW()), -(16, 1, '参数管理', 6, 'C', 'system:config:list', 'system/config/index', 1, NOW(), NOW()), -(17, 1, '通知公告', 7, 'C', 'system:notice:list', 'system/notice/index', 1, NOW(), NOW()), -(18, 1, '文件管理', 8, 'C', 'system:file:list', 'system/file/index', 1, NOW(), NOW()); - --- 用户管理按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(111, 11, '用户查询', 1, 'F', 'system:user:query', NULL, 1, NOW(), NOW()), -(112, 11, '用户新增', 2, 'F', 'system:user:add', NULL, 1, NOW(), NOW()), -(113, 11, '用户修改', 3, 'F', 'system:user:edit', NULL, 1, NOW(), NOW()), -(114, 11, '用户删除', 4, 'F', 'system:user:remove', NULL, 1, NOW(), NOW()), -(115, 11, '用户导出', 5, 'F', 'system:user:export', NULL, 1, NOW(), NOW()), -(116, 11, '用户导入', 6, 'F', 'system:user:import', NULL, 1, NOW(), NOW()), -(117, 11, '重置密码', 7, 'F', 'system:user:resetPwd', NULL, 1, NOW(), NOW()); - --- 角色管理按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(121, 12, '角色查询', 1, 'F', 'system:role:query', NULL, 1, NOW(), NOW()), -(122, 12, '角色新增', 2, 'F', 'system:role:add', NULL, 1, NOW(), NOW()), -(123, 12, '角色修改', 3, 'F', 'system:role:edit', NULL, 1, NOW(), NOW()), -(124, 12, '角色删除', 4, 'F', 'system:role:remove', NULL, 1, NOW(), NOW()), -(125, 12, '角色导出', 5, 'F', 'system:role:export', NULL, 1, NOW(), NOW()); - --- 菜单管理按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(131, 13, '菜单查询', 1, 'F', 'system:menu:query', NULL, 1, NOW(), NOW()), -(132, 13, '菜单新增', 2, 'F', 'system:menu:add', NULL, 1, NOW(), NOW()), -(133, 13, '菜单修改', 3, 'F', 'system:menu:edit', NULL, 1, NOW(), NOW()), -(134, 13, '菜单删除', 4, 'F', 'system:menu:remove', NULL, 1, NOW(), NOW()); - --- 审计日志子菜单 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(21, 2, '操作日志', 1, 'C', 'audit:operation:list', 'audit/operation/index', 1, NOW(), NOW()), -(22, 2, '登录日志', 2, 'C', 'audit:login:list', 'audit/login/index', 1, NOW(), NOW()), -(23, 2, '异常日志', 3, 'C', 'audit:exception:list', 'audit/exception/index', 1, NOW(), NOW()); - --- 操作日志按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(211, 21, '操作查询', 1, 'F', 'audit:operation:query', NULL, 1, NOW(), NOW()), -(212, 21, '操作删除', 2, 'F', 'audit:operation:remove', NULL, 1, NOW(), NOW()), -(213, 21, '操作导出', 3, 'F', 'audit:operation:export', NULL, 1, NOW(), NOW()); - --- 登录日志按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(221, 22, '登录查询', 1, 'F', 'audit:login:query', NULL, 1, NOW(), NOW()), -(222, 22, '登录删除', 2, 'F', 'audit:login:remove', NULL, 1, NOW(), NOW()), -(223, 22, '登录导出', 3, 'F', 'audit:login:export', NULL, 1, NOW(), NOW()); - --- 异常日志按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(231, 23, '异常查询', 1, 'F', 'audit:exception:query', NULL, 1, NOW(), NOW()), -(232, 23, '异常删除', 2, 'F', 'audit:exception:remove', NULL, 1, NOW(), NOW()), -(233, 23, '异常导出', 3, 'F', 'audit:exception:export', NULL, 1, NOW(), NOW()); - --- 系统监控子菜单 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(31, 3, '在线用户', 1, 'C', 'monitor:online:list', 'monitor/online/index', 1, NOW(), NOW()), -(32, 3, '定时任务', 2, 'C', 'monitor:job:list', 'monitor/job/index', 1, NOW(), NOW()), -(33, 3, '数据监控', 3, 'C', 'monitor:data:list', 'monitor/data/index', 1, NOW(), NOW()), -(34, 3, '服务监控', 4, 'C', 'monitor:server:list', 'monitor/server/index', 1, NOW(), NOW()), -(35, 3, '缓存监控', 5, 'C', 'monitor:cache:list', 'monitor/cache/index', 1, NOW(), NOW()); - --- 在线用户按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(311, 31, '在线查询', 1, 'F', 'monitor:online:query', NULL, 1, NOW(), NOW()), -(312, 31, '在线强退', 2, 'F', 'monitor:online:forceLogout', NULL, 1, NOW(), NOW()); - --- 定时任务按钮权限 -INSERT INTO sys_menu (id, parent_id, menu_name, order_num, menu_type, perms, component, status, created_at, updated_at) VALUES -(321, 32, '任务查询', 1, 'F', 'monitor:job:query', NULL, 1, NOW(), NOW()), -(322, 32, '任务新增', 2, 'F', 'monitor:job:add', NULL, 1, NOW(), NOW()), -(323, 32, '任务修改', 3, 'F', 'monitor:job:edit', NULL, 1, NOW(), NOW()), -(324, 32, '任务删除', 4, 'F', 'monitor:job:remove', NULL, 1, NOW(), NOW()), -(325, 32, '任务执行', 5, 'F', 'monitor:job:execute', NULL, 1, NOW(), NOW()); \ No newline at end of file diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V7__Add_audit_log_table.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V7__Add_audit_log_table.sql deleted file mode 100644 index 59ab06d..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V7__Add_audit_log_table.sql +++ /dev/null @@ -1,40 +0,0 @@ --- Novalon管理系统审计日志表 --- 版本: V7 --- 描述: 创建审计日志表,记录数据变更前后的完整对比 -CREATE TABLE IF NOT EXISTS audit_log ( - id BIGSERIAL PRIMARY KEY, - entity_type VARCHAR(100) NOT NULL, - entity_id BIGINT, - operation_type VARCHAR(20) NOT NULL, - operator VARCHAR(100), - operation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - before_data JSONB, - after_data JSONB, - changed_fields TEXT [], - ip_address VARCHAR(50), - user_agent TEXT, - description TEXT, - create_by VARCHAR(50), - update_by VARCHAR(50), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP -); -CREATE INDEX idx_audit_log_entity_type ON audit_log(entity_type); -CREATE INDEX idx_audit_log_entity_id ON audit_log(entity_id); -CREATE INDEX idx_audit_log_operation_type ON audit_log(operation_type); -CREATE INDEX idx_audit_log_operator ON audit_log(operator); -CREATE INDEX idx_audit_log_operation_time ON audit_log(operation_time); -CREATE INDEX idx_audit_log_entity ON audit_log(entity_type, entity_id); -COMMENT ON TABLE audit_log IS '审计日志表'; -COMMENT ON COLUMN audit_log.id IS '主键ID'; -COMMENT ON COLUMN audit_log.entity_type IS '实体类型(如User, Role等)'; -COMMENT ON COLUMN audit_log.entity_id IS '实体ID'; -COMMENT ON COLUMN audit_log.operation_type IS '操作类型(CREATE, UPDATE, DELETE)'; -COMMENT ON COLUMN audit_log.operator IS '操作人'; -COMMENT ON COLUMN audit_log.operation_time IS '操作时间'; -COMMENT ON COLUMN audit_log.before_data IS '变更前数据(JSON格式)'; -COMMENT ON COLUMN audit_log.after_data IS '变更后数据(JSON格式)'; -COMMENT ON COLUMN audit_log.changed_fields IS '变更字段列表'; -COMMENT ON COLUMN audit_log.ip_address IS 'IP地址';COMMENT ON COLUMN audit_log.description IS '操作描述'; -COMMENT ON COLUMN audit_log.created_at IS '记录创建时间'; diff --git a/gym-manage-api/manage-db/src/main/resources/db/migration/V8__Create_audit_log_archive_table.sql b/gym-manage-api/manage-db/src/main/resources/db/migration/V8__Create_audit_log_archive_table.sql deleted file mode 100644 index 1ed2236..0000000 --- a/gym-manage-api/manage-db/src/main/resources/db/migration/V8__Create_audit_log_archive_table.sql +++ /dev/null @@ -1,43 +0,0 @@ --- Novalon管理系统审计日志归档表 --- 版本: V8 --- 描述: 创建审计日志归档表,用于存储历史审计日志 - -CREATE TABLE IF NOT EXISTS audit_log_archive ( - id BIGSERIAL PRIMARY KEY, - entity_type VARCHAR(100) NOT NULL, - entity_id BIGINT, - operation_type VARCHAR(20) NOT NULL, - operator VARCHAR(100), - operation_time TIMESTAMP, - before_data JSONB, - after_data JSONB, - changed_fields TEXT[], - ip_address VARCHAR(50), - user_agent TEXT, - description TEXT, - created_at TIMESTAMP, - archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); - -CREATE INDEX idx_audit_log_archive_entity_type ON audit_log_archive(entity_type); -CREATE INDEX idx_audit_log_archive_entity_id ON audit_log_archive(entity_id); -CREATE INDEX idx_audit_log_archive_operation_type ON audit_log_archive(operation_type); -CREATE INDEX idx_audit_log_archive_operator ON audit_log_archive(operator); -CREATE INDEX idx_audit_log_archive_operation_time ON audit_log_archive(operation_time); -CREATE INDEX idx_audit_log_archive_archived_at ON audit_log_archive(archived_at); - -COMMENT ON TABLE audit_log_archive IS '审计日志归档表'; -COMMENT ON COLUMN audit_log_archive.id IS '主键ID'; -COMMENT ON COLUMN audit_log_archive.entity_type IS '实体类型(如User, Role等)'; -COMMENT ON COLUMN audit_log_archive.entity_id IS '实体ID'; -COMMENT ON COLUMN audit_log_archive.operation_type IS '操作类型(CREATE, UPDATE, DELETE)'; -COMMENT ON COLUMN audit_log_archive.operator IS '操作人'; -COMMENT ON COLUMN audit_log_archive.operation_time IS '操作时间'; -COMMENT ON COLUMN audit_log_archive.before_data IS '变更前数据(JSON格式)'; -COMMENT ON COLUMN audit_log_archive.after_data IS '变更后数据(JSON格式)'; -COMMENT ON COLUMN audit_log_archive.changed_fields IS '变更字段列表'; -COMMENT ON COLUMN audit_log_archive.ip_address IS 'IP地址'; -COMMENT ON COLUMN audit_log_archive.user_agent IS '用户代理'; -COMMENT ON COLUMN audit_log_archive.description IS '操作描述'; -COMMENT ON COLUMN audit_log_archive.created_at IS '记录创建时间'; -COMMENT ON COLUMN audit_log_archive.archived_at IS '归档时间'; -- 2.52.0