doc
王国壮
10 小时以前 35de181f8254fa5a255da0c3eea236ec649d5538
doc
2个文件已添加
310 ■■■■■ 已修改文件
Client/王国壮/document/实时环境信息展示.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Client/王国壮/document/实时环境信息展示警报管理.md 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Client/Íõ¹ú׳/document/ʵʱ»·¾³ÐÅϢչʾ.xlsx
Binary files differ
Client/Íõ¹ú׳/document/ʵʱ»·¾³ÐÅϢչʾ¾¯±¨¹ÜÀí.md
New file
@@ -0,0 +1,310 @@
# ðŸŒŸ æ¨¡å—设计文档:12. å®žæ—¶çŽ¯å¢ƒä¿¡æ¯å±•ç¤ºï¼ˆâ˜…â˜…â˜…â˜…â˜…ï¼‰
## ä¸€ã€æ¨¡å—目的
本模块用于在客户端大屏实时展示智慧工地各区域的环境信息,包括温度、湿度、粉尘浓度、施工进度、监控轮播等。同时支持动态内容扩展(小地图、考勤简况)。
---
## äºŒã€ä¸»è¦åŠŸèƒ½
| åŠŸèƒ½åç§°   | æè¿°               |
| ------ | ---------------- |
| çŽ¯å¢ƒä¿¡æ¯å±•ç¤º | æŒ‰å·¥åœ°åŒºåŸŸå±•示温度、湿度、粉尘等 |
| æ–½å·¥è¿›åº¦å±•示 | å±•示施工各阶段的计划与完成量   |
| ç›‘控轮播   | è½®æµæ˜¾ç¤ºå„摄像头视频       |
| å°åœ°å›¾é¢„览  | å°åŒºåŸŸæ ‡æ³¨å„传感设备与状态    |
| è€ƒå‹¤æƒ…况快览 | å½“前人员在场数、签到率等     |
---
## ä¸‰ã€æ•°æ®æ¥æºè¯´æ˜Ž
| æ•°æ®é¡¹      | æ¥æº            | æ–¹å¼           |
| -------- | ------------- | ------------ |
| æ¸©åº¦/湿度/粉尘 | ä¼ æ„Ÿå™¨ä¸Šä¼  â†’ æœåŠ¡ç«¯è½¬å‘ | çœŸå®žæ—¶ï¼ˆæœåŠ¡ç«¯ä¸»åŠ¨æŽ¨é€ï¼‰ |
| æ–½å·¥è¿›åº¦     | æ•°æ®åº“记录         | å®¢æˆ·ç«¯å®šæ—¶è¯·æ±‚(轮询)  |
| æ‘„像头画面    | æ‘„像头/服务端视频转码接口 | RTSP/HTTP æ’­æ”¾ |
| è€ƒå‹¤æƒ…况     | æœåŠ¡ç«¯æŽ¥å£         | è½®è¯¢/更新推送      |
---
## å››ã€å®¢æˆ·ç«¯è®¾è®¡
### Qt结构建议(基于大屏显示)
```bash
EnvDisplayModule/
├── EnvMainWindow.ui             # å¤§å±ç•Œé¢å¸ƒå±€
├── EnvRealtimeWidget.h/.cpp     # çŽ¯å¢ƒæ•°æ®å±•ç¤ºåŒº
├── VideoCarouselWidget.h/.cpp   # è§†é¢‘轮播区
├── MapMiniWidget.h/.cpp         # å°åœ°å›¾æ˜¾ç¤ºåŒºåŸŸ
├── ProgressWidget.h/.cpp        # æ–½å·¥è¿›åº¦åŒº
├── AttendanceSummaryWidget.h/.cpp # è€ƒå‹¤å¿«è§ˆ
├── EnvSocketHandler.h/.cpp      # æŽ¥æ”¶æŽ¨é€æ•°æ®
```
---
## äº”、服务端接口设计
### WebSocket æŽ¨é€æŽ¥å£ï¼ˆæŽ¨èï¼‰
* åœ°å€ï¼š`ws://server:port/ws/env`
* æŽ¨é€æ ¼å¼ï¼ˆJSON):
```json
{
  "area": "北区1号塔吊",
  "device_id": "D-1002",
  "temperature": 31.2,
  "humidity": 48.3,
  "dust": 0.76,
  "timestamp": "2025-06-17T14:00:00"
}
```
### æ–½å·¥è¿›åº¦æŸ¥è¯¢æŽ¥å£
* URL:`GET /api/progress/list`
* è¿”回值:
```json
[
  {
    "type": "基坑开挖",
    "plan": 100,
    "done": 60,
    "unit": "m³",
    "timestamp": "2025-06-17"
  }
]
```
---
## å…­ã€æ•°æ®åº“结构设计
### çŽ¯å¢ƒä¿¡æ¯è¡¨ `env_data`
| å­—段名         | ç±»åž‹       | æè¿°   |
| ----------- | -------- | ---- |
| id          | int      | ä¸»é”®   |
| device\_id  | varchar  | è®¾å¤‡ç¼–号 |
| area        | varchar  | åŒºåŸŸåç§° |
| temperature | float    | æ¸©åº¦   |
| humidity    | float    | æ¹¿åº¦   |
| dust        | float    | ç²‰å°˜æµ“度 |
| timestamp   | datetime | æ•°æ®æ—¶é—´ |
### æ–½å·¥è¿›åº¦è¡¨ `progress_info`
| å­—段名       | ç±»åž‹       | æè¿°    |
| --------- | -------- | ----- |
| id        | int      | ä¸»é”®    |
| type      | varchar  | æ–½å·¥ç±»åž‹  |
| plan      | float    | é¢„计工作量 |
| done      | float    | å½“前完成  |
| unit      | varchar  | å•位    |
| timestamp | datetime | æ›´æ–°æ—¶é—´  |
---
# ðŸš¨ æ¨¡å—设计文档:13. è­¦æŠ¥ç®¡ç†ï¼ˆâ˜…★★★)
## ä¸€ã€æ¨¡å—目的
对工地中的环境指标进行实时监测和报警判断,当数值超过设定阈值时触发报警,通过声光预警、客户端提示、派单等方式进行闭环管理。
---
## äºŒã€åŠŸèƒ½æ¦‚è¿°
| åŠŸèƒ½    | æè¿°                  |
| ----- | ------------------- |
| é˜ˆå€¼ç®¡ç†  | æ¯é¡¹æŒ‡æ ‡å¯è®¾ç½®æœ€å°å€¼/最大值,动态调整 |
| æŠ¥è­¦è§¦å‘  | æœåŠ¡ç«¯åˆ¤æ–­è¶…è¿‡é˜ˆå€¼æ—¶è§¦å‘è­¦æŠ¥äº‹ä»¶    |
| å®¢æˆ·ç«¯æ˜¾ç¤º | æ‰€æœ‰å®¢æˆ·ç«¯å®žæ—¶å¼¹å‡ºæˆ–标记警报信息    |
| æŠ¥è­¦è®°å½•  | æ‰€æœ‰åŽ†å²æŠ¥è­¦å…¥åº“ï¼Œä¾›æŸ¥è¯¢ç»Ÿè®¡      |
| æŠ¥è­¦å¤„理  | å¯è®°å½•处理方式(自动/派单/手动)   |
---
## ä¸‰ã€æŠ¥è­¦è§¦å‘逻辑
### æœåŠ¡ç«¯å¤„ç†æµç¨‹ï¼š
```
数据接收 â†’ åˆ¤æ–­æ˜¯å¦è¶…出阈值 â†’ æ˜¯ â†’
1. å†™å…¥è­¦æŠ¥è¡¨
2. è½¬å‘报警给所有客户端(WebSocket)
```
---
## å››ã€æ•°æ®åº“表结构设计
### è­¦æŠ¥ä¿¡æ¯è¡¨ `alarm_info`
| å­—段名            | ç±»åž‹       | æè¿°             |
| -------------- | -------- | -------------- |
| id             | int      | ä¸»é”®             |
| device\_id     | varchar  | æ¥æºè®¾å¤‡ç¼–号         |
| metric         | varchar  | æŒ‡æ ‡åç§°ï¼ˆæ¸©åº¦ç­‰ï¼‰      |
| value          | float    | è§¦å‘值            |
| threshold\_min | float    | æœ€å°é˜ˆå€¼           |
| threshold\_max | float    | æœ€å¤§é˜ˆå€¼           |
| status         | varchar  | çŠ¶æ€ï¼ˆé¢„è­¦/处理中/已解决) |
| handler        | varchar  | å¤„理人            |
| timestamp      | datetime | è§¦å‘æ—¶é—´           |
### é˜ˆå€¼è®¾ç½®è¡¨ `alarm_threshold`
| å­—段名          | ç±»åž‹       | æè¿°         |
| ------------ | -------- | ---------- |
| id           | int      | ä¸»é”®         |
| metric       | varchar  | æŒ‡æ ‡ï¼ˆæ¸©åº¦ã€æ¹¿åº¦ç­‰ï¼‰ |
| min\_value   | float    | æœ€å°å€¼        |
| max\_value   | float    | æœ€å¤§å€¼        |
| update\_time | datetime | æ›´æ–°æ—¶é—´       |
---
## äº”、客户端界面设计
### é˜ˆå€¼ç®¡ç†ç•Œé¢
* æ”¯æŒæŸ¥è¯¢ã€ä¿®æ”¹ï¼ˆæƒé™æ ¡éªŒï¼‰
* ç”¨è¡¨æ ¼æ–¹å¼å±•示各指标当前阈值
### è­¦æŠ¥å±•示界面
* å¯ä½œä¸ºé¡¶éƒ¨çº¢è‰²æ¨ªå¹…实时滚动
* æ”¯æŒå¼¹çª—通知、报警列表展示
---
## å…­ã€æ•°æ®æŽ¨é€æ ¼å¼ï¼ˆWebSocket)
```json
{
  "type": "alarm",
  "device_id": "D-1002",
  "metric": "粉尘浓度",
  "value": 1.35,
  "min": 0.0,
  "max": 1.2,
  "status": "预警",
  "timestamp": "2025-06-17T14:01:00"
}
```
---
## ä¸ƒã€å®¢æˆ·ç«¯æ¨¡å—设计建议
```bash
AlarmModule/
├── AlarmManager.h/.cpp           # é€»è¾‘处理、阈值判断封装
├── AlarmThresholdWidget.ui       # é˜ˆå€¼è®¾ç½®ç•Œé¢
├── AlarmDisplayWidget.ui         # å®žæ—¶è­¦æŠ¥æ˜¾ç¤ºåŒº
├── AlarmWebSocketHandler.cpp     # æŽ¨é€å¤„理器
```
------
# âœ… æŽ¨èæž¶æž„:**数据统一管理,Widget åªè´Ÿè´£æ˜¾ç¤º**
> ðŸ‘‰ **核心思想:数据获取统一处理,UI æ˜¾ç¤ºåˆ†åˆ«æ›´æ–°**
------
## ðŸ”§ æž¶æž„分层建议
### 1. âœ… æ•°æ®ä¸­å¿ƒï¼ˆç»Ÿä¸€ç®¡ç†ï¼‰
负责接收、解析、缓存所有数据(包括推送和轮询)
 **推荐单例类**:`DataCenter` æˆ– `DataDispatcher`
