-- ============================================================ -- 供水监测报警模块 现状验收测试数据(#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-%';