|
|
@@ -0,0 +1,176 @@
|
|
|
+-- ============================================================
|
|
|
+-- 投研平台后端 · 数据库初始化脚本(SQLite)
|
|
|
+-- ============================================================
|
|
|
+-- 适用:Spring Boot 2.7 + Java 8 + SQLite (data/ir.db)
|
|
|
+-- 用法:执行一次本脚本即可完成建表 + 种子数据灌入。
|
|
|
+-- sqlite3 data/ir.db < sql/init.sql
|
|
|
+-- 或:在 sqlite3 交互终端里 .read sql/init.sql
|
|
|
+-- 幂等:所有 DDL/DML 使用 IF NOT EXISTS / OR IGNORE,重复执行安全。
|
|
|
+-- 默认管理员:admin / admin123(BCrypt 哈希见 sys_user 插入行)
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+PRAGMA foreign_keys = ON;
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 1. 建表
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- 演示用户表(供 /api/datasource/* 演示接口使用)
|
|
|
+CREATE TABLE IF NOT EXISTS demo_user (
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
+ name TEXT NOT NULL,
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
+);
|
|
|
+
|
|
|
+-- 系统用户表
|
|
|
+CREATE TABLE IF NOT EXISTS sys_user (
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
+ username TEXT NOT NULL UNIQUE,
|
|
|
+ password TEXT NOT NULL, -- BCrypt 哈希
|
|
|
+ nickname TEXT,
|
|
|
+ enabled INTEGER NOT NULL DEFAULT 1,
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
+);
|
|
|
+
|
|
|
+-- 角色表
|
|
|
+CREATE TABLE IF NOT EXISTS sys_role (
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
+ code TEXT NOT NULL UNIQUE,
|
|
|
+ name TEXT NOT NULL,
|
|
|
+ description TEXT,
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
+);
|
|
|
+
|
|
|
+-- 权限点表(接口权限,与菜单权限解耦)
|
|
|
+CREATE TABLE IF NOT EXISTS sys_permission (
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
+ code TEXT NOT NULL UNIQUE,
|
|
|
+ name TEXT NOT NULL,
|
|
|
+ description TEXT,
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
+);
|
|
|
+
|
|
|
+-- 用户-角色关联
|
|
|
+CREATE TABLE IF NOT EXISTS sys_user_role (
|
|
|
+ user_id INTEGER NOT NULL,
|
|
|
+ role_id INTEGER NOT NULL,
|
|
|
+ PRIMARY KEY (user_id, role_id)
|
|
|
+);
|
|
|
+
|
|
|
+-- 角色-权限关联
|
|
|
+CREATE TABLE IF NOT EXISTS sys_role_permission (
|
|
|
+ role_id INTEGER NOT NULL,
|
|
|
+ permission_id INTEGER NOT NULL,
|
|
|
+ PRIMARY KEY (role_id, permission_id)
|
|
|
+);
|
|
|
+
|
|
|
+-- 菜单表(独立菜单权限体系)
|
|
|
+CREATE TABLE IF NOT EXISTS sys_menu (
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
+ parent_id INTEGER, -- NULL = 顶级目录
|
|
|
+ name TEXT NOT NULL,
|
|
|
+ type TEXT NOT NULL DEFAULT 'menu', -- dir=目录 / menu=菜单
|
|
|
+ route TEXT, -- 前端路由 path
|
|
|
+ component TEXT, -- 前端组件路径
|
|
|
+ icon TEXT, -- 菜单图标(Element Plus)
|
|
|
+ sort INTEGER DEFAULT 0, -- 排序号(升序)
|
|
|
+ visible INTEGER DEFAULT 1, -- 是否可见
|
|
|
+ status INTEGER DEFAULT 1, -- 是否启用
|
|
|
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
+);
|
|
|
+
|
|
|
+-- 角色-菜单关联
|
|
|
+CREATE TABLE IF NOT EXISTS sys_role_menu (
|
|
|
+ role_id INTEGER NOT NULL,
|
|
|
+ menu_id INTEGER NOT NULL,
|
|
|
+ PRIMARY KEY (role_id, menu_id)
|
|
|
+);
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 2. 种子数据:角色
|
|
|
+-- ============================================================
|
|
|
+INSERT OR IGNORE INTO sys_role(id, code, name, description) VALUES
|
|
|
+ (1, 'ADMIN', '超级管理员', '系统内置,拥有全部权限'),
|
|
|
+ (2, 'USER', '普通用户', '系统内置,默认用户角色');
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 3. 种子数据:权限点
|
|
|
+-- ============================================================
|
|
|
+INSERT OR IGNORE INTO sys_permission(id, code, name, description) VALUES
|
|
|
+ (1, 'user:list', 'user:list', NULL),
|
|
|
+ (2, 'user:create', 'user:create', NULL),
|
|
|
+ (3, 'user:update', 'user:update', NULL),
|
|
|
+ (4, 'user:delete', 'user:delete', NULL),
|
|
|
+ (5, 'role:list', 'role:list', NULL),
|
|
|
+ (6, 'role:create', 'role:create', NULL),
|
|
|
+ (7, 'role:update', 'role:update', NULL),
|
|
|
+ (8, 'role:delete', 'role:delete', NULL),
|
|
|
+ (9, 'role:assign', 'role:assign', NULL),
|
|
|
+ (10, 'permission:list', 'permission:list', NULL),
|
|
|
+ (11, 'permission:create','permission:create',NULL),
|
|
|
+ (12, 'permission:delete','permission:delete',NULL),
|
|
|
+ (13, 'data:query', 'data:query', NULL),
|
|
|
+ (14, 'data:write', 'data:write', NULL);
|
|
|
+
|
|
|
+-- ADMIN 拥有全部权限
|
|
|
+INSERT OR IGNORE INTO sys_role_permission(role_id, permission_id)
|
|
|
+SELECT 1, id FROM sys_permission;
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 4. 种子数据:默认管理员账号
|
|
|
+-- ============================================================
|
|
|
+-- 密码:admin123(BCrypt $2a$10$W6qORgtPvZnIj5KMJj0GZu3fYtAqgOUjAl6vQy7wt4kFeYVPVkwti)
|
|
|
+-- 首次部署后请尽快通过 UPDATE sys_user SET password=? WHERE username='admin' 修改。
|
|
|
+INSERT OR IGNORE INTO sys_user(id, username, password, nickname, enabled) VALUES
|
|
|
+ (1, 'admin', '$2a$10$W6qORgtPvZnIj5KMJj0GZu3fYtAqgOUjAl6vQy7wt4kFeYVPVkwti', '管理员', 1);
|
|
|
+
|
|
|
+-- 管理员授予 ADMIN 角色
|
|
|
+INSERT OR IGNORE INTO sys_user_role(user_id, role_id) VALUES (1, 1);
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 5. 种子数据:菜单(顶级 + 二级)
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- 5.1 通用顶级(工作台 / 系统管理 / 数据源演示)
|
|
|
+INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
|
|
|
+ (1, NULL, '工作台', 'menu', '/dashboard', 'dashboard/index', 'HomeFilled', 1),
|
|
|
+ (2, NULL, '系统管理', 'dir', NULL, NULL, 'Setting', 1),
|
|
|
+ (7, NULL, '数据源演示', 'menu', '/datasource', 'datasource/index', 'Coin', 2);
|
|
|
+
|
|
|
+-- 5.2 系统管理 → 子菜单
|
|
|
+INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
|
|
|
+ (3, 2, '用户管理', 'menu', '/system/user', 'system/user/index', 'User', 1),
|
|
|
+ (4, 2, '角色管理', 'menu', '/system/role', 'system/role/index', 'Avatar', 2),
|
|
|
+ (5, 2, '权限管理', 'menu', '/system/permission', 'system/permission/index', 'Key', 3),
|
|
|
+ (6, 2, '菜单管理', 'menu', '/system/menu', 'system/menu/index', 'Menu', 4);
|
|
|
+
|
|
|
+-- 5.3 投研业务 6 个一级目录
|
|
|
+INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
|
|
|
+ (8, NULL, '基本面', 'dir', NULL, NULL, 'TrendCharts', 3),
|
|
|
+ (16, NULL, '政策面', 'dir', NULL, NULL, 'Document', 4),
|
|
|
+ (17, NULL, '资金面', 'dir', NULL, NULL, 'Money', 5),
|
|
|
+ (18, NULL, '债市分析', 'dir', NULL, NULL, 'Tickets', 6),
|
|
|
+ (19, NULL, '权益分析', 'dir', NULL, NULL, 'DataLine', 7),
|
|
|
+ (20, NULL, '多资产', 'dir', NULL, NULL, 'Grid', 8);
|
|
|
+
|
|
|
+-- 5.4 基本面 → 7 个二级菜单
|
|
|
+INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
|
|
|
+ (9, 8, 'GDP', 'menu', '/fundamental/gdp', 'fundamental/gdp/index', 'DataAnalysis', 1),
|
|
|
+ (10, 8, '投资', 'menu', '/fundamental/investment', 'fundamental/investment/index', 'Coin', 2),
|
|
|
+ (11, 8, '出口', 'menu', '/fundamental/export', 'fundamental/export/index', 'Promotion', 3),
|
|
|
+ (12, 8, '消费', 'menu', '/fundamental/consumption', 'fundamental/consumption/index', 'ShoppingCart', 4),
|
|
|
+ (13, 8, '通胀', 'menu', '/fundamental/inflation', 'fundamental/inflation/index', 'Warning', 5),
|
|
|
+ (14, 8, '供给', 'menu', '/fundamental/supply', 'fundamental/supply/index', 'Box', 6),
|
|
|
+ (15, 8, '景气度', 'menu', '/fundamental/prosperity', 'fundamental/prosperity/index', 'Odometer', 7);
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 6. 菜单授权:ADMIN 拥有全部菜单
|
|
|
+-- ============================================================
|
|
|
+INSERT OR IGNORE INTO sys_role_menu(role_id, menu_id)
|
|
|
+SELECT 1, id FROM sys_menu;
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 完成
|
|
|
+-- ============================================================
|
|
|
+-- 默认管理员:admin / admin123
|
|
|
+-- 默认用户:注册即可,自动授予 USER 角色
|