Преглед изворни кода

修改统计当前年、季、月统计电表量逻辑,过滤了电表号和电表量为空的数据

zlm пре 8 месеци
родитељ
комит
624b7a210e

+ 28 - 7
infrared-reading-meter-service/src/main/java/com/zksy/infrared/service/impl/InfraredReadingMeterServiceImpl.java

@@ -207,7 +207,13 @@ public class InfraredReadingMeterServiceImpl extends ServiceImpl<InfraredReading
         List<InfraredReadingMeter> list = this.list(wrapper);
 
         Map<Integer, Map<String, List<InfraredReadingMeter>>> groupedByMonthAndMeter =
-                list.stream().collect(Collectors.groupingBy(
+                list.stream()
+                        // TODO 过滤掉电表号为空、创建时间为空、总电能为空的行
+                        .filter(item -> item.getElectricNumber() != null
+                                && !item.getElectricNumber().isEmpty()
+                                && item.getCreateTime() != null
+                                && item.getElectricEnergy() != null)
+                        .collect(Collectors.groupingBy(
                         item -> item.getCreateTime()
                                 .toInstant()
                                 .atZone(ZoneId.systemDefault())
@@ -268,6 +274,11 @@ public class InfraredReadingMeterServiceImpl extends ServiceImpl<InfraredReading
         }
 
         Map<Integer,Map<String,List<InfraredReadingMeter>>> groupedByDayAndMeter=list.stream()
+                // TODO 过滤掉电表号为空、创建时间为空、总电能为空的行
+                .filter(item -> item.getElectricNumber() != null
+                        && !item.getElectricNumber().isEmpty()
+                        && item.getCreateTime() != null
+                        && item.getElectricEnergy() != null)
                 .collect(Collectors.groupingBy(item->item.getCreateTime()
                                 .toInstant()
                                 .atZone(ZoneId.systemDefault())
@@ -294,21 +305,25 @@ public class InfraredReadingMeterServiceImpl extends ServiceImpl<InfraredReading
         }
 
         Map<String, List<InfraredReadingMeter>> groupedByMeter = list.stream()
+                // TODO 过滤掉电表号为空、创建时间为空、总电能为空的行
+                .filter(item -> item.getElectricNumber() != null
+                        && !item.getElectricNumber().isEmpty()
+                        && item.getCreateTime() != null
+                        && item.getElectricEnergy() != null)
                 .collect(Collectors.groupingBy(InfraredReadingMeter::getElectricNumber));
 
         BigDecimal totalElectricity = BigDecimal.ZERO;
 
         for (List<InfraredReadingMeter> meterList : groupedByMeter.values()) {
 
+            // 找到当月最早一条数据(优化逻辑)
             InfraredReadingMeter firstRecord = meterList.stream()
-                    .filter(r -> r.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().equals(firstDayOfMonth))
-                    .findFirst()
+                    .min(Comparator.comparing(InfraredReadingMeter::getCreateTime))
                     .orElse(null);
 
-
+            // 找到当月最晚一条数据(优化逻辑)
             InfraredReadingMeter lastRecord = meterList.stream()
-                    .filter(r -> r.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().equals(lastDayOfMonth))
-                    .reduce((first, second) -> second)
+                    .max(Comparator.comparing(InfraredReadingMeter::getCreateTime))
                     .orElse(null);
 
             if (firstRecord != null && lastRecord != null) {
@@ -351,7 +366,13 @@ public class InfraredReadingMeterServiceImpl extends ServiceImpl<InfraredReading
         }
 
         Map<Integer, Map<String, List<InfraredReadingMeter>>> groupedByMonthAndMeter =
-                list.stream().collect(Collectors.groupingBy(
+                list.stream()
+                        // TODO 过滤掉电表号为空、创建时间为空、总电能为空的行
+                        .filter(item -> item.getElectricNumber() != null
+                                && !item.getElectricNumber().isEmpty()
+                                && item.getCreateTime() != null
+                                && item.getElectricEnergy() != null)
+                        .collect(Collectors.groupingBy(
                         item -> item.getCreateTime().toInstant()
                                 .atZone(ZoneId.systemDefault())
                                 .toLocalDate()