From 76772ff7d6217fd4d28973d3169fea74bb26f1e8 Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Tue, 24 Nov 2020 14:36:06 +0800
Subject: [PATCH] PM2.5,PM10预测和实测对比

---
 src/main/resources/mapper/ForecastWeatherMapper.xml          |    2 
 src/main/resources/mapper/HangzhouAqiMapper.xml              |    4 +-
 src/main/java/com/moral/controller/ScreenController.java     |   21 ++++++++++
 src/main/java/com/moral/service/impl/WeatherServiceImpl.java |   60 ++++++++++++++++++++++++++----
 4 files changed, 75 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 9532034..cfe9a84 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -2108,9 +2108,28 @@
     @ApiOperation(value = "���������������������������", notes = "���������������������������")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "���������id", required = true, paramType = "query", dataType = "String"),
-            @ApiImplicitParam(name = "time", value = "���6���(���������2020-03-19)", required = true, paramType = "query", dataType = "String")})
+            @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")})
     public ResultBean<List<Map<String, Object>>> getWeatherNextDayDataByRegion(HttpServletRequest request) throws Exception {
         Map<String, Object> parameters = getParametersStartingWith(request, null);
+        List<String> sensorKeys=new ArrayList<>();
+        sensorKeys.add("e15");
+        parameters.put("sensorKeys",sensorKeys);
+        List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters);
+        return new ResultBean<List<Map<String, Object>>>(resultList);
+    }
+
+
+    @GetMapping("forecastPM")
+    @ApiOperation(value = "������������������������������", notes = "������������������������������")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "���������id", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "time", value = "������(���������2020-03-19)", required = true, paramType = "query", dataType = "String")})
+    public ResultBean<List<Map<String, Object>>> getForecastAndRealPM(HttpServletRequest request) throws Exception {
+        Map<String, Object> parameters = getParametersStartingWith(request, null);
+        List<String> sensorKeys=new ArrayList<>();
+        sensorKeys.add("e1");
+        sensorKeys.add("e2");
+        parameters.put("sensorKeys",sensorKeys);
         List<Map<String, Object>> resultList = weatherService.getForecastAndReal(parameters);
         return new ResultBean<List<Map<String, Object>>>(resultList);
     }
diff --git a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
index b584f82..7ca14f4 100644
--- a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
@@ -184,6 +184,50 @@
 
     @Override
     public List<Map<String, Object>> getForecastAndReal(Map<String, Object> parameters) throws ParseException {
+        ArrayList<String> sensorKeys = (ArrayList<String>) parameters.get("sensorKeys");
+        List<Map<String, Object>> resultList = new ArrayList<>();
+        for (int i = 0; i < 24; i++) {
+            Map<String, Object> map = new HashMap<>();
+            List<String> arrayList = new ArrayList<>();
+            map.put("values", arrayList);
+            map.put("time", i + 1);
+            resultList.add(map);
+        }
+
+        for (String sensorKey : sensorKeys) {
+            parameters.put("sensorKey", sensorKey);
+            List<Map<String, Object>> list = forecastAndReal(parameters);
+            for (Map<String, Object> map : list) {
+                Object time = map.get("time");
+                ArrayList<String> values = (ArrayList<String>) map.get("values");
+                for (Map<String, Object> resultMap : resultList) {
+                    if (time.equals(resultMap.get("time"))) {
+                        ArrayList<String> resultValues = (ArrayList<String>) resultMap.get("values");
+                        resultValues.addAll(values);
+                        resultMap.put("values", resultValues);
+                    }
+                }
+            }
+        }
+        return resultList;
+    }
+
+    public List<Map<String, Object>> forecastAndReal(Map<String, Object> parameters) throws ParseException {
+        Object sensorKey = parameters.remove("sensorKey");
+        String sensor1;
+        String sensor2;
+        if ("e1".equals(sensorKey)) {
+            sensor1 = "PM25C";
+            sensor2 = "PM2_5";
+        } else if ("e2".equals(sensorKey)) {
+            sensor1 = "PM10C";
+            sensor2 = "PM10";
+        } else {
+            sensor1 = "O3C";
+            sensor2 = "O3";
+        }
+        parameters.put("sensor1", sensor1);
+        parameters.put("sensor2", sensor2);
         parameters.put("typeFormat", "%Y-%m-%d %H:%i:%s");
         String monitorPointId = parameters.get("monitorPointId").toString();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -229,8 +273,8 @@
             forecastList = forecastWeatherMapper.getForecastHour(parameters);
         }
         for (Map<String, Object> map : aqiList) {
-            int s = (int)Double.parseDouble(map.get("O3").toString().replace("\"", ""));
-            map.put("O3", String.valueOf(s));
+            int s = (int) Double.parseDouble(map.get(sensor2).toString().replace("\"", ""));
+            map.put(sensor2, String.valueOf(s));
         }
 
         List<Map<String, Object>> resultList = new ArrayList<>();
