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