571 lines
22 KiB
Markdown
571 lines
22 KiB
Markdown
# 智慧水务管理系统 — 系统设计文档
|
||||
|
|
|
|||
|
|
> 版本:v1.0 | 日期:2026-06-14 | 作者:bot_pm
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、技术选型
|
|||
|
|
|
|||
|
|
### 1.1 总体技术栈
|
|||
|
|
|
|||
|
|
| 层次 | 技术 | 版本要求 | 选型理由 |
|
|||
|
|
|------|------|----------|----------|
|
|||
|
|
| 后端框架 | Spring Cloud Alibaba | 2024.x | 微服务生态成熟,Nacos 服务治理 |
|
|||
|
|
| 单体可回退 | Spring Boot 3.x | 3.3+ | 小规模可单体启动,渐进式拆分 |
|
|||
|
|
| 前端框架 | Vue 3 + TypeScript | 3.5+ | 生态丰富,GIS 组件支持好 |
|
|||
|
|
| 前端 UI | Element Plus + ECharts | 最新 | 大屏可视化 + 中后台表单 |
|
|||
|
|
| 移动端 | Flutter 3.x | 3.24+ | 一套代码 Android/iOS |
|
|||
|
|
| 网关 | Spring Cloud Gateway | 匹配 SC | 统一入口、限流、鉴权 |
|
|||
|
|
| 服务注册/配置 | Nacos | 2.4+ | 服务发现 + 配置中心一体化 |
|
|||
|
|
| 认证授权 | Sa-Token + OAuth2 | 最新 | 轻量级 RBAC,支持 SSO |
|
|||
|
|
| 数据库 | PostgreSQL 16 + PostGIS | 16+ | 空间数据原生支持,替代 Oracle Spatial |
|
|||
|
|
| 时序数据库 | TDengine 3.x | 3.3+ | 物联网时序数据写入性能优,SQL 兼容 |
|
|||
|
|
| 缓存 | Redis 7 + Redisson | 7.2+ | 缓存 + 分布式锁 |
|
|||
|
|
| 消息队列 | Apache Kafka | 3.8+ | IoT 高吞吐实时流 |
|
|||
|
|
| 搜索引擎 | Elasticsearch | 8.x | 日志/文档全文检索 |
|
|||
|
|
| 流程引擎 | Camunda 7 / Flowable | 最新 | BPMN 2.0,用户量大 |
|
|||
|
|
| 对象存储 | MinIO / 阿里云 OSS | 最新 | 文件、视频存储 |
|
|||
|
|
| 容器编排 | Docker Compose → K8s | 最新 | 分步过渡 |
|
|||
|
|
|
|||
|
|
### 1.2 选型对比与决策
|
|||
|
|
|
|||
|
|
#### GIS 引擎选型
|
|||
|
|
|
|||
|
|
| 方案 | 优势 | 劣势 | 推荐场景 |
|
|||
|
|
|------|------|------|----------|
|
|||
|
|
| **超图 iServer** | 国内水利项目标配,二三维一体化 | 授权费高(15-30万) | 预算充足 |
|
|||
|
|
| **开源 MapServer+GeoServer** | 免费 | 功能较弱,三维支持差 | 预算有限 |
|
|||
|
|
| **Leaflet + Cesium** | 前端轻量三维 | 瓦片服务需另配 | 推荐混合方案 |
|
|||
|
|
|
|||
|
|
**推荐**:短期 GeoServer + Leaflet/Cesium;长期按甲方要求替换为超图。
|
|||
|
|
|
|||
|
|
#### 视频 AI 引擎
|
|||
|
|
|
|||
|
|
| 方案 | 优势 | 劣势 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| **自研训练(YOLOv8)** | 可定制 | 需标注数据+3-5人月训练 |
|
|||
|
|
| **采购成熟产品** | 开箱即用 | 10-20万授权费 |
|
|||
|
|
| **对接现有视频平台 SDK** | 复用已有投资 | 依赖厂商API |
|
|||
|
|
|
|||
|
|
**推荐**:优先对接甲方现有视频平台;人员闯入模型采用预训练 YOLO + 少量迁移学习。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、系统架构
|
|||
|
|
|
|||
|
|
### 2.1 整体架构图
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
┌─────────────────────────────────────────────────────────────┐
|
|||
|
|
│ 接入层 (Gateway) │
|
|||
|
|
│ Nginx → Spring Cloud Gateway (限流/鉴权/路由) │
|
|||
|
|
│ 统一入口: Web / Flutter APP / 微信小程序 / OpenAPI │
|
|||
|
|
├─────────────────────────────────────────────────────────────┤
|
|||
|
|
│ 应用服务层 │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
|
|||
|
|
│ │供水生产 │ │营业收费 │ │巡检管理 │ │大数据分析 │ │
|
|||
|
|
│ │管理服务 │ │服务 │ │服务 │ │服务 │ │
|
|||
|
|
│ ├──────────┤ ├──────────┤ ├──────────┤ ├──────────────┤ │
|
|||
|
|
│ │总览/监测 │ │营收/报装 │ │任务/轨迹 │ │BI看板/报表 │ │
|
|||
|
|
│ │水质/调度 │ │表务/客服 │ │统计/设置 │ │决策模型 │ │
|
|||
|
|
│ │报警/数据 │ │微信/集抄 │ │巡检APP │ │大屏展示 │ │
|
|||
|
|
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 流程引擎服务 │ │
|
|||
|
|
│ │ Camunda BPMN → 流程定义/编排/监控 │ │
|
|||
|
|
│ └──────────────────────────────────────────────────────┘ │
|
|||
|
|
├─────────────────────────────────────────────────────────────┤
|
|||
|
|
│ 能力层 (中台) │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
|
|||
|
|
│ │物联网平台│ │数据引擎 │ │工单引擎 │ │消息通知 │ │
|
|||
|
|
│ │设备接入 │ │汇聚/治理 │ │任务流转 │ │短信/推送/WS │ │
|
|||
|
|
│ │协议适配 │ │服务/目录 │ │跟踪/统计 │ │邮件/订阅 │ │
|
|||
|
|
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
|
|||
|
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|||
|
|
│ │ 基础服务平台 │ │
|
|||
|
|
│ │ 认证授权(Sa-Token) / 用户管理 / 部门管理 / 日志 │ │
|
|||
|
|
│ └──────────────────────────────────────────────────────┘ │
|
|||
|
|
├─────────────────────────────────────────────────────────────┤
|
|||
|
|
│ 数据存储层 │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
|
|||
|
|
│ │PostgreSQL│ │ TDengine │ │ Redis │ │Elasticsearch │ │
|
|||
|
|
│ │+PostGIS │ │ 时序数据 │ │ 缓存/锁 │ │ 搜索/日志 │ │
|
|||
|
|
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
|
|||
|
|
│ ┌──────────┐ ┌──────────┐ │
|
|||
|
|
│ │ MinIO │ │ Kafka │ │
|
|||
|
|
│ │ 文件存储 │ │ 消息队列 │ │
|
|||
|
|
│ └──────────┘ └──────────┘ │
|
|||
|
|
├─────────────────────────────────────────────────────────────┤
|
|||
|
|
│ 外部集成层 │
|
|||
|
|
│ ┌────────┐ ┌────────┐ ┌──────────┐ ┌────────┐ ┌────────┐ │
|
|||
|
|
│ │ SCADA │ │ 视频 │ │ 支付宝 │ │ 微信 │ │GIS地图 │ │
|
|||
|
|
│ │ 对接 │ │ 平台 │ │ 生活缴费 │ │ 支付 │ │ 服务 │ │
|
|||
|
|
│ └────────┘ └────────┘ └──────────┘ └────────┘ └────────┘ │
|
|||
|
|
└─────────────────────────────────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 微服务拆分
|
|||
|
|
|
|||
|
|
| 微服务 | 端口 | 职责 | 拆分优先级 |
|
|||
|
|
|--------|:----:|------|:----------:|
|
|||
|
|
| `wm-gateway` | 8080 | API 网关/鉴权/限流 | P0 |
|
|||
|
|
| `wm-base` | 8081 | 用户/角色/菜单/部门/日志 | P0 |
|
|||
|
|
| `wm-iot` | 8082 | 物联网平台:设备接入/协议适配/设备管理 | P0 |
|
|||
|
|
| `wm-data-engine` | 8083 | 数据引擎:汇聚/治理/服务/目录 | P0 |
|
|||
|
|
| `wm-bpm` | 8084 | 流程引擎:Camunda 封装 | P0 |
|
|||
|
|
| `wm-production` | 8085 | 供水生产管理平台全部模块 | P1 |
|
|||
|
|
| `wm-revenue` | 8086 | 营业收费系统全部模块 | P1 |
|
|||
|
|
| `wm-patrol` | 8087 | 巡检管理系统 | P2 |
|
|||
|
|
| `wm-bi` | 8088 | 大数据分析/BI | P2 |
|
|||
|
|
| `wm-notify` | 8089 | 消息通知:短信/极光推送/WebSocket | P1 |
|
|||
|
|
| `wm-job` | 8090 | 定时任务调度(XXL-Job) | P1 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、关键模块设计
|
|||
|
|
|
|||
|
|
### 3.1 物联网平台
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
设备 → [MQTT Broker(EMQX)] → [Kafka] → [wm-iot]
|
|||
|
|
↑ 设备认证 ↑ 规则引擎路由 ↑ 设备管理/影子/OTA
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**协议适配器模式**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
wm-iot/adapters/
|
|||
|
|
├── MqttAdapter.java # MQTT 适配
|
|||
|
|
├── CoapAdapter.java # CoAP 适配
|
|||
|
|
├── ModbusAdapter.java # Modbus TCP/RTU
|
|||
|
|
├── HttpAdapter.java # HTTP 直连
|
|||
|
|
└── DeviceModelMapper.java # 统一设备模型转换
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- **设备影子**:Redis 存储设备期望/上报状态,断线自动同步
|
|||
|
|
- **OTA 升级**:MinIO 存储固件,设备心跳拉取更新
|
|||
|
|
- **数据路由**:EMQX 规则引擎 → Kafka Topic 分流(`iot.raw.{deviceType}`)
|
|||
|
|
|
|||
|
|
### 3.2 数据引擎
|
|||
|
|
|
|||
|
|
**数据流转**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
数据源 → 采集适配 → Kafka → 实时流(Flink) → TDengine(时序)
|
|||
|
|
↘ ↘
|
|||
|
|
批量(Spark) → PostgreSQL(业务数据)
|
|||
|
|
→ Elasticsearch(全文)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**治理流水线**:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
原始数据 → 标准化 → 清洗 → 质控 → 关联 → 入仓
|
|||
|
|
(水利标准映射) (缺失/异常) (质量评分) (血缘) (增量/全量)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.3 GIS 集成
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
前端: Vue3 + Leaflet(2D) / Cesium(3D)
|
|||
|
|
↕ WMS/WMTS/TMS
|
|||
|
|
后端: GeoServer(瓦片服务) ← PostGIS(空间数据库)
|
|||
|
|
↑
|
|||
|
|
空间数据: 管网矢量(shp→PostGIS)、监测点位(动态图层)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.4 报警引擎
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
IoT数据 → Kafka → wm-iot(数据消费)
|
|||
|
|
↓
|
|||
|
|
规则引擎(阈值判断)
|
|||
|
|
↓
|
|||
|
|
Redis(去重窗口)
|
|||
|
|
↓
|
|||
|
|
wm-notify(通知分发)
|
|||
|
|
↓
|
|||
|
|
┌───────┼────────┐
|
|||
|
|
短信 APP推送 WebSocket(实时弹窗)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**报警等级**:🟢 提示 → 🟡 一般 → 🟠 严重 → 🔴 紧急
|
|||
|
|
|
|||
|
|
**去重策略**:同一设备+同一类型+N分钟内只告警一次。
|
|||
|
|
|
|||
|
|
### 3.5 调度推演引擎
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
预案模板库 → 参数填充 → 管网水力模型(EPANET) → 调度策略生成
|
|||
|
|
↓
|
|||
|
|
指令下发 → 执行跟踪 → 效果评估
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- 爆管模拟:阀门关闭策略 → 影响区域分析 → 应急供水方案
|
|||
|
|
- 水质异常:污染物扩散模拟 → 排放方案
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、数据库设计(核心表)
|
|||
|
|
|
|||
|
|
### 4.1 用户权限体系
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 部门表
|
|||
|
|
CREATE TABLE sys_dept (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
parent_id BIGINT,
|
|||
|
|
dept_name VARCHAR(100),
|
|||
|
|
dept_type VARCHAR(20), -- water_bureau(水利局)/water_company(水务公司)/ops(运维)
|
|||
|
|
sort_order INT,
|
|||
|
|
status TINYINT DEFAULT 1,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 用户表
|
|||
|
|
CREATE TABLE sys_user (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
dept_id BIGINT REFERENCES sys_dept(id),
|
|||
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|||
|
|
password VARCHAR(255) NOT NULL,
|
|||
|
|
real_name VARCHAR(50),
|
|||
|
|
phone VARCHAR(20),
|
|||
|
|
email VARCHAR(100),
|
|||
|
|
role_type VARCHAR(30), -- admin/leader/manager/operator/tech
|
|||
|
|
status TINYINT DEFAULT 1,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 角色表
|
|||
|
|
CREATE TABLE sys_role (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
role_name VARCHAR(50) UNIQUE,
|
|||
|
|
role_key VARCHAR(50) UNIQUE, -- admin/supervisor/biz_manager/field_ops/tech_maintain
|
|||
|
|
data_scope VARCHAR(20), -- ALL/DEPT/SELF
|
|||
|
|
description VARCHAR(200),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 角色-用户关联
|
|||
|
|
CREATE TABLE sys_user_role (
|
|||
|
|
user_id BIGINT REFERENCES sys_user(id),
|
|||
|
|
role_id BIGINT REFERENCES sys_role(id),
|
|||
|
|
PRIMARY KEY (user_id, role_id)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.2 设备管理(物联网)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 设备模型定义
|
|||
|
|
CREATE TABLE iot_device_model (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
model_key VARCHAR(50) UNIQUE, -- 比如 water_meter_dn15
|
|||
|
|
model_name VARCHAR(100), -- DN15远传水表
|
|||
|
|
vendor VARCHAR(100), -- 厂商
|
|||
|
|
protocol VARCHAR(20), -- MQTT/Modbus/CoAP
|
|||
|
|
properties JSONB, -- 属性定义 [{key, name, unit, data_type, range}]
|
|||
|
|
commands JSONB, -- 支持指令 [{key, name, params}]
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 设备实例
|
|||
|
|
CREATE TABLE iot_device (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
device_sn VARCHAR(100) UNIQUE, -- 设备序列号
|
|||
|
|
device_name VARCHAR(200),
|
|||
|
|
model_id BIGINT REFERENCES iot_device_model(id),
|
|||
|
|
device_type VARCHAR(30), -- flow_meter/pressure/valve/water_quality/level
|
|||
|
|
position_type VARCHAR(20), -- water_plant/pressure_station/pipe_network/village
|
|||
|
|
loc_lng DOUBLE PRECISION, -- 经度
|
|||
|
|
loc_lat DOUBLE PRECISION, -- 纬度
|
|||
|
|
geom GEOMETRY(Point, 4326), -- PostGIS 空间坐标
|
|||
|
|
area VARCHAR(50), -- 所属片区
|
|||
|
|
station_id BIGINT, -- 所属站点
|
|||
|
|
status VARCHAR(20), -- online/offline/maintenance/fault
|
|||
|
|
last_report_time TIMESTAMP,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.3 时序数据(TDengine)
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- TDengine 超级表:设备遥测数据
|
|||
|
|
CREATE STABLE iot_telemetry (
|
|||
|
|
ts TIMESTAMP,
|
|||
|
|
device_sn NCHAR(100),
|
|||
|
|
metric_key NCHAR(50),
|
|||
|
|
metric_value DOUBLE,
|
|||
|
|
quality TINYINT
|
|||
|
|
) TAGS (
|
|||
|
|
device_type NCHAR(30),
|
|||
|
|
area NCHAR(50)
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 按设备类型创建子表
|
|||
|
|
CREATE TABLE flow_data USING iot_telemetry TAGS('flow_meter', '精芒片区');
|
|||
|
|
CREATE TABLE press_data USING iot_telemetry TAGS('pressure', '托里片区');
|
|||
|
|
CREATE TABLE wq_data USING iot_telemetry TAGS('water_quality', '一体化水厂');
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.4 营业收费
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 用水户
|
|||
|
|
CREATE TABLE rev_customer (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
customer_no VARCHAR(30) UNIQUE, -- 户号
|
|||
|
|
customer_name VARCHAR(100),
|
|||
|
|
customer_type VARCHAR(20), -- residential/business/enterprise/institution
|
|||
|
|
area VARCHAR(50),
|
|||
|
|
address VARCHAR(300),
|
|||
|
|
phone VARCHAR(20),
|
|||
|
|
id_card VARCHAR(18),
|
|||
|
|
contract_no VARCHAR(50),
|
|||
|
|
status VARCHAR(20) DEFAULT 'active',
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 水表档案
|
|||
|
|
CREATE TABLE rev_meter (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
meter_no VARCHAR(50) UNIQUE,
|
|||
|
|
customer_id BIGINT REFERENCES rev_customer(id),
|
|||
|
|
device_id BIGINT REFERENCES iot_device(id), -- 关联IoT设备
|
|||
|
|
caliber VARCHAR(10), -- DN15/DN20/DN40...
|
|||
|
|
meter_type VARCHAR(20), -- mechanical/ultrasonic/electromagnetic
|
|||
|
|
initial_reading DECIMAL(10,2),
|
|||
|
|
install_date DATE,
|
|||
|
|
status VARCHAR(20), -- active/dismantled/scrapped/repaired
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 抄表记录
|
|||
|
|
CREATE TABLE rev_reading (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
meter_id BIGINT REFERENCES rev_meter(id),
|
|||
|
|
reading_date DATE,
|
|||
|
|
prev_reading DECIMAL(10,2),
|
|||
|
|
curr_reading DECIMAL(10,2),
|
|||
|
|
consumption DECIMAL(10,2), -- 用水量
|
|||
|
|
read_type VARCHAR(20), -- manual/remote/estimate
|
|||
|
|
reader_id BIGINT,
|
|||
|
|
photo_url VARCHAR(500),
|
|||
|
|
verified TINYINT DEFAULT 0,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 水费账单
|
|||
|
|
CREATE TABLE rev_bill (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
customer_id BIGINT REFERENCES rev_customer(id),
|
|||
|
|
bill_period VARCHAR(10), -- 2026-06
|
|||
|
|
consumption DECIMAL(10,2),
|
|||
|
|
water_fee DECIMAL(10,2),
|
|||
|
|
sewage_fee DECIMAL(10,2),
|
|||
|
|
total_fee DECIMAL(10,2),
|
|||
|
|
paid_fee DECIMAL(10,2) DEFAULT 0,
|
|||
|
|
status VARCHAR(20), -- pending/partial/paid/overdue
|
|||
|
|
due_date DATE,
|
|||
|
|
paid_at TIMESTAMP,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.5 巡检系统
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 巡检路线
|
|||
|
|
CREATE TABLE patrol_route (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
route_name VARCHAR(100),
|
|||
|
|
area VARCHAR(50),
|
|||
|
|
route_points JSONB, -- [{seq, lng, lat, name, device_ids}]
|
|||
|
|
estim_duration INT, -- 预计时长(分钟)
|
|||
|
|
status TINYINT DEFAULT 1,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 巡检任务
|
|||
|
|
CREATE TABLE patrol_task (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
route_id BIGINT REFERENCES patrol_route(id),
|
|||
|
|
assignee_id BIGINT REFERENCES sys_user(id),
|
|||
|
|
task_date DATE,
|
|||
|
|
plan_start TIME,
|
|||
|
|
plan_end TIME,
|
|||
|
|
actual_start TIMESTAMP,
|
|||
|
|
actual_end TIMESTAMP,
|
|||
|
|
status VARCHAR(20), -- pending/in_progress/completed/expired
|
|||
|
|
distance DECIMAL(8,2),
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 巡检记录
|
|||
|
|
CREATE TABLE patrol_record (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
task_id BIGINT REFERENCES patrol_task(id),
|
|||
|
|
point_seq INT,
|
|||
|
|
device_id BIGINT REFERENCES iot_device(id),
|
|||
|
|
check_items JSONB, -- [{item, result, value, photo_url, remark}]
|
|||
|
|
gps_lng DOUBLE PRECISION,
|
|||
|
|
gps_lat DOUBLE PRECISION,
|
|||
|
|
record_time TIMESTAMP,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.6 报警管理
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE alert_rule (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
rule_name VARCHAR(100),
|
|||
|
|
device_type VARCHAR(30),
|
|||
|
|
metric_key VARCHAR(50),
|
|||
|
|
alert_level VARCHAR(10), -- info/warning/critical/emergency
|
|||
|
|
condition_expr VARCHAR(200), -- "> 0.5" 或 "ABS_DELTA > 10"
|
|||
|
|
threshold_value VARCHAR(50),
|
|||
|
|
debounce_sec INT DEFAULT 300, -- 去重窗口(秒)
|
|||
|
|
notify_scheme_id BIGINT,
|
|||
|
|
enabled TINYINT DEFAULT 1,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
CREATE TABLE alert_event (
|
|||
|
|
id BIGINT PRIMARY KEY,
|
|||
|
|
rule_id BIGINT REFERENCES alert_rule(id),
|
|||
|
|
device_id BIGINT REFERENCES iot_device(id),
|
|||
|
|
device_sn VARCHAR(100),
|
|||
|
|
metric_key VARCHAR(50),
|
|||
|
|
metric_value DOUBLE,
|
|||
|
|
threshold VARCHAR(50),
|
|||
|
|
alert_level VARCHAR(10),
|
|||
|
|
message VARCHAR(500),
|
|||
|
|
confirmed_by BIGINT,
|
|||
|
|
confirmed_at TIMESTAMP,
|
|||
|
|
dispatched TINYINT DEFAULT 0, -- 是否已派单
|
|||
|
|
resolved_at TIMESTAMP,
|
|||
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、接口设计规范
|
|||
|
|
|
|||
|
|
### 5.1 RESTful API 规范
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/v1/{resource} # 列表查询
|
|||
|
|
GET /api/v1/{resource}/{id} # 详情查询
|
|||
|
|
POST /api/v1/{resource} # 创建
|
|||
|
|
PUT /api/v1/{resource}/{id} # 全量更新
|
|||
|
|
PATCH /api/v1/{resource}/{id} # 部分更新
|
|||
|
|
DELETE /api/v1/{resource}/{id} # 删除
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.2 统一响应格式
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"message": "success",
|
|||
|
|
"data": {},
|
|||
|
|
"timestamp": 1718340000000
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.3 错误码规范
|
|||
|
|
|
|||
|
|
| 范围 | 说明 |
|
|||
|
|
|:----:|------|
|
|||
|
|
| 200 | 成功 |
|
|||
|
|
| 400-499 | 客户端错误(参数/权限/资源) |
|
|||
|
|
| 500-599 | 服务端错误 |
|
|||
|
|
| 10001-10099 | 物联网相关 |
|
|||
|
|
| 20001-20099 | 营业收费相关 |
|
|||
|
|
| 30001-30099 | 供水生产相关 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、部署方案
|
|||
|
|
|
|||
|
|
### 6.1 开发环境
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Docker Compose 单机部署
|
|||
|
|
├── PostgreSQL 16 + PostGIS
|
|||
|
|
├── TDengine 3.x
|
|||
|
|
├── Redis 7
|
|||
|
|
├── Kafka (单节点)
|
|||
|
|
├── Elasticsearch
|
|||
|
|
├── MinIO
|
|||
|
|
├── EMQX
|
|||
|
|
├── Nacos
|
|||
|
|
└── 各微服务 JAR
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.2 生产环境
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
K8s 集群 (3 master + 5 worker)
|
|||
|
|
├── ingress-nginx (LB)
|
|||
|
|
├── Spring Cloud Gateway (ClusterIP)
|
|||
|
|
├── 微服务 Pods (HPA自动扩缩)
|
|||
|
|
├── PostgreSQL (主从)
|
|||
|
|
├── TDengine Cluster (3节点)
|
|||
|
|
├── Redis Cluster (6节点)
|
|||
|
|
├── Kafka Cluster (3节点)
|
|||
|
|
├── Elasticsearch Cluster (3节点)
|
|||
|
|
├── MinIO (分布式 4节点)
|
|||
|
|
└── EMQX Cluster (3节点)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6.3 监控体系
|
|||
|
|
|
|||
|
|
| 组件 | 用途 |
|
|||
|
|
|------|------|
|
|||
|
|
| Prometheus + Grafana | 系统指标 + 业务指标 |
|
|||
|
|
| SkyWalking | 分布式链路追踪 |
|
|||
|
|
| ELK (ES + Logstash + Filebeat) | 日志收集分析 |
|
|||
|
|
| AlertManager | 告警管理 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、安全设计
|
|||
|
|
|
|||
|
|
| 层面 | 措施 |
|
|||
|
|
|------|------|
|
|||
|
|
| 传输安全 | HTTPS/TLS 1.3,MQTT over TLS |
|
|||
|
|
| 认证 | JWT + Sa-Token,设备端 X.509证书 |
|
|||
|
|
| 授权 | RBAC + 数据权限(片区隔离) |
|
|||
|
|
| 审计 | 全操作日志(登录/操作/异常),不可删除 |
|
|||
|
|
| 数据安全 | 敏感字段 AES 加密,数据库连接 SSL |
|
|||
|
|
| 等保 | 不低于等保二级,关键业务等保三级 |
|
|||
|
|
| 防护 | SQL注入/ XSS/ CSRF/ DDoS限流 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 八、关键技术决策记录
|
|||
|
|
|
|||
|
|
| # | 决策 | 方案 | 理由 |
|
|||
|
|
|---|------|------|------|
|
|||
|
|
| 1 | GIS引擎 | GeoServer + Leaflet/Cesium | 开源可控,支持标准WMS/WMTS,可平滑迁移超图 |
|
|||
|
|
| 2 | 时序库 | TDengine 3.x | 物联网写入性能优(亿级/天),SQL兼容,运维简单 |
|
|||
|
|
| 3 | 消息队列 | Kafka | IoT 高吞吐实时流,Exactly-Once 语义 |
|
|||
|
|
| 4 | 流程引擎 | Camunda 7 | BPMN 2.0 标准,Java 原生嵌入,中文社区 |
|
|||
|
|
| 5 | 移动端 | Flutter | 一套代码双端,GIS 地图插件成熟 |
|
|||
|
|
| 6 | 微服务框架 | Spring Cloud Alibaba | Nacos注册配置一体化,Sentinel限流 |
|
|||
|
|
| 7 | API规范 | RESTful + WebSocket(实时) | 前后端分离标准,WS 用于实时监测和报警推送 |
|
|||
|
|
| 8 | 视频AI | 预训练 YOLOv8 + 迁移学习 | 人员闯入场景单一,少量标注即可达到85%+精度 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 文档版本
|
|||
|
|
|
|||
|
|
| 版本 | 日期 | 修订 | 修订人 |
|
|||
|
|
|------|------|------|--------|
|
|||
|
|
| v1.0 | 2026-06-14 | 初始版本:技术选型/架构/数据库/部署 | bot_pm |
|