init.sql 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  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. (15, 'indicator:create', 'indicator:create', NULL),
  103. (16, 'indicator:update', 'indicator:update', NULL),
  104. (17, 'indicator:value:write', 'indicator:value:write', NULL),
  105. (22, 'indicator:delete', 'indicator:delete', NULL),
  106. (18, 'document:create', 'document:create', NULL),
  107. (19, 'document:update', 'document:update', NULL),
  108. (20, 'document:delete', 'document:delete', NULL),
  109. (21, 'document:summary:write', 'document:summary:write', NULL);
  110. -- ADMIN 拥有全部权限
  111. INSERT OR IGNORE INTO sys_role_permission(role_id, permission_id)
  112. SELECT 1, id FROM sys_permission;
  113. -- ============================================================
  114. -- 4. 种子数据:默认管理员账号
  115. -- ============================================================
  116. -- 密码:admin123(BCrypt $2a$10$W6qORgtPvZnIj5KMJj0GZu3fYtAqgOUjAl6vQy7wt4kFeYVPVkwti)
  117. -- 首次部署后请尽快通过 UPDATE sys_user SET password=? WHERE username='admin' 修改。
  118. INSERT OR IGNORE INTO sys_user(id, username, password, nickname, enabled) VALUES
  119. (1, 'admin', '$2a$10$W6qORgtPvZnIj5KMJj0GZu3fYtAqgOUjAl6vQy7wt4kFeYVPVkwti', '管理员', 1);
  120. -- 管理员授予 ADMIN 角色
  121. INSERT OR IGNORE INTO sys_user_role(user_id, role_id) VALUES (1, 1);
  122. -- ============================================================
  123. -- 5. 种子数据:菜单(顶级 + 二级)
  124. -- ============================================================
  125. -- 5.1 通用顶级(工作台 / 系统管理 / 数据源演示)
  126. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  127. -- (1, NULL, '工作台', 'menu', '/dashboard', 'dashboard/index', 'HomeFilled', 1),
  128. (2, NULL, '系统管理', 'dir', NULL, NULL, 'Setting', 9);
  129. -- 数据管理
  130. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  131. (1, NULL, '数据管理', 'dir', NULL, NULL, 'Data', 10);
  132. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  133. (21, 1, '元数据', 'menu', '/data/indicator', 'data/indicator/index', 'Indicator', 1),
  134. (22, 1, '指标数据', 'menu', '/data/value', 'data/value/index', 'Value', 2);
  135. -- 5.2 系统管理 → 子菜单
  136. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  137. (3, 2, '用户管理', 'menu', '/system/user', 'system/user/index', 'User', 1),
  138. (4, 2, '角色管理', 'menu', '/system/role', 'system/role/index', 'Avatar', 2),
  139. (5, 2, '权限管理', 'menu', '/system/permission', 'system/permission/index', 'Key', 3),
  140. (6, 2, '菜单管理', 'menu', '/system/menu', 'system/menu/index', 'Menu', 4);
  141. -- 5.3 投研业务 6 个一级目录
  142. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  143. (8, NULL, '基本面', 'menu', '/fundamental/index', NULL, 'TrendCharts', 3),
  144. (16, NULL, '政策面', 'menu', NULL, NULL, 'Document', 4),
  145. (17, NULL, '资金面', 'menu', NULL, NULL, 'Money', 5),
  146. (18, NULL, '债市分析', 'menu', NULL, NULL, 'Tickets', 6),
  147. (19, NULL, '权益分析', 'menu', NULL, NULL, 'DataLine', 7),
  148. (20, NULL, '多资产', 'menu', NULL, NULL, 'Grid', 8);
  149. -- 5.4 基本面 → 7 个二级菜单
  150. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  151. (9, 8, 'GDP', 'menu', '/fundamental/gdp', 'fundamental/gdp/index', 'DataAnalysis', 1),
  152. (10, 8, '投资', 'menu', '/fundamental/investment', 'fundamental/investment/index', 'Coin', 2),
  153. (11, 8, '出口', 'menu', '/fundamental/export', 'fundamental/export/index', 'Promotion', 3),
  154. (12, 8, '消费', 'menu', '/fundamental/consumption', 'fundamental/consumption/index', 'ShoppingCart', 4),
  155. (13, 8, '通胀', 'menu', '/fundamental/inflation', 'fundamental/inflation/index', 'Warning', 5),
  156. (14, 8, '供给', 'menu', '/fundamental/supply', 'fundamental/supply/index', 'Box', 6),
  157. (15, 8, '景气度', 'menu', '/fundamental/prosperity', 'fundamental/prosperity/index', 'Odometer', 7);
  158. -- 5.5 数据管理 → 文档管理(通用文档上传/维护 API,归属任意 indicator)
  159. INSERT OR IGNORE INTO sys_menu(id, parent_id, name, type, route, component, icon, sort) VALUES
  160. (31, 1, '文档管理', 'menu', '/document/index', 'document/index', 'Notebook', 3);
  161. -- 兼容老数据:把误放在「政策面」下的 id=31 拉回「数据管理」
  162. UPDATE sys_menu SET parent_id = 1, name = '文档管理', route = '/document/index',
  163. component = 'document/index'
  164. WHERE id = 31;
  165. -- 5.6 兼容老数据:把已存在的 policy-doc:* 权限行改名为 document:*(id 18-21)
  166. -- 用 ON CONFLICT 实现 upsert:行不存在则插入,存在则按 id 刷新 code/name/description
  167. INSERT INTO sys_permission(id, code, name, description) VALUES
  168. (18, 'document:create', 'document:create', NULL),
  169. (19, 'document:update', 'document:update', NULL),
  170. (20, 'document:delete', 'document:delete', NULL),
  171. (21, 'document:summary:write', 'document:summary:write', NULL)
  172. ON CONFLICT(id) DO UPDATE SET
  173. code = excluded.code,
  174. name = excluded.name,
  175. description = excluded.description;
  176. -- ============================================================
  177. -- 6. 菜单授权:ADMIN 拥有全部菜单
  178. -- ============================================================
  179. INSERT OR IGNORE INTO sys_role_menu(role_id, menu_id)
  180. SELECT 1, id FROM sys_menu;
  181. -- 兼容已存在的旧数据:补齐「数据管理 / 元数据 / 指标数据」的 component 字段
  182. UPDATE sys_menu SET component = 'data/indicator/index' WHERE id = 21 AND (component IS NULL OR component = '');
  183. UPDATE sys_menu SET component = 'data/value/index' WHERE id = 22 AND (component IS NULL OR component = '');
  184. UPDATE sys_menu SET component = 'system/user/index' WHERE id = 3 AND (component IS NULL OR component = '');
  185. UPDATE sys_menu SET component = 'system/role/index' WHERE id = 4 AND (component IS NULL OR component = '');
  186. UPDATE sys_menu SET component = 'system/permission/index' WHERE id = 5 AND (component IS NULL OR component = '');
  187. UPDATE sys_menu SET component = 'system/menu/index' WHERE id = 6 AND (component IS NULL OR component = '');
  188. -- ============================================================
  189. -- 完成
  190. -- ============================================================
  191. -- 默认管理员:admin / admin123
  192. -- 默认用户:注册即可,自动授予 USER 角色
  193. -- ============================================================
  194. -- 7. 指标元数据表(基本面等投研指标)
  195. -- ============================================================
  196. CREATE TABLE IF NOT EXISTS indicator (
  197. id INTEGER PRIMARY KEY,
  198. category TEXT NOT NULL,
  199. subcategory TEXT,
  200. name TEXT NOT NULL,
  201. region TEXT,
  202. frequency TEXT NOT NULL,
  203. unit TEXT,
  204. wind_code TEXT UNIQUE,
  205. source TEXT,
  206. data_start TEXT,
  207. data_end TEXT,
  208. refreshed_at TEXT,
  209. remark TEXT
  210. );
  211. CREATE TABLE IF NOT EXISTS indicator_value (
  212. id INTEGER PRIMARY KEY AUTOINCREMENT,
  213. indicator_id INTEGER NOT NULL REFERENCES indicator(id) ON DELETE CASCADE,
  214. obs_date TEXT NOT NULL,
  215. value REAL,
  216. UNIQUE(indicator_id, obs_date)
  217. );
  218. CREATE INDEX IF NOT EXISTS idx_indicator_value ON indicator_value(indicator_id, obs_date);
  219. -- ============================================================
  220. -- 8. 政策面/重要会议/产业政策文档表(document + document_summary)
  221. -- 上传/维护的研报类 PDF 元数据;与 indicator(category='政策面'/'重要会议'/'产业政策') 多对一
  222. -- ============================================================
  223. CREATE TABLE IF NOT EXISTS document (
  224. id INTEGER PRIMARY KEY AUTOINCREMENT,
  225. category_id INTEGER NOT NULL REFERENCES indicator(id) ON DELETE CASCADE,
  226. period TEXT NOT NULL, -- 例: '2026Q2' / '2025年' / '2026-07-30'
  227. period_year INTEGER, -- 例: 2026
  228. title TEXT NOT NULL, -- 例: '2026Q2-中国货币政策例会'
  229. file_path TEXT NOT NULL, -- 相对 base-path 的路径,例: 'data/uploads/2.10-货币政策例会/2026Q2-...pdf'
  230. file_size INTEGER, -- 字节
  231. publish_date TEXT, -- 例: '2026-06-28'
  232. page_count INTEGER,
  233. is_latest INTEGER NOT NULL DEFAULT 0, -- 同 category 下最新期标记为 1
  234. sort_order INTEGER NOT NULL DEFAULT 0, -- 列表排序号,升序
  235. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  236. UNIQUE(category_id, period)
  237. );
  238. CREATE INDEX IF NOT EXISTS idx_document_category ON document(category_id, is_latest, sort_order);
  239. CREATE TABLE IF NOT EXISTS document_summary (
  240. document_id INTEGER PRIMARY KEY REFERENCES document(id) ON DELETE CASCADE,
  241. overall_tone TEXT, -- 整体基调
  242. policy_stance TEXT, -- 政策立场
  243. risk_control TEXT, -- 风险防控
  244. key_points_json TEXT, -- JSON 文本,关键观点列表
  245. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  246. );
  247. -- 指标元数据种子(id 固定,便于 API 按 id 路由)
  248. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (1,'GDP','现价GDP增速','中国:GDP:现价:当季同比','中国','季','%','X4608416','Wind','1993-03','2026-06','2026-07-15','同比');
  249. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (2,'GDP','不变价GDP增速','中国:GDP:不变价:当季同比','中国','季','%','M0039354','国家统计局','1992-03','2026-06','2026-08-11','同比');
  250. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (3,'GDP','GDP平减指数','中国:GDP平减指数:当季同比','中国','季','%','C3090828','Wind','1993-03','2026-06','2026-07-15','同比');
  251. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (4,'投资','固定资产投资增速','中国:固定资产投资完成额:累计同比','中国','月','%','M0000273','国家统计局','1992-02','2026-08','2026-09-15','累计同比');
  252. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (5,'投资','地产投资增速','中国:房地产开发投资完成额:累计同比','中国','月','%','S0029657','国家统计局','1999-02','2026-08','2026-09-15','累计同比');
  253. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (6,'投资','基建投资增速','中国:固定资产投资完成额:基础设施建设:累计同比','中国','月','%','F0540563','国家统计局','2004-02','2026-08','2026-09-15','累计同比');
  254. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (7,'投资','制造业投资增速','中国:固定资产投资完成额:制造业:累计同比','中国','月','%','M0000357','国家统计局','2004-02','2026-08','2026-09-15','累计同比');
  255. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (8,'投资','高技术产业投资增速','中国:固定资产投资完成额:高技术产业:累计同比','中国','月','%','M6451397','国家统计局','2015-07','2026-08','2026-09-15','累计同比');
  256. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (9,'出口','出口额及增速','中国:出口金额:当月值','中国','月','亿美元','M0000606','海关总署','1994-08','2026-08','2026-09-18','当月值');
  257. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (10,'出口','出口额及增速','中国:出口金额:当月同比','中国','月','%','M0000607','海关总署','1995-01','2026-08','2026-09-18','当月同比');
  258. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (11,'出口','进口额及增速','中国:进口金额:当月值','中国','月','亿美元','M0000608','海关总署','1994-08','2026-08','2026-09-18','当月值');
  259. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (12,'出口','进口额及增速','中国:进口金额:当月同比','中国','月','%','M0000609','海关总署','1995-01','2026-08','2026-09-18','当月同比');
  260. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (13,'出口','贸易顺差额','中国:贸易差额:累计值','中国','月','亿美元','M0096210','海关总署','1995-01','2026-08','2026-09-18','累计值');
  261. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (14,'出口','海外经济体景气度','美国:ISM:制造业PMI','美国','月',NULL,'G0002323','根据新闻整理','1948-01','2026-08','2026-09-01','');
  262. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (15,'出口','进口额及增速','中国进口集装箱运价指数:综合指数','中国','周','点','S0237842','根据新闻整理','2015-08-28','2026-09-16','2026-09-16','');
  263. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (16,'消费','社会消费品零售总额增速','中国:社会消费品零售总额:当月同比(1-2月合并)','中国','月','%','M0001428','国家统计局','1995-01','2026-08','2026-09-15','当月同比');
  264. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (17,'消费','耐用品消费增速','中国:商品零售额:限额以上单位:家用电器和音像器材类:累计同比','中国','月','%','M0001477','国家统计局','2001-01','2026-08','2026-09-15','累计同比');
  265. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (18,'消费','耐用品消费增速','中国:商品零售额:限额以上单位:家具类:累计同比','中国','月','%','M0001478','国家统计局','2001-01','2026-08','2026-09-15','累计同比');
  266. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (19,'消费','耐用品消费增速','中国:商品零售额:限额以上单位:通讯器材类:累计同比','中国','月','%','M0001482','国家统计局','2001-01','2026-08','2026-09-15','累计同比');
  267. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (20,'消费','耐用品消费增速','中国:商品零售额:限额以上单位:汽车类:累计同比','中国','月','%','M0001483','国家统计局','2001-01','2026-08','2026-09-15','累计同比');
  268. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (21,'消费','城镇调查失业率','中国:城镇调查失业率','中国','月','%','M5650805','国家统计局','2018-01','2026-08','2026-09-15','');
  269. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (22,'消费','城镇居民收入和消费支出','中国:城镇居民人均可支配收入:累计同比','中国','季','%','M0012989','国家统计局','2003-03','2026-06','2026-07-15','累计同比');
  270. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (23,'消费','城镇居民收入和消费支出','中国:城镇居民人均消费支出:累计同比','中国','季','%','M0012992','国家统计局','2003-03','2026-06','2026-07-15','累计同比');
  271. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (24,'通胀','CPI的同环比','中国:CPI:当月同比','中国','月','%','M0000612','国家统计局','1987-01','2026-08','2026-09-09','当月同比');
  272. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (25,'通胀','CPI的同环比','中国:CPI:环比','中国','月','%','M0000705','国家统计局','1995-01','2026-08','2026-09-09','环比');
  273. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (26,'通胀','核心CPI的同环比','中国:CPI:不包括食品和能源(核心CPI):当月同比','中国','月','%','M0085932','国家统计局','2013-01','2026-08','2026-09-09','当月同比');
  274. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (27,'通胀','核心CPI的同环比','中国:CPI:不包括食品和能源(核心CPI):环比','中国','月','%','M0085934','国家统计局','2013-01','2026-08','2026-09-09','环比');
  275. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (28,'通胀','PPI的同环比','中国:PPI:当月同比','中国','月','%','M0001227','国家统计局','1996-10','2026-08','2026-09-09','当月同比');
  276. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (29,'通胀','PPI的同环比','中国:PPI:环比','中国','月','%','M0049160','国家统计局','2002-01','2026-08','2026-09-09','环比');
  277. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (30,'通胀','CPI的同环比','中国:CPI:食品烟酒及在外餐饮:环比','中国','月','%','M0327907','国家统计局','2016-01','2026-08','2026-09-09','环比');
  278. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (31,'通胀','CPI的同环比','中国:CPI:衣着:环比','中国','月','%','M0000708','国家统计局','2001-01','2026-08','2026-09-09','环比');
  279. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (32,'通胀','CPI的同环比','中国:CPI:居住:环比','中国','月','%','M0000713','国家统计局','2001-01','2026-08','2026-09-09','环比');
  280. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (33,'通胀','CPI的同环比','中国:CPI:生活用品及服务:环比','中国','月','%','M0000709','国家统计局','2001-01','2026-08','2026-09-09','环比');
  281. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (34,'通胀','CPI的同环比','中国:CPI:交通和通信:环比','中国','月','%','M0000711','国家统计局','2001-01','2026-08','2026-09-09','环比');
  282. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (35,'通胀','CPI的同环比','中国:CPI:教育文化和娱乐:环比','中国','月','%','M0000712','国家统计局','2001-01','2026-08','2026-09-09','环比');
  283. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (36,'通胀','CPI的同环比','中国:CPI:医疗保健:环比','中国','月','%','M0000710','国家统计局','2001-01','2026-08','2026-09-09','环比');
  284. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (37,'通胀','CPI的同环比','中国:CPI:其他用品和服务:环比','中国','月','%','M0327908','国家统计局','2016-01','2026-08','2026-09-09','环比');
  285. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (38,'供给','工业增加值同环比','中国:工业增加值:规模以上工业企业:当月同比(1-2月合并)','中国','月','%','F3478527','国家统计局','2012-02','2026-08','2026-09-15','当月同比');
  286. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (39,'供给','工业增加值同环比','中国:工业增加值:规模以上工业企业:季调:环比','中国','月','%','M0061571','国家统计局','2011-02','2026-08','2026-09-15','季调环比');
  287. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (40,'供给','工业产能利用率','中国:工业产能利用率:当季值','中国','季','%','M5792266','国家统计局','2013-03','2026-06','2026-07-15','当季值');
  288. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (41,'供给','工业产能利用率','中国:工业产能利用率:累计值','中国','季','%','M5792267','国家统计局','2013-03','2026-06','2026-07-15','累计值');
  289. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (42,'供给','规上工业企业营收、利润累计增速','中国:营业收入:规模以上工业企业:累计同比','中国','月','%','M5767812','国家统计局','2017-02','2026-07','2026-08-27','累计同比');
  290. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (43,'供给','规上工业企业营收、利润累计增速','中国:利润总额:规模以上工业企业:累计同比','中国','月','%','M0000557','国家统计局','1996-02','2026-07','2026-08-27','累计同比');
  291. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (44,'供给','规上工业企业库存增速','中国:产成品存货:规模以上工业企业:同比','中国','月','%','M0000561','国家统计局','1996-02','2026-07','2026-08-27','同比');
  292. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (45,'景气度','EPMI','中国:EPMI','中国','月','%','M5530000','根据新闻整理','2014-01','2026-09','2026-09-20','');
  293. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (46,'景气度','BCI','中国企业经营状况指数(BCI)','中国','月',NULL,'M5786898','长江商学院','2011-09','2026-08','2026-08-21','');
  294. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (47,'景气度','制造业PMI','中国:制造业PMI','中国','月','%','M0017126','国家统计局','2005-01','2026-08','2026-08-31','');
  295. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (48,'GDP','GDP周频-预测','GDP周度预测(MM6)','中国','月','%',NULL,'自研','2019-04-27','2026-09-12','','');
  296. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (49,'GDP','GDP周频-预测','实际GDP增速(MM6)','中国','月','%',NULL,'自研','2019-04-27','2026-06-27','','');
  297. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (50,'通胀','通胀的预测','CPI预测','中国','月','%',NULL,'自研','2025-01-31','2026-12-31','','');
  298. INSERT OR IGNORE INTO indicator (id,category,subcategory,name,region,frequency,unit,wind_code,source,data_start,data_end,refreshed_at,remark) VALUES (51,'通胀','通胀的预测','PPI预测','中国','月','%',NULL,'自研','2025-01-31','2026-12-31','','');
  299. -- 指标时序值种子数据量大(>1万行),独立脚本初始化:
  300. -- sqlite3 data/ir.db < sql/indicator_values_seed.sql
  301. -- 该脚本使用 INSERT OR IGNORE,可重复执行。