feat: 实现Issue #58远传集抄功能增强
- 新增EnhancedRemoteReadingService服务 - 新增EnhancedMeterWorkController控制器 - 实现批量远传抄表(按区域)功能 - 实现读数校验机制(DN80+增量控制) - 实现大表(DN80+)专项监控功能 - 实现异常预警系统(突增/离线/零流量) - 新增相关数据库表结构和视图 - 新增完整测试用例 - 新增详细功能文档 功能包括: ✅ 批量远传抄表(按区域) ✅ 读数校验与异常标记 ✅ 大表(DN80+)专项监控 ✅ 异常预警与状态追踪 ✅ 批量报告生成 ✅ 完整的API接口 Resolves #58
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
-- 增强抄表功能相关表结构
|
||||
|
||||
-- 1. 批量抄表报告表
|
||||
CREATE TABLE IF NOT EXISTS rev_batch_report (
|
||||
report_id VARCHAR(100) PRIMARY KEY,
|
||||
period VARCHAR(7) NOT NULL COMMENT '抄表周期 yyyy-MM',
|
||||
total_meters INTEGER NOT NULL DEFAULT 0 COMMENT '总表数',
|
||||
success_meters INTEGER NOT NULL DEFAULT 0 COMMENT '成功抄表数',
|
||||
failed_meters INTEGER NOT NULL DEFAULT 0 COMMENT '失败抄表数',
|
||||
abnormal_meters INTEGER NOT NULL DEFAULT 0 COMMENT '异常读数数',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 2. 抄表异常记录表
|
||||
CREATE TABLE IF NOT EXISTS rev_reading_exception (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
meter_id BIGINT NOT NULL,
|
||||
meter_no VARCHAR(50) NOT NULL,
|
||||
exception_type VARCHAR(50) NOT NULL COMMENT '异常类型: DECREASE/NEGATIVE/EXCESSIVE/ZERO',
|
||||
exception_reason TEXT COMMENT '异常原因描述',
|
||||
prev_reading DECIMAL(12,2) NOT NULL,
|
||||
curr_reading DECIMAL(12,2) NOT NULL,
|
||||
consumption DECIMAL(12,2) NOT NULL,
|
||||
reading_date DATE NOT NULL,
|
||||
area VARCHAR(100) NOT NULL,
|
||||
is_resolved BOOLEAN DEFAULT FALSE COMMENT '是否已处理',
|
||||
resolved_at TIMESTAMP NULL,
|
||||
resolved_by VARCHAR(100) NULL,
|
||||
remark TEXT COMMENT '处理备注',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_meter_id (meter_id),
|
||||
INDEX idx_reading_date (reading_date),
|
||||
INDEX idx_exception_type (exception_type),
|
||||
INDEX idx_area (area)
|
||||
);
|
||||
|
||||
-- 3. 大表监控记录表
|
||||
CREATE TABLE IF NOT EXISTS rev_large_meter_monitor (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
meter_id BIGINT NOT NULL,
|
||||
meter_no VARCHAR(50) NOT NULL,
|
||||
caliber VARCHAR(20) NOT NULL COMMENT '管径',
|
||||
customer_name VARCHAR(200) NOT NULL,
|
||||
area VARCHAR(100) NOT NULL,
|
||||
device_sn VARCHAR(100) COMMENT '设备号',
|
||||
current_reading DECIMAL(12,2) COMMENT '当前读数',
|
||||
last_reading_date DATE COMMENT '上次抄表日期',
|
||||
monthly_consumption DECIMAL(12,2) COMMENT '月用量',
|
||||
monitor_status VARCHAR(20) DEFAULT 'NORMAL' COMMENT '监控状态: NORMAL/ALARM/OFFLINE',
|
||||
alert_level VARCHAR(20) COMMENT '预警级别: LOW/MEDIUM/HIGH/CRITICAL',
|
||||
alert_count INTEGER DEFAULT 0 COMMENT '预警次数',
|
||||
last_alert_time TIMESTAMP NULL COMMENT '最后预警时间',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_meter_no (meter_no),
|
||||
INDEX idx_caliber (caliber),
|
||||
INDEX idx_area (area),
|
||||
INDEX idx_monitor_status (monitor_status),
|
||||
INDEX idx_alert_level (alert_level)
|
||||
);
|
||||
|
||||
-- 4. 远传抄表任务表
|
||||
CREATE TABLE IF NOT EXISTS rev_remote_reading_task (
|
||||
task_id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
task_name VARCHAR(200) NOT NULL,
|
||||
task_type VARCHAR(50) NOT NULL COMMENT '任务类型: SINGLE_AREA/MULTI_AREA/ALL_AREA',
|
||||
areas TEXT COMMENT '涉及区域列表(JSON)',
|
||||
status VARCHAR(20) DEFAULT 'PENDING' COMMENT '任务状态: PENDING/RUNNING/COMPLETED/FAILED',
|
||||
total_meters INTEGER DEFAULT 0,
|
||||
success_meters INTEGER DEFAULT 0,
|
||||
failed_meters INTEGER DEFAULT 0,
|
||||
abnormal_meters INTEGER DEFAULT 0,
|
||||
start_time TIMESTAMP NULL,
|
||||
end_time TIMESTAMP NULL,
|
||||
error_message TEXT,
|
||||
created_by VARCHAR(100) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
|
||||
-- 5. 预警记录表
|
||||
CREATE TABLE IF NOT EXISTS rev_alert_record (
|
||||
alert_id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
meter_id BIGINT NOT NULL,
|
||||
meter_no VARCHAR(50) NOT NULL,
|
||||
alert_type VARCHAR(50) NOT NULL COMMENT '预警类型: HIGH_CONSUMPTION/DEVICE_OFFLINE/ZERO_FLOW/ABNORMAL_DECREASE',
|
||||
alert_title VARCHAR(200) NOT NULL COMMENT '预警标题',
|
||||
alert_description TEXT COMMENT '预警描述',
|
||||
severity VARCHAR(20) DEFAULT 'MEDIUM' COMMENT '严重程度: LOW/MEDIUM/HIGH/CRITICAL',
|
||||
status VARCHAR(20) DEFAULT 'PENDING' COMMENT '处理状态: PENDING/ACKNOWLEDGED/RESOLVED',
|
||||
acknowledged_by VARCHAR(100) NULL,
|
||||
acknowledged_at TIMESTAMP NULL,
|
||||
resolved_by VARCHAR(100) NULL,
|
||||
resolved_at TIMESTAMP NULL,
|
||||
additional_issues TEXT COMMENT '附加问题(JSON)',
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_meter_no (meter_no),
|
||||
INDEX idx_alert_type (alert_type),
|
||||
INDEX idx_severity (severity),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
|
||||
-- 6. 抄表结果统计视图
|
||||
CREATE OR REPLACE VIEW v_reading_statistics AS
|
||||
SELECT
|
||||
r.period,
|
||||
r.area,
|
||||
r.total_meters,
|
||||
r.success_meters,
|
||||
r.failed_meters,
|
||||
r.abnormal_meters,
|
||||
ROUND((r.success_meters * 100.0 / NULLIF(r.total_meters, 0)), 2) as success_rate,
|
||||
ROUND((r.abnormal_meters * 100.0 / NULLIF(r.total_meters, 0)), 2) as abnormal_rate
|
||||
FROM rev_batch_report r
|
||||
ORDER BY r.period DESC, r.area;
|
||||
|
||||
-- 7. 大表监控统计视图
|
||||
CREATE OR REPLACE VIEW v_large_meter_statistics AS
|
||||
SELECT
|
||||
caliber,
|
||||
COUNT(*) as total_count,
|
||||
SUM(CASE WHEN monitor_status = 'NORMAL' THEN 1 ELSE 0 END) as normal_count,
|
||||
SUM(CASE WHEN monitor_status = 'ALARM' THEN 1 ELSE 0 END) as alarm_count,
|
||||
SUM(CASE WHEN monitor_status = 'OFFLINE' THEN 1 ELSE 0 END) as offline_count,
|
||||
ROUND(SUM(monthly_consumption), 2) as total_consumption,
|
||||
ROUND(AVG(monthly_consumption), 2) as avg_consumption,
|
||||
MAX(monthly_consumption) as max_consumption
|
||||
FROM rev_large_meter_monitor
|
||||
GROUP BY caliber
|
||||
ORDER BY caliber;
|
||||
|
||||
Reference in New Issue
Block a user