严格基于指定水利水务相关文件(核心为《06行业应用系统功能设计-02水利水务.docx》简称《06-02水利》、《03智慧城市一网统管平台-系统数据库表.docx》简称《03数据库表》、《05智慧城市一网统管平台 数据中枢系统功能设计.docx》简称《05数据中枢》、《01智慧城市一网统管平台-系统总体架构及其功能要点-20251018修订.docx》简称《01总体架构》、《02数据库表设计命名规范及英文简称对照表.docx》简称《02命名规范》),拆解“水质传感器→数据清洗→预警模块”的全链路对接逻辑,所有架构节点、数据流转、模块关联均来自文件原文,不涉及外部信息。
一、架构对接总览:文件依据与核心目标
根据《05数据中枢》20.7节“设备管理”、20.8节“运行监测”、20.9节“预警告警”及《06-02水利》3.2节“水资源监测”描述,水利数据中枢对接的核心目标是实现“水质数据实时接入、标准化清洗、异常自动预警”,解决传统“传感器数据碎片化、清洗无标准、预警响应慢”痛点(《01总体架构》P11“数据驱动闭环”要求)。
核心架构链路(基于文件的三层流转):
graph LR A[水质传感器层] -->|实时采集| B[数据中枢处理层(清洗/存储)] B -->|异常判定| C[预警模块层(触发/推送)] C -->|处置反馈| B[数据中枢处理层(结果归档)]
关键文件支撑:
《05数据中枢》:提供“设备接入网关、数据清洗引擎、预警规则引擎”三大核心模块,是链路中枢;
《03数据库表》:按“基础层(sys_)→业务层(biz_)→统计层(stat_*)”存储各环节数据,符合《02命名规范》;
《06-02水利》:明确水质传感器类型、清洗标准(如pH值范围6.5-8.5)、预警阈值,定义对接边界。
二、第一层:水质传感器层——数据采集源头(文件定义的设备与接入规则)
2.1 传感器类型与数据内容(《06-02水利》《05数据中枢》)
根据《06-02水利》3.2节“水质在线监测”要求,需接入4类核心水质传感器,每类传感器对应明确的数据采集内容,均需关联《03数据库表》的设备基础信息:
| 传感器类别 | 具体设备(文件依据) | 采集数据内容(对应《03数据库表》字段) | 采集频率(文件要求) |
|---|---|---|---|
| pH值传感器 | 在线pH监测仪(《06-02水利》3.2.2节) | pH值(ph_value)→ 存储至biz_device_telemetry_data/biz_water_qual_mon | 实时(10秒/次) |
| 浊度传感器 | 激光浊度仪(《06-02水利》3.2.2节) | 浊度(turbidity,单位:NTU)→ 存储至上述两表 | 实时(10秒/次) |
| 溶解氧传感器 | 荧光法溶解氧仪(《06-02水利》3.2.4节“生态监测”) | 溶解氧(dissolved_oxygen,单位:mg/L)→ 存储至上述两表 | 定时(1分钟/次) |
| 余氯传感器 | 在线余氯监测仪(《06-02水利》3.4节“供水保障”) | 余氯(residual_chlorine,单位:mg/L)→ 存储至上述两表 | 定时(1分钟/次) |
2.2 传感器接入规则(《05数据中枢》《01总体架构》)
接入协议:所有传感器需通过MQTT协议接入《05数据中枢》20.7.3节“设备接入网关”(文件明确协议要求),数据格式为JSON,字段命名需符合《02命名规范》(snake_case),如“pH值”字段名必须为
ph_value;设备注册:传感器需先在《03数据库表》
sys_device表完成注册(录入device_code设备编码、device_type=02(水质传感器)、area_code所属区域、fac_id关联监测点),未注册设备数据将被中枢拦截(《05数据中枢》20.7.1节“设备注册管理”);数据预处理:传感器采集数据需经过“格式校验+范围初筛”(如pH值需在0-14之间),无效数据(如超出范围、字段缺失)暂存至
biz_device_invalid_data(设备无效数据表),并触发“设备数据无效”预警(《05数据中枢》20.7.4节“数据预处理”)。
三、第二层:数据中枢处理层——数据清洗与存储(文件定义的“清洗→关联→存储”闭环)
数据中枢是链路核心,基于《05数据中枢》20.8节“运行监测”模块,实现数据“标准化清洗→多表关联→分层存储”,每环节均关联《03数据库表》。
3.1 第一步:数据清洗(解决“格式不统一、数据异常”)
(1)核心模块:数据清洗引擎(《05数据中枢》20.8.2节)
清洗规则(文件依据):
格式统一:将传感器上报的非标准单位数据转换为《06-02水利》要求的标准单位(如浊度统一为NTU,溶解氧统一为mg/L);
异常值剔除:删除超出“水质标准范围”的数据(如pH<6.5或>8.5、浊度>5NTU,标准来自《生活饮用水卫生标准》GB 5749-2022,《06-02水利》P39引用),标记为“异常数据”存入
biz_water_qual_abnormal(水质异常数据表);冗余去重:删除10秒内同一传感器上报的重复数据(如连续两次pH值均为7.2),保留最新一条;
文件支撑:《05数据中枢》20.8.2节“清洗规则配置”、《06-02水利》3.2节“水质监测标准”。
(2)代码逻辑片段(适配文件表结构)
// 数据清洗Service层(基于Spring Boot+MyBatis-Plus) @Service public class WaterQualCleanService { @Autowired private BizDeviceTelemetryDataMapper telemetryMapper; @Autowired private BizWaterQualMonMapper qualMonMapper; @Autowired private BizWaterQualAbnormalMapper abnormalMapper; /** * 水质数据清洗:格式统一+异常剔除+冗余去重 */ public void cleanWaterQualData(String deviceCode, JSONObject sensorData) { // 1. 格式统一:单位转换(示例:若传感器上报ppm,转换为mg/L) BigDecimal phValue = sensorData.getBigDecimal("ph_value"); BigDecimal turbidity = sensorData.getBigDecimal("turbidity"); // 浊度单位转换(若为度,转换为NTU:1度≈1NTU) if (sensorData.getString("turbidity_unit").equals("degree")) { turbidity = turbidity.multiply(new BigDecimal("1.0")); } // 2. 异常值剔除(基于《06-02水利》水质标准) List<String> abnormalReasons = new ArrayList<>(); if (phValue.compareTo(new BigDecimal("6.5")) < 0 || phValue.compareTo(new BigDecimal("8.5")) > 0) { abnormalReasons.add("pH值超出标准范围(6.5-8.5)"); } if (turbidity.compareTo(new BigDecimal("5")) > 0) { abnormalReasons.add("浊度超出标准范围(≤5NTU)"); } // 3. 异常数据处理:存入异常表并返回 if (!abnormalReasons.isEmpty()) { BizWaterQualAbnormal abnormal = new BizWaterQualAbnormal(); abnormal.setId(UUID.randomUUID().toString()); abnormal.setDeviceCode(deviceCode); abnormal.setAbnormalData(sensorData.toJSONString()); abnormal.setAbnormalReason(String.join(";", abnormalReasons)); abnormal.setCreateTime(new Date()); abnormalMapper.insert(abnormal); return; } // 4. 冗余去重:查询10秒内是否有重复数据 LambdaQueryWrapper<BizDeviceTelemetryData> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(BizDeviceTelemetryData::getDeviceCode, deviceCode) .ge(BizDeviceTelemetryData::getTelemetryTime, DateUtils.addSeconds(new Date(), -10)) .last("limit 1"); if (telemetryMapper.selectCount(wrapper) > 0) { return; // 存在重复数据,不存储 } // 5. 清洗后数据存储(关联《03数据库表》) saveCleanData(deviceCode, phValue, turbidity, sensorData); } // 存储清洗后数据至业务表 private void saveCleanData(String deviceCode, BigDecimal phValue, BigDecimal turbidity, JSONObject sensorData) { // 1. 存储设备遥测表(biz_device_telemetry_data) BizDeviceTelemetryData telemetry = new BizDeviceTelemetryData(); telemetry.setId(UUID.randomUUID().toString()); telemetry.setDeviceCode(deviceCode); telemetry.setPhValue(phValue); telemetry.setTurbidity(turbidity); telemetry.setTelemetryTime(new Date()); telemetryMapper.insert(telemetry); // 2. 关联监测点,存储水质监测表(biz_water_qual_mon) SysDevice device = SpringContextHolder.getBean(SysDeviceMapper.class) .selectOne(new LambdaQueryWrapper<SysDevice>().eq(SysDevice::getDeviceCode, deviceCode)); BizWaterQualMon qualMon = new BizWaterQualMon(); qualMon.setQualId(UUID.randomUUID().toString()); qualMon.setFacId(device.getFacId()); // 关联监测点设施ID qualMon.setPhValue(phValue); qualMon.setTurbidity(turbidity); qualMon.setMonitorTime(new Date()); qualMon.setQualStatus(1); // 1=达标(清洗后无异常) qualMonMapper.insert(qualMon); } }3.2 第二步:数据关联(解决“数据孤立、无上下文”)
核心逻辑:关联“传感器数据-监测点-行政区划”,补充数据上下文,支撑后续预警与指标计算;
关联关系(《03数据库表》):
传感器→监测点:通过
sys_device的fac_id关联sys_water_fac(水利设施表),获取监测点名称、位置(coord_x/coord_y);监测点→行政区划:通过
sys_water_fac的area_code关联sys_area(行政区划表),获取区域名称(如“杭州市西湖区”);
文件依据:《05数据中枢》20.8.3节“数据关联规则”、《06-02水利》3.2节“监测点区域归属”。
3.3 第三步:分层存储(符合《02命名规范》)
清洗关联后的数据按《03数据库表》分层存储,支撑预警模块调用与后续业务应用:
| 存储层级 | 对应数据表(《03数据库表》) | 存储数据类型 | 支撑场景(文件依据) |
|---|---|---|---|
| 业务层(biz_*) | biz_device_telemetry_data(设备遥测)、biz_water_qual_mon(水质监测) | 传感器实时清洗后数据、水质监测达标状态 | 预警模块实时异常判定(《05数据中枢》20.9节)、水质达标率计算(6.3节) |
| 业务层(biz_*) | biz_water_qual_abnormal(水质异常) | 清洗剔除的异常数据(如pH<6.5) | 异常数据追溯、传感器故障排查(《06-02水利》3.2.2节) |
| 统计层(stat_*) | stat_water_qual_hour(水质小时统计) | 每小时水质数据平均值(如pH小时均值、浊度小时均值) | 水质趋势分析、大屏展示(《07全局总览》) |
四、第三层:预警模块层——异常触发与推送(文件定义的“规则判定→预警生成→推送”)
基于《05数据中枢》20.9节“预警告警”模块,实现“水质异常→预警触发→多端推送”,预警逻辑与阈值均来自《06-02水利》。
4.1 预警规则配置(《06-02水利》《05数据中枢》)
(1)预警阈值(文件明确标准)
| 预警类型 | 触发条件(《06-02水利》P39-P40) | 预警等级(《03数据库表》sys_dict_warn_level) |
|---|---|---|
| pH值异常预警 | pH<6.5或pH>8.5(持续10秒) | 高优(1级,红色预警) |
| 浊度异常预警 | 浊度>5NTU(持续30秒) | 中优(2级,黄色预警) |
| 溶解氧异常预警 | 溶解氧<2mg/L(持续1分钟,生态风险) | 高优(1级,红色预警) |
| 余氯异常预警 | 余氯<0.2mg/L或>4mg/L(持续1分钟,供水安全) | 中优(2级,黄色预警) |
(2)规则存储(《03数据库表》)
预警规则配置在biz_early_warn_rule(预警规则表),字段如下:
| 字段名 | 字段含义 | 示例值(pH 异常预警) | 建议字段类型 | 补充约束 / 说明 |
| rule_id | 规则唯一标识 ID | WARN_RULE_WATER_PH_001 | VARCHAR(64) | 主键、非空、唯一,建议按 “业务_类型_序号” 命名 |
| warn_type | 预警类型(枚举值,标识预警业务场景) | WATER_QUAL_PH | VARCHAR(32) | 非空,需关联预警类型字典表(如 WATER_QUAL_PH = 水质 pH 异常) |
| trigger_condition | 预警触发条件(可执行的 SQL 条件片段,仅包含指标 + 运算符 + 阈值) | ph_value < 6.5 OR ph_value > 8.5 | TEXT | 非空,避免复杂函数 / 子查询,统一指标字段命名 |
| trigger_duration | 触发持续时间(秒,指标满足触发条件的持续时长达标才触发预警) | 10 | INT | 非空、≥0,默认值 0(即时触发) |
| warn_level | 预警等级(1 - 高优,2 - 中优,3 - 低优) | 1 | TINYINT | 非空,仅允许 1/2/3 枚举值 |
| fac_type | 关联设施类型编码(关联设施类型字典表) | 2 | VARCHAR(16) | 非空,如 02 = 水质监测点、01 = 污水泵站 |
4.2 预警触发与生成(《05数据中枢》20.9.4节)
核心模块:预警规则引擎,定时(10秒/次)查询
biz_water_qual_mon的实时数据,匹配biz_early_warn_rule的触发条件;触发逻辑:
当
biz_water_qual_mon的ph_value持续10秒<6.5,规则引擎判定“pH异常”,生成预警单(biz_early_warn_alert);预警单关联
fac_id(监测点)、area_code(区域),补充“预警内容”(如“西湖区XX监测点pH值5.8,低于标准6.5”);
文件依据:《05数据中枢》20.9.4节“预警生成逻辑”、《06-02水利》3.2节“水质异常响应”。
4.3 预警推送(多端适配,《04工作台》《07全局总览》)
根据《05数据中枢》20.9.5节“预警推送”要求,预警需推送至3类终端,确保责任人员及时响应:
| 推送终端 | 推送方式(文件依据) | 数据来源(《03数据库表》) | 交互逻辑(文件要求) |
|---|---|---|---|
| 《04工作台》 | WebSocket实时推送至“我的预警”模块(《04工作台》1.4节“消息中心”) | biz_early_warn_alert(预警单)、sys_user(责任用户) | 预警条目标红,点击查看“异常数据曲线+关联监测点地图” |
| 水利指挥大屏 | 弹窗+声光提醒(《07全局总览》3.1节“预警展示”) | biz_early_warn_alert、stat_water_qual_hour(统计数据) | 预警弹窗显示“区域+异常指标+处置建议”,地图对应监测点闪烁 |
| 责任人员APP | 推送通知(《06-02水利》3.2节“移动端响应”) | biz_early_warn_alert、sys_user_role(用户角色) | 通知含“预警等级+点击处理”按钮,跳转至工单处置页 |
4.4 预警处置反馈(闭环管理,《01总体架构》P11)
处置流程:责任人员通过《04工作台》接收预警后,生成“水质异常处置工单”(
biz_water_dispatch_wo),处置完成后更新工单状态(deal_status=2,已结案);反馈逻辑:工单结案后,系统自动更新
biz_early_warn_alert的handle_status(处置状态=2,已解除),并将处置结果归档至stat_early_warn_handle(预警处置统计表);文件依据:《05数据中枢》20.10节“指挥协调”、《06-02水利》3.2节“水质异常处置闭环”。
五、架构对接验证:文件合规性与实战适配
根据《06-02水利》3.2节“水质监测验收标准”,需通过3类验证确保对接合规:
| 验证场景 | 验证步骤 | 预期结果(文件依据) |
|---|---|---|
| pH异常预警触发 | 1. 模拟传感器上报pH=5.8(持续10秒);2. 查看预警模块 | 1. 生成pH异常预警单(biz_early_warn_alert);2. 《04工作台》“我的预警”实时接收,地图监测点闪烁(《05数据中枢》20.9节) |
| 数据清洗有效性 | 1. 传感器上报浊度=6NTU(超标准);2. 查看数据表 | 1. 数据存入biz_water_qual_abnormal(异常表);2.biz_water_qual_mon无该数据(《05数据中枢》20.8节) |
| 预警推送及时性 | 1. 触发预警;2. 记录推送时间差 | 推送至《04工作台》延迟≤10秒(《01总体架构》“实时响应”要求) |
六、总结:架构对接的文件闭环
“水质传感器→数据清洗→预警模块”的架构对接,完全基于指定文件构建:
数据层:依赖《03数据库表》的
sys_*(基础)、biz_*(业务)表,字段命名符合《02命名规范》;逻辑层:传感器接入、数据清洗、预警触发均遵循《05数据中枢》的模块职责与《06-02水利》的业务标准;
应用层:预警推送适配《04工作台》《07全局总览》,处置反馈形成“监测→预警→处置→归档”闭环,符合《01总体架构》“数据驱动治理”目标。
所有对接节点无外部依赖,仅针对指定文件,确保与一网统管平台整体架构完全兼容。