设计规范
5.5 供水生产-水质管控
5.5.1 药剂投加管控模块
数据库设计
-- 药剂投加站点表
CREATE TABLE water_quality_station (
id BIGSERIAL PRIMARY KEY,
station_name VARCHAR(100) NOT NULL,
station_type VARCHAR(50) NOT NULL, -- '一体化', '八家户', '查村', '沙山子', '大河沿子镇'
location_x DECIMAL(10,6),
location_y DECIMAL(10,6),
status VARCHAR(20) DEFAULT 'ACTIVE',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 药剂投加记录表
CREATE TABLE chemical_dosing_record (
id BIGSERIAL PRIMARY KEY,
station_id BIGINT REFERENCES water_quality_station(id),
chemical_type VARCHAR(50) NOT NULL, -- '絮凝剂', '消毒剂', '其他'
dosage_amount DECIMAL(10,3) NOT NULL,
dosage_unit VARCHAR(20) NOT NULL,
operator_name VARCHAR(100),
record_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'NORMAL'
);
-- 工艺监控参数表
CREATE TABLE process_monitoring_params (
id BIGSERIAL PRIMARY KEY,
station_id BIGINT REFERENCES water_quality_station(id),
param_name VARCHAR(100) NOT NULL,
param_value DECIMAL(12,3),
param_unit VARCHAR(20),
normal_min DECIMAL(12,3),
normal_max DECIMAL(12,3),
record_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'NORMAL' -- 'NORMAL', 'WARNING', 'ALARM'
);
API接口
# 药剂投加站点管理
GET /api/v1/water-quality/stations # 获取站点列表
POST /api/v1/water-quality/stations # 创建站点
PUT /api/v1/water-quality/stations/{id} # 更新站点
DELETE /api/v1/water-quality/stations/{id} # 删除站点
# 药剂投加记录
POST /api/v1/water-quality/chemical-records # 记录投加信息
GET /api/v1/water-quality/chemical-records # 获取投加记录
PUT /api/v1/water-quality/chemical-records/{id} # 更新记录
# 工艺监控参数
POST /api/v1/water-quality/process-params # 记录工艺参数
GET /api/v1/water-quality/process-params # 获取工艺参数
GET /api/v1/water-quality/process-params/{stationId} # 获取指定站点工艺参数
前端组件
WaterQualityStation.vue -- 站点管理页面
ChemicalDosingRecord.vue -- 药剂投加记录
ProcessMonitoring.vue -- 工艺监控面板
5.5.2 水质监测管理模块
数据库设计
-- 水质检测项目表
CREATE TABLE water_quality_test_item (
id BIGSERIAL PRIMARY KEY,
item_name VARCHAR(100) NOT NULL,
item_code VARCHAR(50) UNIQUE NOT NULL,
test_method VARCHAR(200),
normal_range_min DECIMAL(10,3),
normal_range_max DECIMAL(10,3),
unit VARCHAR(20),
is_active BOOLEAN DEFAULT true,
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 人工检测记录表
CREATE TABLE manual_water_quality_test (
id BIGSERIAL PRIMARY KEY,
station_id BIGINT REFERENCES water_quality_station(id),
test_date DATE NOT NULL,
test_items JSONB NOT NULL, -- {itemId: value} 的JSON格式
tester_name VARCHAR(100) NOT NULL,
remarks TEXT,
status VARCHAR(20) DEFAULT 'PENDING',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 自动监测数据表
CREATE TABLE auto_water_quality_data (
id BIGSERIAL PRIMARY KEY,
station_id BIGINT REFERENCES water_quality_station(id),
parameter_code VARCHAR(50) NOT NULL,
parameter_value DECIMAL(12,3),
unit VARCHAR(20),
data_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
data_quality VARCHAR(20) DEFAULT 'GOOD',
device_id VARCHAR(100)
);
API接口
# 水质检测项目管理
GET /api/v1/water-quality/test-items # 获取检测项目列表
POST /api/v1/water-quality/test-items # 创建检测项目
PUT /api/v1/water-quality/test-items/{id} # 更新检测项目
# 人工检测记录
POST /api/v1/water-quality/manual-tests # 创建人工检测记录
GET /api/v1/water-quality/manual-tests # 获取人工检测记录
PUT /api/v1/water-quality/manual-tests/{id} # 更新人工检测记录
# 自动监测数据
GET /api/v1/water-quality/auto-data # 获取自动监测数据
GET /api/v1/water-quality/auto-data/{stationId} # 获取指定站点监测数据
前端组件
ManualTestManagement.vue -- 人工检测管理
AutoMonitoring.vue -- 自动监测展示
WaterQualityReport.vue -- 水质报表
5.3 报警管理中心
数据库设计
-- 报警类型表
CREATE TABLE alarm_type (
id BIGSERIAL PRIMARY KEY,
type_name VARCHAR(100) NOT NULL,
type_code VARCHAR(50) UNIQUE NOT NULL,
severity VARCHAR(20) NOT NULL, -- 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'
description TEXT,
is_active BOOLEAN DEFAULT true,
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 报警记录表
CREATE TABLE alarm_record (
id BIGSERIAL PRIMARY KEY,
alarm_type_id BIGINT REFERENCES alarm_type(id),
station_id BIGINT REFERENCES water_quality_station(id),
alarm_code VARCHAR(50) NOT NULL,
alarm_title VARCHAR(200) NOT NULL,
alarm_content TEXT,
severity VARCHAR(20) NOT NULL,
alarm_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
confirm_time TIMESTAMP,
confirm_user_id BIGINT,
confirm_remarks TEXT,
status VARCHAR(20) DEFAULT 'ACTIVE' -- 'ACTIVE', 'CONFIRMED', 'RESOLVED', 'CLOSED'
);
-- 报警处理记录表
CREATE TABLE alarm_handle_record (
id BIGSERIAL PRIMARY KEY,
alarm_id BIGINT REFERENCES alarm_record(id),
handler_id BIGINT NOT NULL,
handle_type VARCHAR(50) NOT NULL, -- 'CONFIRM', 'PROCESS', 'RESOLVE'
handle_content TEXT,
handle_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
API接口
# 报警总览
GET /api/v1/alarms/overview # 获取报警统计
GET /api/v1/alarms/types # 获取报警类型
GET /api/v1/alarms/records # 获取报警记录列表
# 实时报警
GET /api/v1/alarms/active # 获取活跃报警
PUT /api/v1/alarms/{id}/confirm # 确认报警
PUT /api/v1/alarms/{id}/resolve # 解决报警
# 历史报警
GET /api/v1/alarms/history # 获取历史报警
GET /api/v1/alarms/{id}/details # 获取报警详情
前端组件
AlarmOverview.vue -- 报警总览页面
ActiveAlarm.vue -- 实时报警监控
AlarmHistory.vue -- 历史报警查询
AlarmDetail.vue -- 报警详情页面
数据流图
水质管控数据流
IoT设备 → 实时数据采集 → 数据处理 → 阈值判断 → 报警触发 → 通知推送
↓
用户手动录入 → 数据验证 → 存入数据库 → 展示在界面
报警管理数据流
报警事件 → 实时监控 → 报警分类 → 状态流转 → 处理记录 → 归档统计
前端组件树
WaterManagementSystem/
├── views/
│ ├── WaterQuality/
│ │ ├── StationList.vue -- 站点列表
│ │ ├── StationDetail.vue -- 站点详情
│ │ ├── ChemicalDosing.vue -- 药剂投加
│ │ ├── ProcessMonitoring.vue -- 工艺监控
│ │ ├── ManualTest.vue -- 人工检测
│ │ ├── AutoMonitoring.vue -- 自动监测
│ │ └── QualityReport.vue -- 质量报表
│ ├── AlarmManagement/
│ │ ├── AlarmOverview.vue -- 报警总览
│ │ ├── ActiveAlarm.vue -- 实时报警
│ │ ├── AlarmHistory.vue -- 历史报警
│ │ └── AlarmDetail.vue -- 报警详情
│ └── Dashboard/
│ └── WaterQualityDashboard.vue -- 水质管理总览
├── components/
│ ├── WaterQuality/
│ │ ├── StationCard.vue -- 站点卡片
│ │ ├── ProcessChart.vue -- 工艺图表
│ │ └── QualityChart.vue -- 质量图表
│ └── Alarm/
│ ├── AlarmCard.vue -- 报警卡片
│ ├── AlarmTimeline.vue -- 报警时间线
│ └── SeverityIndicator.vue -- 严重程度指示器
└── store/
├── modules/
│ ├── waterQuality.js -- 水质管理模块
│ └── alarm.js -- 报警管理模块
技术栈
- 后端:Spring Boot 3.x + MyBatis-Plus + Redis
- 前端:Vue 3 + TypeScript + Element Plus + ECharts
- 数据库:PostgreSQL 16 + PostGIS
- 消息队列:Redis Stream
- 实时通信:WebSocket
- 部署:Docker + Docker Compose