# steady-DataView API 调试文档

## 1. 基础信息

- 模块：`steady/steady-DataView`
- 控制器：`SteadyDataViewController`
- 接口前缀：`/steady/data-view`
- 本地默认地址：`http://localhost:18192`
- Content-Type：`application/json`
- 认证：除登录和 Swagger 资源外，请求需要携带登录后的 `Authorization` 头。

## 2. 分页查询稳态数据

- 路径：`POST /steady/data-view/page`
- 返回：`HttpResult<Page<SteadyDataViewVO>>`
- 默认表：`data_v`
- 默认时间范围：当前月 1 日 `00:00:00` 到当前时间
- 默认排序：`TIMEID DESC, LINEID ASC, PHASIC_TYPE ASC`

请求示例：

```json
{
  "pageNum": 1,
  "pageSize": 10,
  "tableName": "data_v",
  "timeStart": "2026-05-01 00:00:00",
  "timeEnd": "2026-05-09 23:59:59",
  "phasicType": "A",
  "qualityFlag": 1,
  "lineIds": [
    "line-001"
  ],
  "engineeringName": "示例工程",
  "projectName": "示例项目",
  "equipmentName": "示例设备",
  "lineName": "示例测点"
}
```

`tableName` 只允许 `tools/add-data` 已注册的 13 张 `data_*` 表；台账关键字会先通过 `add-ledger` 转换为监测点 ID，再查询稳态数据表。

## 3. 查询稳态数据详情

- 路径：`POST /steady/data-view/detail`
- 返回：`HttpResult<SteadyDataViewVO>`

请求示例：

```json
{
  "tableName": "data_v",
  "lineId": "line-001",
  "timeId": "2026-05-09 10:20:30",
  "phasicType": "A"
}
```

详情使用 `LINEID + TIMEID + PHASIC_TYPE` 定位单条数据。

## 4. 查询稳态数据模板

- 路径：`GET /steady/data-view/templates`
- 返回：`HttpResult<List<SteadyDataViewTemplateVO>>`

模板来自 `tools/add-data` 的前端展示模板，返回参数名称、表名、相别和当前表可展示值字段。

## 5. 查询趋势台账树

- 路径：`GET /steady/data-view/ledger-tree`
- 返回：`HttpResult<List<SteadyDataViewLedgerNodeVO>>`
- 查询参数：`keyword`，可选，按台账节点名称搜索并保留父级路径。

节点字段：

| 字段 | 说明 |
| --- | --- |
| `id` | 台账节点 ID |
| `parentId` | 父节点 ID |
| `name` | 节点名称 |
| `level` | 层级：0 工程，1 项目，2 设备，3 监测点 |
| `deviceCount` | 当前节点下有效设备数 |
| `lineCount` | 当前节点下有效监测点数 |
| `selectable` | 是否可直接选择 |
| `children` | 子节点 |

## 6. 查询趋势指标树

- 路径：`GET /steady/data-view/indicator-tree`
- 返回：`HttpResult<List<SteadyDataViewIndicatorNodeVO>>`

当前指标目录覆盖：

- 电压趋势：`V_RMS`、`V_LINE_RMS`
- 电流趋势：`I_RMS`
- 频率趋势：`FREQ`
- 谐波趋势：`V_THD`、`I_THD`、`V_HARMONIC`、`I_HARMONIC`、`V_HARMONIC_RATE`、`I_HARMONIC_RATE`、`I_INTER_HARMONIC`、`P_HARMONIC_POWER`、`Q_HARMONIC_POWER`、`S_HARMONIC_POWER`
- 闪变趋势：`FLUC`、`PST`、`PLT`

叶子节点会返回 `tableName`、`phaseCodes`、`seriesFields`、`supportStats`、`harmonicOrderStart`、`harmonicOrderEnd`、`unit`，前端按这些字段驱动相别、统计类型和谐波次数选择。

## 7. 查询趋势数据

- 路径：`POST /steady/data-view/trend/query`
- 返回：`HttpResult<SteadyTrendQueryVO>`

请求示例：

```json
{
  "lineIds": ["line-001"],
  "indicatorCodes": ["V_RMS"],
  "statTypes": ["AVG", "MAX", "MIN", "CP95"],
  "phases": ["A", "B", "C"],
  "timeStart": "2026-05-01 00:00:00",
  "timeEnd": "2026-05-01 23:59:59",
  "bucket": "10m",
  "qualityFlag": 1
}
```

返回示例：

