This commit is contained in:
2026-07-11 17:27:15 +08:00
parent d11630bfa3
commit 3193d5e739
2 changed files with 58 additions and 22 deletions
+8 -17
View File
@@ -70,8 +70,7 @@ CREATE STABLE IF NOT EXISTS collection_data (
) TAGS ( ) TAGS (
device_id VARCHAR(32), device_id VARCHAR(32),
device_name VARCHAR(128), device_name VARCHAR(128),
data_type VARCHAR(16), data_type VARCHAR(16)
unit VARCHAR(32)
); );
``` ```
@@ -91,8 +90,7 @@ CREATE STABLE IF NOT EXISTS computed_data (
point_name VARCHAR(128), point_name VARCHAR(128),
source VARCHAR(32) -- 数据来源: 'ai_model', 'manual_input', 'external' 等 source VARCHAR(32) -- 数据来源: 'ai_model', 'manual_input', 'external' 等
) TAGS ( ) TAGS (
category VARCHAR(32), -- 类别,如 'aeration', 'dosing', 'prediction' category VARCHAR(32) -- 类别,如 'aeration', 'dosing', 'prediction'
unit VARCHAR(32)
); );
``` ```
@@ -150,7 +148,6 @@ CREATE STABLE IF NOT EXISTS computed_data (
"name": "曝气池DO_01", "name": "曝气池DO_01",
"type": "collection", // 或 'computed'(预留) "type": "collection", // 或 'computed'(预留)
"data_type": "REAL", "data_type": "REAL",
"unit": "mg/L",
"device_id": "device-uuid", "device_id": "device-uuid",
"device_name": "一期曝气柜PLC", "device_name": "一期曝气柜PLC",
"group_name": "曝气池", "group_name": "曝气池",
@@ -189,13 +186,13 @@ CREATE STABLE IF NOT EXISTS computed_data (
```sql ```sql
-- 创建数据库时指定保留天数 -- 创建数据库时指定保留天数
CREATE DATABASE IF NOT EXISTS water_plant CREATE DATABASE IF NOT EXISTS aquacontrolai
KEEP 365 -- 数据保留天数(对应配置值) KEEP 365 -- 数据保留天数(对应配置值)
DAYS 10 -- 每10天一个文件 DAYS 10 -- 每10天一个文件
BLOCKS 100; BLOCKS 100;
-- 修改保留天数(当用户在系统配置中修改时执行) -- 修改保留天数(当用户在系统配置中修改时执行)
ALTER DATABASE water_plant KEEP 730; ALTER DATABASE aquacontrolai KEEP 730;
``` ```
### 4.3 注意 ### 4.3 注意
@@ -238,7 +235,6 @@ Response (200)
"name": "曝气池DO_01", "name": "曝气池DO_01",
"type": "collection", "type": "collection",
"data_type": "REAL", "data_type": "REAL",
"unit": "mg/L",
"device_id": "device-uuid-1", "device_id": "device-uuid-1",
"device_name": "一期曝气柜PLC", "device_name": "一期曝气柜PLC",
"latest_value": 2.35, "latest_value": 2.35,
@@ -250,7 +246,6 @@ Response (200)
"name": "曝气池温度", "name": "曝气池温度",
"type": "collection", "type": "collection",
"data_type": "REAL", "data_type": "REAL",
"unit": "℃",
"device_id": "device-uuid-1", "device_id": "device-uuid-1",
"device_name": "一期曝气柜PLC", "device_name": "一期曝气柜PLC",
"latest_value": 25.1, "latest_value": 25.1,
@@ -314,7 +309,6 @@ Response (200)
{ {
"point_id": "point-uuid-1", "point_id": "point-uuid-1",
"point_name": "曝气池DO_01", "point_name": "曝气池DO_01",
"unit": "mg/L",
"data_type": "REAL", "data_type": "REAL",
"data": [ "data": [
{ "ts": "2026-07-09T00:00:01+08:00", "value": 2.35, "quality": "good" }, { "ts": "2026-07-09T00:00:01+08:00", "value": 2.35, "quality": "good" },
@@ -327,7 +321,6 @@ Response (200)
{ {
"point_id": "point-uuid-2", "point_id": "point-uuid-2",
"point_name": "曝气池温度", "point_name": "曝气池温度",
"unit": "℃",
"data_type": "REAL", "data_type": "REAL",
"data": [ "data": [
{ "ts": "2026-07-09T00:00:01+08:00", "value": 25.1, "quality": "good" }, { "ts": "2026-07-09T00:00:01+08:00", "value": 25.1, "quality": "good" },
@@ -399,7 +392,6 @@ Response (200)
{ {
"point_id": "point-uuid-1", "point_id": "point-uuid-1",
"point_name": "曝气池DO_01", "point_name": "曝气池DO_01",
"unit": "mg/L",
"data": [ "data": [
{ "value": 2.35, "quality": "good" }, { "value": 2.35, "quality": "good" },
{ "value": 2.40, "quality": "good" }, { "value": 2.40, "quality": "good" },
@@ -413,7 +405,6 @@ Response (200)
{ {
"point_id": "point-uuid-2", "point_id": "point-uuid-2",
"point_name": "曝气池温度", "point_name": "曝气池温度",
"unit": "℃",
"data": [ "data": [
{ "value": 25.1, "quality": "good" }, { "value": 25.1, "quality": "good" },
{ "value": 25.0, "quality": "good" }, { "value": 25.0, "quality": "good" },
@@ -446,7 +437,7 @@ ResponseCSV文件(Content-Type: text/csv; charset=utf-8-sig
CSV格式: CSV格式:
```csv ```csv
时间,曝气池DO_01(mg/L),曝气池DO_01_质量,曝气池温度(℃),曝气池温度_质量 时间,曝气池DO_01,曝气池DO_01_质量,曝气池温度,曝气池温度_质量
2026-07-09 00:00:00,2.35,good,25.1,good 2026-07-09 00:00:00,2.35,good,25.1,good
2026-07-09 00:10:00,2.40,good,25.0,good 2026-07-09 00:10:00,2.40,good,25.0,good
2026-07-09 00:20:00,,,25.3,good 2026-07-09 00:20:00,,,25.3,good
@@ -513,7 +504,7 @@ CSV格式:
**场景举例** **场景举例**
同时展示两条曲线,一条 DO 值在 2.0~3.0 mg/L,一条温度在 20~30。如果Y轴从0均匀到30,DO曲线会被压缩成一条几乎水平的直线,完全看不出变化。 同时展示两条曲线,一条 DO 值在 2.0~3.0,一条温度在 20~30。如果Y轴从0均匀到30,DO曲线会被压缩成一条几乎水平的直线,完全看不出变化。
**实现方式 — 分段映射法** **实现方式 — 分段映射法**
@@ -573,7 +564,7 @@ p = sum( previous_segment_heights ) + (v - segment_start) / (segment_end - segme
| 数值标签 | 显示原始数值,不显示映射后的坐标值 | | 数值标签 | 显示原始数值,不显示映射后的坐标值 |
| 刻度位置 | 刻度线在Y轴上的物理位置由映射函数决定,不是均匀分布 | | 刻度位置 | 刻度线在Y轴上的物理位置由映射函数决定,不是均匀分布 |
| 刻度数量 | 自动控制,保持5~10个刻度标签,避免过密 | | 刻度数量 | 自动控制,保持5~10个刻度标签,避免过密 |
| 单位标注 | Y轴标题显示 `数值 (单位)`,如 `mg/L` | | 标题标注 | Y轴标题显示 `数值` |
| 分段视觉提示 | 在Y轴背景上用浅色横条标记不同分段区域,帮助用户识别分段边界 | | 分段视觉提示 | 在Y轴背景上用浅色横条标记不同分段区域,帮助用户识别分段边界 |
#### 6.3.3 折线规则 #### 6.3.3 折线规则
@@ -632,7 +623,7 @@ p = sum( previous_segment_heights ) + (v - segment_start) / (segment_end - segme
│ (复选框) │ 间隔: [10分钟] ▼ │ │ (复选框) │ 间隔: [10分钟] ▼ │
│ │ │ │ │ │
│ ☑ 曝气池 │ ┌──────────────────────────────────┐ │ │ ☑ 曝气池 │ ┌──────────────────────────────────┐ │
│ ☑ DO │ │ 时间 │ DO(mg/L)│ 温度(℃)│ │ │ ☑ DO │ │ 时间 │ DO │ 温度 │ │
│ ☐ 温度 │ │──────────────┼─────────┼────────│ │ │ ☐ 温度 │ │──────────────┼─────────┼────────│ │
│ ☐ 加药间 │ │ 00:00:00 │ 2.35 │ 25.1 │ │ │ ☐ 加药间 │ │ 00:00:00 │ 2.35 │ 25.1 │ │
│ │ │ 00:10:00 │ 2.40 │ 25.0 │ │ │ │ │ 00:10:00 │ 2.40 │ 25.0 │ │
+48 -3
View File
@@ -662,6 +662,52 @@ CREATE INDEX idx_write_points_group ON write_points(group_name) WHERE deleted =
| POST | /api/v1/write-points/export | 导出CSV | | POST | /api/v1/write-points/export | 导出CSV |
| POST | /api/v1/write-points/import | 从CSV导入 | | POST | /api/v1/write-points/import | 从CSV导入 |
| POST | /api/v1/write-points/{id}/write | 执行写入操作(人工/程序自动均使用此接口) | | POST | /api/v1/write-points/{id}/write | 执行写入操作(人工/程序自动均使用此接口) |
| GET | /api/v1/write-logs | 查询写入操作日志 |
**GET /api/v1/write-logs** — 查询写入操作日志
Query parameters
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 默认1 |
| page_size | int | 否 | 默认20,最大100 |
| point_id | string | 否 | 按写入点筛选 |
| device_id | string | 否 | 按设备筛选 |
| source | string | 否 | 筛选 manual/auto |
| result | string | 否 | 筛选 success/failed |
| start_time | string | 否 | 开始时间 |
| end_time | string | 否 | 结束时间 |
| keyword | string | 否 | 搜索 operator 或 point_name |
Response (200)
```json
{
"total": 500,
"page": 1,
"page_size": 20,
"items": [
{
"id": "uuid",
"point_id": "uuid",
"point_name": "加药泵频率",
"device_id": "uuid",
"device_name": "一期加药间PLC",
"address": "DB2.10",
"data_type": "REAL",
"source": "manual",
"target_value": "20.5",
"readback_value": "20.5",
"result": "success",
"error_message": null,
"operator": "张三",
"reason": "AI推荐加药量调整",
"created_at": "2026-07-09T10:00:00+08:00"
}
]
}
```
#### 4.2.2 写入接口详细定义 #### 4.2.2 写入接口详细定义
@@ -903,8 +949,7 @@ CREATE STABLE IF NOT EXISTS collection_data (
) TAGS ( ) TAGS (
device_id VARCHAR(32), -- 设备ID device_id VARCHAR(32), -- 设备ID
device_name VARCHAR(128), -- 设备名称 device_name VARCHAR(128), -- 设备名称
data_type VARCHAR(16), -- 原始数据类型 data_type VARCHAR(16) -- 原始数据类型
unit VARCHAR(32) -- 单位(可选,由采集点配置扩展)
); );
``` ```
@@ -917,7 +962,7 @@ CREATE STABLE IF NOT EXISTS collection_data (
-- 子表名: a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d -- 子表名: a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d
CREATE TABLE IF NOT EXISTS a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d CREATE TABLE IF NOT EXISTS a1b2c3d4e5f64a7b8c9d0e1f2a3b4c5d
USING collection_data TAGS ( USING collection_data TAGS (
'device-uuid', '一期曝气柜PLC', 'REAL', 'mg/L' 'device-uuid', '一期曝气柜PLC', 'REAL'
); );
``` ```