Browse Source

理论功率要大于实际,获取不到风速,从全场实时平均风速获取

xushili 1 year ago
parent
commit
330f44e283

+ 10 - 0
realtime/wind/src/main/java/com/gyee/gaia/realtime/wind/init/CacheContext.java

@@ -83,6 +83,11 @@ public class CacheContext implements ApplicationRunner {
     public static Map<String, Map<String, String>> equipUcMap = new HashMap<>();
     public static String pointCodes;
 
+    /**
+     * 全场实时平均风速,风场id,测点
+     */
+    public static Map<String, String> stationRealMeanSpeedMap;
+
     @Override
     public void run(ApplicationArguments args) throws Exception {
 
@@ -137,5 +142,10 @@ public class CacheContext implements ApplicationRunner {
         List<Powermodel> pmList = powermodelService.list();
         powerModelMap=pmList.stream().collect(Collectors.groupingBy(pm->equipIdOld2New.get(pm.getWindturbineid()), Collectors.toMap(Powermodel::getSpeed, Powermodel::getPower)));
 
+        log.info("加载全场实时平均风速!");
+        QueryWrapper<TestingPoint> tp2Wrapper = new QueryWrapper<>();
+        tp2Wrapper.eq("thing_type", "station").eq("uniform_code","SSFS").likeLeft("thing_id","_FDC_STA");
+        List<TestingPoint> tpList = testingPointService.list(tp2Wrapper);
+        stationRealMeanSpeedMap = tpList.stream().collect(Collectors.toMap(TestingPoint::getThingId, TestingPoint::getCode));
     }
 }

+ 19 - 10
realtime/wind/src/main/java/com/gyee/gaia/realtime/wind/job/CauseJobHandler.java

@@ -16,11 +16,9 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 @Order(2)
 @Component
@@ -113,23 +111,29 @@ public class CauseJobHandler implements ApplicationRunner {
                 if (pointCode != null) {
                     //风速
                     v = pdaqMap.get(pointCode).stream().mapToDouble(PointData::getDoubleValue).average().orElse(0);
+                    if (v == 0.0) {
+                        //如果离线或者别的原因获取不到风速,从全场实时平均风速获取
+                        Map<String, PointData> latest = adapterApi.getLatest(CacheContext.stationRealMeanSpeedMap.get(CacheContext.equipMap.get(entry.getKey()).getWindpowerstationId()));
+                        Iterator<PointData> iterator = latest.values().iterator();
+                        double doubleValue = 0;
+                        if (iterator.hasNext()) doubleValue = iterator.next().getDoubleValue();
+                        if (doubleValue > 3) v = doubleValue;
+                    }
                     speed = NumberUtil.round(v, 2).doubleValue();
                     target.setWindSpeed((float) speed);
 
                     if (speed < 3) {
                         power = 0.0;
                     } else {
-                        Map<Double, Double> map = CacheContext.powerModelMap.get(entry.getKey());
+                        /*Map<Double, Double> map = CacheContext.powerModelMap.get(entry.getKey());
                         if (map != null && map.size() > 0) {
                             power = map.get(speed);
                         } else {
                             power = CacheContext.mpdsMapMap.get(CacheContext.equipModelMap.get(entry.getKey())).get(speed);
-                        }
-                    }
-                    if (power == null) {
-                        power = 0.0;
-                        System.out.println(entry.getKey() + speed);
+                        }*/
+                        power = CacheContext.mpdsMapMap.get(CacheContext.equipModelMap.get(entry.getKey())).get(speed);
                     }
+                    if (power == null) power = 0.0;
                     target.setTheoryGeneration(NumberUtil.round(power / 60, 4).floatValue());
                 }
                 pointCode = entryValue.get(uniformcodeOne.get("active-power"));
@@ -154,6 +158,11 @@ public class CauseJobHandler implements ApplicationRunner {
                 }
                 targets.add(target);
             }
+            targets = targets.stream().peek(t -> {
+                if (t.getTheoryGeneration() < t.getPower()) {
+                    t.setTheoryGeneration(t.getPower());
+                }
+            }).collect(Collectors.toList());
             realtimeAverageTargetService.saveBatch(targets);
         } catch (Exception e) {
             e.printStackTrace();