Browse Source

test(water): expand canonical monitoring fixtures

Kazerin 2 days ago
parent
commit
3f1a5d4bfd

+ 99 - 5
pipe-network-service/sql/water_supply_monitoring_test_data.sql

@@ -1,7 +1,7 @@
 -- ============================================================
 -- 供水管网 T4 运行监测 测试数据脚本(KingbaseES)
 -- 说明:
---   1. 所有测试数据均使用 WS-TEST- / ws_test_ 前缀,可重复执行。
+--   1. 所有测试数据均使用 WS-TEST- 前缀,可重复执行。
 --   2. 本脚本只初始化测试行,不创建监测业务表;执行前请确认以下表已存在:
 --      app_user.equipment_type、app_user.equipment_base、app_user.radar_data、
 --      app_user.telemetry_data、app_user.firefighting_pressure、app_user.noise_info
@@ -38,6 +38,12 @@ BEGIN
     IF v_type_count <> 3 THEN
         RAISE EXCEPTION '缺少规范供水监测子类型:ws_flow/ws_pressure/ws_leak 必须 parent_type_id=1';
     END IF;
+    SELECT count(*) INTO v_type_count
+      FROM app_user.equipment_type
+     WHERE id <> '1' AND type_id NOT IN ('water_supply', 'ws_flow', 'ws_pressure', 'ws_leak');
+    IF v_type_count = 0 THEN
+        RAISE EXCEPTION '缺少非供水设备类型,无法构造边界排除样本';
+    END IF;
 END $$;
 
 INSERT INTO app_user.equipment_base
