2026-04-17 08:11:43 +08:00
|
|
|
|
# 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`: 原始波形
|
2026-05-14 09:12:16 +08:00
|
|
|
|
- `4`: 简化显示,保留 x 轴时间,对暂降底部中间段幅值置空
|
2026-04-17 08:11:43 +08:00
|
|
|
|
- `ptType`
|
|
|
|
|
|
- PT 接线方式
|
|
|
|
|
|
- `0`: 星形
|
|
|
|
|
|
- `1`: 三角
|
|
|
|
|
|
- `2`: 开口三角
|
|
|
|
|
|
- `pt`
|
2026-05-11 16:32:25 +08:00
|
|
|
|
- PT 变比,优先使用 `cfg` 模拟量通道的一次/二次变比;`cfg` 无有效变比时使用该参数
|
2026-04-17 08:11:43 +08:00
|
|
|
|
- `ct`
|
2026-05-11 16:32:25 +08:00
|
|
|
|
- CT 变比,优先使用 `cfg` 模拟量通道的一次/二次变比;`cfg` 无有效变比时使用该参数
|
2026-04-17 08:11:43 +08:00
|
|
|
|
- `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/` 中仍保留原始参考代码,后续如确认正式模块稳定,可再决定是否清理
|
|
|
|
|
|
- 图片生成依赖私有绘图与文件存储组件,当前仅完成代码接入,未做运行态验证
|