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

V1__init.sql 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. -- PostgreSQL + PostGIS 数据库完整 DDL 建表脚本
  2. -- 生成时间: 2026-06-15
  3. -- 作者: bot_dev1 (基于 Issue #18 任务)
  4. -- ========= 部门管理 =========
  5. CREATE TABLE sys_dept (
  6. id BIGSERIAL PRIMARY KEY,
  7. parent_id BIGINT,
  8. dept_name VARCHAR(100) NOT NULL,
  9. dept_type VARCHAR(20), -- water_bureau(水利局)/water_company(水务公司)/ops(运维)
  10. sort_order INT DEFAULT 0,
  11. status SMALLINT DEFAULT 1,
  12. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  13. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  14. );
  15. -- 用户权限体系
  16. CREATE TABLE sys_user (
  17. id BIGSERIAL PRIMARY KEY,
  18. dept_id BIGINT REFERENCES sys_dept(id),
  19. username VARCHAR(50) UNIQUE NOT NULL,
  20. password VARCHAR(255) NOT NULL,
  21. real_name VARCHAR(50),
  22. phone VARCHAR(20),
  23. email VARCHAR(100),
  24. role_type VARCHAR(30), -- admin/leader/manager/operator/tech
  25. status SMALLINT DEFAULT 1,
  26. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  27. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  28. );
  29. -- 角色表
  30. CREATE TABLE sys_role (
  31. id BIGSERIAL PRIMARY KEY,
  32. role_name VARCHAR(50) UNIQUE,
  33. role_key VARCHAR(50) UNIQUE, -- admin/supervisor/biz_manager/field_ops/tech_maintain
  34. data_scope VARCHAR(20), -- ALL/DEPT/SELF
  35. description VARCHAR(200),
  36. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  37. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  38. );
  39. -- 角色-用户关联
  40. CREATE TABLE sys_user_role (
  41. user_id BIGINT REFERENCES sys_user(id),
  42. role_id BIGINT REFERENCES sys_role(id),
  43. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  44. PRIMARY KEY (user_id, role_id)
  45. );
  46. -- 菜单管理
  47. CREATE TABLE sys_menu (
  48. id BIGSERIAL PRIMARY KEY,
  49. parent_id BIGINT,
  50. menu_name VARCHAR(50) NOT NULL,
  51. menu_key VARCHAR(50) UNIQUE NOT NULL,
  52. menu_type VARCHAR(20), -- directory/menu/button
  53. path VARCHAR(200),
  54. component VARCHAR(200),
  55. perms VARCHAR(100),
  56. icon VARCHAR(100),
  57. sort_order INT DEFAULT 0,
  58. visible SMALLINT DEFAULT 1,
  59. status SMALLINT DEFAULT 1,
  60. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  61. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  62. );
  63. -- 角色-菜单关联
  64. CREATE TABLE sys_role_menu (
  65. role_id BIGINT REFERENCES sys_role(id),
  66. menu_id BIGINT REFERENCES sys_menu(id),
  67. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  68. PRIMARY KEY (role_id, menu_id)
  69. );
  70. -- ========= 物联网设备管理 =========
  71. -- 设备模型定义
  72. CREATE TABLE iot_device_model (
  73. id BIGSERIAL PRIMARY KEY,
  74. model_key VARCHAR(50) UNIQUE,
  75. model_name VARCHAR(100),
  76. vendor VARCHAR(100),
  77. protocol VARCHAR(20), -- MQTT/Modbus/CoAP/HTTP
  78. properties JSONB, -- 属性定义
  79. commands JSONB, -- 支持指令
  80. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  81. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  82. );
  83. -- 设备实例
  84. CREATE TABLE iot_device (
  85. id BIGSERIAL PRIMARY KEY,
  86. device_sn VARCHAR(100) UNIQUE,
  87. device_name VARCHAR(200),
  88. model_id BIGINT REFERENCES iot_device_model(id),
  89. device_type VARCHAR(30), -- flow_meter/pressure/valve/water_quality/level
  90. position_type VARCHAR(20), -- water_plant/pressure_station/pipe_network/village
  91. loc_lng DECIMAL(11,8), -- 经度
  92. loc_lat DECIMAL(11,8), -- 纬度
  93. geom GEOMETRY(Point, 4326), -- PostGIS 空间坐标
  94. area VARCHAR(50), -- 所属片区
  95. station_id BIGINT, -- 所属站点
  96. status VARCHAR(20), -- online/offline/maintenance/fault
  97. last_report_time TIMESTAMP,
  98. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  99. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  100. );
  101. -- 设备遥测数据缓存
  102. CREATE TABLE iot_telemetry_cache (
  103. id BIGSERIAL PRIMARY KEY,
  104. device_sn VARCHAR(100) NOT NULL,
  105. metric_key VARCHAR(50) NOT NULL,
  106. metric_value DECIMAL(20,4),
  107. quality SMALLINT DEFAULT 0, -- 0:正常 1:可疑 2:错误
  108. ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  109. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  110. );
  111. -- 设备心跳记录
  112. CREATE TABLE iot_device_heartbeat (
  113. id BIGSERIAL PRIMARY KEY,
  114. device_sn VARCHAR(100) NOT NULL,
  115. online_status VARCHAR(10), -- online/offline
  116. battery_level DECIMAL(5,2),
  117. signal_strength SMALLINT,
  118. ip_address VARCHAR(50),
  119. heartbeat_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  120. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  121. );
  122. -- 设备固件管理
  123. CREATE TABLE iot_firmware (
  124. id BIGSERIAL PRIMARY KEY,
  125. firmware_name VARCHAR(100),
  126. version VARCHAR(50),
  127. device_type VARCHAR(30),
  128. file_url VARCHAR(500),
  129. file_size BIGINT,
  130. md5_checksum VARCHAR(32),
  131. changelog TEXT,
  132. status VARCHAR(20), -- draft/published/rejected
  133. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  134. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  135. );
  136. -- 设备固件升级记录
  137. CREATE TABLE iot_firmware_upgrade (
  138. id BIGSERIAL PRIMARY KEY,
  139. device_sn VARCHAR(100),
  140. firmware_id BIGINT REFERENCES iot_firmware(id),
  141. status VARCHAR(20), -- pending/downloading/installed/failed
  142. progress DECIMAL(5,2), -- 0-100
  143. error_message TEXT,
  144. upgrade_time TIMESTAMP,
  145. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  146. );
  147. -- ========= 营业收费 =========
  148. -- 用水户
  149. CREATE TABLE rev_customer (
  150. id BIGSERIAL PRIMARY KEY,
  151. customer_no VARCHAR(30) UNIQUE, -- 户号
  152. customer_name VARCHAR(100) NOT NULL,
  153. customer_type VARCHAR(20), -- residential/business/enterprise/institution
  154. area VARCHAR(50),
  155. address VARCHAR(300),
  156. phone VARCHAR(20),
  157. id_card VARCHAR(18),
  158. contract_no VARCHAR(50),
  159. status VARCHAR(20) DEFAULT 'active',
  160. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  161. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  162. );
  163. -- 水表档案
  164. CREATE TABLE rev_meter (
  165. id BIGSERIAL PRIMARY KEY,
  166. meter_no VARCHAR(50) UNIQUE,
  167. customer_id BIGINT REFERENCES rev_customer(id),
  168. device_id BIGINT REFERENCES iot_device(id),
  169. caliber VARCHAR(10), -- DN15/DN20/DN40...
  170. meter_type VARCHAR(20), -- mechanical/ultrasonic/electromagnetic
  171. initial_reading DECIMAL(10,2),
  172. install_date DATE,
  173. status VARCHAR(20), -- active/dismantled/scrapped/repaired
  174. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  175. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  176. );
  177. -- 抄表计划
  178. CREATE TABLE rev_reading_schedule (
  179. id BIGSERIAL PRIMARY KEY,
  180. meter_id BIGINT REFERENCES rev_meter(id),
  181. reading_date DATE,
  182. reading_type VARCHAR(20), -- manual/remote/estimate
  183. assignee_id BIGINT REFERENCES sys_user(id),
  184. status VARCHAR(20), -- pending/in_progress/completed
  185. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  186. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  187. );
  188. -- 抄表记录
  189. CREATE TABLE rev_reading (
  190. id BIGSERIAL PRIMARY KEY,
  191. meter_id BIGINT REFERENCES rev_meter(id),
  192. reading_date DATE,
  193. prev_reading DECIMAL(10,2),
  194. curr_reading DECIMAL(10,2),
  195. consumption DECIMAL(10,2), -- 用水量
  196. read_type VARCHAR(20), -- manual/remote/estimate
  197. reader_id BIGINT REFERENCES sys_user(id),
  198. photo_url VARCHAR(500),
  199. gps_lng DECIMAL(11,8),
  200. gps_lat DECIMAL(11,8),
  201. verified SMALLINT DEFAULT 0,
  202. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  203. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  204. );
  205. -- 水费标准
  206. CREATE TABLE rev_water_rate (
  207. id BIGSERIAL PRIMARY KEY,
  208. rate_name VARCHAR(100),
  209. customer_type VARCHAR(20), -- residential/business/enterprise/institution
  210. step_threshold JSONB, -- 阶梯阈值
  211. step_rates JSONB, -- 阶梯价格
  212. start_date DATE,
  213. end_date DATE,
  214. status SMALLINT DEFAULT 1,
  215. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  216. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  217. );
  218. -- 水费账单
  219. CREATE TABLE rev_bill (
  220. id BIGSERIAL PRIMARY KEY,
  221. customer_id BIGINT REFERENCES rev_customer(id),
  222. bill_period VARCHAR(10), -- 2026-06
  223. consumption DECIMAL(10,2),
  224. water_fee DECIMAL(10,2),
  225. sewage_fee DECIMAL(10,2),
  226. total_fee DECIMAL(10,2),
  227. paid_fee DECIMAL(10,2) DEFAULT 0,
  228. status VARCHAR(20), -- pending/partial/paid/overdue
  229. due_date DATE,
  230. paid_at TIMESTAMP,
  231. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  232. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  233. );
  234. -- 收费记录
  235. CREATE TABLE rev_payment (
  236. id BIGSERIAL PRIMARY KEY,
  237. bill_id BIGINT REFERENCES rev_bill(id),
  238. payment_no VARCHAR(50) UNIQUE,
  239. payment_type VARCHAR(20), -- cash/alipay/wechat/bank_transfer
  240. amount DECIMAL(10,2),
  241. payment_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  242. operator_id BIGINT REFERENCES sys_user(id),
  243. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  244. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  245. );
  246. -- ========= 巡检系统 =========
  247. -- 巡检路线
  248. CREATE TABLE patrol_route (
  249. id BIGSERIAL PRIMARY KEY,
  250. route_name VARCHAR(100) NOT NULL,
  251. area VARCHAR(50),
  252. route_points JSONB, -- 巡检点信息
  253. estim_duration INT, -- 预计时长(分钟)
  254. status SMALLINT DEFAULT 1,
  255. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  256. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  257. );
  258. -- 巡检任务
  259. CREATE TABLE patrol_task (
  260. id BIGSERIAL PRIMARY KEY,
  261. route_id BIGINT REFERENCES patrol_route(id),
  262. assignee_id BIGINT REFERENCES sys_user(id),
  263. task_date DATE,
  264. plan_start TIME,
  265. plan_end TIME,
  266. actual_start TIMESTAMP,
  267. actual_end TIMESTAMP,
  268. status VARCHAR(20), -- pending/in_progress/completed/expired
  269. distance DECIMAL(8,2),
  270. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  271. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  272. );
  273. -- 巡检记录
  274. CREATE TABLE patrol_record (
  275. id BIGSERIAL PRIMARY KEY,
  276. task_id BIGINT REFERENCES patrol_task(id),
  277. point_seq INT,
  278. device_id BIGINT REFERENCES iot_device(id),
  279. check_items JSONB, -- 检查项结果
  280. gps_lng DECIMAL(11,8),
  281. gps_lat DECIMAL(11,8),
  282. record_time TIMESTAMP,
  283. photo_url VARCHAR(500),
  284. remark TEXT,
  285. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  286. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  287. );
  288. -- 巡检标准
  289. CREATE TABLE patrol_standard (
  290. id BIGSERIAL PRIMARY KEY,
  291. standard_name VARCHAR(100),
  292. device_type VARCHAR(30),
  293. check_items JSONB, -- 检查项配置
  294. scoring_rules JSONB, -- 评分规则
  295. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  296. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  297. );
  298. -- ========= 报警管理 =========
  299. -- 报警规则
  300. CREATE TABLE alert_rule (
  301. id BIGSERIAL PRIMARY KEY,
  302. rule_name VARCHAR(100) NOT NULL,
  303. device_type VARCHAR(30),
  304. metric_key VARCHAR(50),
  305. alert_level VARCHAR(10), -- info/warning/critical/emergency
  306. condition_expr VARCHAR(200), -- 条件表达式
  307. threshold_value VARCHAR(50),
  308. debounce_sec INT DEFAULT 300, -- 去重窗口(秒)
  309. notify_scheme_id BIGINT,
  310. enabled SMALLINT DEFAULT 1,
  311. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  312. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  313. );
  314. -- 报警事件
  315. CREATE TABLE alert_event (
  316. id BIGSERIAL PRIMARY KEY,
  317. rule_id BIGINT REFERENCES alert_rule(id),
  318. device_id BIGINT REFERENCES iot_device(id),
  319. device_sn VARCHAR(100),
  320. metric_key VARCHAR(50),
  321. metric_value DECIMAL(20,4),
  322. threshold VARCHAR(50),
  323. alert_level VARCHAR(10),
  324. message TEXT,
  325. confirmed_by BIGINT REFERENCES sys_user(id),
  326. confirmed_at TIMESTAMP,
  327. dispatched SMALLINT DEFAULT 0, -- 是否已派单
  328. resolved_at TIMESTAMP,
  329. resolved_by BIGINT REFERENCES sys_user(id),
  330. resolution TEXT,
  331. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  332. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  333. );
  334. -- 报警处理记录
  335. CREATE TABLE alert_handle_record (
  336. id BIGSERIAL PRIMARY KEY,
  337. alert_id BIGINT REFERENCES alert_event(id),
  338. handler_id BIGINT REFERENCES sys_user(id),
  339. action_type VARCHAR(20), -- acknowledge/resolve/transfer
  340. action_content TEXT,
  341. handle_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  342. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  343. );
  344. -- 通知方案
  345. CREATE TABLE alert_notify_scheme (
  346. id BIGSERIAL PRIMARY KEY,
  347. scheme_name VARCHAR(100),
  348. channels JSONB, -- 通知渠道配置
  349. recipients JSONB, -- 接收人配置
  350. conditions JSONB, -- 触发条件
  351. status SMALLINT DEFAULT 1,
  352. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  353. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  354. );
  355. -- ========= 操作日志 =========
  356. -- 系统操作日志
  357. CREATE TABLE sys_operation_log (
  358. id BIGSERIAL PRIMARY KEY,
  359. user_id BIGINT REFERENCES sys_user(id),
  360. operation_type VARCHAR(50),
  361. operation_name VARCHAR(100),
  362. target_type VARCHAR(50),
  363. target_id BIGINT,
  364. request_method VARCHAR(10),
  365. request_url VARCHAR(500),
  366. request_params TEXT,
  367. response_data TEXT,
  368. ip_address VARCHAR(50),
  369. user_agent TEXT,
  370. execution_time BIGINT, -- 执行时间(毫秒)
  371. status SMALLINT, -- 0:失败 1:成功
  372. error_message TEXT,
  373. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  374. );
  375. -- ========= 系统配置 =========
  376. -- 系统参数配置
  377. CREATE TABLE sys_config (
  378. id BIGSERIAL PRIMARY KEY,
  379. config_key VARCHAR(100) UNIQUE,
  380. config_name VARCHAR(100),
  381. config_value TEXT,
  382. config_type VARCHAR(20), -- string/number/json
  383. description TEXT,
  384. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  385. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  386. );
  387. -- 数据字典
  388. CREATE TABLE sys_dict (
  389. id BIGSERIAL PRIMARY KEY,
  390. dict_type VARCHAR(100),
  391. dict_code VARCHAR(50),
  392. dict_label VARCHAR(100),
  393. dict_value VARCHAR(100),
  394. sort_order INT DEFAULT 0,
  395. status SMALLINT DEFAULT 1,
  396. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  397. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  398. );
  399. -- ========= 索引创建 =========
  400. -- 用户权限相关索引
  401. CREATE INDEX idx_sys_user_username ON sys_user(username);
  402. CREATE INDEX idx_sys_user_dept ON sys_user(dept_id);
  403. CREATE INDEX idx_sys_user_role ON sys_user(role_type);
  404. -- 物联网设备相关索引
  405. CREATE INDEX idx_iot_device_sn ON iot_device(device_sn);
  406. CREATE INDEX idx_iot_device_status ON iot_device(status);
  407. CREATE INDEX idx_iot_device_area ON iot_device(area);
  408. CREATE INDEX idx_iot_device_type ON iot_device(device_type);
  409. CREATE INDEX idx_iot_device_geom ON iot_device USING GIST(geom);
  410. CREATE INDEX idx_iot_telemetry_cache_sn ON iot_telemetry_cache(device_sn);
  411. CREATE INDEX idx_iot_telemetry_cache_metric ON iot_telemetry_cache(metric_key);
  412. CREATE INDEX idx_iot_telemetry_cache_ts ON iot_telemetry_cache(ts);
  413. -- 营业收费相关索引
  414. CREATE INDEX idx_rev_customer_no ON rev_customer(customer_no);
  415. CREATE INDEX idx_rev_customer_type ON rev_customer(customer_type);
  416. CREATE INDEX idx_rev_meter_no ON rev_meter(meter_no);
  417. CREATE INDEX idx_rev_meter_customer ON rev_meter(customer_id);
  418. CREATE INDEX idx_rev_bill_period ON rev_bill(bill_period);
  419. CREATE INDEX idx_rev_bill_customer ON rev_bill(customer_id);
  420. -- 巡检系统索引
  421. CREATE INDEX idx_patrol_route_area ON patrol_route(area);
  422. CREATE INDEX idx_patrol_task_date ON patrol_task(task_date);
  423. CREATE INDEX idx_patrol_task_status ON patrol_task(status);
  424. CREATE INDEX idx_patrol_task_assignee ON patrol_task(assignee_id);
  425. -- 报警管理索引
  426. CREATE INDEX idx_alert_rule_device ON alert_rule(device_type);
  427. CREATE INDEX idx_alert_rule_enabled ON alert_rule(enabled);
  428. CREATE INDEX idx_alert_event_device ON alert_event(device_sn);
  429. CREATE INDEX idx_alert_event_level ON alert_event(alert_level);
  430. CREATE INDEX idx_alert_event_status ON alert_event(dispatched);
  431. -- 操作日志索引
  432. CREATE INDEX idx_sys_oplog_user ON sys_operation_log(user_id);
  433. CREATE INDEX idx_sys_oplog_time ON sys_operation_log(created_at);
  434. CREATE INDEX idx_sys_oplog_type ON sys_operation_log(operation_type);
  435. -- 系统配置索引
  436. CREATE INDEX idx_sys_config_key ON sys_config(config_key);
  437. -- 数据字典索引
  438. CREATE INDEX idx_sys_dict_type ON sys_dict(dict_type);
  439. CREATE INDEX idx_sys_dict_code ON sys_dict(dict_code);
  440. -- ========= 触发器 =========
  441. -- 更新时间自动触发器
  442. CREATE OR REPLACE FUNCTION update_timestamp()
  443. RETURNS TRIGGER AS $$
  444. BEGIN
  445. NEW.updated_at = CURRENT_TIMESTAMP;
  446. RETURN NEW;
  447. END;
  448. $$ LANGUAGE plpgsql;
  449. -- 为相关表添加触发器
  450. CREATE TRIGGER trg_sys_user_update BEFORE UPDATE ON sys_user FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  451. CREATE TRIGGER trg_iot_device_update BEFORE UPDATE ON iot_device FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  452. CREATE TRIGGER trg_rev_customer_update BEFORE UPDATE ON rev_customer FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  453. CREATE TRIGGER trg_rev_meter_update BEFORE UPDATE ON rev_meter FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  454. CREATE TRIGGER trg_rev_bill_update BEFORE UPDATE ON rev_bill FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  455. CREATE TRIGGER trg_alert_rule_update BEFORE UPDATE ON alert_rule FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  456. CREATE TRIGGER trg_alert_event_update BEFORE UPDATE ON alert_event FOR EACH ROW EXECUTE FUNCTION update_timestamp();
  457. -- 序列初始化
  458. SELECT setval('sys_user_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_user));
  459. SELECT setval('sys_role_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_role));
  460. SELECT setval('sys_menu_id_seq', (SELECT COALESCE(MAX(id), 1) FROM sys_menu));
  461. SELECT setval('iot_device_id_seq', (SELECT COALESCE(MAX(id), 1) FROM iot_device));
  462. SELECT setval('rev_customer_id_seq', (SELECT COALESCE(MAX(id), 1) FROM rev_customer));
  463. SELECT setval('rev_meter_id_seq', (SELECT COALESCE(MAX(id), 1) FROM rev_meter));