water_supply_alarm_ledger_test_data.sql 18 KB

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