Browse Source

Merge remote-tracking branch 'origin/master'

malijun 1 year ago
parent
commit
0938a730d6

+ 32 - 27
electricity/wind/src/main/java/com/gyee/gaia/electricity/wind/job/CalcEquipPowerGenDay.java

@@ -212,36 +212,41 @@ public class CalcEquipPowerGenDay {
             if(StrUtil.isNotBlank(sc.getUserFlag())) sc.setEvent(sc.getUserFlag());
         }).collect(Collectors.groupingBy(StateCause::getEquipmentId));
 
-        String equipId;
-        EquipPowerGenDay epgd;
-        for (List<StateCause> value : scsListMap.values()) {
-            equipId = value.get(0).getEquipmentId();
+        for (Map.Entry<String, EquipPowerGenDay> genDayEntry : sepgdMap.entrySet()) {
+            String equipId = genDayEntry.getKey();
+            EquipPowerGenDay epgd = genDayEntry.getValue();
 
             double faultLossPower = 0;//故障损失电量
             double limitLossPower = 0;//限电损失电量
             double maintainLossPower = 0;//计划检修损失电量
             double implicateLossPower = 0;//受累损失电量
-            for (StateCause cause : value) {
-                switch (cause.getEvent()) {
-                    case "故障":
-                        faultLossPower += cause2DoubleSum(cause);
-                        break;
-                    case "限电":
-                        limitLossPower += cause2DoubleSum(cause);
-                        break;
-                    case "计划检修":
-                        maintainLossPower += cause2DoubleSum(cause);
-                        break;
-                    case "受累":
-                        implicateLossPower += cause2DoubleSum(cause);
-                        break;
+
+            BigDecimal losspower;
+            List<StateCause> stateCauses = scsListMap.get(equipId);
+            if(stateCauses!=null){
+                for (StateCause cause : stateCauses) {
+                    switch (cause.getEvent()) {
+                        case "故障":
+                            faultLossPower += cause2DoubleSum(cause);
+                            break;
+                        case "限电":
+                            limitLossPower += cause2DoubleSum(cause);
+                            break;
+                        case "计划检修":
+                            maintainLossPower += cause2DoubleSum(cause);
+                            break;
+                        case "受累":
+                            implicateLossPower += cause2DoubleSum(cause);
+                            break;
+                    }
                 }
+                //损失电量
+                losspower = epgd.getTheoryGeneration().subtract(epgd.getGeneratingCapacity());
+            }else {
+                losspower = new BigDecimal(0);
+                epgd.setTheoryGeneration(epgd.getGeneratingCapacity());
             }
 
-            epgd = sepgdMap.get(equipId);
-            if (epgd == null) continue;
-            //损失电量
-            BigDecimal losspower = epgd.getTheoryGeneration().subtract(epgd.getGeneratingCapacity());
             if (losspower.compareTo(BigDecimal.ZERO) <= 0) {
                 epgd.setLossPower(BigDecimal.ZERO);
                 epgd.setFaultLossPower(BigDecimal.ZERO);
@@ -251,10 +256,10 @@ public class CalcEquipPowerGenDay {
                 epgd.setPerformanceLossPower(BigDecimal.ZERO);
             } else {
                 epgd.setLossPower(losspower);
-                epgd.setFaultLossPower(BigDecimal.valueOf(faultLossPower).setScale(2, RoundingMode.HALF_UP));
-                epgd.setMaintainLossPower(BigDecimal.valueOf(maintainLossPower).setScale(2, RoundingMode.HALF_UP));
-                epgd.setImplicateLossPower(BigDecimal.valueOf(implicateLossPower).setScale(2, RoundingMode.HALF_UP));
-                epgd.setLimitLossPower(BigDecimal.valueOf(limitLossPower).setScale(2, RoundingMode.HALF_UP));
+                epgd.setFaultLossPower(BigDecimal.valueOf(faultLossPower/60).setScale(2, RoundingMode.HALF_UP));
+                epgd.setMaintainLossPower(BigDecimal.valueOf(maintainLossPower/60).setScale(2, RoundingMode.HALF_UP));
+                epgd.setImplicateLossPower(BigDecimal.valueOf(implicateLossPower/60).setScale(2, RoundingMode.HALF_UP));
+                epgd.setLimitLossPower(BigDecimal.valueOf(limitLossPower/60).setScale(2, RoundingMode.HALF_UP));
 
                 BigDecimal performanceLossPower = epgd.getLossPower().subtract(epgd.getFaultLossPower())
                         .subtract(epgd.getMaintainLossPower()).subtract(epgd.getImplicateLossPower())
@@ -331,7 +336,7 @@ public class CalcEquipPowerGenDay {
                 }
                 theoryPower += power / 1000 / 60;
             }*/
-            value.setTheoryGeneration(BigDecimal.valueOf(sratMap.get(equipId).getTheoryGeneration()).setScale(2, RoundingMode.HALF_UP));
+            value.setTheoryGeneration(BigDecimal.valueOf(sratMap.get(equipId).getTheoryGeneration()/60).setScale(2, RoundingMode.HALF_UP));
             value.setMeanWindSpeed(BigDecimal.valueOf(sratMap.get(equipId).getWindSpeed()).setScale(2, RoundingMode.HALF_UP));
         }
 

+ 14 - 5
electricity/wind/src/main/java/com/gyee/gaia/electricity/wind/serviceimpl/EquipPowerGenDayServiceImpl.java

@@ -32,10 +32,10 @@ public class EquipPowerGenDayServiceImpl extends ServiceImpl<EquipPowerGenDayMap
     @Override
     public List<EquipPowerGenDay> fjjxb(String wpids, String projectids, String lineids, String beginDate, String endDate, String type, String target, String sort) {
         QueryWrapper<EquipPowerGenDay> epgdWrapper = new QueryWrapper<>();
-        epgdWrapper.select("facility_id", "round(sum(generating_capacity)/1000,2) generating_capacity", "round(sum(theory_generation)/1000,2) theory_generation"
-                , "round(sum(loss_power)/1000,2) loss_power", "round(sum(fault_loss_power)/1000,2) fault_loss_power"
-                , "round(sum(maintain_loss_power)/1000,2) maintain_loss_power", "round(sum(implicate_loss_power)/1000,2) implicate_loss_power"
-                , "round(sum(limit_loss_power)/1000,2) limit_loss_power", "round(sum(performance_loss_power)/1000,2) performance_loss_power"
+        epgdWrapper.select("facility_id", "round(sum(generating_capacity)/10000,2) generating_capacity", "round(sum(theory_generation)/10000,2) theory_generation"
+                , "round(sum(loss_power)/10000,2) loss_power", "round(sum(fault_loss_power)/10000,2) fault_loss_power"
+                , "round(sum(maintain_loss_power)/10000,2) maintain_loss_power", "round(sum(implicate_loss_power)/10000,2) implicate_loss_power"
+                , "round(sum(limit_loss_power)/10000,2) limit_loss_power", "round(sum(performance_loss_power)/10000,2) performance_loss_power"
                 , "round(avg(mean_wind_speed),2) mean_wind_speed");
 
         if("1".equals(type)){
@@ -86,7 +86,16 @@ public class EquipPowerGenDayServiceImpl extends ServiceImpl<EquipPowerGenDayMap
             list = list.stream().peek(d -> d.setUniformCode(CacheContext.splssMap.get(d.getFacilityId()))).sorted(Comparator.comparing(EquipPowerGenDay::getFacilityId)).collect(Collectors.toList());
             list.add(powerGenDay);
         }
-        list=list.stream().peek(l->l.setCategory(String.valueOf(l.getTheoryGeneration().divide(l.getGeneratingCapacity(),2, RoundingMode.HALF_EVEN)))).collect(Collectors.toList());
+        list=list.stream().peek(l->{
+            if(l.getTheoryGeneration().compareTo(BigDecimal.ZERO)==0){
+                if(l.getGeneratingCapacity().compareTo(BigDecimal.ZERO)==0){
+                    l.setTheoryGeneration(new BigDecimal(1));
+                }else {
+                    l.setTheoryGeneration(l.getGeneratingCapacity());
+                }
+            }
+            l.setCategory(String.valueOf(l.getGeneratingCapacity().divide(l.getTheoryGeneration(),2, RoundingMode.HALF_EVEN).multiply(new BigDecimal(100))));
+        }).collect(Collectors.toList());
         return list;
     }
 }

+ 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));
     }
 }

