11
This commit is contained in:
+82
-91
@@ -48,10 +48,6 @@
|
||||
│ 数据写入 │
|
||||
│ │
|
||||
│ ○ 历史数据 │ ← 同层级,无子菜单
|
||||
│ │
|
||||
│ ○ 实时监控 │
|
||||
│ ○ 智能控制 │
|
||||
│ ○ 系统配置 │
|
||||
└──────────┘
|
||||
```
|
||||
|
||||
@@ -122,26 +118,26 @@ CREATE STABLE IF NOT EXISTS computed_data (
|
||||
|
||||
```
|
||||
所有历史点位
|
||||
├── 设备1
|
||||
│ ├── 分组A
|
||||
│ │ ├── ☐ 采集点1(最新值,质量戳)
|
||||
│ │ ├── ☐ 采集点2(最新值,质量戳)
|
||||
│ │ └── ...
|
||||
│ ├── 分组B
|
||||
├── 分组A
|
||||
│ ├── ☐ 采集点1(最新值,质量戳)
|
||||
│ ├── ☐ 采集点2(最新值,质量戳)
|
||||
│ └── ...
|
||||
├── 设备2
|
||||
├── 分组B
|
||||
│ ├── ☐ 采集点3(最新值,质量戳)
|
||||
│ └── ...
|
||||
├── ...(其他分组)
|
||||
└── 内部数据(预留)
|
||||
└── (暂无数据)
|
||||
```
|
||||
|
||||
分组名称直接取自数据采集点配置中的 `group_name`,同一分组下的点位可来自不同设备。
|
||||
|
||||
### 3.2 构建规则
|
||||
|
||||
| 层级 | 数据来源 | 说明 |
|
||||
|------|----------|------|
|
||||
| 第一层:设备 | PostgreSQL `devices` 表 | 只有旗下有可用历史数据点的设备才显示 |
|
||||
| 第二层:分组 | PostgreSQL `collection_points` 表的 group_name | 按设备分组,只有该设备下有历史数据点的分组才显示 |
|
||||
| 第三层:点位 | PostgreSQL `collection_points` | 满足 store_history=true 且 enabled 的采集点 |
|
||||
| 第一层:分组 | PostgreSQL `collection_points` 表的 `group_name` | 去重后作为树的顶层节点,只有包含可用历史数据点的分组才显示 |
|
||||
| 第二层:点位 | PostgreSQL `collection_points` | 满足 store_history=true 且 enabled 的采集点,按 group_name 归属到对应分组下 |
|
||||
| 独立节点:内部数据 | 硬编码占位 | 当前阶段显示"暂无数据",后续扩展 |
|
||||
|
||||
### 3.3 节点属性
|
||||
@@ -155,15 +151,17 @@ CREATE STABLE IF NOT EXISTS computed_data (
|
||||
"type": "collection", // 或 'computed'(预留)
|
||||
"data_type": "REAL",
|
||||
"unit": "mg/L",
|
||||
"latest_value": 2.35,
|
||||
"latest_quality": "good",
|
||||
"latest_ts": "2026-07-09T10:00:01+08:00",
|
||||
"device_id": "device-uuid",
|
||||
"device_name": "一期曝气柜PLC",
|
||||
"group_name": "曝气池"
|
||||
"group_name": "曝气池",
|
||||
"latest_value": 2.35,
|
||||
"latest_quality": "good",
|
||||
"latest_ts": "2026-07-09T10:00:01+08:00"
|
||||
}
|
||||
```
|
||||
|
||||
> 由于树结构按分组平铺,点位节点需额外携带 `device_id` 和 `device_name` 以便前端识别点位所属设备。
|
||||
|
||||
### 3.4 复选框行为
|
||||
|
||||
| 操作 | 行为 |
|
||||
@@ -231,36 +229,33 @@ Response (200):
|
||||
{
|
||||
"tree": [
|
||||
{
|
||||
"id": "device-uuid-1",
|
||||
"name": "一期曝气柜PLC",
|
||||
"type": "device",
|
||||
"id": "group-aeration",
|
||||
"name": "曝气池",
|
||||
"type": "group",
|
||||
"children": [
|
||||
{
|
||||
"id": "group-aeration",
|
||||
"name": "曝气池",
|
||||
"type": "group",
|
||||
"children": [
|
||||
{
|
||||
"id": "point-uuid-1",
|
||||
"name": "曝气池DO_01",
|
||||
"type": "collection",
|
||||
"data_type": "REAL",
|
||||
"unit": "mg/L",
|
||||
"latest_value": 2.35,
|
||||
"latest_quality": "good",
|
||||
"latest_ts": "2026-07-09T10:00:01+08:00"
|
||||
},
|
||||
{
|
||||
"id": "point-uuid-2",
|
||||
"name": "曝气池温度",
|
||||
"type": "collection",
|
||||
"data_type": "REAL",
|
||||
"unit": "℃",
|
||||
"latest_value": 25.1,
|
||||
"latest_quality": "good",
|
||||
"latest_ts": "2026-07-09T10:00:01+08:00"
|
||||
}
|
||||
]
|
||||
"id": "point-uuid-1",
|
||||
"name": "曝气池DO_01",
|
||||
"type": "collection",
|
||||
"data_type": "REAL",
|
||||
"unit": "mg/L",
|
||||
"device_id": "device-uuid-1",
|
||||
"device_name": "一期曝气柜PLC",
|
||||
"latest_value": 2.35,
|
||||
"latest_quality": "good",
|
||||
"latest_ts": "2026-07-09T10:00:01+08:00"
|
||||
},
|
||||
{
|
||||
"id": "point-uuid-2",
|
||||
"name": "曝气池温度",
|
||||
"type": "collection",
|
||||
"data_type": "REAL",
|
||||
"unit": "℃",
|
||||
"device_id": "device-uuid-1",
|
||||
"device_name": "一期曝气柜PLC",
|
||||
"latest_value": 25.1,
|
||||
"latest_quality": "good",
|
||||
"latest_ts": "2026-07-09T10:00:01+08:00"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -475,15 +470,14 @@ CSV格式:
|
||||
│ 点位树 │ 时间范围选择器 [过去1小时] [今天] [自定义] │
|
||||
│ (复选框) │ │
|
||||
│ │ ┌──────────────────────────────────┐ │
|
||||
│ ☑ 设备1 │ │ │ │
|
||||
│ ☑ 分组A │ │ 曲线图区域 │ │
|
||||
│ ☑ DO │ │ (ECharts 折线图) │ │
|
||||
│ ☐ 温度 │ │ │ │
|
||||
│ ☐ 分组B │ │ │ │
|
||||
│ ☐ 设备2 │ └──────────────────────────────────┘ │
|
||||
│ │ ┌──────────┬──────────┬──────────┐ │
|
||||
│ 内部数据 │ │ 点位名称 │ 时间 │ 数值 │ │
|
||||
│ ☐ (暂无) │ │ DO │ 00:00:05 │ 2.38 │ │
|
||||
│ ☑ 曝气池 │ │ │ │
|
||||
│ ☑ DO │ │ 曲线图区域 │ │
|
||||
│ ☐ 温度 │ │ (ECharts 折线图) │ │
|
||||
│ ☐ 加药间 │ │ │ │
|
||||
│ │ └──────────────────────────────────┘ │
|
||||
│ 内部数据 │ ┌──────────┬──────────┬──────────┐ │
|
||||
│ ☐ (暂无) │ │ 点位名称 │ 时间 │ 数值 │ │
|
||||
│ │ │ DO │ 00:00:05 │ 2.38 │ │
|
||||
│ │ │ 温度 │ 00:00:05 │ 25.2 │ │
|
||||
│ │ └──────────┴──────────┴──────────┘ │
|
||||
│ [曲线] [表格]│ │
|
||||
@@ -637,17 +631,16 @@ p = sum( previous_segment_heights ) + (v - segment_start) / (segment_end - segme
|
||||
│ 点位树 │ 时间范围选择器 [自定义] │
|
||||
│ (复选框) │ 间隔: [10分钟] ▼ │
|
||||
│ │ │
|
||||
│ ☑ 设备1 │ ┌──────────────────────────────────┐ │
|
||||
│ ☑ 分组A │ │ 时间 │ DO(mg/L)│ 温度(℃)│ │
|
||||
│ ☑ DO │ │──────────────┼─────────┼────────│ │
|
||||
│ ☐ 温度 │ │ 00:00:00 │ 2.35 │ 25.1 │ │
|
||||
│ ☐ 分组B │ │ 00:10:00 │ 2.40 │ 25.0 │ │
|
||||
│ ☐ 设备2 │ │ 00:20:00 │ — │ 25.3 │ │
|
||||
│ │ │ 00:30:00 │ 2.38 │ — │ │
|
||||
│ 内部数据 │ │ ... │ ... │ ... │ │
|
||||
│ ☐ (暂无) │ └──────────────────────────────────┘ │
|
||||
│ ☑ 曝气池 │ ┌──────────────────────────────────┐ │
|
||||
│ ☑ DO │ │ 时间 │ DO(mg/L)│ 温度(℃)│ │
|
||||
│ ☐ 温度 │ │──────────────┼─────────┼────────│ │
|
||||
│ ☐ 加药间 │ │ 00:00:00 │ 2.35 │ 25.1 │ │
|
||||
│ │ │ 00:10:00 │ 2.40 │ 25.0 │ │
|
||||
│ 内部数据 │ │ 00:20:00 │ — │ 25.3 │ │
|
||||
│ ☐ (暂无) │ │ 00:30:00 │ 2.38 │ — │ │
|
||||
│ │ │ ... │ ... │ ... │ │
|
||||
│ [曲线] [表格]│ └──────────────────────────────────┘ │
|
||||
│ │ [导出CSV] │
|
||||
│ [曲线] [表格]│ │
|
||||
└───────────┴──────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -684,30 +677,28 @@ p = sum( previous_segment_heights ) + (v - segment_start) / (segment_end - segme
|
||||
### 8.1 页面布局
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ ┌──────────┐ ┌──────────────────────────────────┐ │
|
||||
│ │ ▽ 数据管理 │ │ │ │
|
||||
│ │ 设备管理 │ │ │ │
|
||||
│ │ 数据采集 │ │ 内容区域 │ │
|
||||
│ │ 数据写入 │ │ │ │
|
||||
│ │ │ │ ┌──────────────────────────────┐ │ │
|
||||
│ │ ○ 历史数据 │ │ │ ☐ 设备1 │ │ │
|
||||
│ │ │ │ │ ☐ 分组A │ │ │
|
||||
│ │ ○ 实时监控 │ │ │ ☑ 曝气池DO_01 2.35 │ │ │
|
||||
│ │ ○ 智能控制 │ │ │ ☐ 曝气池温度 25.1 │ │ │
|
||||
│ │ ○ 系统配置 │ │ │ ☐ 分组B │ │ │
|
||||
│ │ │ │ │ ☐ 设备2 │ │ │
|
||||
│ └──────────┘ │ │ ─────── │ │ │
|
||||
│ │ │ 内部数据 │ │ │
|
||||
│ │ │ ☐ (暂无数据) │ │ │
|
||||
│ │ └──────────────────────────────┘ │ │
|
||||
│ │ [曲线] [表格] 切换 │ │
|
||||
│ │ ┌──────────────────────────────┐ │ │
|
||||
│ │ │ 曲线图/表格内容区域 │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ └──────────────────────────────┘ │ │
|
||||
│ └──────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
┌──────────────────────────────────────────┐
|
||||
│ ┌──────────┐ ┌───────────────────────┐ │
|
||||
│ │ ▽ 数据管理 │ │ │ │
|
||||
│ │ 设备管理 │ │ │ │
|
||||
│ │ 数据采集 │ │ 内容区域 │ │
|
||||
│ │ 数据写入 │ │ │ │
|
||||
│ │ │ │ ┌───────────────────┐ │ │
|
||||
│ │ ○ 历史数据 │ │ │ ☑ 曝气池 │ │ │
|
||||
│ │ │ │ │ ☑ DO │ │ │
|
||||
│ └──────────┘ │ │ ☐ 温度 │ │ │
|
||||
│ │ │ ☐ 加药间 │ │ │
|
||||
│ │ │ ─────── │ │ │
|
||||
│ │ │ 内部数据 │ │ │
|
||||
│ │ │ ☐ (暂无数据) │ │ │
|
||||
│ │ └───────────────────┘ │ │
|
||||
│ │ [曲线] [表格] 切换 │ │
|
||||
│ │ ┌───────────────────┐ │ │
|
||||
│ │ │ 曲线图/表格内容区域 │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ └───────────────────┘ │ │
|
||||
│ └───────────────────────┘ │
|
||||
└──────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 8.2 模式切换
|
||||
@@ -723,7 +714,7 @@ p = sum( previous_segment_heights ) + (v - segment_start) / (segment_end - segme
|
||||
用户进入历史数据页面
|
||||
│
|
||||
▼
|
||||
加载历史点位树(GET /api/v1/history/tree)
|
||||
加载历史点位树(GET /api/v1/history/tree),按分组→点位两层构建
|
||||
│
|
||||
▼
|
||||
左侧树渲染,用户勾选点位
|
||||
@@ -746,7 +737,7 @@ p = sum( previous_segment_heights ) + (v - segment_start) / (segment_end - segme
|
||||
| 编号 | 规则 | 说明 |
|
||||
|------|------|------|
|
||||
| H001 | 历史数据来源 | 仅展示 store_history=true 且设备/点位均启用的采集点数据 |
|
||||
| H002 | 树形结构 | 按设备→分组→点位三层组织,外加"内部数据"预留节点 |
|
||||
| H002 | 树形结构 | 按分组→点位两层组织,分组名称取自采集点配置的 group_name,外加"内部数据"预留节点 |
|
||||
| H003 | 最大勾选数 | 同时勾选的点位不超过20个 |
|
||||
| H004 | 数据保留 | 可配置1~730天,通过TDengine KEEP参数实现 |
|
||||
| H005 | 表格时间对齐 | 最近邻匹配,匹配窗口 = interval/2 |
|
||||
|
||||
Reference in New Issue
Block a user