智慧水务管理系统 - 精河县供水工程综合管理平台

enhanced_reading_tables.sql 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. -- 增强抄表功能相关表结构
  2. -- 1. 批量抄表报告表
  3. CREATE TABLE IF NOT EXISTS rev_batch_report (
  4. report_id VARCHAR(100) PRIMARY KEY,
  5. period VARCHAR(7) NOT NULL COMMENT '抄表周期 yyyy-MM',
  6. total_meters INTEGER NOT NULL DEFAULT 0 COMMENT '总表数',
  7. success_meters INTEGER NOT NULL DEFAULT 0 COMMENT '成功抄表数',
  8. failed_meters INTEGER NOT NULL DEFAULT 0 COMMENT '失败抄表数',
  9. abnormal_meters INTEGER NOT NULL DEFAULT 0 COMMENT '异常读数数',
  10. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  11. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  12. );
  13. -- 2. 抄表异常记录表
  14. CREATE TABLE IF NOT EXISTS rev_reading_exception (
  15. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  16. meter_id BIGINT NOT NULL,
  17. meter_no VARCHAR(50) NOT NULL,
  18. exception_type VARCHAR(50) NOT NULL COMMENT '异常类型: DECREASE/NEGATIVE/EXCESSIVE/ZERO',
  19. exception_reason TEXT COMMENT '异常原因描述',
  20. prev_reading DECIMAL(12,2) NOT NULL,
  21. curr_reading DECIMAL(12,2) NOT NULL,
  22. consumption DECIMAL(12,2) NOT NULL,
  23. reading_date DATE NOT NULL,
  24. area VARCHAR(100) NOT NULL,
  25. is_resolved BOOLEAN DEFAULT FALSE COMMENT '是否已处理',
  26. resolved_at TIMESTAMP NULL,
  27. resolved_by VARCHAR(100) NULL,
  28. remark TEXT COMMENT '处理备注',
  29. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  30. INDEX idx_meter_id (meter_id),
  31. INDEX idx_reading_date (reading_date),
  32. INDEX idx_exception_type (exception_type),
  33. INDEX idx_area (area)
  34. );
  35. -- 3. 大表监控记录表
  36. CREATE TABLE IF NOT EXISTS rev_large_meter_monitor (
  37. id BIGINT AUTO_INCREMENT PRIMARY KEY,
  38. meter_id BIGINT NOT NULL,
  39. meter_no VARCHAR(50) NOT NULL,
  40. caliber VARCHAR(20) NOT NULL COMMENT '管径',
  41. customer_name VARCHAR(200) NOT NULL,
  42. area VARCHAR(100) NOT NULL,
  43. device_sn VARCHAR(100) COMMENT '设备号',
  44. current_reading DECIMAL(12,2) COMMENT '当前读数',
  45. last_reading_date DATE COMMENT '上次抄表日期',
  46. monthly_consumption DECIMAL(12,2) COMMENT '月用量',
  47. monitor_status VARCHAR(20) DEFAULT 'NORMAL' COMMENT '监控状态: NORMAL/ALARM/OFFLINE',
  48. alert_level VARCHAR(20) COMMENT '预警级别: LOW/MEDIUM/HIGH/CRITICAL',
  49. alert_count INTEGER DEFAULT 0 COMMENT '预警次数',
  50. last_alert_time TIMESTAMP NULL COMMENT '最后预警时间',
  51. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  52. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  53. INDEX idx_meter_no (meter_no),
  54. INDEX idx_caliber (caliber),
  55. INDEX idx_area (area),
  56. INDEX idx_monitor_status (monitor_status),
  57. INDEX idx_alert_level (alert_level)
  58. );
  59. -- 4. 远传抄表任务表
  60. CREATE TABLE IF NOT EXISTS rev_remote_reading_task (
  61. task_id BIGINT AUTO_INCREMENT PRIMARY KEY,
  62. task_name VARCHAR(200) NOT NULL,
  63. task_type VARCHAR(50) NOT NULL COMMENT '任务类型: SINGLE_AREA/MULTI_AREA/ALL_AREA',
  64. areas TEXT COMMENT '涉及区域列表(JSON)',
  65. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '任务状态: PENDING/RUNNING/COMPLETED/FAILED',
  66. total_meters INTEGER DEFAULT 0,
  67. success_meters INTEGER DEFAULT 0,
  68. failed_meters INTEGER DEFAULT 0,
  69. abnormal_meters INTEGER DEFAULT 0,
  70. start_time TIMESTAMP NULL,
  71. end_time TIMESTAMP NULL,
  72. error_message TEXT,
  73. created_by VARCHAR(100) NOT NULL,
  74. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  75. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  76. INDEX idx_status (status),
  77. INDEX idx_created_at (created_at)
  78. );
  79. -- 5. 预警记录表
  80. CREATE TABLE IF NOT EXISTS rev_alert_record (
  81. alert_id BIGINT AUTO_INCREMENT PRIMARY KEY,
  82. meter_id BIGINT NOT NULL,
  83. meter_no VARCHAR(50) NOT NULL,
  84. alert_type VARCHAR(50) NOT NULL COMMENT '预警类型: HIGH_CONSUMPTION/DEVICE_OFFLINE/ZERO_FLOW/ABNORMAL_DECREASE',
  85. alert_title VARCHAR(200) NOT NULL COMMENT '预警标题',
  86. alert_description TEXT COMMENT '预警描述',
  87. severity VARCHAR(20) DEFAULT 'MEDIUM' COMMENT '严重程度: LOW/MEDIUM/HIGH/CRITICAL',
  88. status VARCHAR(20) DEFAULT 'PENDING' COMMENT '处理状态: PENDING/ACKNOWLEDGED/RESOLVED',
  89. acknowledged_by VARCHAR(100) NULL,
  90. acknowledged_at TIMESTAMP NULL,
  91. resolved_by VARCHAR(100) NULL,
  92. resolved_at TIMESTAMP NULL,
  93. additional_issues TEXT COMMENT '附加问题(JSON)',
  94. created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  95. updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  96. INDEX idx_meter_no (meter_no),
  97. INDEX idx_alert_type (alert_type),
  98. INDEX idx_severity (severity),
  99. INDEX idx_status (status),
  100. INDEX idx_created_at (created_at)
  101. );
  102. -- 6. 抄表结果统计视图
  103. CREATE OR REPLACE VIEW v_reading_statistics AS
  104. SELECT
  105. r.period,
  106. r.area,
  107. r.total_meters,
  108. r.success_meters,
  109. r.failed_meters,
  110. r.abnormal_meters,
  111. ROUND((r.success_meters * 100.0 / NULLIF(r.total_meters, 0)), 2) as success_rate,
  112. ROUND((r.abnormal_meters * 100.0 / NULLIF(r.total_meters, 0)), 2) as abnormal_rate
  113. FROM rev_batch_report r
  114. ORDER BY r.period DESC, r.area;
  115. -- 7. 大表监控统计视图
  116. CREATE OR REPLACE VIEW v_large_meter_statistics AS
  117. SELECT
  118. caliber,
  119. COUNT(*) as total_count,
  120. SUM(CASE WHEN monitor_status = 'NORMAL' THEN 1 ELSE 0 END) as normal_count,
  121. SUM(CASE WHEN monitor_status = 'ALARM' THEN 1 ELSE 0 END) as alarm_count,
  122. SUM(CASE WHEN monitor_status = 'OFFLINE' THEN 1 ELSE 0 END) as offline_count,
  123. ROUND(SUM(monthly_consumption), 2) as total_consumption,
  124. ROUND(AVG(monthly_consumption), 2) as avg_consumption,
  125. MAX(monthly_consumption) as max_consumption
  126. FROM rev_large_meter_monitor
  127. GROUP BY caliber
  128. ORDER BY caliber;