它负责:
- ç»Ÿä¸€ WebSocket/TCP æŽ¥æ”¶ä¼ æ„Ÿå™¨æ•°æ®ï¼ˆæŽ¨é€ï¼‰
- å®šæ—¶è½®è¯¢æŽ¥å£æ‹‰å–数据库数据
- ç»´æŠ¤æœ¬åœ°ç¼“存(如当前温度、进度、考勤)
- å‘å°„ Qt ä¿¡å·ï¼š`dataUpdated()`,通知所有需要刷新显示的控件
```cpp
class DataCenter : public QObject {
    Q_OBJECT
public:
    static DataCenter* instance(); // å•例
    void init();                   // åˆå§‹åŒ–数据源连接、定时器等
    QVariantMap getEnvData();      // èŽ·å–å½“å‰ç¼“å­˜
    QVariantMap getProgressData();
signals:
    void envDataUpdated();
    void progressDataUpdated();
    void attendDataUpdated();
};
```
------
### 2. âœ… æ¯ä¸ªåˆ†åŒº widget â€”— åªç›‘听、显示
各个 widget ä¸“注做**一件事:显示 UI + æŽ¥æ”¶æ•°æ®æ›´æ–°ä¿¡å·**
- `EnvWidget` ç›‘听 `envDataUpdated()`,自动更新温度/湿度标签
- `ProgressWidget` ç›‘听 `progressDataUpdated()`,刷新图表
- `AttendWidget` ç›‘听 `attendDataUpdated()`,展示出勤人数
- `AlarmWidget` ç›‘听统一告警信号 `alarmTriggered(...)`,弹出提示
```cpp
connect(DataCenter::instance(), &DataCenter::envDataUpdated, this, &EnvWidget::updateDisplay);
```
------
### 3. âœ… è§†é¢‘播放部分(例外)
- RTSP è§†é¢‘推荐由每个 `CameraWidget` è‡ªè¡Œç»´æŠ¤æµåœ°å€ä¸Žæ’­æ”¾å™¨ï¼ˆå¦‚ VLC/FFmpeg å°è£…)
- å› ä¸ºæ¯ä¸ªç›‘控画面播放负载高、并且 UI æŽ§åˆ¶è¾ƒå¼ºï¼ˆè½®æ’­ã€åˆ‡æ¢ï¼‰
- å¯ç»Ÿä¸€é…ç½®è§†é¢‘源,但播放逻辑分布在控件中
------
## âœ³ï¸ æ€»ç»“对比
| æ–¹æ¡ˆ                     | ç‰¹ç‚¹                                    | å»ºè®®                                           |
| ------------------------ | --------------------------------------- | ---------------------------------------------- |
| **统一管理(推荐)**     | æ‰€æœ‰æ•°æ®ç»Ÿä¸€æŽ¥å…¥ã€ç¼“存、转发给各 widget | æ›´æ¸…晰、更易维护、更好解耦                     |
| åˆ†åˆ«åœ¨å„ widget èŽ·å–æ•°æ® | æŽ§ä»¶è‡ªå·±åŽ»è½®è¯¢ã€ç»´æŠ¤å®šæ—¶å™¨ã€è§£æžæŽ¥å£    | åˆæœŸç®€å•,后期容易混乱、重复代码、不好统一更新 |
------
## âœ… ç»Ÿä¸€ç®¡ç†çš„优点
- ðŸŒŸ **解耦**:UI å’Œæ•°æ®å¤„理分开,清晰职责
- ðŸ“¦ **缓存集中**:多个 widget å…±äº«æ•°æ®ï¼Œä¸é‡å¤è®¿é—®æŽ¥å£
- ðŸ” **统一轮询/推送处理**:方便扩展协议、接口、调试
- ðŸš¨ **统一告警处理**:告警判断逻辑不需要写在每个 widget ä¸­
------
## ðŸ§± æŽ¨èä½ å®žçŽ°çš„æ¨¡å—ç±»åˆ’åˆ†
| æ¨¡å—            | ç±»å                             | ä½œç”¨                                        |
| --------------- | -------------------------------- | ------------------------------------------- |
| æ•°æ®ä¸­å¿ƒ        | `DataCenter`                     | ç®¡ç†æ‰€æœ‰æ•°æ®é€šä¿¡ã€ç¼“存、信号                |
| ç½‘络通信        | `WebSocketClient` / `HttpClient` | å®žçŽ°æŽ¨é€/轮询                               |
| UI - çŽ¯å¢ƒä¿¡æ¯åŒº | `EnvDisplayWidget`               | ç›‘听 `envDataUpdated()`                     |
| UI - è§†é¢‘轮播   | `CameraCarouselWidget`           | ç»´æŠ¤æ’­æ”¾å™¨                                  |
| UI - åœ°å›¾       | `MapWidget`                      | æ ¹æ® `deviceDataUpdated()` æ·»åŠ è®¾å¤‡çŠ¶æ€å›¾æ ‡ |
| UI - è¿›åº¦å›¾     | `ProgressChartWidget`            | å±•示数据库进度数据                          |
| UI - è€ƒå‹¤       | `AttendWidget`                   | å±•示服务端考勤结果                          |
| UI - å‘Šè­¦       | `AlarmBannerWidget`              | ç»Ÿä¸€æŽ¥æ”¶é¢„警显示                            |
------