智慧水务管理系统 - 精河县供水工程综合管理平台

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. -- =============================================
  2. -- 智慧水务管理系统 - PostgreSQL DDL
  3. -- 版本: V1
  4. -- 描述: 核心业务表建表脚本
  5. -- =============================================
  6. -- ==================== 系统管理 ====================
  7. -- 部门表
  8. CREATE TABLE IF NOT EXISTS sys_dept (
  9. id BIGSERIAL PRIMARY KEY,
  10. parent_id BIGINT,
  11. dept_name VARCHAR(100) NOT NULL,
  12. dept_type VARCHAR(20) NOT NULL DEFAULT 'water_company', -- water_bureau/water_company/ops
  13. sort_order INT DEFAULT 0,
  14. leader VARCHAR(50),
  15. phone VARCHAR(20),
  16. status SMALLINT DEFAULT 1,
  17. deleted SMALLINT DEFAULT 0,
  18. created_at TIMESTAMP DEFAULT NOW(),
  19. updated_at TIMESTAMP DEFAULT NOW()
  20. );
  21. COMMENT ON TABLE sys_dept IS '部门表';
  22. COMMENT ON COLUMN sys_dept.dept_type IS '部门类型: water_bureau(水利局)/water_company(水务公司)/ops(运维单位)';
  23. -- 用户表
  24. CREATE TABLE IF NOT EXISTS sys_user (
  25. id BIGSERIAL PRIMARY KEY,
  26. dept_id BIGINT REFERENCES sys_dept(id),
  27. username VARCHAR(50) UNIQUE NOT NULL,
  28. password VARCHAR(255) NOT NULL,
  29. real_name VARCHAR(50),
  30. nickname VARCHAR(50),
  31. phone VARCHAR(20),
  32. email VARCHAR(100),
  33. avatar VARCHAR(500),
  34. gender SMALLINT DEFAULT 0, -- 0:未知 1:男 2:女
  35. role_type VARCHAR(30) DEFAULT 'operator', -- admin/leader/manager/operator/tech
  36. status SMALLINT DEFAULT 1, -- 0:停用 1:启用
  37. login_ip VARCHAR(50),
  38. login_at TIMESTAMP,
  39. deleted SMALLINT DEFAULT 0,
  40. created_at TIMESTAMP DEFAULT NOW(),
  41. updated_at TIMESTAMP DEFAULT NOW()
  42. );
  43. COMMENT ON TABLE sys_user IS '用户表';
  44. COMMENT ON COLUMN sys_user.role_type IS '角色类型: admin/leader/manager/operator/tech';
  45. -- 角色表
  46. CREATE TABLE IF NOT EXISTS sys_role (
  47. id BIGSERIAL PRIMARY KEY,
  48. role_name VARCHAR(50) UNIQUE NOT NULL,
  49. role_key VARCHAR(50) UNIQUE NOT NULL,
  50. role_sort INT DEFAULT 0,
  51. data_scope VARCHAR(20) DEFAULT 'SELF', -- ALL/DEPT/CUSTOM/SELF
  52. status SMALLINT DEFAULT 1,
  53. remark VARCHAR(500),
  54. deleted SMALLINT DEFAULT 0,
  55. created_at TIMESTAMP DEFAULT NOW(),
  56. updated_at TIMESTAMP DEFAULT NOW()
  57. );
  58. COMMENT ON TABLE sys_role IS '角色表';
  59. COMMENT ON COLUMN sys_role.role_key IS '角色标识: admin/supervisor/biz_manager/field_ops/tech_maintain';
  60. COMMENT ON COLUMN sys_role.data_scope IS '数据权限范围: ALL/DEPT/CUSTOM/SELF';
  61. -- 菜单表
  62. CREATE TABLE IF NOT EXISTS sys_menu (
  63. id BIGSERIAL PRIMARY KEY,
  64. parent_id BIGINT DEFAULT 0,
  65. menu_name VARCHAR(50) NOT NULL,
  66. menu_type CHAR(1) DEFAULT 'M', -- M:目录 C:菜单 F:按钮
  67. path VARCHAR(200),
  68. component VARCHAR(255),
  69. perms VARCHAR(100),
  70. icon VARCHAR(100),
  71. sort_order INT DEFAULT 0,
  72. visible SMALLINT DEFAULT 1,
  73. status SMALLINT DEFAULT 1,
  74. deleted SMALLINT DEFAULT 0,
  75. created_at TIMESTAMP DEFAULT NOW(),
  76. updated_at TIMESTAMP DEFAULT NOW()
  77. );
  78. COMMENT ON TABLE sys_menu IS '菜单表';
  79. -- 角色-菜单关联
  80. CREATE TABLE IF NOT EXISTS sys_role_menu (
  81. role_id BIGINT NOT NULL REFERENCES sys_role(id),
  82. menu_id BIGINT NOT NULL REFERENCES sys_menu(id),
  83. PRIMARY KEY (role_id, menu_id)
  84. );
  85. COMMENT ON TABLE sys_role_menu IS '角色菜单关联表';
  86. -- 用户-角色关联
  87. CREATE TABLE IF NOT EXISTS sys_user_role (
  88. user_id BIGINT NOT NULL REFERENCES sys_user(id),
  89. role_id BIGINT NOT NULL REFERENCES sys_role(id),
  90. PRIMARY KEY (user_id, role_id)
  91. );
  92. COMMENT ON TABLE sys_user_role IS '用户角色关联表';
  93. -- 操作日志表
  94. CREATE TABLE IF NOT EXISTS sys_oper_log (
  95. id BIGSERIAL PRIMARY KEY,
  96. user_id BIGINT,
  97. username VARCHAR(50),
  98. module VARCHAR(50),
  99. operation VARCHAR(50),
  100. method VARCHAR(200),
  101. request_method VARCHAR(10),
  102. request_url VARCHAR(500),
  103. request_params TEXT,
  104. response_result TEXT,
  105. ip VARCHAR(50),
  106. location VARCHAR(100),
  107. duration BIGINT,
  108. status SMALLINT DEFAULT 1,
  109. error_msg TEXT,
  110. created_at TIMESTAMP DEFAULT NOW()
  111. );
  112. COMMENT ON TABLE sys_oper_log IS '操作日志表';
  113. -- 登录日志表
  114. CREATE TABLE IF NOT EXISTS sys_login_log (
  115. id BIGSERIAL PRIMARY KEY,
  116. username VARCHAR(50),
  117. ip VARCHAR(50),
  118. location VARCHAR(100),
  119. browser VARCHAR(100),
  120. os VARCHAR(100),
  121. status SMALLINT DEFAULT 1, -- 0:失败 1:成功
  122. msg VARCHAR(500),
  123. login_at TIMESTAMP DEFAULT NOW()
  124. );
  125. COMMENT ON TABLE sys_login_log IS '登录日志表';
  126. -- ==================== 数据字典 ====================
  127. CREATE TABLE IF NOT EXISTS sys_dict_type (
  128. id BIGSERIAL PRIMARY KEY,
  129. dict_name VARCHAR(100) NOT NULL,
  130. dict_key VARCHAR(100) UNIQUE NOT NULL,
  131. status SMALLINT DEFAULT 1,
  132. remark VARCHAR(500),
  133. created_at TIMESTAMP DEFAULT NOW(),
  134. updated_at TIMESTAMP DEFAULT NOW()
  135. );
  136. COMMENT ON TABLE sys_dict_type IS '字典类型表';
  137. CREATE TABLE IF NOT EXISTS sys_dict_data (
  138. id BIGSERIAL PRIMARY KEY,
  139. dict_type_id BIGINT REFERENCES sys_dict_type(id),
  140. dict_label VARCHAR(100) NOT NULL,
  141. dict_value VARCHAR(100) NOT NULL,
  142. css_class VARCHAR(100),
  143. list_class VARCHAR(100),
  144. sort_order INT DEFAULT 0,
  145. status SMALLINT DEFAULT 1,
  146. remark VARCHAR(500),
  147. created_at TIMESTAMP DEFAULT NOW(),
  148. updated_at TIMESTAMP DEFAULT NOW()
  149. );
  150. COMMENT ON TABLE sys_dict_data IS '字典数据表';
  151. -- ==================== 通知方案 ====================
  152. CREATE TABLE IF NOT EXISTS sys_notify_scheme (
  153. id BIGSERIAL PRIMARY KEY,
  154. scheme_name VARCHAR(100) NOT NULL,
  155. channels VARCHAR(200), -- sms,app_push,websocket,wechat (逗号分隔)
  156. template_id VARCHAR(50),
  157. status SMALLINT DEFAULT 1,
  158. created_at TIMESTAMP DEFAULT NOW()
  159. );
  160. COMMENT ON TABLE sys_notify_scheme IS '通知方案表';
  161. CREATE TABLE IF NOT EXISTS sys_notify_record (
  162. id BIGSERIAL PRIMARY KEY,
  163. scheme_id BIGINT REFERENCES sys_notify_scheme(id),
  164. target_user_id BIGINT,
  165. target_phone VARCHAR(20),
  166. channel VARCHAR(20),
  167. title VARCHAR(200),
  168. content TEXT,
  169. status VARCHAR(20) DEFAULT 'pending', -- pending/sent/failed/read
  170. sent_at TIMESTAMP,
  171. read_at TIMESTAMP,
  172. error_msg VARCHAR(500),
  173. created_at TIMESTAMP DEFAULT NOW()
  174. );
  175. COMMENT ON TABLE sys_notify_record IS '通知记录表';
  176. -- ==================== 文件管理 ====================
  177. CREATE TABLE IF NOT EXISTS sys_file (
  178. id BIGSERIAL PRIMARY KEY,
  179. file_name VARCHAR(200) NOT NULL,
  180. original_name VARCHAR(200),
  181. file_path VARCHAR(500) NOT NULL,
  182. file_size BIGINT,
  183. mime_type VARCHAR(100),
  184. file_ext VARCHAR(20),
  185. storage_type VARCHAR(20) DEFAULT 'minio',
  186. bucket VARCHAR(100) DEFAULT 'water-management',
  187. module VARCHAR(50),
  188. biz_id BIGINT,
  189. upload_by BIGINT,
  190. deleted SMALLINT DEFAULT 0,
  191. created_at TIMESTAMP DEFAULT NOW()
  192. );
  193. COMMENT ON TABLE sys_file IS '文件管理表';