Ver código fonte

修复超短期单次预测(type=1)报表monitoredPower恒为0: toOnceData原以forecast_time(末点时间=start_time+240min)为实发功率查找基准, 16个时间点全部落在实发数据窗口[start,end+4h]之外, 改按起报时间start_time对齐; 循环范围i=0..15改为i=1..16, 对应表中实际存在的power15..power240列(原实现读取文件处理从不写入的power列且漏掉power240)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
taosj 1 semana atrás
pai
commit
3f5e75ab0f

+ 7 - 4
forecast-backend-server/src/main/java/com/ufo/project/forecast/shortterm/power/controller/UltraShortTermPowerForecastingController.java

@@ -157,18 +157,21 @@ public class UltraShortTermPowerForecastingController extends BaseController
             DataUltraShortTermPowerForecasting::getPower240
         );
         int step = 15;
-        for(int i = 0; i < 16; i++){
-            UltraShortTermPowerForecastOnceData onceData = 
+        // 16个预测点对应 power15..power240 列(相对起报时间 start_time 的 +15min..+240min)
+        for(int i = 1; i < 17; i++){
+            UltraShortTermPowerForecastOnceData onceData =
                 toOnceData(data, (long) i * step, realDataMap, timePowerConsumers.get(i));
             result.add(onceData);
         }
         return result;
     }
 
-    private UltraShortTermPowerForecastOnceData toOnceData(DataUltraShortTermPowerForecasting data, Long plusMinutes, Map<Long, DataElectricityLocal> realDataMap, 
+    private UltraShortTermPowerForecastOnceData toOnceData(DataUltraShortTermPowerForecasting data, Long plusMinutes, Map<Long, DataElectricityLocal> realDataMap,
         Function<DataUltraShortTermPowerForecasting, String> timePowerConsumer)
     {
-        Long time = data.getForecastTime() + plusMinutes * 60;
+        // 预测列偏移量相对起报时间 start_time, 实发功率(tm)也须按 start_time 对齐查找;
+        // forecast_time 是末点时间(= start_time+240min), 若作为基准会导致所有点在实发数据窗口外
+        Long time = data.getStartTime() + plusMinutes * 60;
         DataElectricityLocal realData = realDataMap.get(time);
         double power = parsePower(timePowerConsumer.apply(data));
         double actualPower = realData != null ? realData.getActualPower() : 0D;