| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- -- =============================================
- -- 远传集抄模块 DDL
- -- 批量抄表 + 大表监控(DN80+) + 任务管理 + 数据质量
- -- =============================================
-
- -- 抄表任务
- CREATE TABLE IF NOT EXISTS mr_task (
- id BIGSERIAL PRIMARY KEY,
- task_no VARCHAR(30) UNIQUE NOT NULL,
- task_name VARCHAR(200) NOT NULL,
- task_type VARCHAR(20) NOT NULL, -- batch_read / large_monitor / manual_check
- area VARCHAR(50),
- meter_count INT DEFAULT 0,
- success_count INT DEFAULT 0,
- fail_count INT DEFAULT 0,
- abnormal_count INT DEFAULT 0,
- progress SMALLINT DEFAULT 0, -- 0-100
- status VARCHAR(20) DEFAULT 'pending', -- pending / running / completed / failed / cancelled
- scheduled_time TIMESTAMP,
- started_at TIMESTAMP,
- completed_at TIMESTAMP,
- assigned_to VARCHAR(50),
- remark VARCHAR(500),
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE mr_task IS '抄表任务表';
- CREATE INDEX IF NOT EXISTS idx_mr_task_status ON mr_task(status);
-
- -- 远传抄表记录
- CREATE TABLE IF NOT EXISTS mr_meter_reading (
- id BIGSERIAL PRIMARY KEY,
- task_id BIGINT REFERENCES mr_task(id),
- meter_id BIGINT NOT NULL,
- meter_no VARCHAR(50) NOT NULL,
- device_sn VARCHAR(50),
- prev_reading DECIMAL(12,2),
- curr_reading DECIMAL(12,2),
- consumption DECIMAL(12,2),
- reading_time TIMESTAMP NOT NULL,
- reading_period VARCHAR(10), -- 2026-06
- signal_strength SMALLINT, -- 信号强度 0-100
- battery_level SMALLINT, -- 电池电量 0-100
- read_status VARCHAR(20) DEFAULT 'success', -- success / failed / timeout / abnormal
- abnormal_type VARCHAR(50), -- reverse_flow / over_range / stuck / low_battery / signal_lost
- abnormal_desc VARCHAR(500),
- verified SMALLINT DEFAULT 0,
- verified_by BIGINT,
- verified_at TIMESTAMP,
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE mr_meter_reading IS '远传抄表记录表';
- CREATE INDEX IF NOT EXISTS idx_mr_reading_task ON mr_meter_reading(task_id);
- CREATE INDEX IF NOT EXISTS idx_mr_reading_meter ON mr_meter_reading(meter_id);
- CREATE INDEX IF NOT EXISTS idx_mr_reading_period ON mr_meter_reading(reading_period);
-
- -- 大表监控记录 (DN80+)
- CREATE TABLE IF NOT EXISTS mr_large_meter_monitor (
- id BIGSERIAL PRIMARY KEY,
- meter_id BIGINT NOT NULL,
- meter_no VARCHAR(50) NOT NULL,
- caliber VARCHAR(10) NOT NULL, -- DN80/DN100/DN150/DN200/DN300/DN400
- customer_name VARCHAR(100),
- area VARCHAR(50),
- instant_flow DECIMAL(12,4), -- 瞬时流量 m³/h
- cumulative_flow DECIMAL(12,2), -- 累计流量 m³
- pressure DECIMAL(8,4), -- 压力 MPa
- flow_direction SMALLINT DEFAULT 1, -- 1:正向 -1:反向
- temperature DECIMAL(6,2), -- 水温 ℃
- monitor_time TIMESTAMP NOT NULL,
- status VARCHAR(20) DEFAULT 'normal', -- normal / warning / alarm / offline
- alarm_type VARCHAR(50), -- over_flow / reverse_flow / pressure_low / pressure_high / offline
- alarm_desc VARCHAR(500),
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE mr_large_meter_monitor IS '大表监控记录表(DN80+)';
- CREATE INDEX IF NOT EXISTS idx_mr_large_meter ON mr_large_meter_monitor(meter_id);
- CREATE INDEX IF NOT EXISTS idx_mr_large_time ON mr_large_meter_monitor(monitor_time);
- CREATE INDEX IF NOT EXISTS idx_mr_large_status ON mr_large_meter_monitor(status);
-
- -- 数据质量分析
- CREATE TABLE IF NOT EXISTS mr_data_quality (
- id BIGSERIAL PRIMARY KEY,
- analysis_period VARCHAR(10) NOT NULL, -- 2026-06
- area VARCHAR(50),
- total_meters INT DEFAULT 0,
- read_success INT DEFAULT 0,
- read_failed INT DEFAULT 0,
- read_timeout INT DEFAULT 0,
- abnormal_count INT DEFAULT 0,
- read_rate DECIMAL(6,2), -- 抄表率 %
- success_rate DECIMAL(6,2), -- 成功率 %
- abnormal_rate DECIMAL(6,2), -- 异常率 %
- avg_signal DECIMAL(6,2), -- 平均信号强度
- avg_battery DECIMAL(6,2), -- 平均电池电量
- quality_score DECIMAL(6,2), -- 数据质量评分 0-100
- quality_level VARCHAR(10), -- excellent / good / fair / poor
- detail JSONB, -- 详细分析数据
- deleted SMALLINT DEFAULT 0,
- created_at TIMESTAMP DEFAULT NOW(),
- updated_at TIMESTAMP DEFAULT NOW()
- );
- COMMENT ON TABLE mr_data_quality IS '抄表数据质量分析表';
- CREATE INDEX IF NOT EXISTS idx_mr_quality_period ON mr_data_quality(analysis_period);
|