|
|
@@ -0,0 +1,190 @@
|
|
|
+-- ============================================================
|
|
|
+-- 供水管网-监测报警模块 测试数据脚本(人大金仓 KingbaseES / PostgreSQL 兼容)
|
|
|
+-- 说明:
|
|
|
+-- 1. 测试数据使用 TEST- / test- 前缀,可安全重复执行(先删除再插入)。
|
|
|
+-- 2. 若设备类别中已存在顶级类型"供水",则复用;否则自动创建测试顶级类型。
|
|
|
+-- 3. 清理请执行本文件末尾的清理脚本,或单独执行 water_supply_alarm_test_cleanup.sql。
|
|
|
+-- ============================================================
|
|
|
+
|
|
|
+-- ------------------------------------------------------------
|
|
|
+-- 0. 清理历史测试数据(保证可重复执行)
|
|
|
+-- ------------------------------------------------------------
|
|
|
+DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 'test-alarm-%';
|
|
|
+DELETE FROM app_user.work_order_log WHERE order_id IN
|
|
|
+ (SELECT order_id FROM app_user.work_order WHERE alarm_id LIKE 'test-alarm-%' OR order_no = 'TEST-WO-001');
|
|
|
+DELETE FROM app_user.work_order WHERE alarm_id LIKE 'test-alarm-%' OR order_no = 'TEST-WO-001';
|
|
|
+DELETE FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%';
|
|
|
+DELETE FROM app_user.warning_threshold WHERE id LIKE 'test-thr-%' OR device_code LIKE 'TEST-%';
|
|
|
+DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'TEST-EQ-%';
|
|
|
+DELETE FROM app_user.equipment_type WHERE id LIKE 'TEST-WATER-%';
|
|
|
+
|
|
|
+-- ------------------------------------------------------------
|
|
|
+-- 1. 设备类别与设备基础信息
|
|
|
+-- ------------------------------------------------------------
|
|
|
+DO $$
|
|
|
+DECLARE
|
|
|
+ v_top_id varchar(64);
|
|
|
+ v_level_id varchar(64);
|
|
|
+ v_pressure_id varchar(64);
|
|
|
+ v_flow_id varchar(64);
|
|
|
+BEGIN
|
|
|
+ -- 顶级类型"供水"(parent_type_id='0'),不存在则创建
|
|
|
+ SELECT id INTO v_top_id FROM app_user.equipment_type
|
|
|
+ WHERE type_name = '供水' AND parent_type_id = '0' LIMIT 1;
|
|
|
+ IF v_top_id IS NULL THEN
|
|
|
+ INSERT INTO app_user.equipment_type (id, type_id, type_name, parent_type_id, type_remark)
|
|
|
+ VALUES ('TEST-WATER-TOP', 'test_water_top', '供水', '0', '供水监测报警测试-顶级类型(可清理)')
|
|
|
+ RETURNING id INTO v_top_id;
|
|
|
+ END IF;
|
|
|
+
|
|
|
+ -- 子类型:水位 / 压力 / 流量
|
|
|
+ SELECT id INTO v_level_id FROM app_user.equipment_type WHERE type_id = 'test_water_level' LIMIT 1;
|
|
|
+ IF v_level_id IS NULL THEN
|
|
|
+ INSERT INTO app_user.equipment_type (id, type_id, type_name, parent_type_id, type_remark)
|
|
|
+ VALUES ('TEST-WATER-LEVEL', 'test_water_level', '水位监测(测试)', v_top_id, '供水监测报警测试子类型')
|
|
|
+ RETURNING id INTO v_level_id;
|
|
|
+ END IF;
|
|
|
+
|
|
|
+ SELECT id INTO v_pressure_id FROM app_user.equipment_type WHERE type_id = 'test_water_pressure' LIMIT 1;
|
|
|
+ IF v_pressure_id IS NULL THEN
|
|
|
+ INSERT INTO app_user.equipment_type (id, type_id, type_name, parent_type_id, type_remark)
|
|
|
+ VALUES ('TEST-WATER-PRESSURE', 'test_water_pressure', '压力监测(测试)', v_top_id, '供水监测报警测试子类型')
|
|
|
+ RETURNING id INTO v_pressure_id;
|
|
|
+ END IF;
|
|
|
+
|
|
|
+ SELECT id INTO v_flow_id FROM app_user.equipment_type WHERE type_id = 'test_water_flow' LIMIT 1;
|
|
|
+ IF v_flow_id IS NULL THEN
|
|
|
+ INSERT INTO app_user.equipment_type (id, type_id, type_name, parent_type_id, type_remark)
|
|
|
+ VALUES ('TEST-WATER-FLOW', 'test_water_flow', '流量监测(测试)', v_top_id, '供水监测报警测试子类型')
|
|
|
+ RETURNING id INTO v_flow_id;
|
|
|
+ END IF;
|
|
|
+
|
|
|
+ -- 4 台测试设备(均带经纬度,供一张图点位使用)
|
|
|
+ INSERT INTO app_user.equipment_base
|
|
|
+ (equipment_id, equipment_code, equipment_name, equipment_model, equipment_type_id,
|
|
|
+ longitude, latitude, equipment_location, maintainer, maintainer_phone, ownership_unit,
|
|
|
+ remark, create_time, update_time, del_flag, district)
|
|
|
+ VALUES
|
|
|
+ ('TEST-EQ-WL-001', 'TEST-WL-001', '测试水位监测点1', 'WL-TEST-1', v_level_id,
|
|
|
+ 113.28000000, 23.12000000, '测试大道1号', '测试维护员', '13800000001', '测试供水公司',
|
|
|
+ '供水监测报警测试数据', now(), now(), '0', '测试区'),
|
|
|
+ ('TEST-EQ-WL-002', 'TEST-WL-002', '测试水位监测点2', 'WL-TEST-2', v_level_id,
|
|
|
+ 113.29000000, 23.13000000, '测试大道2号', '测试维护员', '13800000002', '测试供水公司',
|
|
|
+ '供水监测报警测试数据', now(), now(), '0', '测试区'),
|
|
|
+ ('TEST-EQ-PR-001', 'TEST-PR-001', '测试压力监测点1', 'PR-TEST-1', v_pressure_id,
|
|
|
+ 113.30000000, 23.14000000, '测试大道3号', '测试维护员', '13800000003', '测试供水公司',
|
|
|
+ '供水监测报警测试数据', now(), now(), '0', '测试区'),
|
|
|
+ ('TEST-EQ-FL-001', 'TEST-FL-001', '测试流量监测点1', 'FL-TEST-1', v_flow_id,
|
|
|
+ 113.31000000, 23.15000000, '测试大道4号', '测试维护员', '13800000004', '测试供水公司',
|
|
|
+ '供水监测报警测试数据', now(), now(), '0', '测试区');
|
|
|
+END $$;
|
|
|
+
|
|
|
+-- ------------------------------------------------------------
|
|
|
+-- 2. 报警数据(alarm_data)
|
|
|
+-- 预期统计:实时报警3个设备 / 今日报警6条 / 平均响应25.00分钟 / 设备异常率75%
|
|
|
+-- ------------------------------------------------------------
|
|
|
+INSERT INTO app_user.alarm_data
|
|
|
+ (id, device_code, device_name, device_type, warning_type, warning_code,
|
|
|
+ actual_value, min_value, max_value, alarm_status, alarm_level, deviation_ratio,
|
|
|
+ alarm_time, handle_time, handle_user, handle_remark, remark, create_time, update_time)
|
|
|
+VALUES
|
|
|
+ -- 未处理:水位1级(今日)
|
|
|
+ ('test-alarm-001', 'TEST-WL-001', '测试水位监测点1', '水位监测', '水位预警', 'WARN-WATER-LEVEL-TEST',
|
|
|
+ 0.20, 0.50, 3.00, 0, 1, 40.00,
|
|
|
+ now() - interval '180 minutes', NULL, NULL, NULL, '供水监测报警测试数据',
|
|
|
+ now() - interval '180 minutes', now() - interval '180 minutes'),
|
|
|
+ -- 未处理:水位2级(今日,同设备第二条)
|
|
|
+ ('test-alarm-002', 'TEST-WL-001', '测试水位监测点1', '水位监测', '水位预警', 'WARN-WATER-LEVEL-TEST',
|
|
|
+ 0.30, 0.50, 3.00, 0, 2, 35.00,
|
|
|
+ now() - interval '150 minutes', NULL, NULL, NULL, '供水监测报警测试数据',
|
|
|
+ now() - interval '150 minutes', now() - interval '150 minutes'),
|
|
|
+ -- 已处理:水位3级(今日,响应35分钟)→ 关联测试工单
|
|
|
+ ('test-alarm-003', 'TEST-WL-002', '测试水位监测点2', '水位监测', '水位预警', 'WARN-WATER-LEVEL-TEST',
|
|
|
+ 3.80, 0.50, 3.00, 1, 3, 25.00,
|
|
|
+ now() - interval '120 minutes', now() - interval '85 minutes', '测试用户', '现场处理完成',
|
|
|
+ '供水监测报警测试数据', now() - interval '120 minutes', now() - interval '85 minutes'),
|
|
|
+ -- 未处理:压力1级(今日,一张图最高级点位)
|
|
|
+ ('test-alarm-004', 'TEST-PR-001', '测试压力监测点1', '压力监测', '压力预警', 'WARN-PRESSURE-TEST',
|
|
|
+ 0.95, 0.40, 0.80, 0, 1, 30.00,
|
|
|
+ now() - interval '100 minutes', NULL, NULL, NULL, '供水监测报警测试数据',
|
|
|
+ now() - interval '100 minutes', now() - interval '100 minutes'),
|
|
|
+ -- 已处理:压力2级(今日,响应30分钟)
|
|
|
+ ('test-alarm-005', 'TEST-PR-001', '测试压力监测点1', '压力监测', '压力预警', 'WARN-PRESSURE-TEST',
|
|
|
+ 0.90, 0.40, 0.80, 1, 2, 28.00,
|
|
|
+ now() - interval '90 minutes', now() - interval '60 minutes', '测试用户', '压力调整',
|
|
|
+ '供水监测报警测试数据', now() - interval '90 minutes', now() - interval '60 minutes'),
|
|
|
+ -- 已处理:流量4级(昨日,不计入今日统计)
|
|
|
+ ('test-alarm-006', 'TEST-FL-001', '测试流量监测点1', '流量监测', '流量预警', 'WARN-FLOW-TEST',
|
|
|
+ 120.00, 10.00, 100.00, 1, 4, 20.00,
|
|
|
+ now() - interval '1 day' - interval '60 minutes', now() - interval '1 day',
|
|
|
+ '测试用户', '流量恢复正常', '供水监测报警测试数据',
|
|
|
+ now() - interval '1 day' - interval '60 minutes', now() - interval '1 day'),
|
|
|
+ -- 未处理:流量3级(昨日,用于实时列表/历史过滤/解除测试)
|
|
|
+ ('test-alarm-007', 'TEST-FL-001', '测试流量监测点1', '流量监测', '流量预警', 'WARN-FLOW-TEST',
|
|
|
+ 115.00, 10.00, 100.00, 0, 3, 15.00,
|
|
|
+ now() - interval '1 day' - interval '30 minutes', NULL, NULL, NULL, '供水监测报警测试数据',
|
|
|
+ now() - interval '1 day' - interval '30 minutes', now() - interval '1 day' - interval '30 minutes'),
|
|
|
+ -- 已处理:水位2级(今日,响应10分钟)
|
|
|
+ ('test-alarm-008', 'TEST-WL-002', '测试水位监测点2', '水位监测', '水位预警', 'WARN-WATER-LEVEL-TEST',
|
|
|
+ 3.50, 0.50, 3.00, 1, 2, 18.00,
|
|
|
+ now() - interval '300 minutes', now() - interval '290 minutes', '测试用户', '水位回落',
|
|
|
+ '供水监测报警测试数据', now() - interval '300 minutes', now() - interval '290 minutes');
|
|
|
+
|
|
|
+-- ------------------------------------------------------------
|
|
|
+-- 3. 阈值数据(warning_threshold,含分时阈值)
|
|
|
+-- ------------------------------------------------------------
|
|
|
+INSERT INTO app_user.warning_threshold
|
|
|
+ (id, device_code, warning_type, warning_code, min_value, max_value,
|
|
|
+ period_start, period_end, remark, create_time, update_time)
|
|
|
+VALUES
|
|
|
+ ('test-thr-001', 'TEST-WL-001', '水位预警', 'WARN-WATER-LEVEL-TEST', 0.50, 3.00,
|
|
|
+ NULL, NULL, '供水监测报警测试-全天阈值', now(), now()),
|
|
|
+ ('test-thr-002', 'TEST-WL-002', '水位预警', 'WARN-WATER-LEVEL-TEST', 0.60, 3.20,
|
|
|
+ NULL, NULL, '供水监测报警测试-全天阈值', now(), now()),
|
|
|
+ ('test-thr-003', 'TEST-PR-001', '压力预警', 'WARN-PRESSURE-TEST', 0.40, 0.80,
|
|
|
+ '08:00', '20:00', '供水监测报警测试-分时阈值(08:00-20:00)', now(), now()),
|
|
|
+ ('test-thr-004', 'TEST-FL-001', '流量预警', 'WARN-FLOW-TEST', 10.00, 100.00,
|
|
|
+ NULL, NULL, '供水监测报警测试-全天阈值', now(), now());
|
|
|
+
|
|
|
+-- ------------------------------------------------------------
|
|
|
+-- 4. 工单与工单日志(关联 test-alarm-003,用于全流程跟踪测试)
|
|
|
+-- ------------------------------------------------------------
|
|
|
+INSERT INTO app_user.work_order
|
|
|
+ (order_no, alarm_id, case_id, case_no, device_id, device_code,
|
|
|
+ order_type, order_level, order_desc, dept_id, dispatch_user, dispatch_time,
|
|
|
+ receive_user, order_status, delayed_reason, delayed_deadline, plan_finish_time,
|
|
|
+ real_finish_time, repair_result, verify_user, verify_time, create_time, update_time,
|
|
|
+ work_image, hazard_id, hazard_no)
|
|
|
+VALUES
|
|
|
+ ('TEST-WO-001', 'test-alarm-003', NULL, NULL, 'TEST-EQ-WL-002', 'TEST-WL-002',
|
|
|
+ 1, 2, '供水监测报警测试工单-水位超限', NULL, NULL, NULL,
|
|
|
+ NULL, 5, NULL, NULL, NULL,
|
|
|
+ NULL, '现场已处理', NULL, NULL, now(), now(),
|
|
|
+ NULL, NULL, NULL);
|
|
|
+
|
|
|
+INSERT INTO app_user.work_order_log
|
|
|
+ (order_id, oper_type, oper_desc, oper_user_id, oper_user_name, oper_time)
|
|
|
+SELECT order_id, 5, '供水监测报警测试-提交验收', 1, '测试用户', now()
|
|
|
+ FROM app_user.work_order WHERE order_no = 'TEST-WO-001';
|
|
|
+
|
|
|
+-- ------------------------------------------------------------
|
|
|
+-- 5. 报警审核记录(关联 test-alarm-002,用于审核记录/全流程测试)
|
|
|
+-- ------------------------------------------------------------
|
|
|
+INSERT INTO app_user.alarm_audit
|
|
|
+ (alarm_id, audit_action, audit_result, audit_opinion, attach_url,
|
|
|
+ audit_user_id, audit_user_name, audit_time, create_time, update_time)
|
|
|
+VALUES
|
|
|
+ ('test-alarm-002', 1, 1, '测试审核:现场核实报警属实', NULL,
|
|
|
+ 1, '测试用户', now(), now(), now());
|
|
|
+
|
|
|
+-- ============================================================
|
|
|
+-- 清理脚本(如需清理测试数据,执行以下语句)
|
|
|
+-- ============================================================
|
|
|
+-- DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 'test-alarm-%';
|
|
|
+-- DELETE FROM app_user.work_order_log WHERE order_id IN
|
|
|
+-- (SELECT order_id FROM app_user.work_order WHERE alarm_id LIKE 'test-alarm-%' OR order_no = 'TEST-WO-001');
|
|
|
+-- DELETE FROM app_user.work_order WHERE alarm_id LIKE 'test-alarm-%' OR order_no = 'TEST-WO-001';
|
|
|
+-- DELETE FROM app_user.alarm_data WHERE id LIKE 'test-alarm-%';
|
|
|
+-- DELETE FROM app_user.warning_threshold WHERE id LIKE 'test-thr-%' OR device_code LIKE 'TEST-%';
|
|
|
+-- DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'TEST-EQ-%';
|
|
|
+-- DELETE FROM app_user.equipment_type WHERE id LIKE 'TEST-WATER-%';
|