From 21ce462f92abbaff092ce6adf49a3ee555bd0121 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Tue, 22 Mar 2022 13:08:50 +0800
Subject: [PATCH] city_aqi_monthly月数据增加6参和综指同比计算

---
 screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java |   48 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java
index 1745e77..be90d19 100644
--- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java
+++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java
@@ -96,6 +96,17 @@
         Map<Integer, List<CityAqiMonthly>> lastMonthData = lastCityAqiMonthly.stream()
                 .collect(Collectors.groupingBy(CityAqiMonthly::getCityCode));
 
+
+        //������������������������
+        Date thisMonthOfLastYear = DateUtils.addYears(start, -1);
+        queryWrapper.clear();
+        queryWrapper.select("city_code", "value")
+                .eq("time", DateUtils.dateToDateString(thisMonthOfLastYear));
+        List<CityAqiMonthly> thisMonthOfLastYearList = cityAqiMonthlyMapper.selectList(queryWrapper);
+        Map<Integer, List<CityAqiMonthly>> thisMonthOfLastYearData = thisMonthOfLastYearList.stream()
+                .collect(Collectors.groupingBy(CityAqiMonthly::getCityCode));
+
+
         List<CityAqiMonthly> cityAqiMonthlyList = new ArrayList<>();
 
         Date finalStart = start;
@@ -145,7 +156,7 @@
             Double compositeIndex = ComprehensiveIndexUtils.dailyData(jsonMap);
             jsonMap.put("compositeIndex", compositeIndex);
 
-            //���������������������������
+            //���������������������������(������������������)
             List<CityAqiMonthly> cityAqiMonthlies = lastMonthData.get(Integer.parseInt(cityCode));
             if (!ObjectUtils.isEmpty(cityAqiMonthlies)) {
                 CityAqiMonthly monthly = cityAqiMonthlies.get(0);
@@ -155,9 +166,44 @@
                 String format = decimalFormat.format((compositeIndex - lastCompositeIndex) / lastCompositeIndex);
                 jsonMap.put("monthContrast", format);
             }
+
+            //���������������������������������������������
+            List<CityAqiMonthly> thisMonthOfLastYears = thisMonthOfLastYearData.get(Integer.parseInt(cityCode));
+
+            //���������������������
+            Map<String, Object> yearOnYearValue = yearOnYearOfSensor(thisMonthOfLastYears, jsonMap);
+            if (yearOnYearValue != null) {
+                jsonMap.putAll(yearOnYearValue);
+            }
+
             cityAqiMonthly.setValue(JSONObject.toJSONString(jsonMap));
             cityAqiMonthlyList.add(cityAqiMonthly);
         });
         cityAqiMonthlyMapper.insertCityAqiMonthly(cityAqiMonthlyList);
     }
+
+    /**
+     * @param thisMonthOfLastYearData ������������������
+     * @param currentData             ������������������
+     */
+    private Map<String, Object> yearOnYearOfSensor(List<CityAqiMonthly> thisMonthOfLastYearData, Map<String, Object> currentData) {
+        Map<String, Object> result = null;
+        //���������������������������
+        List<String> sensors = Arrays.asList("PM2_5", "PM10", "SO2", "NO2", "CO", "O3", "compositeIndex");
+        if (!ObjectUtils.isEmpty(thisMonthOfLastYearData)) {
+            result = new HashMap<>();
+            CityAqiMonthly monthly = thisMonthOfLastYearData.get(0);
+            Map<String, Object> map = JSONObject.parseObject(monthly.getValue(), Map.class);
+            for (String sensor : sensors) {
+                //������������������������
+                double thisMonthOfLeastYearValue = Double.parseDouble(map.get(sensor).toString());
+                //������������������
+                double currentValue = Double.parseDouble(currentData.get(sensor).toString());
+                DecimalFormat decimalFormat = new DecimalFormat("0.00%");
+                String format = decimalFormat.format((currentValue - thisMonthOfLeastYearValue) / thisMonthOfLeastYearValue);
+                result.put(sensor + "_yearOnYear", format);
+            }
+        }
+        return result;
+    }
 }

--
Gitblit v1.8.0