init.sql 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. -- ============================================================
  2. -- 投研平台后端 · 数据库初始化脚本(SQLite)
  3. -- ============================================================
  4. -- 适用:Spring Boot 2.7 + Java 8 + SQLite (data/ir.db)
  5. -- 用法:执行一次本脚本即可完成建表 + 种子数据灌入。
  6. -- sqlite3 data/ir.db < sql/init.sql
  7. -- 或:在 sqlite3 交互终端里 .read sql/init.sql
  8. -- 幂等:所有 DDL/DML 使用 IF NOT EXISTS / OR IGNORE,重复执行安全。
  9. -- 默认管理员:admin / admin123(BCrypt 哈希见 sys_user 插入行)
  10. -- ============================================================
  11. PRAGMA foreign_keys = ON;
  12. -- ============================================================
  13. -- 1. 建表
  14. -- ============================================================
  15. -- 演示用户表(供 /api/datasource/* 演示接口使用)
  16. CREATE TABLE IF NOT EXISTS demo_user (
  17. id INTEGER PRIMARY KEY AUTOINCREMENT,
  18. name TEXT NOT NULL,
  19. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  20. );
  21. -- 系统用户表
  22. CREATE TABLE IF NOT EXISTS sys_user (
  23. id INTEGER PRIMARY KEY AUTOINCREMENT,
  24. username TEXT NOT NULL UNIQUE,
  25. password TEXT NOT NULL, -- BCrypt 哈希
  26. nickname TEXT,
  27. enabled INTEGER NOT NULL DEFAULT 1,
  28. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  29. );
  30. -- 角色表
  31. CREATE TABLE IF NOT EXISTS sys_role (
  32. id INTEGER PRIMARY KEY AUTOINCREMENT,
  33. code TEXT NOT NULL UNIQUE,
  34. name TEXT NOT NULL,
  35. description TEXT,
  36. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  37. );
  38. -- 权限点表(接口权限,与菜单权限解耦)
  39. CREATE TABLE IF NOT EXISTS sys_permission (
  40. id INTEGER PRIMARY KEY AUTOINCREMENT,
  41. code TEXT NOT NULL UNIQUE,
  42. name TEXT NOT NULL,
  43. description TEXT,
  44. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  45. );
  46. -- 用户-角色关联
  47. CREATE TABLE IF NOT EXISTS sys_user_role (
  48. user_id INTEGER NOT NULL,
  49. role_id INTEGER NOT NULL,
  50. PRIMARY KEY (user_id, role_id)
  51. );
  52. -- 角色-权限关联
  53. CREATE TABLE IF NOT EXISTS sys_role_permission (
  54. role_id INTEGER NOT NULL,
  55. permission_id INTEGER NOT NULL,
  56. PRIMARY KEY (role_id, permission_id)
  57. );
  58. -- 菜单表(独立菜单权限体系)
  59. CREATE TABLE IF NOT EXISTS sys_menu (
  60. id INTEGER PRIMARY KEY AUTOINCREMENT,
  61. parent_id INTEGER, -- NULL = 顶级目录
  62. name TEXT NOT NULL,
  63. type TEXT NOT NULL DEFAULT 'menu', -- dir=目录 / menu=菜单
  64. route TEXT, -- 前端路由 path
  65. component TEXT, -- 前端组件路径
  66. icon TEXT, -- 菜单图标(Element Plus)
  67. sort INTEGER DEFAULT 0, -- 排序号(升序)
  68. visible INTEGER DEFAULT 1, -- 是否可见
  69. status INTEGER DEFAULT 1, -- 是否启用
  70. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  71. );
  72. -- 角色-菜单关联
  73. CREATE TABLE IF NOT EXISTS sys_role_menu (
  74. role_id INTEGER NOT NULL,
  75. menu_id INTEGER NOT NULL,
  76. PRIMARY KEY (role_id, menu_id)
  77. );
  78. -- ============================================================
  79. -- 2. 种子数据:角色
  80. -- ============================================================
  81. INSERT OR IGNORE INTO sys_role(id, code, name, description) VALUES
  82. (1, 'ADMIN', '超级管理员', '系统内置,拥有全部权限'),
  83. (2, 'USER', '普通用户', '系统内置,默认用户角色');
  84. -- ============================================================
  85. -- 3. 种子数据:权限点
  86. -- ============================================================
  87. INSERT OR IGNORE INTO sys_permission(id, code, name, description) VALUES
  88. (1, 'user:list', 'user:list', NULL),
  89. (2, 'user:create', 'user:create', NULL),
  90. (3, 'user:update', 'user:update', NULL),
  91. (4, 'user:delete', 'user:delete', NULL),
  92. (5, 'role:list', 'role:list', NULL),
  93. (6, 'role:create', 'role:create', NULL),
  94. (7, 'role:update', 'role:update', NULL),
  95. (8, 'role:delete', 'role:delete', NULL),
  96. (9, 'role:assign', 'role:assign', NULL),
  97. (10, 'permission:list', 'permission:list', NULL),
  98. (11, 'permission:create','permission:create',NULL),
  99. (12, 'permission:delete','permission:delete',NULL),
  100. (13, 'data:query', 'data:query', NULL),
  101. (14, 'data:write', 'data:write', NULL);
  102. -- ADMIN 拥有全部权限
  103. INSERT OR IGNORE INTO sys_role_permission(role_id, permission_id)
  104. SELECT 1, id FROM sys_permission;
  105. -- ============================================================
  106. -- 4. 种子数据:默认管理员账号
  107. -- ============================================================
  108. -- 密码:admin123(BCrypt $2a$10$W6qORgtPvZnIj5KMJj0GZu3fYtAqgOUjAl6vQy7wt4kFeYVPVkwti)
  109. -- 首次部署后请尽快通过 UPDATE sys_user SET password=? WHERE username='admin' 修改。
  110. INSERT OR IGNORE INTO sys_user(id, username, password, nickname, enabled) VALUES
  111. (1, 'admin', '$2a$10$W6qORgtPvZnIj5KMJj0GZu3fYtAqgOUjAl6vQy7wt4kFeYVPVkwti', '管理员', 1);
  112. -- 管理员授予 ADMIN 角色
  113. INSERT OR IGNORE INTO sys_user_role(user_id, role_id) VALUES (1, 1);
  114. -- ============================================================
  115. -- 5. 种子数据:菜单(顶级 + 二级)
  116. -- ============================================================
  117. -- 5.1 通用顶级(工作台 / 系统管理 / 数据源演示)
  118. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  119. (1, NULL, '工作台', 'menu', '/dashboard', 'dashboard/index', 'HomeFilled', 1),
  120. (2, NULL, '系统管理', 'dir', NULL, NULL, 'Setting', 1),
  121. (7, NULL, '数据源演示', 'menu', '/datasource', 'datasource/index', 'Coin', 2);
  122. -- 5.2 系统管理 → 子菜单
  123. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  124. (3, 2, '用户管理', 'menu', '/system/user', 'system/user/index', 'User', 1),
  125. (4, 2, '角色管理', 'menu', '/system/role', 'system/role/index', 'Avatar', 2),
  126. (5, 2, '权限管理', 'menu', '/system/permission', 'system/permission/index', 'Key', 3),
  127. (6, 2, '菜单管理', 'menu', '/system/menu', 'system/menu/index', 'Menu', 4);
  128. -- 5.3 投研业务 6 个一级目录
  129. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  130. (8, NULL, '基本面', 'dir', NULL, NULL, 'TrendCharts', 3),
  131. (16, NULL, '政策面', 'dir', NULL, NULL, 'Document', 4),
  132. (17, NULL, '资金面', 'dir', NULL, NULL, 'Money', 5),
  133. (18, NULL, '债市分析', 'dir', NULL, NULL, 'Tickets', 6),
  134. (19, NULL, '权益分析', 'dir', NULL, NULL, 'DataLine', 7),
  135. (20, NULL, '多资产', 'dir', NULL, NULL, 'Grid', 8);
  136. -- 5.4 基本面 → 7 个二级菜单
  137. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  138. (9, 8, 'GDP', 'menu', '/fundamental/gdp', 'fundamental/gdp/index', 'DataAnalysis', 1),
  139. (10, 8, '投资', 'menu', '/fundamental/investment', 'fundamental/investment/index', 'Coin', 2),
  140. (11, 8, '出口', 'menu', '/fundamental/export', 'fundamental/export/index', 'Promotion', 3),
  141. (12, 8, '消费', 'menu', '/fundamental/consumption', 'fundamental/consumption/index', 'ShoppingCart', 4),
  142. (13, 8, '通胀', 'menu', '/fundamental/inflation', 'fundamental/inflation/index', 'Warning', 5),
  143. (14, 8, '供给', 'menu', '/fundamental/supply', 'fundamental/supply/index', 'Box', 6),
  144. (15, 8, '景气度', 'menu', '/fundamental/prosperity', 'fundamental/prosperity/index', 'Odometer', 7);
  145. -- ============================================================
  146. -- 6. 菜单授权:ADMIN 拥有全部菜单
  147. -- ============================================================
  148. INSERT OR IGNORE INTO sys_role_menu(role_id, menu_id)
  149. SELECT 1, id FROM sys_menu;
  150. -- ============================================================
  151. -- 完成
  152. -- ============================================================
  153. -- 默认管理员:admin / admin123
  154. -- 默认用户:注册即可,自动授予 USER 角色