@@ -246,7 +290,7 @@
                 }
                 map.put("time", Integer.valueOf(hour));
                 values.add("");
-                values.add(aqiMap.get("O3").toString());
+                values.add(aqiMap.get(sensor2).toString());
                 map.put("values", values);
                 resultList.add(map);
             }
@@ -260,8 +304,8 @@
                     hour = "24";
                 }
                 map.put("time", Integer.valueOf(hour));
-                if (forecastMap.get("O3") != null) {
-                    values.add(forecastMap.get("O3").toString().replace("\"", ""));
+                if (forecastMap.get(sensor2) != null) {
+                    values.add(forecastMap.get(sensor2).toString().replace("\"", ""));
                 } else {
                     values.add("");
                 }
@@ -278,14 +322,14 @@
                     hour = "24";
                 }
                 map.put("time", Integer.valueOf(hour));
-                if (forecastMap.get("O3") != null) {
-                    values.add(forecastMap.get("O3").toString().replace("\"", ""));
+                if (forecastMap.get(sensor2) != null) {
+                    values.add(forecastMap.get(sensor2).toString().replace("\"", ""));
                 } else {
                     values.add("");
                 }
                 for (Map<String, Object> aqiMap : aqiList) {
                     if (forecastMap.get("time").equals(aqiMap.get("time"))) {
-                        values.add(aqiMap.get("O3").toString());
+                        values.add(aqiMap.get(sensor2).toString());
                     }
                 }
                 map.put("values", values);
diff --git a/src/main/resources/mapper/ForecastWeatherMapper.xml b/src/main/resources/mapper/ForecastWeatherMapper.xml
index d9403c5..9ce0208 100644
--- a/src/main/resources/mapper/ForecastWeatherMapper.xml
+++ b/src/main/resources/mapper/ForecastWeatherMapper.xml
@@ -7,7 +7,7 @@
     <select id="getForecastHour" resultType="java.util.Map">
         SELECT
         DATE_FORMAT(time, #{typeFormat}) time,
-        json->'$.O3C' 'O3'
+        json->'$.${sensor1}' '${sensor2}'
         from forecast_weather
         where time >= #{start}
         AND time <![CDATA[<]]> #{end}
diff --git a/src/main/resources/mapper/HangzhouAqiMapper.xml b/src/main/resources/mapper/HangzhouAqiMapper.xml
index b2299e7..f8c7053 100644
--- a/src/main/resources/mapper/HangzhouAqiMapper.xml
+++ b/src/main/resources/mapper/HangzhouAqiMapper.xml
@@ -71,7 +71,7 @@
     <select id="getAqiDataByAreaCode" resultType="java.util.Map">
         SELECT
         DATE_FORMAT(time, #{typeFormat}) time,
-        ifnull(aqi_json->'$.O3C',aqi_json->'$.O3') as 'O3'
+        ifnull(aqi_json->'$.${sensor1}',aqi_json->'$.${sensor2}') as '${sensor2}'
         FROM
         hangzhou_aqi
         WHERE
@@ -85,7 +85,7 @@
     <select id="getHistoryO3" resultType="java.util.Map">
         SELECT
         DATE_FORMAT(time, #{typeFormat}) time,
-        value->'$.O3' as 'O3'
+        value->'$.${sensor2}' as '${sensor2}'
         FROM
         history_aqi_${timeUnits}
         WHERE

--
Gitblit v1.8.0