浏览代码

补全eer每日的数据

lixing 3 年之前
父节点
当前提交
dbeee1ac63

+ 38 - 11
src/main/java/com/persagy/apm/report/common/utils/DateUtils.java

@@ -7,10 +7,7 @@ import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 public class DateUtils {
     public static final String SDFSECOND = "yyyyMMddHHmmss";
@@ -453,13 +450,13 @@ public class DateUtils {
         return localDate1.isBefore(localDate2);
     }
 
-    public static void main(String[] args) {
-
-        // 2020-02-01
-        Date startDate = new Date(1580486400000L);
-        Date endDate = new Date();
-        System.out.println(getSameMonthFirstDayOfLastYear(startDate));
-    }
+//    public static void main(String[] args) {
+//
+//        // 2020-02-01
+//        Date startDate = new Date(1580486400000L);
+//        Date endDate = new Date();
+//        System.out.println(getSameMonthFirstDayOfLastYear(startDate));
+//    }
 
     /**
      * 打印当前时间距离开始时间的毫秒数
@@ -472,4 +469,34 @@ public class DateUtils {
         Date now = new Date();
         System.out.println("用时:" + (now.getTime() - startDate.getTime()));
     }
+
+    /**
+     * 获取月份内的每一天
+     *
+     * @param month 给定月份
+     * @param pattern 返回值日期格式
+     * @return 月份内的每一天
+     * @author lixing
+     * @version V1.0 2021/9/2 10:28 上午
+     */
+    public static List<String> getDayListOfMonth(Date month, String pattern) {
+        if (month == null) {
+            return null;
+        }
+
+        List<String> list = new ArrayList<>();
+        Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
+        Date firstDayOfMonth = getFirstDayOfMonth(month);
+        aCalendar.setTime(firstDayOfMonth);
+        int day = aCalendar.getActualMaximum(Calendar.DATE);
+
+        for (int i = 1; i <= day; i++) {
+            aCalendar.setTime(getDayOff(firstDayOfMonth, i-1));
+            String dateStr = date2Str(aCalendar.getTime(), pattern);
+            list.add(dateStr);
+        }
+
+        return list;
+
+    }
 }

+ 5 - 1
src/main/java/com/persagy/apm/report/dependencies/energyefficiencyweb/model/vo/EnergyEfficiencyDataVO.java

@@ -1,6 +1,8 @@
 package com.persagy.apm.report.dependencies.energyefficiencyweb.model.vo;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * 能效情况数据vo类
@@ -9,9 +11,11 @@ import lombok.Data;
  * @version V1.0 2021/7/28 4:52 下午
  **/
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class EnergyEfficiencyDataVO {
     /**
-     * 时间
+     * 时间(格式:2021-08-01 00:00:00)
      */
     private String time;
     /**

+ 24 - 2
src/main/java/com/persagy/apm/report/indicator/factory/EnergyEfficiencyFactory.java

@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 能效情况工厂
@@ -190,12 +191,33 @@ public class EnergyEfficiencyFactory {
      * 获取月内每日能效
      *
      * @param dailyEnergyEfficiency 每日能效列表
+     * @param reportMonth 报告月
      * @return 月内每日能效
      * @author lixing
      * @version V1.0 2021/7/23 11:09 上午
      */
     public AttrValueVO getDailyData(
-            List<EnergyEfficiencyDataVO> dailyEnergyEfficiency) {
+            List<EnergyEfficiencyDataVO> dailyEnergyEfficiency, Date reportMonth) {
+        /* 每日能效列表中不一定包含报告月所有时间的数据,如果不包含某天的数据,将这天的数据设置为空,添加到每日能效列表中 */
+        // 获取当前能效列表中包含的日期
+        if (dailyEnergyEfficiency == null) {
+            dailyEnergyEfficiency = new ArrayList<>();
+        }
+        Set<String> timeSet = dailyEnergyEfficiency.stream().
+                map(EnergyEfficiencyDataVO::getTime).collect(Collectors.toSet());
+
+        // 遍历报告月日期,补全数据
+        List<String> dayListOfMonth = DateUtils.getDayListOfMonth(reportMonth, DateUtils.SDF_SECOND);
+        if (CollectionUtils.isEmpty(dayListOfMonth)) {
+            throw new IllegalArgumentException("获取指定月份日期列表失败:" + reportMonth);
+        }
+        for (String day : dayListOfMonth) {
+            if (!timeSet.contains(day)) {
+                EnergyEfficiencyDataVO energyEfficiencyDataVO = new EnergyEfficiencyDataVO(day, null);
+                dailyEnergyEfficiency.add(energyEfficiencyDataVO);
+            }
+        }
+
         Gson gson = new Gson();
         return new AttrValueVO(ProjectEnergyEfficiencyContentCodes.dailyData.name(),
                 gson.toJson(dailyEnergyEfficiency), AttrValueTypeEnum.list);
@@ -330,7 +352,7 @@ public class EnergyEfficiencyFactory {
         AttrValueVO minDays = getMinDays(dailyEnergyEfficiency);
         attrValues.add(minDays);
         // 每日能效
-        AttrValueVO dailyData = getDailyData(dailyEnergyEfficiency);
+        AttrValueVO dailyData = getDailyData(dailyEnergyEfficiency, reportMonth);
         attrValues.add(dailyData);
 
         // 合格标准

+ 21 - 0
src/test/java/com/persagy/apm/report/indicator/factory/EnergyEfficiencyFactoryTest.java

@@ -0,0 +1,21 @@
+package com.persagy.apm.report.indicator.factory;
+
+import com.persagy.apm.report.dependencies.energyefficiencyweb.model.vo.EnergyEfficiencyDataVO;
+import com.persagy.apm.report.detail.model.vo.AttrValueVO;
+import junit.framework.TestCase;
+import org.assertj.core.util.Lists;
+
+import java.util.Date;
+import java.util.List;
+
+public class EnergyEfficiencyFactoryTest extends TestCase {
+
+    public void testGetDailyData() {
+        EnergyEfficiencyFactory energyEfficiencyFactory = new EnergyEfficiencyFactory();
+        List<EnergyEfficiencyDataVO> dailyEnergyEfficiency = Lists.newArrayList(
+                new EnergyEfficiencyDataVO("2021-09-01 00:00:00", "10")
+        );
+        AttrValueVO dailyData = energyEfficiencyFactory.getDailyData(dailyEnergyEfficiency, new Date());
+        System.out.println(dailyData);
+    }
+}