@@ -65,6 +71,62 @@ VALUES
      (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.32000000, 23.16000000, '供水测试大道5号',
      '供水测试维护员', '13800000005', '供水测试公司', '供水T4运行监测无数据测试设备',
      now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-003', 'WS-TEST-FLOW-003', '测试流量监测点03', 'FLOW-TEST-003',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.34000000, 23.18000000, '供水测试大道7号',
+     '供水测试维护员', '13800000007', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-004', 'WS-TEST-FLOW-004', '测试流量监测点04', 'FLOW-TEST-004',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.35000000, 23.19000000, '供水测试大道8号',
+     '供水测试维护员', '13800000008', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-005', 'WS-TEST-FLOW-005', '测试流量监测点05', 'FLOW-TEST-005',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.36000000, 23.20000000, '供水测试大道9号',
+     '供水测试维护员', '13800000009', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-006', 'WS-TEST-FLOW-006', '测试流量监测点06', 'FLOW-TEST-006',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.37000000, 23.21000000, '供水测试大道10号',
+     '供水测试维护员', '13800000010', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-007', 'WS-TEST-FLOW-007', '测试流量监测点07', 'FLOW-TEST-007',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.38000000, 23.22000000, '供水测试大道11号',
+     '供水测试维护员', '13800000011', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-008', 'WS-TEST-FLOW-008', '测试流量监测点08', 'FLOW-TEST-008',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.39000000, 23.23000000, '供水测试大道12号',
+     '供水测试维护员', '13800000012', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-009', 'WS-TEST-FLOW-009', '测试流量监测点09', 'FLOW-TEST-009',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.40000000, 23.24000000, '供水测试大道13号',
+     '供水测试维护员', '13800000013', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-010', 'WS-TEST-FLOW-010', '测试流量监测点10', 'FLOW-TEST-010',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.41000000, 23.25000000, '供水测试大道14号',
+     '供水测试维护员', '13800000014', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-011', 'WS-TEST-FLOW-011', '测试流量监测点11', 'FLOW-TEST-011',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.42000000, 23.26000000, '供水测试大道15号',
+     '供水测试维护员', '13800000015', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-FLOW-012', 'WS-TEST-FLOW-012', '测试流量监测点12', 'FLOW-TEST-012',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_flow' AND parent_type_id = '1' LIMIT 1), 113.43000000, 23.27000000, '供水测试大道16号',
+     '供水测试维护员', '13800000016', '供水测试公司', '供水T4流量分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-PRESSURE-002', 'WS-TEST-PRESSURE-002', '测试压力监测点02', 'PRESSURE-TEST-002',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_pressure' AND parent_type_id = '1' LIMIT 1), 113.44000000, 23.28000000, '供水测试大道17号',
+     '供水测试维护员', '13800000017', '供水测试公司', '供水T4压力分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-PRESSURE-003', 'WS-TEST-PRESSURE-003', '测试压力监测点03', 'PRESSURE-TEST-003',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_pressure' AND parent_type_id = '1' LIMIT 1), 113.45000000, 23.29000000, '供水测试大道18号',
+     '供水测试维护员', '13800000018', '供水测试公司', '供水T4压力分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-LEAKAGE-002', 'WS-TEST-LEAKAGE-002', '测试漏失监测点02', 'LEAKAGE-TEST-002',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_leak' AND parent_type_id = '1' LIMIT 1), 113.46000000, 23.30000000, '供水测试大道19号',
+     '供水测试维护员', '13800000019', '供水测试公司', '供水T4漏失分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
+    ('WS-TEST-EQ-LEAKAGE-003', 'WS-TEST-LEAKAGE-003', '测试漏失监测点03', 'LEAKAGE-TEST-003',
+     (SELECT id FROM app_user.equipment_type WHERE type_id = 'ws_leak' AND parent_type_id = '1' LIMIT 1), 113.47000000, 23.31000000, '供水测试大道20号',
+     '供水测试维护员', '13800000020', '供水测试公司', '供水T4漏失分页测试设备',
+     now() - interval '7 days', now(), '0', '供水测试区'),
     ('WS-TEST-EQ-OTHER-FLOW', 'WS-TEST-OTHER-FLOW', '测试非供水流量监测点', 'OTHER-FLOW-TEST',
      (SELECT id FROM app_user.equipment_type
        WHERE id <> '1' AND type_id NOT IN ('water_supply', 'ws_flow', 'ws_pressure', 'ws_leak')
@@ -86,6 +148,11 @@ VALUES
      now() - interval '1 hour'),
     ('WS-TEST-RADAR-FLOW-003', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-RADAR', '18', '0.80',
      now() - interval '5 days'),
+    ('WS-TEST-RADAR-FLOW-004', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-003', '25', '1.00', now() - interval '1 hour'),
+    ('WS-TEST-RADAR-FLOW-005', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-004', '35', '1.10', now() - interval '2 hours'),
+    ('WS-TEST-RADAR-FLOW-006', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-005', '45', '1.20', now() - interval '3 hours'),
+    ('WS-TEST-RADAR-FLOW-007', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-006', '55', '1.30', now() - interval '4 hours'),
+    ('WS-TEST-RADAR-FLOW-008', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-007', '65', '1.40', now() - interval '5 hours'),
     ('WS-TEST-RADAR-OTHER-FLOW-001', 'WS-TEST-SYSTEM', 'WS-TEST-OTHER-FLOW', '66', '2.00',
      now() - interval '1 hour');
 
@@ -102,6 +169,15 @@ VALUES
      '1.50', '24.00', now() - interval '4 hours'),
     ('WS-TEST-TELEMETRY-003', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-TELEMETRY', '20', '12200',
      '0.90', '23.50', now() - interval '5 days');
+INSERT INTO app_user.telemetry_data
+    (id, system_identifier, device_code, meter1_instant_flow, meter1_positive_total,
+     flow_speed, temperature, create_time)
+VALUES
+    ('WS-TEST-TELEMETRY-004', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-008', '18', '10008', '0.80', '23.80', now() - interval '1 hour'),
+    ('WS-TEST-TELEMETRY-005', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-009', '28', '10009', '0.90', '23.90', now() - interval '2 hours'),
+    ('WS-TEST-TELEMETRY-006', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-010', '38', '10010', '1.00', '24.10', now() - interval '3 hours'),
+    ('WS-TEST-TELEMETRY-007', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-011', '48', '10011', '1.10', '24.20', now() - interval '4 hours'),
+    ('WS-TEST-TELEMETRY-008', 'WS-TEST-SYSTEM', 'WS-TEST-FLOW-012', '58', '10012', '1.20', '24.30', now() - interval '5 hours');
 
 -- ------------------------------------------------------------
 -- 4. 消防压力数据(telemetering_station 与 equipment_base.equipment_code 关联)
@@ -116,6 +192,14 @@ VALUES
      now() - interval '1 hour', now() - interval '1 hour', 0.95, now() - interval '1 hour'),
     ('WS-TEST-PRESSURE-003', 'WS-TEST-CENTER', 'WS-TEST-PRESSURE',
      now() - interval '5 days', now() - interval '5 days', 0.20, now() - interval '5 days');
+INSERT INTO app_user.firefighting_pressure
+    (id, central_station, telemetering_station, sending_time, observed_time,
+     pressure_value, create_time)
+VALUES
+    ('WS-TEST-PRESSURE-004', 'WS-TEST-CENTER', 'WS-TEST-PRESSURE-002',
+     now() - interval '2 hours', now() - interval '2 hours', 0.55, now() - interval '2 hours'),
+    ('WS-TEST-PRESSURE-005', 'WS-TEST-CENTER', 'WS-TEST-PRESSURE-003',
+     now() - interval '1 hour', now() - interval '1 hour', 0.75, now() - interval '1 hour');
 
 -- ------------------------------------------------------------
 -- 5. 漏失噪声数据(encode 与 equipment_base.equipment_code 关联)
@@ -132,13 +216,23 @@ VALUES
     ('WS-TEST-LEAKAGE', 5.00, 1.00, 80, 700.00,
      to_char(now() - interval '5 days', 'YYYY-MM-DD HH24:MI:SS'),
      now() - interval '5 days', now() - interval '5 days');
+INSERT INTO app_user.noise_info
+    (encode, power, gain, rms, center_frequency, ts, create_time, update_time)
+VALUES
+    ('WS-TEST-LEAKAGE-002', 15.00, 2.50, 125, 820.00,
+     to_char(now() - interval '1 hour', 'YYYY-MM-DD HH24:MI:SS'),
+     now() - interval '1 hour', now() - interval '1 hour'),
+    ('WS-TEST-LEAKAGE-003', 18.00, 3.00, 130, 840.00,
+     to_char(now() - interval '2 hours', 'YYYY-MM-DD HH24:MI:SS'),
+     now() - interval '2 hours', now() - interval '2 hours');
 
 -- ------------------------------------------------------------
 -- 快速核验:
---   流量分页(默认最新值):雷达120、遥测42,共2条;
---   流量分页 flowMin=20&flowMax=40:雷达30、遥测36,共2条;
---   压力分页 pressureMin=0.30&pressureMax=0.60:0.42,共1条;
---   漏失分页 powerMin=8&powerMax=15:12,共1条;
+--   规范 ws_flow 流量设备共13台(其中12台有 radar/telemetry 测量记录,1台无数据);
+--   流量分页(默认最新值):12台有测量设备各返回1条;雷达流量点最新值120,遥测流量点最新值42;
+--   流量分页 flowMin=20&flowMax=40:符合范围的雷达/遥测点共6条(含回退到雷达30、遥测36);
+--   压力分页 pressureMin=0.30&pressureMax=0.60:0.42、0.55,共2条;
+--   漏失分页 powerMin=8&powerMax=15:12、15,共2条;
 --   WS-TEST-FLOW-EMPTY 无测量数据,不应出现在任何监测页。
 --   WS-TEST-OTHER-FLOW 如数据库存在其他系统类型则带入该类型;不在供水规范子类型内,不应出现在监测页。
 -- ============================================================

+ 4 - 1
pipe-network-service/zksy-system/src/test/java/com/zksy/base/service/impl/MonitoringServiceImplTest.java

@@ -206,11 +206,12 @@ class MonitoringServiceImplTest {
     }
 
     @Test
-    void flowMonitoringOnlyIncludesDevicesInsideTheWaterTypeTree() {
+    void flowMonitoringUsesCanonicalTypeIdsAndRejectsLegacyRuntimeTypes() {
         when(equipmentTypeMapper.selectList(any())).thenReturn(Arrays.asList(
                 type("1", "water_supply", "供水", "0"),
                 type("11", "ws_flow", "供水流量计", "1"),
                 type("99", "legacy_flow", "流量监测(旧编码)", "1"),
+                type("TEST-WATER-FLOW", "test_water_flow", "流量监测(旧测试类型)", "1"),
                 type("98", "ws_flow", "错误名称但真实流量编码", "1"),
                 type("97", "ws_flow", "供水流量计但父级错误", "other-root"),
                 type("other-root", "other_root", "其他系统", "0"),
@@ -222,6 +223,7 @@ class MonitoringServiceImplTest {
             return Arrays.asList(
                     device("water-flow-device", "WS-FLOW", "供水流量监测点", "11", BASE_TIME),
                     device("legacy-flow-device", "WS-LEGACY-FLOW", "旧编码流量监测点", "99", BASE_TIME),
+                    device("old-test-flow-device", "WS-OLD-TEST-FLOW", "旧测试类型流量监测点", "TEST-WATER-FLOW", BASE_TIME),
                     device("real-id-wrong-name-device", "WS-FLOW-WRONG-NAME", "真实编码流量监测点", "98", BASE_TIME),
                     device("wrong-parent-flow-device", "WS-FLOW-WRONG-PARENT", "错误父级流量监测点", "97", BASE_TIME),
                     device("other-flow-device", "OTHER-FLOW", "其他系统流量监测点", "other-flow", BASE_TIME),
@@ -233,6 +235,7 @@ class MonitoringServiceImplTest {
         when(radarDataMapper.selectList(any())).thenReturn(Arrays.asList(
                 radar("WS-FLOW", "10", BASE_TIME),
                 radar("WS-LEGACY-FLOW", "20", BASE_TIME),
+                radar("WS-OLD-TEST-FLOW", "25", BASE_TIME),
                 radar("WS-FLOW-WRONG-NAME", "30", BASE_TIME),
                 radar("WS-FLOW-WRONG-PARENT", "40", BASE_TIME),
                 radar("OTHER-FLOW", "20", BASE_TIME),