功能: 服务端生成完整报告并保护单任务

- 使用 libxlsxwriter 常量内存导出 Excel\n- 增加全局任务占用提示与原始数据持久化\n- 保留运行时任务数据并更新接口文档
This commit is contained in:
cloud
2026-08-05 16:47:31 +08:00
parent 07274797af
commit 99ed321d24
2292 changed files with 134317 additions and 126 deletions
+20 -6
View File
@@ -53,7 +53,7 @@
### POST /api/wind/jobs/start
创建风功率计算任务。前端已完成 Excel 表头解析和字段映射,后端只保存任务元数据
创建风功率计算任务。服务器全局同一时刻仅允许一个上传、计算或报告生成任务;繁忙时返回 `status: 1004` 和“服务器正在处理数据,请等待当前任务完成”
请求:
@@ -71,7 +71,8 @@
"wind_speed": "风速(m/s)",
"active_power": "有功功率(kW)",
"generator_speed": "发电机转速(rpm)"
}
},
"raw_headers": ["时间", "风机编号", "风速(m/s)", "有功功率(kW)", "发电机转速(rpm)"]
}
```
@@ -89,7 +90,7 @@
### POST /api/wind/jobs/chunk
上传标准化后的数据分片。每行字段必须使用标准字段名
上传标准化后的数据分片。`raw_rows` 保存原始 Excel 行,用于服务端完整报告的“筛选前的数据”工作表
请求:
@@ -105,6 +106,9 @@
"active_power": 114.3471,
"generator_speed": 1109.3143
}
],
"raw_rows": [
{"file_name": "01_风机历史数据.xls", "values": ["2024-09-01 14:00:00", "01#", 3.414, 114.3471, 1109.3143]}
]
}
```
@@ -131,14 +135,18 @@
{
"job_id": "job_123",
"options": {
"rated_power": 4800,
"rated_wind_speed": 14,
"power_step": 5,
"cleaning_wind_speed_step": 0.25,
"curve_wind_speed_step": 0.5,
"wind_speed_change_threshold": 1,
"iqr_lower_multiplier": 1.8,
"iqr_lower_multiplier": 1.2,
"iqr_upper_multiplier": 2,
"minimum_generator_speed": 1,
"generator_speed_k": 0.9
"generator_speed_k": 0.9,
"rotor_radius": 78,
"gearbox_ratio": 162
}
}
```
@@ -229,7 +237,7 @@
- `wind_speed <= 0` 的数据剔除。
- 同一风机同一时间重复记录保留第一条。
- 限功率识别按参考脚本执行:按功率分箱、按日期分组,组内风速跨度大于阈值时剔除。
- 叶尖速比使用参考脚本公式 `generator_speed * 3.14 * 162 * 78 * 30 / wind_speed`按风速分箱做 IQR 清洗。
- 叶尖速比 `generator_speed * 3.14 * gearbox_ratio * rotor_radius * 30 / wind_speed` 计算;`3.14``30` 固定,叶轮半径与齿轮箱传动比由方案一参数提供,再按风速分箱做 IQR 清洗。
- 风速-功率关系按同一风速分箱和 IQR 参数清洗。
- 每台风机在 IQR 清洗后自动估算平台功率和平台起始风速,返回到 `estimated_params`
- 高风速平台区明显低于平台功率的点剔除为 `high_wind_low_power`
@@ -239,6 +247,12 @@
- `scatter_points` 返回清洗后保留点,`filtered_points` 返回所有过滤阶段滤除的点和原因。
- `estimated_params.source``auto``auto_power_fallback_wind``fallback`
### POST /api/wind/jobs/{jobId}/report
服务端以常量内存方式生成完整报告并直接返回 `.xlsx` 附件。计算完成的数据保留 24 小时;上传任务连续 30 分钟未活动会自动清理。
请求体包含 `fan_id`、当前编辑后的 `effective_rows``report_rows` 和可选的 `chart_image`PNG data URL)。成功时响应为 Excel 文件流;失败时仍使用统一 JSON 响应信封。
### DELETE /api/wind/jobs/{job_id}
清理未完成任务的临时文件。