xushili 1 år sedan
förälder
incheckning
79a8b17b17

+ 31 - 26
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())

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

@@ -87,14 +87,14 @@ public class EquipPowerGenDayServiceImpl extends ServiceImpl<EquipPowerGenDayMap
             list.add(powerGenDay);
         }
         list=list.stream().peek(l->{
-            if(l.getGeneratingCapacity().compareTo(BigDecimal.ZERO)==0){
-                if(l.getTheoryGeneration().compareTo(BigDecimal.ZERO)==0){
-                    l.setGeneratingCapacity(new BigDecimal(1));
+            if(l.getTheoryGeneration().compareTo(BigDecimal.ZERO)==0){
+                if(l.getGeneratingCapacity().compareTo(BigDecimal.ZERO)==0){
+                    l.setTheoryGeneration(new BigDecimal(1));
                 }else {
-                    l.setGeneratingCapacity(l.getTheoryGeneration());
+                    l.setTheoryGeneration(l.getGeneratingCapacity());
                 }
             }
-            l.setCategory(String.valueOf(l.getTheoryGeneration().divide(l.getGeneratingCapacity(),2, RoundingMode.HALF_EVEN)));
+            l.setCategory(String.valueOf(l.getGeneratingCapacity().divide(l.getTheoryGeneration(),2, RoundingMode.HALF_EVEN).multiply(new BigDecimal(100))));
         }).collect(Collectors.toList());
         return list;
     }

+ 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