```json
{
  "sampled": true,
  "bucket": "10m",
  "sourcePointCount": 144,
  "displayPointCount": 144,
  "loadableDays": ["2026-05-01"],
  "series": [
    {
      "seriesKey": "line-001|V_RMS|A|AVG|RMS",
      "lineId": "line-001",
      "lineName": "进线一",
      "indicatorCode": "V_RMS",
      "indicatorName": "相电压有效值",
      "seriesName": "相电压有效值",
      "phase": "A",
      "statType": "AVG",
      "unit": "V",
      "points": [
        {
          "time": "2026-05-01 00:00:00",
          "value": 220.1
        }
      ]
    }
  ]
}
```

谐波请求必须指定 `harmonicOrders`，最多 6 个：

```json
{
  "lineIds": ["line-001"],
  "indicatorCodes": ["V_HARMONIC"],
  "statTypes": ["MAX"],
  "phases": ["A"],
  "harmonicOrders": [3, 5, 7],
  "timeStart": "2026-05-01 00:00:00",
  "timeEnd": "2026-05-01 23:59:59",
  "bucket": "10m",
  "qualityFlag": 1
}
```

## 8. 按天查询趋势数据

- 路径：`POST /steady/data-view/trend/day`
- 返回：`HttpResult<SteadyTrendQueryVO>`

请求体与 `/trend/query` 一致。前端切换日期或加载某一天数据时，将 `timeStart`、`timeEnd` 控制在当天范围即可。

## 9. 查询趋势统计摘要

- 路径：`POST /steady/data-view/trend/summary`
- 返回：`HttpResult<SteadyTrendSummaryVO>`

请求体与 `/trend/query` 一致。后端按当前查询范围返回每条曲线的 `max`、`avg`、`min`、`cp95`。

## 10. InfluxDB 配置

配置项前缀：`steady.influxdb`。

```yaml
steady:
  influxdb:
    url: http://192.168.1.103:18086
    database: pqsbase
    username: admin
    password: ${STEADY_INFLUXDB_PASSWORD:}
    ssl: false
    connect-timeout-ms: 5000
    read-timeout-ms: 30000
```

接口按 InfluxDB 1.x InfluxQL `/query` 方式访问。代码不会提交明文密码；本地密码请通过环境变量或本地覆盖配置提供。

## 11. 返回字段说明

| 字段 | 说明 |
| --- | --- |
| `tableName` | 数据表名 |
| `lineId` | 监测点 ID |
| `timeId` | 数据时间 |
| `phasicType` | 相别 |
| `qualityFlag` | 质量标识 |
| `equipmentName` | 设备名称，台账缺失时为 `-` |
| `engineeringName` | 工程名称，台账缺失时为 `-` |
| `projectName` | 项目名称，台账缺失时为 `-` |
| `lineName` | 监测点名称，台账缺失时为 `-` |
| `values` | 动态指标字段，字段名与目标 `data_*` 表保持一致 |

## 12. 常见错误场景

| 场景 | 后端提示 |
| --- | --- |
| 表名不在 add-data 注册表范围内 | `稳态数据表不支持：xxx` |
| 开始时间大于结束时间 | `开始时间不能大于结束时间` |
| 时间格式无法解析 | `时间格式不正确，仅支持 yyyy-MM-dd HH:mm:ss` |
| 相别不为 `A/B/C/T` | `相别只能是 A、B、C、T` |
| 质量标识不为 `0/1` | `质量标识只能是 0 或 1` |
| `lineIds` 超过 1000 个 | `监测点 ID 查询数量不能超过 1000 个` |
| 台账关键字匹配监测点超过 1000 个 | `台账检索匹配监测点过多，请缩小查询条件` |
| 趋势监测点为空 | `监测点 ID 不能为空` |
| 趋势指标为空 | `指标不能为空` |
| 多监测点同时多指标查询 | `多监测点查询时只能选择 1 个指标` |
| 趋势曲线超过 24 条 | `趋势曲线数量不能超过 24 条，请缩小监测点、指标、相别或统计类型范围` |
| 谐波指标未传次数 | `谐波次数不能为空` |
| 谐波次数超过 6 个 | `谐波次数最多选择 6 个` |
| InfluxDB 未配置地址 | `InfluxDB 地址未配置` |

## 13. 当前限制

- 当前仅提供分页、详情和模板查询，未提供动态 Excel 导出。
- 趋势接口已提供后端结构和 InfluxQL 查询封装，未做真实 InfluxDB 联调。
- `sourcePointCount` 当前与实际返回点数一致，未额外发 InfluxDB `count` 查询。
