water_supply_alarm_ledger_test_data.sql 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. -- ============================================================
  2. -- 供水报警管理只读台账与态势统计(Gogs #45 / T02)验收测试数据
  3. -- 数据库:人大金仓 KingbaseES(PostgreSQL 语法兼容)
  4. --
  5. -- 说明:
  6. -- 1. 全部测试数据使用 T45- / t45- 前缀,与既有 TEST- 种子互不干扰。
  7. -- 2. 先删后插,可重复执行;清理语句见文件末尾。
  8. -- 3. 设备编码遵循项目命名规范:区域(CN城南/CB城北/TC太常)-类型(GS供水)-YYYYMMDD+4位流水号。
  9. -- 4. 设备挂在顶级类型“供水”之下,因此会被台账的供水范围过滤命中。
  10. --
  11. -- 本批数据刻意覆盖以下验收点:
  12. -- · 报警趋势四条等级序列:近 7 天内每天至少一个等级有值,且四级都出现过
  13. -- · 三种报警展示状态:待审核 / 已转工单 / 已解除
  14. -- · 设备报警状态两种取值:报警中(1) 与 正常(0),另有 1 台离线设备
  15. -- · 关联工单:未办结工单→已转工单;已结案/已取消工单→不得算作已转工单
  16. -- · 无 equipment_status 记录时的设备报警状态回退分支
  17. -- · 报警值为空、阈值未配置、阈值下限为 0 三种边界显示
  18. -- · 窗口外(8/12 天前)的报警,用于验证时间范围查询与趋势补零
  19. --
  20. -- 台账预期口径(15 条报警,执行后应与页面一致):
  21. -- 报警总数 15;待审核 9;已转工单 2;已解除 4;报警中设备 3(城南压力、太常流量、城北流量-兜底)
  22. -- 趋势(近 7 天,按等级):
  23. -- 今日 一级1 二级2 三级1 四级1
  24. -- 昨日 一级1 二级0 三级1 四级0
  25. -- 前2日 一级1 二级1 三级0 四级0
  26. -- 前3日 一级1 二级0 三级0 四级0
  27. -- 前4日 一级0 二级0 三级0 四级1
  28. -- 前5日 一级0 二级0 三级1 四级0
  29. -- 前6日 一级0 二级0 三级0 四级1
  30. -- 报警分类占比:压力预警6 / 流量预警5 / 漏失预警4
  31. -- 设备分类占比:压力监测6 / 流量监测5 / 漏失监测4
  32. -- 报警等级占比:一级5 / 二级4 / 三级3 / 四级3
  33. -- ============================================================
  34. -- ------------------------------------------------------------
  35. -- 0. 清理历史数据(保证可重复执行)
  36. -- ------------------------------------------------------------
  37. DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 't45-alarm-%';
  38. DELETE FROM app_user.work_order_log WHERE order_id IN
  39. (SELECT order_id FROM app_user.work_order WHERE order_no LIKE 'T45-WO-%');
  40. DELETE FROM app_user.work_order WHERE order_no LIKE 'T45-WO-%' OR alarm_id LIKE 't45-alarm-%';
  41. DELETE FROM app_user.alarm_data WHERE id LIKE 't45-alarm-%';
  42. DELETE FROM app_user.warning_threshold WHERE id LIKE 't45-thr-%' OR device_code LIKE 'T45-%';
  43. DELETE FROM app_user.equipment_status WHERE equipment_id LIKE 'T45-EQ-%';
  44. DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'T45-EQ-%';
  45. DELETE FROM app_user.equipment_type WHERE id LIKE 'T45-WATER-%';
  46. -- ------------------------------------------------------------
  47. -- 1. 设备类型(挂在顶级类型“供水”之下)与设备基础信息
  48. -- ------------------------------------------------------------
  49. DO $$
  50. DECLARE
  51. v_top_id varchar(64);
  52. v_pressure_id varchar(64);
  53. v_flow_id varchar(64);
  54. v_leak_id varchar(64);
  55. BEGIN
  56. SELECT id INTO v_top_id FROM app_user.equipment_type
  57. WHERE type_name = '供水' AND parent_type_id = '0' LIMIT 1;
  58. IF v_top_id IS NULL THEN
  59. INSERT INTO app_user.equipment_type (id, type_id, type_name, parent_type_id, type_remark)
  60. VALUES ('T45-WATER-TOP', 't45_water_top', '供水', '0', '#45报警台账测试-顶级类型(可清理)')
  61. RETURNING id INTO v_top_id;
  62. END IF;
  63. INSERT INTO app_user.equipment_type (id, type_id, type_name, parent_type_id, type_remark)
  64. VALUES ('T45-WATER-PRESSURE', 't45_water_pressure', '压力监测', v_top_id, '#45报警台账测试子类型'),
  65. ('T45-WATER-FLOW', 't45_water_flow', '流量监测', v_top_id, '#45报警台账测试子类型'),
  66. ('T45-WATER-LEAK', 't45_water_leak', '漏失监测', v_top_id, '#45报警台账测试子类型');
  67. v_pressure_id := 'T45-WATER-PRESSURE';
  68. v_flow_id := 'T45-WATER-FLOW';
  69. v_leak_id := 'T45-WATER-LEAK';
  70. INSERT INTO app_user.equipment_base
  71. (equipment_id, equipment_code, equipment_name, equipment_model, equipment_type_id,
  72. longitude, latitude, equipment_location, maintainer, maintainer_phone, ownership_unit,
  73. remark, create_time, update_time, del_flag, district)
  74. VALUES
  75. -- 报警中:设备状态 alarm_status=1
  76. ('T45-EQ-PR-CN', 'CN-GS-202609160001', '城南加压站压力监测点', 'T45-PR-1', v_pressure_id,
  77. 113.28000000, 23.12000000, '城南大道1号', '张巡维', '13800000101', '市供水公司',
  78. '#45报警台账测试数据', now(), now(), '0', '城南'),
  79. -- 正常:设备状态 alarm_status=0
  80. ('T45-EQ-PR-CB', 'CB-GS-202609160002', '城北末梢压力监测点', 'T45-PR-2', v_pressure_id,
  81. 113.31000000, 23.17000000, '城北大道2号', '李巡维', '13800000102', '市供水公司',
  82. '#45报警台账测试数据', now(), now(), '0', '城北'),
  83. -- 报警中:用于流量分类
  84. ('T45-EQ-FL-TC', 'TC-GS-202609160003', '太常厂区流量监测点', 'T45-FL-1', v_flow_id,
  85. 113.25000000, 23.09000000, '太常路3号', '王巡维', '13800000103', '市供水公司',
  86. '#45报警台账测试数据', now(), now(), '0', '太常'),
  87. -- 正常但离线:设备报警状态与在线状态分离
  88. ('T45-EQ-LK-CN', 'CN-GS-202609160004', '城南漏失声波监测点', 'T45-LK-1', v_leak_id,
  89. 113.28500000, 23.12500000, '城南大道4号', '赵巡维', '13800000104', '市供水公司',
  90. '#45报警台账测试数据', now(), now(), '0', '城南'),
  91. -- 故意不建 equipment_status 记录:验证设备报警状态回退分支
  92. ('T45-EQ-FL-CB', 'CB-GS-202609160005', '城北出厂流量监测点', 'T45-FL-2', v_flow_id,
  93. 113.31500000, 23.17500000, '城北大道5号', '孙巡维', '13800000105', '市供水公司',
  94. '#45报警台账测试数据', now(), now(), '0', '城北');
  95. END $$;
  96. -- ------------------------------------------------------------
  97. -- 2. 设备状态(equipment_status)
  98. -- T45-EQ-FL-CB 刻意缺失,用于验证回退逻辑
  99. -- ------------------------------------------------------------
  100. INSERT INTO app_user.equipment_status
  101. (equipment_id, current_status, alarm_status, online_status,
  102. installation_addr, status_update_time, create_time, del_flag)
  103. VALUES
  104. ('T45-EQ-PR-CN', 1, 1, 1, '城南大道1号', now() - interval '30 minutes', now() - interval '30 minutes', '0'),
  105. ('T45-EQ-PR-CB', 1, 0, 1, '城北大道2号', now() - interval '1 hour', now() - interval '1 hour', '0'),
  106. ('T45-EQ-FL-TC', 1, 1, 1, '太常路3号', now() - interval '2 hours', now() - interval '2 hours', '0'),
  107. ('T45-EQ-LK-CN', 1, 0, 0, '城南大道4号', now() - interval '3 hours', now() - interval '3 hours', '0');
  108. -- ------------------------------------------------------------
  109. -- 3. 阈值(warning_threshold)
  110. -- t45-thr-004 下限为 0,用于验证“阈值下限为 0”不被当成未配置
  111. -- ------------------------------------------------------------
  112. INSERT INTO app_user.warning_threshold
  113. (id, device_code, warning_type, warning_code, min_value, max_value,
  114. period_start, period_end, remark, create_time, update_time)
  115. VALUES
  116. ('t45-thr-001', 'CN-GS-202609160001', '压力预警', 'T45-WARN-PRESSURE', 0.40, 0.80,
  117. NULL, NULL, '#45测试-全天阈值', now(), now()),
  118. ('t45-thr-002', 'CB-GS-202609160002', '压力预警', 'T45-WARN-PRESSURE', 0.35, 0.85,
  119. NULL, NULL, '#45测试-全天阈值', now(), now()),
  120. ('t45-thr-003', 'TC-GS-202609160003', '流量预警', 'T45-WARN-FLOW', 10.00, 100.00,
  121. '08:00', '20:00', '#45测试-分时阈值(08:00-20:00)', now(), now()),
  122. ('t45-thr-004', 'CN-GS-202609160004', '漏失预警', 'T45-WARN-LEAK', 0.00, 5.00,
  123. NULL, NULL, '#45测试-阈值为0的边界', now(), now()),
  124. ('t45-thr-005', 'CB-GS-202609160005', '流量预警', 'T45-WARN-FLOW', 8.00, 120.00,
  125. NULL, NULL, '#45测试-全天阈值', now(), now());
  126. -- ------------------------------------------------------------
  127. -- 4. 报警流水(alarm_data)
  128. -- alarm_status:0-未处理 1-已处理;alarm_level:1 最高
  129. -- ------------------------------------------------------------
  130. INSERT INTO app_user.alarm_data
  131. (id, device_code, device_name, device_type, warning_type, warning_code,
  132. actual_value, min_value, max_value, alarm_status, alarm_level, deviation_ratio,
  133. alarm_time, handle_time, handle_user, handle_remark, remark, create_time, update_time)
  134. VALUES
  135. -- 今日:四个等级各一条,全部待审核(等级序列与展示状态的基础样本)
  136. ('t45-alarm-001', 'CN-GS-202609160001', '城南加压站压力监测点', '压力监测', '压力预警', 'T45-WARN-PRESSURE',
  137. 0.95, 0.40, 0.80, 0, 1, 18.75, now() - interval '40 minutes', NULL, NULL, NULL,
  138. '#45待审核-一级', now() - interval '40 minutes', now() - interval '40 minutes'),
  139. ('t45-alarm-002', 'CB-GS-202609160002', '城北末梢压力监测点', '压力监测', '压力预警', 'T45-WARN-PRESSURE',
  140. 0.90, 0.35, 0.85, 0, 2, 5.88, now() - interval '35 minutes', NULL, NULL, NULL,
  141. '#45待审核-二级', now() - interval '35 minutes', now() - interval '35 minutes'),
  142. ('t45-alarm-003', 'TC-GS-202609160003', '太常厂区流量监测点', '流量监测', '流量预警', 'T45-WARN-FLOW',
  143. 112.00, 10.00, 100.00, 0, 3, 12.00, now() - interval '30 minutes', NULL, NULL, NULL,
  144. '#45待审核-三级', now() - interval '30 minutes', now() - interval '30 minutes'),
  145. ('t45-alarm-004', 'CN-GS-202609160004', '城南漏失声波监测点', '漏失监测', '漏失预警', 'T45-WARN-LEAK',
  146. 7.20, 0.00, 5.00, 0, 4, 44.00, now() - interval '25 minutes', NULL, NULL, NULL,
  147. '#45待审核-四级(阈值下限为0)', now() - interval '25 minutes', now() - interval '25 minutes'),
  148. -- 昨日:已转工单(关联未办结工单:处理中 / 待接单)
  149. ('t45-alarm-005', 'TC-GS-202609160003', '太常厂区流量监测点', '流量监测', '流量预警', 'T45-WARN-FLOW',
  150. 130.50, 10.00, 100.00, 0, 1, 30.50, now() - interval '1 day' - interval '20 minutes',
  151. NULL, NULL, NULL, '#45已转工单-处理中', now() - interval '1 day', now() - interval '1 day'),
  152. ('t45-alarm-006', 'CN-GS-202609160001', '城南加压站压力监测点', '压力监测', '压力预警', 'T45-WARN-PRESSURE',
  153. 0.28, 0.40, 0.80, 0, 3, 30.00, now() - interval '1 day' - interval '10 minutes',
  154. NULL, NULL, NULL, '#45已转工单-待接单', now() - interval '1 day', now() - interval '1 day'),
  155. -- 前2日:已解除(报警记录已处理)+ 工单已结案不得算已转工单
  156. ('t45-alarm-007', 'CB-GS-202609160002', '城北末梢压力监测点', '压力监测', '压力预警', 'T45-WARN-PRESSURE',
  157. 0.88, 0.35, 0.85, 1, 2, 3.53, now() - interval '2 days' - interval '30 minutes',
  158. now() - interval '2 days', '李巡维', '压力恢复正常',
  159. '#45已解除-已处理', now() - interval '2 days', now() - interval '2 days'),
  160. ('t45-alarm-015', 'CN-GS-202609160004', '城南漏失声波监测点', '漏失监测', '漏失预警', 'T45-WARN-LEAK',
  161. 6.10, 0.00, 5.00, 0, 1, 22.00, now() - interval '2 days' - interval '15 minutes',
  162. NULL, NULL, NULL, '#45工单已取消-应回到待审核', now() - interval '2 days', now() - interval '2 days'),
  163. -- 前3日:误报解除(报警记录未处理,但审核结论为误报)
  164. ('t45-alarm-008', 'CN-GS-202609160004', '城南漏失声波监测点', '漏失监测', '漏失预警', 'T45-WARN-LEAK',
  165. 5.40, 0.00, 5.00, 0, 1, 8.00, now() - interval '3 days' - interval '20 minutes',
  166. NULL, NULL, NULL, '#45已解除-误报', now() - interval '3 days', now() - interval '3 days'),
  167. -- 前4日:无 equipment_status 记录的设备(设备报警状态回退分支)
  168. ('t45-alarm-012', 'CB-GS-202609160005', '城北出厂流量监测点', '流量监测', '流量预警', 'T45-WARN-FLOW',
  169. 3.20, 8.00, 120.00, 0, 4, 60.00, now() - interval '4 days' - interval '20 minutes',
  170. NULL, NULL, NULL, '#45无设备状态记录-待审核', now() - interval '4 days', now() - interval '4 days'),
  171. -- 前5日:报警值与阈值全为空(未配置阈值显示分支)
  172. ('t45-alarm-013', 'CN-GS-202609160001', '城南加压站压力监测点', '压力监测', '压力预警', 'T45-WARN-PRESSURE',
  173. NULL, NULL, NULL, 0, 3, NULL, now() - interval '5 days' - interval '20 minutes',
  174. NULL, NULL, NULL, '#45阈值未配置', now() - interval '5 days', now() - interval '5 days'),
  175. -- 前6日:趋势窗口首日,仍应出现在趋势里
  176. ('t45-alarm-009', 'CN-GS-202609160004', '城南漏失声波监测点', '漏失监测', '漏失预警', 'T45-WARN-LEAK',
  177. 5.80, 0.00, 5.00, 1, 4, 16.00, now() - interval '6 days' - interval '20 minutes',
  178. now() - interval '6 days', '赵巡维', '已现场核查',
  179. '#45窗口边界-已解除', now() - interval '6 days', now() - interval '6 days'),
  180. -- 窗口外:用于验证时间范围查询能把它们查出来、而 7 天趋势不含它们
  181. ('t45-alarm-010', 'TC-GS-202609160003', '太常厂区流量监测点', '流量监测', '流量预警', 'T45-WARN-FLOW',
  182. 140.00, 10.00, 100.00, 0, 1, 40.00, now() - interval '9 days' - interval '20 minutes',
  183. NULL, NULL, NULL, '#45窗口外-待审核', now() - interval '9 days', now() - interval '9 days'),
  184. ('t45-alarm-011', 'CB-GS-202609160002', '城北末梢压力监测点', '压力监测', '压力预警', 'T45-WARN-PRESSURE',
  185. 0.30, 0.35, 0.85, 1, 2, 14.71, now() - interval '12 days' - interval '20 minutes',
  186. now() - interval '12 days', '李巡维', '已换表处理',
  187. '#45窗口外-已解除', now() - interval '12 days', now() - interval '12 days'),
  188. -- 今日:阈值越界标红样本(下限 0、上限 120,实际 150)
  189. ('t45-alarm-014', 'TC-GS-202609160003', '太常厂区流量监测点', '流量监测', '流量预警', 'T45-WARN-FLOW',
  190. 150.00, 0.00, 120.00, 0, 2, 25.00, now() - interval '5 minutes',
  191. NULL, NULL, NULL, '#45待审核-阈值越界标红', now() - interval '5 minutes', now() - interval '5 minutes');
  192. -- ------------------------------------------------------------
  193. -- 5. 关联工单(work_order)
  194. -- 工单状态:0-待派单 1-待接单 2-已接单 3-处理中 4-待验收 5-已结案 6-延期中 7-已取消
  195. -- 仅未办结工单会让报警显示为“已转工单”
  196. -- ------------------------------------------------------------
  197. INSERT INTO app_user.work_order
  198. (order_no, alarm_id, case_id, case_no, device_id, device_code,
  199. order_type, order_level, order_desc, dept_id, dispatch_user, dispatch_time,
  200. receive_user, order_status, delayed_reason, delayed_deadline, plan_finish_time,
  201. real_finish_time, repair_result, verify_user, verify_time, create_time, update_time,
  202. work_image, hazard_id, hazard_no)
  203. VALUES
  204. -- 处理中:t45-alarm-005 → 已转工单,可验证“前往工单处置”跳转
  205. ('T45-WO-001', 't45-alarm-005', NULL, NULL, 'T45-EQ-FL-TC', 'TC-GS-202609160003',
  206. 1, 0, '#45测试工单-太常流量超限处置', NULL, '调度管理员', now() - interval '22 hours',
  207. '王巡维', 3, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  208. now() - interval '1 day', now() - interval '1 day', NULL, NULL, NULL),
  209. -- 待接单:t45-alarm-006 → 已转工单
  210. ('T45-WO-002', 't45-alarm-006', NULL, NULL, 'T45-EQ-PR-CN', 'CN-GS-202609160001',
  211. 1, 1, '#45测试工单-城南压力偏低待接单', NULL, '调度管理员', now() - interval '22 hours',
  212. NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  213. now() - interval '1 day', now() - interval '1 day', NULL, NULL, NULL),
  214. -- 已结案:t45-alarm-015 关联已取消工单,报警不得算作已转工单
  215. ('T45-WO-003', 't45-alarm-015', NULL, NULL, 'T45-EQ-LK-CN', 'CN-GS-202609160004',
  216. 1, 1, '#45测试工单-已取消应回到待审核', NULL, '调度管理员', now() - interval '2 days',
  217. NULL, 7, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  218. now() - interval '2 days', now() - interval '2 days', NULL, NULL, NULL);
  219. INSERT INTO app_user.work_order_log
  220. (order_id, oper_type, oper_desc, oper_user_id, oper_user_name, oper_time)
  221. SELECT order_id, 1, '#45测试-派单', 1, '调度管理员', now() - interval '22 hours'
  222. FROM app_user.work_order WHERE order_no IN ('T45-WO-001', 'T45-WO-002');
  223. -- ------------------------------------------------------------
  224. -- 6. 报警审核记录(alarm_audit)
  225. -- t45-alarm-008 审核结论=2(误报)→ 报警展示状态应为已解除
  226. -- ------------------------------------------------------------
  227. INSERT INTO app_user.alarm_audit
  228. (alarm_id, audit_action, audit_result, audit_opinion, attach_url,
  229. audit_user_id, audit_user_name, audit_time, create_time, update_time)
  230. VALUES
  231. ('t45-alarm-008', 2, 2, '#45测试审核:现场核实为误报,已解除', NULL,
  232. 1, '调度管理员', now() - interval '3 days', now() - interval '3 days', now() - interval '3 days'),
  233. ('t45-alarm-007', 1, 1, '#45测试审核:报警属实,已处置完成', NULL,
  234. 1, '调度管理员', now() - interval '2 days', now() - interval '2 days', now() - interval '2 days');
  235. -- ============================================================
  236. -- 清理脚本(如需移除本批测试数据,执行以下语句)
  237. -- ============================================================
  238. -- DELETE FROM app_user.alarm_audit WHERE alarm_id LIKE 't45-alarm-%';
  239. -- DELETE FROM app_user.work_order_log WHERE order_id IN
  240. -- (SELECT order_id FROM app_user.work_order WHERE order_no LIKE 'T45-WO-%');
  241. -- DELETE FROM app_user.work_order WHERE order_no LIKE 'T45-WO-%' OR alarm_id LIKE 't45-alarm-%';
  242. -- DELETE FROM app_user.alarm_data WHERE id LIKE 't45-alarm-%';
  243. -- DELETE FROM app_user.warning_threshold WHERE id LIKE 't45-thr-%' OR device_code LIKE 'T45-%';
  244. -- DELETE FROM app_user.equipment_status WHERE equipment_id LIKE 'T45-EQ-%';
  245. -- DELETE FROM app_user.equipment_base WHERE equipment_id LIKE 'T45-EQ-%';
  246. -- DELETE FROM app_user.equipment_type WHERE id LIKE 'T45-WATER-%';