# wave-tool 模块说明

## 模块定位

`wave-tool` 是 `tools` 下的波形处理模块，当前承担以下能力：

- 文本波形解析
- COMTRADE `cfg/dat` 文件解析
- RMS 波形计算
- 波形明细组装
- 波形特征值计算
- 波形图片生成与上传

当前实现以 Spring Bean 方式对外提供能力，并由 `entrance` 模块直接聚合。

## 代码结构

```text
wave-tool/
├── src/main/java/com/njcn/gather/tool/wave/
│   ├── bo
│   ├── component
│   ├── controller
│   ├── dto
│   ├── enums
│   ├── param
│   ├── service
│   ├── utils
│   └── vo
└── temp/
```

说明：

- `component/WaveFileComponent`
  - 负责 COMTRADE 波形文件解析、RMS 计算、特征值计算
- `component/WavePicComponent`
  - 负责波形图片绘制结果合成与上传
- `service/impl/WaveServiceImpl`
  - 负责统一编排文本波形解析与 COMTRADE 解析链路
- `utils/WaveUtil`
  - 负责前端查看明细组装
- `utils/BitConverter`
  - 负责波形二进制字节转换
- `temp/`
  - 保留原始参考代码，不作为正式运行入口

## 对外接口

### 1. 文本波形解析

- 路径：`POST /wave/parse`
- Content-Type：`application/json`

请求体字段：

- `waveformText`
  - 波形文本内容，必填
- `separator`
  - 分隔符，支持 `AUTO`、`TAB`、`SPACE` 或直接传入具体字符
- `containsXAxis`
  - 是否显式包含 X 轴
- `xColumnIndex`
  - X 轴列下标
- `yColumnIndex`
  - Y 轴列下标
- `skipHeaderLines`
  - 跳过的表头行数
- `samplingInterval`
  - 单列波形采样间隔
- `maxPointCount`
  - 返回最大点位数

返回字段：

- `containsXAxis`
- `sourcePointCount`
- `displayPointCount`
- `ignoredLineCount`
- `sampled`
- `minX`
- `maxX`
- `minY`
- `maxY`
- `averageY`
- `points`

### 2. COMTRADE 波形解析

- 路径：`POST /wave/parseComtrade`
- Content-Type：`multipart/form-data`

文件字段：

- `cfgFile`
  - COMTRADE 配置文件
- `datFile`
  - COMTRADE 数据文件

表单字段：

- `parseType`
  - 解析类型
  - `0`: 高级算法采样率 32-128
  - `1`: 普通展示
  - `2`: App 抽点
  - `3`: 原始波形
  - `4`: 简化显示，保留 x 轴时间，对暂降底部中间段幅值置空
- `ptType`
  - PT 接线方式
  - `0`: 星形
  - `1`: 三角
  - `2`: 开口三角
- `pt`
  - PT 变比，优先使用 `cfg` 模拟量通道的一次/二次变比；`cfg` 无有效变比时使用该参数
- `ct`
  - CT 变比，优先使用 `cfg` 模拟量通道的一次/二次变比；`cfg` 无有效变比时使用该参数
- `monitorName`
  - 测点名称
- `calculateRms`
  - 是否计算 RMS
- `buildDetails`
  - 是否组装前端查看明细
- `calculateEigenvalue`
  - 是否计算特征值
- `dynamicThreshold`
  - 特征值算法是否使用浮动门槛
- `generateInstantImage`
  - 是否生成瞬时波形图
- `generateRmsImage`
  - 是否生成 RMS 波形图
- `generateInstantZlImage`
  - 是否生成治理场景瞬时波形图
- `generateRmsZlImage`
  - 是否生成治理场景 RMS 波形图

返回字段：

- `waveData`
  - 波形基础数据，包含 `cfg`、原始波形、RMS、标题等
- `waveDataDetails`
  - 前端查看明细
- `eigenvalues`
  - 特征值结果
- `instantImagePath`
  - 瞬时波形图路径
- `rmsImagePath`
  - RMS 波形图路径
- `instantZlImagePath`
  - 治理场景瞬时波形图路径
- `rmsZlImagePath`
  - 治理场景 RMS 波形图路径

## 使用示例

### 文本波形

```json
{
  "waveformText": "0,220\n1,221\n2,219",
  "separator": "AUTO",
  "containsXAxis": true,
  "maxPointCount": 2000
}
```

### COMTRADE 波形

```bash
curl -X POST "http://localhost:8080/wave/parseComtrade" \
  -F "cfgFile=@D:/data/test.cfg" \
  -F "datFile=@D:/data/test.dat" \
  -F "parseType=1" \
  -F "ptType=0" \
  -F "pt=1" \
  -F "ct=1" \
  -F "monitorName=测试测点" \
  -F "calculateRms=true" \
  -F "buildDetails=true" \
  -F "calculateEigenvalue=true" \
  -F "dynamicThreshold=true" \
  -F "generateInstantImage=true" \
  -F "generateRmsImage=true"
```

## 依赖说明

模块自身直接声明的依赖仍然较轻，核心包括：

- `com.njcn:njcn-common`
- `com.njcn:spingboot2.3.12`

但当前图片链路还依赖私有组件能力：

- `DrawPicUtil`
- `FileStorageUtil`
- `OssPath`
- `PicCommonData`

因此，若要真实运行图片生成功能，需要确保这些依赖在实际环境中可用。

## 当前限制

- 当前未执行 `mvn` 编译或测试验证
- `temp/` 中仍保留原始参考代码，后续如确认正式模块稳定，可再决定是否清理
- 图片生成依赖私有绘图与文件存储组件，当前仅完成代码接入，未做运行态验证
