소스 검색

新增系统设计文档:技术选型/架构/数据库/接口/部署/安全/决策记录

bot_pm 5 일 전
부모
커밋
57e4898e87
1개의 변경된 파일570개의 추가작업 그리고 0개의 파일을 삭제
  1. 570
    0
      docs/architecture.md

+ 570
- 0
docs/architecture.md 파일 보기

@@ -0,0 +1,570 @@
1
+# 智慧水务管理系统 — 系统设计文档
2
+
3
+> 版本:v1.0 | 日期:2026-06-14 | 作者:bot_pm
4
+
5
+---
6
+
7
+## 一、技术选型
8
+
9
+### 1.1 总体技术栈
10
+
11
+| 层次 | 技术 | 版本要求 | 选型理由 |
12
+|------|------|----------|----------|
13
+| 后端框架 | Spring Cloud Alibaba | 2024.x | 微服务生态成熟,Nacos 服务治理 |
14
+| 单体可回退 | Spring Boot 3.x | 3.3+ | 小规模可单体启动,渐进式拆分 |
15
+| 前端框架 | Vue 3 + TypeScript | 3.5+ | 生态丰富,GIS 组件支持好 |
16
+| 前端 UI | Element Plus + ECharts | 最新 | 大屏可视化 + 中后台表单 |
17
+| 移动端 | Flutter 3.x | 3.24+ | 一套代码 Android/iOS |
18
+| 网关 | Spring Cloud Gateway | 匹配 SC | 统一入口、限流、鉴权 |
19
+| 服务注册/配置 | Nacos | 2.4+ | 服务发现 + 配置中心一体化 |
20
+| 认证授权 | Sa-Token + OAuth2 | 最新 | 轻量级 RBAC,支持 SSO |
21
+| 数据库 | PostgreSQL 16 + PostGIS | 16+ | 空间数据原生支持,替代 Oracle Spatial |
22
+| 时序数据库 | TDengine 3.x | 3.3+ | 物联网时序数据写入性能优,SQL 兼容 |
23
+| 缓存 | Redis 7 + Redisson | 7.2+ | 缓存 + 分布式锁 |
24
+| 消息队列 | Apache Kafka | 3.8+ | IoT 高吞吐实时流 |
25
+| 搜索引擎 | Elasticsearch | 8.x | 日志/文档全文检索 |
26
+| 流程引擎 | Camunda 7 / Flowable | 最新 | BPMN 2.0,用户量大 |
27
+| 对象存储 | MinIO / 阿里云 OSS | 最新 | 文件、视频存储 |
28
+| 容器编排 | Docker Compose → K8s | 最新 | 分步过渡 |
29
+
30
+### 1.2 选型对比与决策
31
+
32
+#### GIS 引擎选型
33
+
34
+| 方案 | 优势 | 劣势 | 推荐场景 |
35
+|------|------|------|----------|
36
+| **超图 iServer** | 国内水利项目标配,二三维一体化 | 授权费高(15-30万) | 预算充足 |
37
+| **开源 MapServer+GeoServer** | 免费 | 功能较弱,三维支持差 | 预算有限 |
38
+| **Leaflet + Cesium** | 前端轻量三维 | 瓦片服务需另配 | 推荐混合方案 |
39
+
40
+**推荐**:短期 GeoServer + Leaflet/Cesium;长期按甲方要求替换为超图。
41
+
42
+#### 视频 AI 引擎
43
+
44
+| 方案 | 优势 | 劣势 |
45
+|------|------|------|
46
+| **自研训练(YOLOv8)** | 可定制 | 需标注数据+3-5人月训练 |
47
+| **采购成熟产品** | 开箱即用 | 10-20万授权费 |
48
+| **对接现有视频平台 SDK** | 复用已有投资 | 依赖厂商API |
49
+
50
+**推荐**:优先对接甲方现有视频平台;人员闯入模型采用预训练 YOLO + 少量迁移学习。
51
+
52
+---
53
+
54
+## 二、系统架构
55
+
56
+### 2.1 整体架构图
57
+
58
+```
59
+┌─────────────────────────────────────────────────────────────┐
60
+│                      接入层 (Gateway)                        │
61
+│   Nginx → Spring Cloud Gateway (限流/鉴权/路由)              │
62
+│   统一入口: Web / Flutter APP / 微信小程序 / OpenAPI         │
63
+├─────────────────────────────────────────────────────────────┤
64
+│                      应用服务层                              │
65
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐   │
66
+│ │供水生产  │ │营业收费  │ │巡检管理  │ │大数据分析    │   │
67
+│ │管理服务  │ │服务      │ │服务      │ │服务          │   │
68
+│ ├──────────┤ ├──────────┤ ├──────────┤ ├──────────────┤   │
69
+│ │总览/监测 │ │营收/报装 │ │任务/轨迹 │ │BI看板/报表   │   │
70
+│ │水质/调度 │ │表务/客服 │ │统计/设置 │ │决策模型      │   │
71
+│ │报警/数据 │ │微信/集抄 │ │巡检APP   │ │大屏展示      │   │
72
+│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘   │
73
+│ ┌──────────────────────────────────────────────────────┐   │
74
+│ │                   流程引擎服务                        │   │
75
+│ │   Camunda BPMN → 流程定义/编排/监控                  │   │
76
+│ └──────────────────────────────────────────────────────┘   │
77
+├─────────────────────────────────────────────────────────────┤
78
+│                      能力层 (中台)                           │
79
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐   │
80
+│ │物联网平台│ │数据引擎  │ │工单引擎  │ │消息通知      │   │
81
+│ │设备接入  │ │汇聚/治理 │ │任务流转  │ │短信/推送/WS  │   │
82
+│ │协议适配  │ │服务/目录 │ │跟踪/统计 │ │邮件/订阅     │   │
83
+│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘   │
84
+│ ┌──────────────────────────────────────────────────────┐   │
85
+│ │                   基础服务平台                        │   │
86
+│ │   认证授权(Sa-Token) / 用户管理 / 部门管理 / 日志    │   │
87
+│ └──────────────────────────────────────────────────────┘   │
88
+├─────────────────────────────────────────────────────────────┤
89
+│                      数据存储层                              │
90
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐   │
91
+│ │PostgreSQL│ │ TDengine │ │  Redis   │ │Elasticsearch │   │
92
+│ │+PostGIS  │ │ 时序数据 │ │ 缓存/锁  │ │ 搜索/日志    │   │
93
+│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘   │
94
+│ ┌──────────┐ ┌──────────┐                                 │
95
+│ │  MinIO   │ │  Kafka   │                                 │
96
+│ │ 文件存储 │ │ 消息队列 │                                 │
97
+│ └──────────┘ └──────────┘                                 │
98
+├─────────────────────────────────────────────────────────────┤
99
+│                      外部集成层                              │
100
+│ ┌────────┐ ┌────────┐ ┌──────────┐ ┌────────┐ ┌────────┐ │
101
+│ │ SCADA  │ │ 视频   │ │ 支付宝   │ │ 微信   │ │GIS地图 │ │
102
+│ │ 对接   │ │ 平台   │ │ 生活缴费 │ │ 支付   │ │ 服务   │ │
103
+│ └────────┘ └────────┘ └──────────┘ └────────┘ └────────┘ │
104
+└─────────────────────────────────────────────────────────────┘
105
+```
106
+
107
+### 2.2 微服务拆分
108
+
109
+| 微服务 | 端口 | 职责 | 拆分优先级 |
110
+|--------|:----:|------|:----------:|
111
+| `wm-gateway` | 8080 | API 网关/鉴权/限流 | P0 |
112
+| `wm-base` | 8081 | 用户/角色/菜单/部门/日志 | P0 |
113
+| `wm-iot` | 8082 | 物联网平台:设备接入/协议适配/设备管理 | P0 |
114
+| `wm-data-engine` | 8083 | 数据引擎:汇聚/治理/服务/目录 | P0 |
115
+| `wm-bpm` | 8084 | 流程引擎:Camunda 封装 | P0 |
116
+| `wm-production` | 8085 | 供水生产管理平台全部模块 | P1 |
117
+| `wm-revenue` | 8086 | 营业收费系统全部模块 | P1 |
118
+| `wm-patrol` | 8087 | 巡检管理系统 | P2 |
119
+| `wm-bi` | 8088 | 大数据分析/BI | P2 |
120
+| `wm-notify` | 8089 | 消息通知:短信/极光推送/WebSocket | P1 |
121
+| `wm-job` | 8090 | 定时任务调度(XXL-Job) | P1 |
122
+
123
+---
124
+
125
+## 三、关键模块设计
126
+
127
+### 3.1 物联网平台
128
+
129
+```
130
+设备 → [MQTT Broker(EMQX)] → [Kafka] → [wm-iot]
131
+           ↑ 设备认证        ↑ 规则引擎路由    ↑ 设备管理/影子/OTA
132
+```
133
+
134
+**协议适配器模式**:
135
+
136
+```
137
+wm-iot/adapters/
138
+├── MqttAdapter.java        # MQTT 适配
139
+├── CoapAdapter.java        # CoAP 适配
140
+├── ModbusAdapter.java      # Modbus TCP/RTU
141
+├── HttpAdapter.java        # HTTP 直连
142
+└── DeviceModelMapper.java  # 统一设备模型转换
143
+```
144
+
145
+- **设备影子**:Redis 存储设备期望/上报状态,断线自动同步
146
+- **OTA 升级**:MinIO 存储固件,设备心跳拉取更新
147
+- **数据路由**:EMQX 规则引擎 → Kafka Topic 分流(`iot.raw.{deviceType}`)
148
+
149
+### 3.2 数据引擎
150
+
151
+**数据流转**:
152
+
153
+```
154
+数据源 → 采集适配 → Kafka → 实时流(Flink) → TDengine(时序)
155
+                   ↘              ↘
156
+                    批量(Spark)  → PostgreSQL(业务数据)
157
+                                → Elasticsearch(全文)
158
+```
159
+
160
+**治理流水线**:
161
+
162
+```
163
+原始数据 → 标准化 → 清洗 → 质控 → 关联 → 入仓
164
+          (水利标准映射) (缺失/异常) (质量评分) (血缘) (增量/全量)
165
+```
166
+
167
+### 3.3 GIS 集成
168
+
169
+```
170
+前端: Vue3 + Leaflet(2D) / Cesium(3D)
171
+         ↕ WMS/WMTS/TMS
172
+后端: GeoServer(瓦片服务) ← PostGIS(空间数据库)
173
+         ↑
174
+      空间数据: 管网矢量(shp→PostGIS)、监测点位(动态图层)
175
+```
176
+
177
+### 3.4 报警引擎
178
+
179
+```
180
+IoT数据 → Kafka → wm-iot(数据消费)
181
+                     ↓
182
+              规则引擎(阈值判断)
183
+                     ↓
184
+              Redis(去重窗口)
185
+                     ↓
186
+              wm-notify(通知分发)
187
+                     ↓
188
+        ┌───────┼────────┐
189
+       短信    APP推送    WebSocket(实时弹窗)
190
+```
191
+
192
+**报警等级**:🟢 提示 → 🟡 一般 → 🟠 严重 → 🔴 紧急
193
+
194
+**去重策略**:同一设备+同一类型+N分钟内只告警一次。
195
+
196
+### 3.5 调度推演引擎
197
+
198
+```
199
+预案模板库 → 参数填充 → 管网水力模型(EPANET) → 调度策略生成
200
+                                              ↓
201
+                                         指令下发 → 执行跟踪 → 效果评估
202
+```
203
+
204
+- 爆管模拟:阀门关闭策略 → 影响区域分析 → 应急供水方案
205
+- 水质异常:污染物扩散模拟 → 排放方案
206
+
207
+---
208
+
209
+## 四、数据库设计(核心表)
210
+
211
+### 4.1 用户权限体系
212
+
213
+```sql
214
+-- 部门表
215
+CREATE TABLE sys_dept (
216
+    id BIGINT PRIMARY KEY,
217
+    parent_id BIGINT,
218
+    dept_name VARCHAR(100),
219
+    dept_type VARCHAR(20),  -- water_bureau(水利局)/water_company(水务公司)/ops(运维)
220
+    sort_order INT,
221
+    status TINYINT DEFAULT 1,
222
+    created_at TIMESTAMP DEFAULT NOW()
223
+);
224
+
225
+-- 用户表
226
+CREATE TABLE sys_user (
227
+    id BIGINT PRIMARY KEY,
228
+    dept_id BIGINT REFERENCES sys_dept(id),
229
+    username VARCHAR(50) UNIQUE NOT NULL,
230
+    password VARCHAR(255) NOT NULL,
231
+    real_name VARCHAR(50),
232
+    phone VARCHAR(20),
233
+    email VARCHAR(100),
234
+    role_type VARCHAR(30),  -- admin/leader/manager/operator/tech
235
+    status TINYINT DEFAULT 1,
236
+    created_at TIMESTAMP DEFAULT NOW()
237
+);
238
+
239
+-- 角色表
240
+CREATE TABLE sys_role (
241
+    id BIGINT PRIMARY KEY,
242
+    role_name VARCHAR(50) UNIQUE,
243
+    role_key VARCHAR(50) UNIQUE,  -- admin/supervisor/biz_manager/field_ops/tech_maintain
244
+    data_scope VARCHAR(20),       -- ALL/DEPT/SELF
245
+    description VARCHAR(200),
246
+    created_at TIMESTAMP DEFAULT NOW()
247
+);
248
+
249
+-- 角色-用户关联
250
+CREATE TABLE sys_user_role (
251
+    user_id BIGINT REFERENCES sys_user(id),
252
+    role_id BIGINT REFERENCES sys_role(id),
253
+    PRIMARY KEY (user_id, role_id)
254
+);
255
+```
256
+
257
+### 4.2 设备管理(物联网)
258
+
259
+```sql
260
+-- 设备模型定义
261
+CREATE TABLE iot_device_model (
262
+    id BIGINT PRIMARY KEY,
263
+    model_key VARCHAR(50) UNIQUE,   -- 比如 water_meter_dn15
264
+    model_name VARCHAR(100),        -- DN15远传水表
265
+    vendor VARCHAR(100),            -- 厂商
266
+    protocol VARCHAR(20),           -- MQTT/Modbus/CoAP
267
+    properties JSONB,               -- 属性定义 [{key, name, unit, data_type, range}]
268
+    commands JSONB,                 -- 支持指令 [{key, name, params}]
269
+    created_at TIMESTAMP DEFAULT NOW()
270
+);
271
+
272
+-- 设备实例
273
+CREATE TABLE iot_device (
274
+    id BIGINT PRIMARY KEY,
275
+    device_sn VARCHAR(100) UNIQUE,  -- 设备序列号
276
+    device_name VARCHAR(200),
277
+    model_id BIGINT REFERENCES iot_device_model(id),
278
+    device_type VARCHAR(30),        -- flow_meter/pressure/valve/water_quality/level
279
+    position_type VARCHAR(20),      -- water_plant/pressure_station/pipe_network/village
280
+    loc_lng DOUBLE PRECISION,       -- 经度
281
+    loc_lat DOUBLE PRECISION,       -- 纬度
282
+    geom GEOMETRY(Point, 4326),     -- PostGIS 空间坐标
283
+    area VARCHAR(50),               -- 所属片区
284
+    station_id BIGINT,              -- 所属站点
285
+    status VARCHAR(20),             -- online/offline/maintenance/fault
286
+    last_report_time TIMESTAMP,
287
+    created_at TIMESTAMP DEFAULT NOW()
288
+);
289
+```
290
+
291
+### 4.3 时序数据(TDengine)
292
+
293
+```sql
294
+-- TDengine 超级表:设备遥测数据
295
+CREATE STABLE iot_telemetry (
296
+    ts TIMESTAMP,
297
+    device_sn NCHAR(100),
298
+    metric_key NCHAR(50),
299
+    metric_value DOUBLE,
300
+    quality TINYINT
301
+) TAGS (
302
+    device_type NCHAR(30),
303
+    area NCHAR(50)
304
+);
305
+
306
+-- 按设备类型创建子表
307
+CREATE TABLE flow_data USING iot_telemetry TAGS('flow_meter', '精芒片区');
308
+CREATE TABLE press_data USING iot_telemetry TAGS('pressure', '托里片区');
309
+CREATE TABLE wq_data USING iot_telemetry TAGS('water_quality', '一体化水厂');
310
+```
311
+
312
+### 4.4 营业收费
313
+
314
+```sql
315
+-- 用水户
316
+CREATE TABLE rev_customer (
317
+    id BIGINT PRIMARY KEY,
318
+    customer_no VARCHAR(30) UNIQUE,     -- 户号
319
+    customer_name VARCHAR(100),
320
+    customer_type VARCHAR(20),          -- residential/business/enterprise/institution
321
+    area VARCHAR(50),
322
+    address VARCHAR(300),
323
+    phone VARCHAR(20),
324
+    id_card VARCHAR(18),
325
+    contract_no VARCHAR(50),
326
+    status VARCHAR(20) DEFAULT 'active',
327
+    created_at TIMESTAMP DEFAULT NOW()
328
+);
329
+
330
+-- 水表档案
331
+CREATE TABLE rev_meter (
332
+    id BIGINT PRIMARY KEY,
333
+    meter_no VARCHAR(50) UNIQUE,
334
+    customer_id BIGINT REFERENCES rev_customer(id),
335
+    device_id BIGINT REFERENCES iot_device(id),  -- 关联IoT设备
336
+    caliber VARCHAR(10),                          -- DN15/DN20/DN40...
337
+    meter_type VARCHAR(20),                       -- mechanical/ultrasonic/electromagnetic
338
+    initial_reading DECIMAL(10,2),
339
+    install_date DATE,
340
+    status VARCHAR(20),                           -- active/dismantled/scrapped/repaired
341
+    created_at TIMESTAMP DEFAULT NOW()
342
+);
343
+
344
+-- 抄表记录
345
+CREATE TABLE rev_reading (
346
+    id BIGINT PRIMARY KEY,
347
+    meter_id BIGINT REFERENCES rev_meter(id),
348
+    reading_date DATE,
349
+    prev_reading DECIMAL(10,2),
350
+    curr_reading DECIMAL(10,2),
351
+    consumption DECIMAL(10,2),       -- 用水量
352
+    read_type VARCHAR(20),           -- manual/remote/estimate
353
+    reader_id BIGINT,
354
+    photo_url VARCHAR(500),
355
+    verified TINYINT DEFAULT 0,
356
+    created_at TIMESTAMP DEFAULT NOW()
357
+);
358
+
359
+-- 水费账单
360
+CREATE TABLE rev_bill (
361
+    id BIGINT PRIMARY KEY,
362
+    customer_id BIGINT REFERENCES rev_customer(id),
363
+    bill_period VARCHAR(10),         -- 2026-06
364
+    consumption DECIMAL(10,2),
365
+    water_fee DECIMAL(10,2),
366
+    sewage_fee DECIMAL(10,2),
367
+    total_fee DECIMAL(10,2),
368
+    paid_fee DECIMAL(10,2) DEFAULT 0,
369
+    status VARCHAR(20),              -- pending/partial/paid/overdue
370
+    due_date DATE,
371
+    paid_at TIMESTAMP,
372
+    created_at TIMESTAMP DEFAULT NOW()
373
+);
374
+```
375
+
376
+### 4.5 巡检系统
377
+
378
+```sql
379
+-- 巡检路线
380
+CREATE TABLE patrol_route (
381
+    id BIGINT PRIMARY KEY,
382
+    route_name VARCHAR(100),
383
+    area VARCHAR(50),
384
+    route_points JSONB,                -- [{seq, lng, lat, name, device_ids}]
385
+    estim_duration INT,                -- 预计时长(分钟)
386
+    status TINYINT DEFAULT 1,
387
+    created_at TIMESTAMP DEFAULT NOW()
388
+);
389
+
390
+-- 巡检任务
391
+CREATE TABLE patrol_task (
392
+    id BIGINT PRIMARY KEY,
393
+    route_id BIGINT REFERENCES patrol_route(id),
394
+    assignee_id BIGINT REFERENCES sys_user(id),
395
+    task_date DATE,
396
+    plan_start TIME,
397
+    plan_end TIME,
398
+    actual_start TIMESTAMP,
399
+    actual_end TIMESTAMP,
400
+    status VARCHAR(20),               -- pending/in_progress/completed/expired
401
+    distance DECIMAL(8,2),
402
+    created_at TIMESTAMP DEFAULT NOW()
403
+);
404
+
405
+-- 巡检记录
406
+CREATE TABLE patrol_record (
407
+    id BIGINT PRIMARY KEY,
408
+    task_id BIGINT REFERENCES patrol_task(id),
409
+    point_seq INT,
410
+    device_id BIGINT REFERENCES iot_device(id),
411
+    check_items JSONB,                 -- [{item, result, value, photo_url, remark}]
412
+    gps_lng DOUBLE PRECISION,
413
+    gps_lat DOUBLE PRECISION,
414
+    record_time TIMESTAMP,
415
+    created_at TIMESTAMP DEFAULT NOW()
416
+);
417
+```
418
+
419
+### 4.6 报警管理
420
+
421
+```sql
422
+CREATE TABLE alert_rule (
423
+    id BIGINT PRIMARY KEY,
424
+    rule_name VARCHAR(100),
425
+    device_type VARCHAR(30),
426
+    metric_key VARCHAR(50),
427
+    alert_level VARCHAR(10),           -- info/warning/critical/emergency
428
+    condition_expr VARCHAR(200),       -- "> 0.5" 或 "ABS_DELTA > 10"
429
+    threshold_value VARCHAR(50),
430
+    debounce_sec INT DEFAULT 300,      -- 去重窗口(秒)
431
+    notify_scheme_id BIGINT,
432
+    enabled TINYINT DEFAULT 1,
433
+    created_at TIMESTAMP DEFAULT NOW()
434
+);
435
+
436
+CREATE TABLE alert_event (
437
+    id BIGINT PRIMARY KEY,
438
+    rule_id BIGINT REFERENCES alert_rule(id),
439
+    device_id BIGINT REFERENCES iot_device(id),
440
+    device_sn VARCHAR(100),
441
+    metric_key VARCHAR(50),
442
+    metric_value DOUBLE,
443
+    threshold VARCHAR(50),
444
+    alert_level VARCHAR(10),
445
+    message VARCHAR(500),
446
+    confirmed_by BIGINT,
447
+    confirmed_at TIMESTAMP,
448
+    dispatched TINYINT DEFAULT 0,     -- 是否已派单
449
+    resolved_at TIMESTAMP,
450
+    created_at TIMESTAMP DEFAULT NOW()
451
+);
452
+```
453
+
454
+---
455
+
456
+## 五、接口设计规范
457
+
458
+### 5.1 RESTful API 规范
459
+
460
+```
461
+GET    /api/v1/{resource}           # 列表查询
462
+GET    /api/v1/{resource}/{id}      # 详情查询
463
+POST   /api/v1/{resource}           # 创建
464
+PUT    /api/v1/{resource}/{id}      # 全量更新
465
+PATCH  /api/v1/{resource}/{id}      # 部分更新
466
+DELETE /api/v1/{resource}/{id}      # 删除
467
+```
468
+
469
+### 5.2 统一响应格式
470
+
471
+```json
472
+{
473
+  "code": 200,
474
+  "message": "success",
475
+  "data": {},
476
+  "timestamp": 1718340000000
477
+}
478
+```
479
+
480
+### 5.3 错误码规范
481
+
482
+| 范围 | 说明 |
483
+|:----:|------|
484
+| 200 | 成功 |
485
+| 400-499 | 客户端错误(参数/权限/资源) |
486
+| 500-599 | 服务端错误 |
487
+| 10001-10099 | 物联网相关 |
488
+| 20001-20099 | 营业收费相关 |
489
+| 30001-30099 | 供水生产相关 |
490
+
491
+---
492
+
493
+## 六、部署方案
494
+
495
+### 6.1 开发环境
496
+
497
+```
498
+Docker Compose 单机部署
499
+├── PostgreSQL 16 + PostGIS
500
+├── TDengine 3.x
501
+├── Redis 7
502
+├── Kafka (单节点)
503
+├── Elasticsearch
504
+├── MinIO
505
+├── EMQX
506
+├── Nacos
507
+└── 各微服务 JAR
508
+```
509
+
510
+### 6.2 生产环境
511
+
512
+```
513
+K8s 集群 (3 master + 5 worker)
514
+├── ingress-nginx (LB)
515
+├── Spring Cloud Gateway (ClusterIP)
516
+├── 微服务 Pods (HPA自动扩缩)
517
+├── PostgreSQL (主从)
518
+├── TDengine Cluster (3节点)
519
+├── Redis Cluster (6节点)
520
+├── Kafka Cluster (3节点)
521
+├── Elasticsearch Cluster (3节点)
522
+├── MinIO (分布式 4节点)
523
+└── EMQX Cluster (3节点)
524
+```
525
+
526
+### 6.3 监控体系
527
+
528
+| 组件 | 用途 |
529
+|------|------|
530
+| Prometheus + Grafana | 系统指标 + 业务指标 |
531
+| SkyWalking | 分布式链路追踪 |
532
+| ELK (ES + Logstash + Filebeat) | 日志收集分析 |
533
+| AlertManager | 告警管理 |
534
+
535
+---
536
+
537
+## 七、安全设计
538
+
539
+| 层面 | 措施 |
540
+|------|------|
541
+| 传输安全 | HTTPS/TLS 1.3,MQTT over TLS |
542
+| 认证 | JWT + Sa-Token,设备端 X.509证书 |
543
+| 授权 | RBAC + 数据权限(片区隔离) |
544
+| 审计 | 全操作日志(登录/操作/异常),不可删除 |
545
+| 数据安全 | 敏感字段 AES 加密,数据库连接 SSL |
546
+| 等保 | 不低于等保二级,关键业务等保三级 |
547
+| 防护 | SQL注入/ XSS/ CSRF/ DDoS限流 |
548
+
549
+---
550
+
551
+## 八、关键技术决策记录
552
+
553
+| # | 决策 | 方案 | 理由 |
554
+|---|------|------|------|
555
+| 1 | GIS引擎 | GeoServer + Leaflet/Cesium | 开源可控,支持标准WMS/WMTS,可平滑迁移超图 |
556
+| 2 | 时序库 | TDengine 3.x | 物联网写入性能优(亿级/天),SQL兼容,运维简单 |
557
+| 3 | 消息队列 | Kafka | IoT 高吞吐实时流,Exactly-Once 语义 |
558
+| 4 | 流程引擎 | Camunda 7 | BPMN 2.0 标准,Java 原生嵌入,中文社区 |
559
+| 5 | 移动端 | Flutter | 一套代码双端,GIS 地图插件成熟 |
560
+| 6 | 微服务框架 | Spring Cloud Alibaba | Nacos注册配置一体化,Sentinel限流 |
561
+| 7 | API规范 | RESTful + WebSocket(实时) | 前后端分离标准,WS 用于实时监测和报警推送 |
562
+| 8 | 视频AI | 预训练 YOLOv8 + 迁移学习 | 人员闯入场景单一,少量标注即可达到85%+精度 |
563
+
564
+---
565
+
566
+## 文档版本
567
+
568
+| 版本 | 日期 | 修订 | 修订人 |
569
+|------|------|------|--------|
570
+| v1.0 | 2026-06-14 | 初始版本:技术选型/架构/数据库/部署 | bot_pm |