diff --git a/README.md b/README.md
index 7bdb7bf..12f2843 100644
--- a/README.md
+++ b/README.md
@@ -95,33 +95,34 @@
```mermaid
flowchart TB
subgraph UI["前端展示层"]
- FE["Vue 3 + TypeScript + Element Plus
ECharts + Three.js (3D数字孪生)"]
+ direction LR
+ FE1["Vue 3
TypeScript"]
+ FE2["Element Plus
组件库"]
+ FE3["ECharts
可视化图表"]
+ FE4["Three.js
3D 数字孪生"]
end
- subgraph GW["API 网关层"]
- G["Spring Cloud Gateway
:9090 · JWT 鉴权 · 限流"]
- end
+ G["API 网关
Spring Cloud Gateway :9090
JWT 鉴权 · 路由 · 限流"]
subgraph MS["微服务层"]
- A["认证服务
:8081"]
- W["工单服务
:8082"]
- P["工艺服务
:8083"]
- Q["质量服务
:8084"]
- D["看板服务
:8085 · WebSocket"]
- AI["AI 推理服务
:8087 · FastAPI"]
+ A["认证服务 :8081
登录 · JWT · RBAC"]
+ W["工单服务 :8082
工单 · 排产 · 报工"]
+ P["工艺服务 :8083
模板 · 工序 · 参数"]
+ Q["质量服务 :8084
质检 · 追溯 · SPC"]
+ D["看板服务 :8085
实时数据 · WebSocket"]
+ AI["AI 推理服务 :8087
FastAPI · 预测 · Agent"]
end
subgraph DS["数据存储层"]
DB[("MySQL :3306")]
RD[("Redis :6379")]
IDB[("InfluxDB :8086")]
- ES[("Elasticsearch :9200
(可选)")]
KF["Kafka :9092"]
end
subgraph EDGE["设备接入层"]
- NET[" .NET 8 设备网关 :5000
MQTT 订阅 · Kafka 转发 · 心跳"]
- MQTT["EMQX MQTT Broker
:1883"]
+ NET[".NET 8 设备网关 :5000
MQTT 订阅 · Kafka 转发"]
+ MQTT["EMQX MQTT Broker :1883"]
end
subgraph DEV["工业设备层"]
@@ -130,13 +131,15 @@ flowchart TB
DEV3["工业机器人"]
end
- FE -->|HTTPS/WSS| G
- G -->|/api/auth/**| A
- G -->|/api/workorder/**| W
- G -->|/api/process/**| P
- G -->|/api/quality/**| Q
- G -->|/api/dashboard/**| D
- G -->|/api/ai/**| AI
+ FE1 --- FE2 --- FE3 --- FE4
+ FE4 ==>|"HTTPS / WSS"| G
+
+ G -->|"/api/auth/**"| A
+ G -->|"/api/workorder/**"| W
+ G -->|"/api/process/**"| P
+ G -->|"/api/quality/**"| Q
+ G -->|"/api/dashboard/**"| D
+ G -->|"/api/ai/**"| AI
A --> DB
W --> DB
@@ -145,32 +148,39 @@ flowchart TB
D --> DB
AI --> DB
- A -.JWT黑名单/登录锁定.-> RD
- W -.工单序号/锁.-> RD
- D -.设备状态缓存.-> RD
- D --> IDB
- D -.设备搜索(可选).-> ES
- D <--> KF
-
- AI -.AI分析历史.-> RD
-
- NET --> KF
- NET --> RD
- MQTT --> NET
- DEV1 -->|MQTT| MQTT
- DEV2 -->|MQTT| MQTT
- DEV3 -->|MQTT| MQTT
-
- classDef layer fill:#f0f6ff,stroke:#409eff,stroke-width:2px,color:#333;
- classDef svc fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px,color:#333;
- classDef data fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px,color:#333;
- classDef edge fill:#fce4ec,stroke:#e91e63,stroke-width:1.5px,color:#333;
- classDef dev fill:#f3e5f5,stroke:#9c27b0,stroke-width:1.5px,color:#333;
- class FE,G layer;
+ A -.->|"JWT 黑名单"| RD
+ W -.->|"工单序号锁"| RD
+ D -.->|"设备状态缓存"| RD
+ AI -.->|"分析历史缓存"| RD
+ D -->|"遥测数据"| IDB
+ D <==>|"设备数据"| KF
+
+ NET -->|"转发消息"| KF
+ NET -.->|"设备状态缓存"| RD
+ MQTT -->|"订阅推送"| NET
+ DEV1 -->|"MQTT"| MQTT
+ DEV2 -->|"MQTT"| MQTT
+ DEV3 -->|"MQTT"| MQTT
+
+ classDef ui fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px,color:#0d47a1;
+ classDef gw fill:#fff3e0,stroke:#f57c00,stroke-width:2px,color:#e65100;
+ classDef svc fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px,color:#1b5e20;
+ classDef data fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px,color:#4a148c;
+ classDef edge fill:#fff8e1,stroke:#f9a825,stroke-width:1.5px,color:#f57f17;
+ classDef dev fill:#eceff1,stroke:#546e7a,stroke-width:1.5px,color:#37474f;
+ class FE1,FE2,FE3,FE4 ui;
+ class G gw;
class A,W,P,Q,D,AI svc;
- class DB,RD,IDB,ES,KF data;
+ class DB,RD,IDB,KF data;
class NET,MQTT edge;
class DEV1,DEV2,DEV3 dev;
+
+ style UI fill:#f7fbff,stroke:#bbdefb,stroke-width:1px
+ style GW fill:#fffdf7,stroke:#ffe0b2,stroke-width:1px
+ style MS fill:#f9fdf9,stroke:#c8e6c9,stroke-width:1px
+ style DS fill:#fdf9ff,stroke:#e1bee7,stroke-width:1px
+ style EDGE fill:#fffdf4,stroke:#ffecb3,stroke-width:1px
+ style DEV fill:#fafafa,stroke:#cfd8dc,stroke-width:1px
```
### 技术栈
@@ -182,7 +192,7 @@ flowchart TB
| 后端 | Spring Boot + Spring Cloud (Alibaba) | 3.2.5 / 2023.0.0 |
| 持久层 | MyBatis-Plus + MySQL | 3.5.6 / 8.0.33 |
| 缓存 / 消息 | Redis + Kafka + Zookeeper | 7 / 7.5.0 |
-| 时序 / 搜索 | InfluxDB + Elasticsearch(可选) | 2.7 / 8.10.0 |
+| 时序数据库 | InfluxDB | 2.7 |
| 设备接入 | .NET 8 + EMQX MQTT | .NET 8 |
| AI 推理 | Python FastAPI + LightGBM + XGBoost | 0.115 / 4.5 / 2.1 |
| AI Agent | GLM-4 + Function Calling + RAG(TF-IDF 中文检索) | - |