water_supply_alarm_test_data.sql 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. -- ============================================================
  2. -- 供水管网-监测报警模块 测试数据脚本(人大金仓 KingbaseES / PostgreSQL 兼容)
  3. -- 说明:
  4. -- 1. 测试数据使用 TEST- / test- 前缀,可安全重复执行(先删除再插入)。
  5. -- 2. 若设备类别中已存在顶级类型"供水",则复用;否则自动创建测试顶级类型。
  6. -- 3. 清理请执行本文件末尾的清理脚本,或单独执行 water_supply_alarm_test_cleanup.sql。
  7. -- 4. 部署顺序:须先执行 migration_alarm_case_work_order_id.sql(alarm_data/case_info/
  8. -- hazard_hidden_account/work_order_log 的 order_id→work_order_id 改名 + alarm_data 删 alarm_time),
  9. -- 再执行本脚本;否则 work_order_id 列不存在会报错。
  10. -- ============================================================
  11. -- ------------------------------------------------------------
  12. -- 0. 清理历史测试数据(保证可重复执行)
  13. -- ------------------------------------------------------------
  14. DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 'test-alarm-%';
  15. DELETE FROM app_user.work_order_log WHERE work_order_id IN
  16. (SELECT order_id FROM app_user.work_order WHERE order_no = 'TEST-WO-001' OR order_id IN (SELECT work_order_id FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%'));
  17. DELETE FROM app_user.work_order WHERE order_no = 'TEST-WO-001' OR order_id IN (SELECT work_order_id FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%');
  18. DELETE FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%';
  19. DELETE FROM app_user.warning_threshold WHERE id LIKE 'test-thr-%' OR device_code LIKE 'TEST-%';
  20. DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'TEST-EQ-%';
  21. DELETE FROM app_user.equipment_type WHERE id LIKE 'TEST-WATER-%';
  22. -- ------------------------------------------------------------
  23. -- 1. 设备类别与设备基础信息
  24. -- ------------------------------------------------------------
  25. DO $$
  26. DECLARE
  27. v_top_id varchar(64);
  28. v_level_id varchar(64);
  29. v_pressure_id varchar(64);
  30. v_flow_id varchar(64);
  31. BEGIN
  32. -- 顶级类型"供水"(parent_id = 0),不存在则创建
  33. SELECT id INTO v_top_id FROM app_user.equipment_type
  34. WHERE type_name = '供水' AND parent_id = 0 LIMIT 1;
  35. -- 测试类型主键取 9100 段,避免与 EquipmentTypeEnum 的真实类型冲突
  36. IF v_top_id IS NULL THEN
  37. INSERT INTO app_user.equipment_type (id, type_name, parent_id, remark)
  38. VALUES (9100, '供水', 0, '供水监测报警测试-顶级类型(可清理)')
  39. RETURNING id INTO v_top_id;
  40. END IF;
  41. -- 子类型:水位 / 压力 / 流量
  42. SELECT id INTO v_level_id FROM app_user.equipment_type WHERE id = 9101 LIMIT 1;
  43. IF v_level_id IS NULL THEN
  44. INSERT INTO app_user.equipment_type (id, type_name, parent_id, remark)
  45. VALUES (9101, '水位监测(测试)', v_top_id, '供水监测报警测试子类型')
  46. RETURNING id INTO v_level_id;
  47. END IF;
  48. SELECT id INTO v_pressure_id FROM app_user.equipment_type WHERE id = 9102 LIMIT 1;
  49. IF v_pressure_id IS NULL THEN
  50. INSERT INTO app_user.equipment_type (id, type_name, parent_id, remark)
  51. VALUES (9102, '压力监测(测试)', v_top_id, '供水监测报警测试子类型')
  52. RETURNING id INTO v_pressure_id;
  53. END IF;
  54. SELECT id INTO v_flow_id FROM app_user.equipment_type WHERE id = 9103 LIMIT 1;
  55. IF v_flow_id IS NULL THEN
  56. INSERT INTO app_user.equipment_type (id, type_name, parent_id, remark)
  57. VALUES (9103, '流量监测(测试)', v_top_id, '供水监测报警测试子类型')
  58. RETURNING id INTO v_flow_id;
  59. END IF;
  60. -- 4 台测试设备(均带经纬度,供一张图点位使用)
  61. INSERT INTO app_user.equipment_base
  62. (equipment_id, equipment_code, equipment_name, equipment_model, equipment_type_id,
  63. longitude, latitude, equipment_location, maintainer, maintainer_phone, ownership_unit,
  64. remark, create_time, update_time, del_flag, district)
  65. VALUES
  66. ('TEST-EQ-WL-001', 'TEST-WL-001', '测试水位监测点1', 'WL-TEST-1', v_level_id,
  67. 113.28000000, 23.12000000, '测试大道1号', '测试维护员', '13800000001', '测试供水公司',
  68. '供水监测报警测试数据', now(), now(), '0', '测试区'),
  69. ('TEST-EQ-WL-002', 'TEST-WL-002', '测试水位监测点2', 'WL-TEST-2', v_level_id,
  70. 113.29000000, 23.13000000, '测试大道2号', '测试维护员', '13800000002', '测试供水公司',
  71. '供水监测报警测试数据', now(), now(), '0', '测试区'),
  72. ('TEST-EQ-PR-001', 'TEST-PR-001', '测试压力监测点1', 'PR-TEST-1', v_pressure_id,
  73. 113.30000000, 23.14000000, '测试大道3号', '测试维护员', '13800000003', '测试供水公司',
  74. '供水监测报警测试数据', now(), now(), '0', '测试区'),
  75. ('TEST-EQ-FL-001', 'TEST-FL-001', '测试流量监测点1', 'FL-TEST-1', v_flow_id,
  76. 113.31000000, 23.15000000, '测试大道4号', '测试维护员', '13800000004', '测试供水公司',
  77. '供水监测报警测试数据', now(), now(), '0', '测试区');
  78. END $$;
  79. -- ------------------------------------------------------------
  80. -- 2. 报警数据(alarm_data)
  81. -- 预期统计:实时报警3个设备 / 今日报警6条 / 平均响应时间由alarm_log处理日志统计 / 设备异常率75%
  82. -- 注意:alarm_time 列已删除,统一使用 create_time。
  83. -- ------------------------------------------------------------
  84. INSERT INTO app_user.alarm_data
  85. (id, device_code, warning_type, warning_code, actual_value, min_value, max_value, alarm_status, alarm_level, deviation_ratio, remark, create_time, update_time)
  86. VALUES
  87. ('test-alarm-001', 'TEST-WL-001', '水位预警', 'WARN-WATER-LEVEL-TEST', 0.20, 0.50, 3.00, 0, 1, 40.00, '供水监测报警测试数据', now() - interval '180 minutes', now() - interval '180 minutes'),
  88. ('test-alarm-002', 'TEST-WL-001', '水位预警', 'WARN-WATER-LEVEL-TEST', 0.30, 0.50, 3.00, 0, 2, 35.00, '供水监测报警测试数据', now() - interval '150 minutes', now() - interval '150 minutes'),
  89. ('test-alarm-003', 'TEST-WL-002', '水位预警', 'WARN-WATER-LEVEL-TEST', 3.80, 0.50, 3.00, 1, 3, 25.00, '供水监测报警测试数据', now() - interval '120 minutes', now() - interval '85 minutes'),
  90. ('test-alarm-004', 'TEST-PR-001', '压力预警', 'WARN-PRESSURE-TEST', 0.95, 0.40, 0.80, 0, 1, 30.00, '供水监测报警测试数据', now() - interval '100 minutes', now() - interval '100 minutes'),
  91. ('test-alarm-005', 'TEST-PR-001', '压力预警', 'WARN-PRESSURE-TEST', 0.90, 0.40, 0.80, 1, 2, 28.00, '供水监测报警测试数据', now() - interval '90 minutes', now() - interval '60 minutes'),
  92. ('test-alarm-006', 'TEST-FL-001', '流量预警', 'WARN-FLOW-TEST', 120.00, 10.00, 100.00, 1, 4, 20.00, '供水监测报警测试数据', now() - interval '1 day' - interval '60 minutes', now() - interval '1 day'),
  93. ('test-alarm-007', 'TEST-FL-001', '流量预警', 'WARN-FLOW-TEST', 115.00, 10.00, 100.00, 0, 3, 15.00, '供水监测报警测试数据', now() - interval '1 day' - interval '30 minutes', now() - interval '1 day' - interval '30 minutes'),
  94. ('test-alarm-008', 'TEST-WL-002', '水位预警', 'WARN-WATER-LEVEL-TEST', 3.50, 0.50, 3.00, 1, 2, 18.00, '供水监测报警测试数据', now() - interval '300 minutes', now() - interval '290 minutes');
  95. -- ------------------------------------------------------------
  96. -- 3. 阈值数据(warning_threshold,含分时阈值)
  97. -- ------------------------------------------------------------
  98. INSERT INTO app_user.warning_threshold
  99. (id, device_code, warning_code, min_value, max_value,
  100. period_start, period_end, create_time, update_time)
  101. VALUES
  102. ('test-thr-001', 'TEST-WL-001', 'WARN-WATER-LEVEL-TEST', 0.50, 3.00,
  103. NULL, NULL, now(), now()),
  104. ('test-thr-002', 'TEST-WL-002', 'WARN-WATER-LEVEL-TEST', 0.60, 3.20,
  105. NULL, NULL, now(), now()),
  106. ('test-thr-003', 'TEST-PR-001', 'WARN-PRESSURE-TEST', 0.40, 0.80,
  107. '08:00', '20:00', now(), now()),
  108. ('test-thr-004', 'TEST-FL-001', 'WARN-FLOW-TEST', 10.00, 100.00,
  109. NULL, NULL, now(), now());
  110. -- ------------------------------------------------------------
  111. -- 4. 工单与工单日志(关联 test-alarm-003,用于全流程跟踪测试)
  112. -- ------------------------------------------------------------
  113. INSERT INTO app_user.work_order
  114. (order_no, device_id,
  115. order_level, order_desc, dept_id, dispatch_user, dispatch_time,
  116. receive_user, order_status, delayed_reason, delayed_deadline, plan_finish_time,
  117. real_finish_time, repair_result, verify_user, verify_time, create_time, update_time,
  118. maintenance_before_img)
  119. VALUES
  120. ('TEST-WO-001', 'TEST-EQ-WL-002',
  121. 2, '供水监测报警测试工单-水位超限', NULL, NULL, NULL,
  122. NULL, 5, NULL, NULL, NULL,
  123. NULL, '现场已处理', NULL, NULL, now(), now(),
  124. NULL);
  125. UPDATE app_user.alarm_data
  126. SET work_order_id = (SELECT order_id FROM app_user.work_order WHERE order_no = 'TEST-WO-001')
  127. WHERE id = 'test-alarm-003';
  128. INSERT INTO app_user.work_order_log
  129. (work_order_id, oper_type, oper_desc, oper_user_id, oper_user_name, oper_time)
  130. SELECT order_id, 5, '供水监测报警测试-提交验收', 1, '测试用户', now()
  131. FROM app_user.work_order WHERE order_no = 'TEST-WO-001';
  132. -- ------------------------------------------------------------
  133. -- 5. 报警审核记录(关联 test-alarm-002,用于审核记录/全流程测试)
  134. -- ------------------------------------------------------------
  135. INSERT INTO app_user.alarm_audit
  136. (alarm_id, audit_action, audit_result, audit_opinion, attach_url,
  137. audit_user_id, audit_user_name, audit_time, create_time, update_time)
  138. VALUES
  139. ('test-alarm-002', 1, 1, '测试审核:现场核实报警属实', NULL,
  140. 1, '测试用户', now(), now(), now());
  141. -- ============================================================
  142. -- 清理脚本(如需清理测试数据,执行以下语句)
  143. -- ============================================================
  144. -- DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 'test-alarm-%';
  145. -- DELETE FROM app_user.work_order_log WHERE work_order_id IN
  146. -- (SELECT order_id FROM app_user.work_order WHERE order_no = 'TEST-WO-001' OR order_id IN (SELECT work_order_id FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%'));
  147. -- DELETE FROM app_user.work_order WHERE order_no = 'TEST-WO-001' OR order_id IN (SELECT work_order_id FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%');
  148. -- DELETE FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%';
  149. -- DELETE FROM app_user.warning_threshold WHERE id LIKE 'test-thr-%' OR device_code LIKE 'TEST-%';
  150. -- DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'TEST-EQ-%';
  151. -- DELETE FROM app_user.equipment_type WHERE id LIKE 'TEST-WATER-%';