+ 22 - 12
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
@@ -112,25 +110,32 @@ public class CauseJobHandler implements ApplicationRunner {
                 pointCode = entryValue.get(uniformcodeOne.get("wind-speed"));
                 if (pointCode != null) {
                     //风速
-                    v = pdaqMap.get(pointCode).stream().mapToDouble(PointData::getDoubleValue).average().orElse(0);
+                    ArrayDeque<PointData> pointData = pdaqMap.get(pointCode);
+                    v = pointData.stream().mapToDouble(PointData::getDoubleValue).average().orElse(0);
+                    if (System.currentTimeMillis()-pointData.getFirst().getTs()>5*60*1000) {
+                        //如果离线或者别的原因获取不到风速,从全场实时平均风速获取
+                        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);
-                        }
+                        }*/
+                        power = CacheContext.mpdsMapMap.get(CacheContext.equipModelMap.get(entry.getKey())).get(speed);
                     }
-                    if (power == null) {
-                        power = 0.0;
-                        System.out.println(entry.getKey() + speed);
-                    }
-                    target.setTheoryGeneration(NumberUtil.round(power / 60, 4).floatValue());
+                    if (power == null) power = 0.0;
+                    target.setTheoryGeneration(NumberUtil.round(power, 2).floatValue());
                 }
                 pointCode = entryValue.get(uniformcodeOne.get("active-power"));
                 if (pointCode != null) {
@@ -154,6 +159,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();

+ 46 - 18
realtime/wind/src/main/java/com/gyee/gaia/realtime/wind/job/DataFillJobHandler.java

@@ -63,30 +63,57 @@ public class DataFillJobHandler {
         ratWrapper.select("tbname", "time", "station_id", "equipment_id").eq("uniform_code", "1FZPJZB")
                 .between("time", startDate.getTime(), endDate.getTime());
         List<RealtimeAverageTarget> ratList = realtimeAverageTargetService.list(ratWrapper);
-        //按风机分组
-        Map<String, List<RealtimeAverageTarget>> ratslMap = ratList.stream().collect(Collectors.groupingBy(RealtimeAverageTarget::getEquipmentId));
-        for (List<RealtimeAverageTarget> value : ratslMap.values()) {
-            String equipmentId = value.get(0).getEquipmentId();
-            String tbname = value.get(0).getTbname();
-
-            Map<String, List<PointData>> lpdsMap = new HashMap<>();
-            CacheContext.equipUcMap.get(equipmentId).forEach((uc, point) -> {
-                List<PointData> rawByKey = adapterApi.getRawByKey(point, startDate.getTime(), endDate.getTime());
-                lpdsMap.put(uc, rawByKey);
-            });
-            int i = 0;
-            for (DateTime minute = DateUtil.beginOfMinute(startDate); minute.isBefore(endDate); minute.offset(DateField.MINUTE, 1)) {
-                if (i >= value.size() || (minute.getTime() != value.get(i).getTime().getTime())) {
+        if(ratList.size()==0){
+            QueryWrapper<RealtimeAverageTarget> wrapper = new QueryWrapper<>();
+            wrapper.select("tbname", "station_id", "equipment_id").eq("uniform_code", "1FZPJZB");
+            List<RealtimeAverageTarget> list = realtimeAverageTargetService.list(wrapper);
+            for (RealtimeAverageTarget target : list) {
+                String equipmentId = target.getEquipmentId();
+                String tbname = target.getTbname();
+
+                Map<String, List<PointData>> lpdsMap = new HashMap<>();
+                CacheContext.equipUcMap.get(equipmentId).forEach((uc, point) -> {
+                    List<PointData> rawByKey = adapterApi.getRawByKey(point, startDate.getTime(), endDate.getTime());
+                    lpdsMap.put(uc, rawByKey);
+                });
+                int i = 0;
+                for (DateTime minute = DateUtil.beginOfMinute(startDate); minute.isBefore(endDate); minute.offset(DateField.MINUTE, 1)) {
                     RealtimeAverageTarget rat = new RealtimeAverageTarget();
                     rat.setTime(new Timestamp(minute.getTime()));
                     rat.setTbname(tbname);
                     setRats(rat, equipmentId, minute.getTime(), minute.getTime() + 59999L, lpdsMap);
                     realtimeAverageTargetList.add(rat);
-                } else {
-                    i++;
                 }
+
+            }
+        }else {
+            //按风机分组
+            Map<String, List<RealtimeAverageTarget>> ratslMap = ratList.stream().collect(Collectors.groupingBy(RealtimeAverageTarget::getEquipmentId));
+            for (List<RealtimeAverageTarget> value : ratslMap.values()) {
+                String equipmentId = value.get(0).getEquipmentId();
+                String tbname = value.get(0).getTbname();
+
+                Map<String, List<PointData>> lpdsMap = new HashMap<>();
+                CacheContext.equipUcMap.get(equipmentId).forEach((uc, point) -> {
+                    List<PointData> rawByKey = adapterApi.getRawByKey(point, startDate.getTime(), endDate.getTime());
+                    lpdsMap.put(uc, rawByKey);
+                });
+                int i = 0;
+                for (DateTime minute = DateUtil.beginOfMinute(startDate); minute.isBefore(endDate); minute.offset(DateField.MINUTE, 1)) {
+                    if (i >= value.size() || (minute.getTime() != value.get(i).getTime().getTime())) {
+                        RealtimeAverageTarget rat = new RealtimeAverageTarget();
+                        rat.setTime(new Timestamp(minute.getTime()));
+                        rat.setTbname(tbname);
+                        setRats(rat, equipmentId, minute.getTime(), minute.getTime() + 59999L, lpdsMap);
+                        realtimeAverageTargetList.add(rat);
+                    } else {
+                        i++;
+                    }
+                }
+
             }
         }
+
         realtimeAverageTargetService.saveBatch(realtimeAverageTargetList);
     }
 /*
@@ -139,11 +166,12 @@ public class DataFillJobHandler {
         } else {
             Map<Double, Double> map = CacheContext.powerModelMap.get(equipId);
             if (map != null && map.size() > 0) {
-                rat.setTheoryGeneration(NumberUtil.round(map.get(speed) / 60, 4).floatValue());
+                rat.setTheoryGeneration(NumberUtil.round(map.get(speed), 3).floatValue());
             } else {
-                rat.setTheoryGeneration(NumberUtil.round(CacheContext.mpdsMapMap.get(CacheContext.equipModelMap.get(equipId)).get(speed) / 60, 4).floatValue());
+                rat.setTheoryGeneration(NumberUtil.round(CacheContext.mpdsMapMap.get(CacheContext.equipModelMap.get(equipId)).get(speed), 3).floatValue());
             }
         }
+        if(rat.getTheoryGeneration()<rat.getPower()) rat.setTheoryGeneration(rat.getPower());
     }
 }
 

BIN
资源文件/日电量计算说明.xlsx