| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- -- ============================================================
- -- 供水监测报警模块 现状验收测试数据(#46 T03 收口 / 供人工审查)
- -- 数据库:人大金仓 KingbaseES(PostgreSQL 语法兼容)
- --
- -- 说明:
- -- 1. 全部数据使用 T46- / t46- 前缀,与 T45-(报警台账)等既有种子互不干扰。
- -- 2. 先删后插,可重复执行;清理语句见文件末尾。
- -- 3. 设备编码遵循命名规范:区域(CN城南/CB城北/TC太常)-类型(GS供水)-YYYYMMDD+4位流水号。
- -- 4. 工单表按重构后的结构写入:不再有 order_type 列;dispatch_user / receive_user 为 BIGINT 用户ID。
- -- 5. 设备类型不新增:一律引用库中现有 equipment_type
- -- (type_id = pressure_gauge / ultrasonic_flowmeter / leak_monitor 且 parent_type_id = '1'),
- -- equipment_base.equipment_type_id 写入该类型记录的 id;找不到类型时脚本直接报错,不做兜底新增。
- -- 6. dept_id 统一取 100(顶级部门)。若审核账号使用「本部门」数据范围且所属部门不是 100,
- -- 请把下方 dept_id 改成该账号的部门ID,否则统一工单页按部门过滤后看不到这批工单。
- --
- -- 审查对照口径:
- -- A. 报警审核页顶部计数条(只统计供水设备且 alarm_id 非空的工单)
- -- 全部 7 ;待处理(0,1) 2 ;处理中(2,3,6) 2 ;待验收(4) 1 ;已完成(5,7) 2
- -- B. 报警审核队列(展示状态=待审核)应显示 8 条
- -- a01 a02 a03 a04 a05 a06(无工单) + a12 a13(仅关联终态工单,终态不占用唯一性名额)
- -- C. 报警管理展示状态分布:待审核 8 / 已转工单 5 / 已解除 1
- -- D. 设备报警状态:报警中 = 设备1、设备2、设备6(状态表 alarm_status=1)与设备5(无状态记录时的回退分支)
- -- 正常 = 设备3 ;另有设备4 为离线(alarm_status=0 且 online_status=0)
- -- E. 同类工单唯一性(同设备 + 同报警类型 + 未办结)
- -- 应被阻止:a01、a06(设备1 压力预警已有 WO-001 未办结)
- -- 应被允许:a12、a13(设备6 漏失预警只有 已结案/已取消 两张终态工单)
- -- F. 误报解除样本:a14 已写入审核结论=2(误报),展示状态应为「已解除」,且不产生工单
- --
- -- 已知现状(非缺陷,供确认):误报解除与工单结案都不会清除设备报警状态,
- -- 设备报警状态由运行系统负责(见 ADR-0002)。清警能力缺失已另立 #51。
- -- ============================================================
- -- ------------------------------------------------------------
- -- 0. 清理历史数据(保证可重复执行)
- -- ------------------------------------------------------------
- DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 't46-alarm-%';
- DELETE FROM app_user.work_order_log WHERE order_id IN
- (SELECT order_id FROM app_user.work_order WHERE order_no LIKE 'T46-WO-%');
- DELETE FROM app_user.work_order WHERE order_no LIKE 'T46-WO-%' OR alarm_id LIKE 't46-alarm-%';
- DELETE FROM app_user.alarm_data WHERE id LIKE 't46-alarm-%';
- DELETE FROM app_user.warning_threshold WHERE id LIKE 't46-thr-%' OR device_code LIKE 'T46-%';
- DELETE FROM app_user.equipment_status WHERE equipment_id LIKE 'T46-EQ-%';
- DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'T46-EQ-%';
- -- ------------------------------------------------------------
- -- 1. 设备台账(设备类型引用库中现有 equipment_type,不新增类型)
- -- ------------------------------------------------------------
- DO $$
- DECLARE
- v_pressure_id varchar(64);
- v_flow_id varchar(64);
- v_leak_id varchar(64);
- BEGIN
- -- 设备类型以库中现有 equipment_type 为权威:本脚本不新增任何设备类型,
- -- 按 type_id + parent_type_id 定位后取出 id,供 equipment_base.equipment_type_id 使用。
- SELECT id INTO v_pressure_id FROM app_user.equipment_type
- WHERE type_id = 'pressure_gauge' AND parent_type_id = '1' LIMIT 1;
- SELECT id INTO v_flow_id FROM app_user.equipment_type
- WHERE type_id = 'ultrasonic_flowmeter' AND parent_type_id = '1' LIMIT 1;
- SELECT id INTO v_leak_id FROM app_user.equipment_type
- WHERE type_id = 'leak_monitor' AND parent_type_id = '1' LIMIT 1;
- IF v_pressure_id IS NULL OR v_flow_id IS NULL OR v_leak_id IS NULL THEN
- RAISE EXCEPTION 'equipment_type 缺少供水监测类型(pressure_gauge / ultrasonic_flowmeter / leak_monitor 且 parent_type_id=1),请先核对现有类型数据';
- END IF;
- 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
- ('T46-EQ-PR-CN', 'CN-GS-202609160101', '城南加压站压力监测点', 'T46-PR-1', v_pressure_id,
- 113.28100000, 23.12100000, '城南大道101号', '张巡维', '13800000201', '市供水公司',
- '#46报警审核测试数据', now(), now(), '0', '城南'),
- ('T46-EQ-PR-CB', 'CB-GS-202609160102', '城北末梢压力监测点', 'T46-PR-2', v_pressure_id,
- 113.31200000, 23.17200000, '城北大道102号', '李巡维', '13800000202', '市供水公司',
- '#46报警审核测试数据', now(), now(), '0', '城北'),
- ('T46-EQ-FL-TC', 'TC-GS-202609160103', '太常厂区流量监测点', 'T46-FL-1', v_flow_id,
- 113.25100000, 23.09100000, '太常路103号', '王巡维', '13800000203', '市供水公司',
- '#46报警审核测试数据', now(), now(), '0', '太常'),
- ('T46-EQ-LK-CN', 'CN-GS-202609160104', '城南漏失声波监测点', 'T46-LK-1', v_leak_id,
- 113.28600000, 23.12600000, '城南大道104号', '赵巡维', '13800000204', '市供水公司',
- '#46报警审核测试数据', now(), now(), '0', '城南'),
- ('T46-EQ-FL-CB', 'CB-GS-202609160105', '城北出厂流量监测点', 'T46-FL-2', v_flow_id,
- 113.31600000, 23.17600000, '城北大道105号', '孙巡维', '13800000205', '市供水公司',
- '#46无设备状态记录-回退分支', now(), now(), '0', '城北'),
- ('T46-EQ-LK-TC', 'TC-GS-202609160106', '太常漏失声波监测点', 'T46-LK-2', v_leak_id,
- 113.25600000, 23.09600000, '太常路106号', '周巡维', '13800000206', '市供水公司',
- '#46终态工单与误报解除样本', now(), now(), '0', '太常');
- END $$;
- -- ------------------------------------------------------------
- -- 2. 设备状态(equipment_status)
- -- 设备5(T46-EQ-FL-CB)刻意不建记录,用于验证设备报警状态回退分支
- -- ------------------------------------------------------------
- INSERT INTO app_user.equipment_status
- (equipment_id, current_status, alarm_status, online_status,
- installation_addr, status_update_time, create_time, del_flag)
- VALUES
- ('T46-EQ-PR-CN', 1, 1, 1, '城南大道101号', now() - interval '30 minutes', now(), '0'),
- ('T46-EQ-PR-CB', 1, 1, 1, '城北大道102号', now() - interval '40 minutes', now(), '0'),
- ('T46-EQ-FL-TC', 1, 0, 1, '太常路103号', now() - interval '50 minutes', now(), '0'),
- ('T46-EQ-LK-CN', 1, 0, 0, '城南大道104号', now() - interval '2 hours', now(), '0'),
- ('T46-EQ-LK-TC', 1, 1, 1, '太常路106号', now() - interval '3 hours', now(), '0');
- -- ------------------------------------------------------------
- -- 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
- ('t46-thr-001', 'CN-GS-202609160101', '压力预警', 'T46-WARN-PRESSURE', 0.40, 0.80,
- NULL, NULL, '#46测试-全天阈值', now(), now()),
- ('t46-thr-002', 'CB-GS-202609160102', '压力预警', 'T46-WARN-PRESSURE', 0.35, 0.85,
- NULL, NULL, '#46测试-全天阈值', now(), now()),
- ('t46-thr-003', 'TC-GS-202609160103', '流量预警', 'T46-WARN-FLOW', 10.00, 100.00,
- '08:00', '20:00', '#46测试-分时阈值(08:00-20:00)', now(), now()),
- ('t46-thr-004', 'CN-GS-202609160104', '漏失预警', 'T46-WARN-LEAK', 0.00, 5.00,
- NULL, NULL, '#46测试-阈值下限为0', now(), now()),
- ('t46-thr-005', 'CB-GS-202609160105', '流量预警', 'T46-WARN-FLOW', 8.00, 120.00,
- NULL, NULL, '#46测试-全天阈值', now(), now()),
- ('t46-thr-006', 'TC-GS-202609160106', '漏失预警', 'T46-WARN-LEAK', 0.00, 5.00,
- NULL, NULL, '#46测试-全天阈值', now(), now());
- -- ------------------------------------------------------------
- -- 4. 报警流水(alarm_data)
- -- alarm_status:0-未处理 1-已处理;alarm_level:1 最高
- -- ------------------------------------------------------------
- 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
- -- 待审核:无关联工单
- ('t46-alarm-a01', 'CN-GS-202609160101', '城南加压站压力监测点', '压力监测', '压力预警', 'T46-WARN-PRESSURE',
- 0.95, 0.40, 0.80, 0, 1, 18.75, now() - interval '35 minutes', NULL, NULL, NULL,
- '#46待审核-设备1压力一级(同设备同类型已有WO-001未办结,转工单应被阻止)', now(), now()),
- ('t46-alarm-a02', 'CB-GS-202609160102', '城北末梢压力监测点', '压力监测', '压力预警', 'T46-WARN-PRESSURE',
- 0.90, 0.35, 0.85, 0, 2, 5.88, now() - interval '30 minutes', NULL, NULL, NULL,
- '#46待审核-设备2压力二级', now(), now()),
- ('t46-alarm-a03', 'TC-GS-202609160103', '太常厂区流量监测点', '流量监测', '流量预警', 'T46-WARN-FLOW',
- 112.00, 10.00, 100.00, 0, 3, 12.00, now() - interval '25 minutes', NULL, NULL, NULL,
- '#46待审核-设备3流量三级', now(), now()),
- ('t46-alarm-a04', 'CN-GS-202609160104', '城南漏失声波监测点', '漏失监测', '漏失预警', 'T46-WARN-LEAK',
- 7.20, 0.00, 5.00, 0, 4, 44.00, now() - interval '20 minutes', NULL, NULL, NULL,
- '#46待审核-设备4漏失四级(设备离线)', now(), now()),
- ('t46-alarm-a05', 'CB-GS-202609160105', '城北出厂流量监测点', '流量监测', '流量预警', 'T46-WARN-FLOW',
- 3.20, 8.00, 120.00, 0, 2, 60.00, now() - interval '15 minutes', NULL, NULL, NULL,
- '#46待审核-设备5无状态记录(设备报警状态走回退分支)', now(), now()),
- ('t46-alarm-a06', 'CN-GS-202609160101', '城南加压站压力监测点', '压力监测', '压力预警', 'T46-WARN-PRESSURE',
- 0.28, 0.40, 0.80, 0, 1, 30.00, now() - interval '1 day' - interval '10 minutes', NULL, NULL, NULL,
- '#46待审核-设备1压力一级(第二条同类型报警)', now(), now()),
- -- 已转工单:关联未办结工单(0/1/3/6/4)
- ('t46-alarm-a07', 'CN-GS-202609160101', '城南加压站压力监测点', '压力监测', '压力预警', 'T46-WARN-PRESSURE',
- 0.88, 0.40, 0.80, 0, 1, 10.00, now() - interval '6 hours', NULL, NULL, NULL,
- '#46已转工单-WO-001 待派单', now(), now()),
- ('t46-alarm-a08', 'CB-GS-202609160102', '城北末梢压力监测点', '压力监测', '压力预警', 'T46-WARN-PRESSURE',
- 0.30, 0.35, 0.85, 0, 2, 14.29, now() - interval '7 hours', NULL, NULL, NULL,
- '#46已转工单-WO-002 待接单', now(), now()),
- ('t46-alarm-a09', 'TC-GS-202609160103', '太常厂区流量监测点', '流量监测', '流量预警', 'T46-WARN-FLOW',
- 130.50, 10.00, 100.00, 0, 1, 30.50, now() - interval '1 day' - interval '2 hours', NULL, NULL, NULL,
- '#46已转工单-WO-003 处理中', now(), now()),
- ('t46-alarm-a10', 'CB-GS-202609160105', '城北出厂流量监测点', '流量监测', '流量预警', 'T46-WARN-FLOW',
- 140.00, 8.00, 120.00, 0, 3, 16.67, now() - interval '2 days', NULL, NULL, NULL,
- '#46已转工单-WO-004 延期中', now(), now()),
- ('t46-alarm-a11', 'CN-GS-202609160104', '城南漏失声波监测点', '漏失监测', '漏失预警', 'T46-WARN-LEAK',
- 6.10, 0.00, 5.00, 0, 2, 22.00, now() - interval '3 days', NULL, NULL, NULL,
- '#46已转工单-WO-005 待验收', now(), now()),
- -- 仅关联终态工单:终态不占用唯一性名额,展示状态回到「待审核」
- ('t46-alarm-a12', 'TC-GS-202609160106', '太常漏失声波监测点', '漏失监测', '漏失预警', 'T46-WARN-LEAK',
- 5.80, 0.00, 5.00, 0, 1, 16.00, now() - interval '4 days', NULL, NULL, NULL,
- '#46待审核-仅关联WO-006(已结案),转工单应被允许', now(), now()),
- ('t46-alarm-a13', 'TC-GS-202609160106', '太常漏失声波监测点', '漏失监测', '漏失预警', 'T46-WARN-LEAK',
- 6.40, 0.00, 5.00, 0, 3, 28.00, now() - interval '5 days', NULL, NULL, NULL,
- '#46待审核-仅关联WO-007(已取消),转工单应被允许', now(), now()),
- -- 误报解除样本:已写审核结论=2,不产生工单
- ('t46-alarm-a14', 'TC-GS-202609160106', '太常漏失声波监测点', '漏失监测', '漏失预警', 'T46-WARN-LEAK',
- 5.20, 0.00, 5.00, 0, 4, 4.00, now() - interval '6 days', NULL, NULL, NULL,
- '#46已解除-误报(审核结论=2,不产生工单)', now(), now());
- -- ------------------------------------------------------------
- -- 5. 关联工单(work_order)
- -- 状态:0-待派单 1-待接单 2-已接单 3-处理中 4-待验收 5-已结案 6-延期中 7-已取消
- -- 无 order_type 列;用户ID列为 BIGINT;dept_id 见文件头说明
- -- ------------------------------------------------------------
- INSERT INTO app_user.work_order
- (order_no, alarm_id, device_id, device_code, order_level, order_desc, dept_id,
- dispatch_user, dispatch_time, receive_user, order_status, fault_time, create_time, update_time)
- VALUES
- ('T46-WO-001', 't46-alarm-a07', 'T46-EQ-PR-CN', 'CN-GS-202609160101', 0,
- '#46测试工单-城南压力超限待派单', 100, NULL, NULL, NULL, 0,
- now() - interval '6 hours', now(), now()),
- ('T46-WO-002', 't46-alarm-a08', 'T46-EQ-PR-CB', 'CB-GS-202609160102', 1,
- '#46测试工单-城北压力偏低待接单', 100, 1, now() - interval '7 hours', NULL, 1,
- now() - interval '7 hours', now(), now()),
- ('T46-WO-003', 't46-alarm-a09', 'T46-EQ-FL-TC', 'TC-GS-202609160103', 0,
- '#46测试工单-太常流量超限处理中', 100, 1, now() - interval '1 day', 2, 3,
- now() - interval '1 day' - interval '2 hours', now(), now()),
- ('T46-WO-004', 't46-alarm-a10', 'T46-EQ-FL-CB', 'CB-GS-202609160105', 1,
- '#46测试工单-城北出厂流量延期中', 100, 1, now() - interval '2 days', 2, 6,
- now() - interval '2 days', now(), now()),
- ('T46-WO-005', 't46-alarm-a11', 'T46-EQ-LK-CN', 'CN-GS-202609160104', 1,
- '#46测试工单-城南漏失待验收', 100, 1, now() - interval '3 days', 2, 4,
- now() - interval '3 days', now(), now()),
- ('T46-WO-006', 't46-alarm-a12', 'T46-EQ-LK-TC', 'TC-GS-202609160106', 0,
- '#46测试工单-太常漏失已结案', 100, 1, now() - interval '4 days', 2, 5,
- now() - interval '4 days', now(), now()),
- ('T46-WO-007', 't46-alarm-a13', 'T46-EQ-LK-TC', 'TC-GS-202609160106', 1,
- '#46测试工单-太常漏失已取消', 100, 1, now() - interval '5 days', NULL, 7,
- now() - interval '5 days', now(), now());
- INSERT INTO app_user.work_order_log
- (order_id, oper_type, oper_desc, oper_user_id, oper_user_name, oper_time)
- SELECT order_id, 0, '#46测试-报警审核转工单创建', 1, '调度管理员', now()
- FROM app_user.work_order WHERE order_no LIKE 'T46-WO-%';
- -- ------------------------------------------------------------
- -- 6. 报警审核记录(alarm_audit)
- -- audit_action 1-转工单 2-误报解除;audit_result 1-属实 2-误报
- -- ------------------------------------------------------------
- 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
- ('t46-alarm-a07', 1, 1, '#46测试审核:压力超限属实,转故障维修工单', NULL,
- 1, '调度管理员', now() - interval '6 hours', now(), now()),
- ('t46-alarm-a09', 1, 1, '#46测试审核:流量超限属实,转故障维修工单', NULL,
- 1, '调度管理员', now() - interval '1 day', now(), now()),
- ('t46-alarm-a14', 2, 2, '#46测试审核:现场核实为误报,解除报警且不生成工单',
- 'https://example.com/t46-false-alarm-evidence.jpg',
- 1, '调度管理员', now() - interval '6 days', now(), now());
- -- ============================================================
- -- 清理脚本(如需移除本批测试数据,执行以下语句)
- -- ============================================================
- -- DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 't46-alarm-%';
- -- DELETE FROM app_user.work_order_log WHERE order_id IN
- -- (SELECT order_id FROM app_user.work_order WHERE order_no LIKE 'T46-WO-%');
- -- DELETE FROM app_user.work_order WHERE order_no LIKE 'T46-WO-%' OR alarm_id LIKE 't46-alarm-%';
- -- DELETE FROM app_user.alarm_data WHERE id LIKE 't46-alarm-%';
- -- DELETE FROM app_user.warning_threshold WHERE id LIKE 't46-thr-%' OR device_code LIKE 'T46-%';
- -- DELETE FROM app_user.equipment_status WHERE equipment_id LIKE 'T46-EQ-%';
- -- DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'T46-EQ-%';
|