From 06fdc93eac0515be606a2a924550bd477c37ce5b Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Fri, 17 Jul 2020 17:20:10 +0800
Subject: [PATCH] O3预测数据与国控数据对比
---
src/main/java/com/moral/service/WeatherService.java | 3
src/main/java/com/moral/controller/ScreenController.java | 21 ++
src/main/java/com/moral/service/impl/WeatherServiceImpl.java | 358 ++++++++++++++++++++++++++++++++++++--------------
3 files changed, 273 insertions(+), 109 deletions(-)
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index f42bc29..87e0182 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -723,8 +723,8 @@
String time = map.get("time").toString();
time = time.substring(time.length() - 2);
map.put("time", Integer.valueOf(time));
- if(parameters.get("type").equals("day")){
- map.put("time", Integer.valueOf(time)+1);
+ if (parameters.get("type").equals("day")) {
+ map.put("time", Integer.valueOf(time) + 1);
}
map.put("value", map.remove(sensorKey));
}
@@ -1927,8 +1927,8 @@
if (minAngle > (Double) longAndLatiList.get(j).get("angle")) {
minAngle = (Double) longAndLatiList.get(j).get("angle");
indexAngle = j;
- }else {
- indexAngle=indexAngle;
+ } else {
+ indexAngle = indexAngle;
}
}
preAngleDeviceList.add(deviceList.get((Integer) longAndLatiList.get(indexAngle).get("h")));
@@ -1960,8 +1960,19 @@
locationList.add(fivethLoction);
String preAngleDeviceString = JSON.toJSON(preAngleDeviceList).toString();
params.put("preAngleDeviceString", preAngleDeviceString);//���������������������������
- params.put("locationList",locationList);
+ params.put("locationList", locationList);
return params;
}
+ @GetMapping("weather_nextDay")
+ @ApiOperation(value = "������������������������", notes = "������������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "monitorPointId", defaultValue = "6", 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>>> getWeatherNextDayDataByRegion(HttpServletRequest request) throws Exception {
+ Map<String, Object> parameters = getParametersStartingWith(request, null);
+ parameters.put("typeFormat", "%Y-%m-%d %H");
+ List<Map<String, Object>> resultList = weatherService.getNextDayWeatherDataByRegion(parameters);
+ return new ResultBean<List<Map<String, Object>>>(resultList);
+ }
}
diff --git a/src/main/java/com/moral/service/WeatherService.java b/src/main/java/com/moral/service/WeatherService.java
index 6598b96..8e6e2ea 100644
--- a/src/main/java/com/moral/service/WeatherService.java
+++ b/src/main/java/com/moral/service/WeatherService.java
@@ -1,5 +1,6 @@
package com.moral.service;
+import java.text.ParseException;
import java.util.List;
import java.util.Map;
@@ -9,4 +10,6 @@
Map<String, Object> get15DayWeatherDataByRegion(Map<String, Object> parameters);
+ List<Map<String, Object>> getNextDayWeatherDataByRegion(Map<String, Object> parameters) throws ParseException;
+
}
diff --git a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
index baf855b..8470077 100644
--- a/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java
@@ -1,8 +1,13 @@
package com.moral.service.impl;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
+import java.util.Date;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -15,116 +20,261 @@
import com.moral.common.util.Dom4jUtils;
import com.moral.common.util.ValidateUtil;
+import com.moral.entity.Area;
import com.moral.entity.AreaNames;
+import com.moral.entity.City;
+import com.moral.entity.MonitorPoint;
import com.moral.entity.Organization;
+import com.moral.mapper.AreaMapper;
+import com.moral.mapper.CityMapper;
+import com.moral.mapper.HangzhouAqiMapper;
+import com.moral.mapper.MonitorPointMapper;
+import com.moral.mapper.ProvinceMapper;
import com.moral.service.OrganizationService;
import com.moral.service.WeatherService;
@Service
public class WeatherServiceImpl implements WeatherService {
-
- @Resource
- private OrganizationService organizationService;
-
- @Override
- public Map<String, Object> getWeatherDataByRegion(Map<String, Object> parameters) {
- Object organizationId = parameters.get("organizationId");
- ValidateUtil.notNull(organizationId, "param.is.null");
- String areaName = "���������";
- String parentName = "";
- Organization organization = organizationService.getOrganizationById(Integer.valueOf(parameters.get("organizationId").toString()));
- if(organization.getAreaNames()!=null){
- AreaNames areaNames = organization.getAreaNames();
- if (ObjectUtils.isEmpty(areaNames.getAreaName())) {
- if (ObjectUtils.isEmpty(areaNames.getCityName())) {
- areaName = areaNames.getProvinceName();
- } else {
- areaName = areaNames.getCityName();
- }
- } else {
- areaName = areaNames.getAreaName();
- parentName = areaNames.getCityName();
- if ("���������".equals(areaName)) {
- areaName = parentName;
- }
- }
- }
- List<Element> elements = Dom4jUtils.readDocument();
- String cityID = "1102";
- for (Element element : elements) {
- String name = element.element("name").getText();
- if (areaName.equals(name)) {
- cityID = element.element("Fid").getText();
- break;
- }
- if (name.endsWith(areaName)) {
- if (name.startsWith(parentName)) {
- cityID = element.element("Fid").getText();
- break;
- }
- }
- }
- RestTemplate restTemplate = new RestTemplate();
- Map<String, Object> map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class,cityID);
- Map<String, Object> result = (Map<String, Object>) ((Map)map.get("data")).get("aqi");
- map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=condition", Map.class,cityID);
- result.putAll((Map<? extends String, ? extends Object>) ((Map)map.get("data")).get("condition"));
- return result;
- }
-
- @Override
- public Map<String, Object> get15DayWeatherDataByRegion(Map<String, Object> parameters) {
- Object organizationId = parameters.get("organizationId");
- ValidateUtil.notNull(organizationId, "param.is.null");
- String areaName = "���������";
- String parentName = "";
- Organization organization = organizationService.getOrganizationById(Integer.valueOf(parameters.get("organizationId").toString()));
- if(organization.getAreaNames()!=null){
- AreaNames areaNames = organization.getAreaNames();
- if (ObjectUtils.isEmpty(areaNames.getAreaName())) {
- if (ObjectUtils.isEmpty(areaNames.getCityName())) {
- areaName = areaNames.getProvinceName();
- } else {
- areaName = areaNames.getCityName();
- }
- } else {
- areaName = areaNames.getAreaName();
- parentName = areaNames.getCityName();
- if ("���������".equals(areaName)) {
- areaName = parentName;
- }
- }
- }
- List<Element> elements = Dom4jUtils.readDocument();
- String cityID = "1102";
- for (Element element : elements) {
- String name = element.element("name").getText();
- if (areaName.equals(name)) {
- cityID = element.element("Fid").getText();
- break;
- }
- if (name.endsWith(areaName)) {
- if (name.startsWith(parentName)) {
- cityID = element.element("Fid").getText();
- break;
- }
- }
- }
- RestTemplate restTemplate = new RestTemplate();
- Map<String, Object> map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class,cityID);
- List<Map<String, Object>> result = new ArrayList<>();
- map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=forecast15days", Map.class,cityID);
- result.addAll((Collection<? extends Map<String, Object>>) ((Map)map.get("data")).get("forecast"));
- for (Map<String, Object> map2 : result) {
- Map<String, Object> returnMap = new HashMap<>();
- String predictDate = map2.get("predictDate").toString();
- String time = parameters.get("time").toString();
- if (predictDate.equals(time)) {
- returnMap = map2;
- return returnMap;
- }
- }
- return null;
- }
+ @Resource
+ private OrganizationService organizationService;
+
+ @Resource
+ private HangzhouAqiMapper hangzhouAqiMapper;
+
+ @Resource
+ private MonitorPointMapper monitorPointMapper;
+
+ @Resource
+ private AreaMapper areaMapper;
+
+ @Resource
+ private CityMapper cityMapper;
+
+ @Resource
+ private ProvinceMapper provinceMapper;
+
+ @Override
+ public Map<String, Object> getWeatherDataByRegion(Map<String, Object> parameters) {
+ Object organizationId = parameters.get("organizationId");
+ ValidateUtil.notNull(organizationId, "param.is.null");
+ String areaName = "���������";
+ String parentName = "";
+ Organization organization = organizationService.getOrganizationById(Integer.valueOf(parameters.get("organizationId").toString()));
+ if (organization.getAreaNames() != null) {
+ AreaNames areaNames = organization.getAreaNames();
+ if (ObjectUtils.isEmpty(areaNames.getAreaName())) {
+ if (ObjectUtils.isEmpty(areaNames.getCityName())) {
+ areaName = areaNames.getProvinceName();
+ } else {
+ areaName = areaNames.getCityName();
+ }
+ } else {
+ areaName = areaNames.getAreaName();
+ parentName = areaNames.getCityName();
+ if ("���������".equals(areaName)) {
+ areaName = parentName;
+ }
+ }
+ }
+ List<Element> elements = Dom4jUtils.readDocument();
+ String cityID = "1102";
+ for (Element element : elements) {
+ String name = element.element("name").getText();
+ if (areaName.equals(name)) {
+ cityID = element.element("Fid").getText();
+ break;
+ }
+ if (name.endsWith(areaName)) {
+ if (name.startsWith(parentName)) {
+ cityID = element.element("Fid").getText();
+ break;
+ }
+ }
+ }
+ RestTemplate restTemplate = new RestTemplate();
+ Map<String, Object> map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class, cityID);
+ Map<String, Object> result = (Map<String, Object>) ((Map) map.get("data")).get("aqi");
+ map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=condition", Map.class, cityID);
+ result.putAll((Map<? extends String, ? extends Object>) ((Map) map.get("data")).get("condition"));
+ return result;
+ }
+
+ @Override
+ public Map<String, Object> get15DayWeatherDataByRegion(Map<String, Object> parameters) {
+ Object organizationId = parameters.get("organizationId");
+ ValidateUtil.notNull(organizationId, "param.is.null");
+ String areaName = "���������";
+ String parentName = "";
+ Organization organization = organizationService.getOrganizationById(Integer.valueOf(parameters.get("organizationId").toString()));
+ if (organization.getAreaNames() != null) {
+ AreaNames areaNames = organization.getAreaNames();
+ if (ObjectUtils.isEmpty(areaNames.getAreaName())) {
+ if (ObjectUtils.isEmpty(areaNames.getCityName())) {
+ areaName = areaNames.getProvinceName();
+ } else {
+ areaName = areaNames.getCityName();
+ }
+ } else {
+ areaName = areaNames.getAreaName();
+ parentName = areaNames.getCityName();
+ if ("���������".equals(areaName)) {
+ areaName = parentName;
+ }
+ }
+ }
+ List<Element> elements = Dom4jUtils.readDocument();
+ String cityID = "1102";
+ for (Element element : elements) {
+ String name = element.element("name").getText();
+ if (areaName.equals(name)) {
+ cityID = element.element("Fid").getText();
+ break;
+ }
+ if (name.endsWith(areaName)) {
+ if (name.startsWith(parentName)) {
+ cityID = element.element("Fid").getText();
+ break;
+ }
+ }
+ }
+ RestTemplate restTemplate = new RestTemplate();
+ Map<String, Object> map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=aqi", Map.class, cityID);
+ List<Map<String, Object>> result = new ArrayList<>();
+ map = restTemplate.getForObject("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=forecast15days", Map.class, cityID);
+ result.addAll((Collection<? extends Map<String, Object>>) ((Map) map.get("data")).get("forecast"));
+ for (Map<String, Object> map2 : result) {
+ Map<String, Object> returnMap = new HashMap<>();
+ String predictDate = map2.get("predictDate").toString();
+ String time = parameters.get("time").toString();
+ if (predictDate.equals(time)) {
+ returnMap = map2;
+ return returnMap;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<Map<String, Object>> getNextDayWeatherDataByRegion(Map<String, Object> parameters) throws ParseException {
+ String monitorPointId = parameters.get("monitorPointId").toString();
+ MonitorPoint monitorPoint = monitorPointMapper.selectByPrimaryKey(Integer.valueOf(monitorPointId));
+ Integer cityCode = monitorPoint.getCityCode();
+ Integer areaCode = monitorPoint.getAreaCode();
+ String name1 = "";
+ String parentName = "";
+ if (areaCode != null) {
+ Area area = areaMapper.selectByPrimaryKey(areaCode);
+ name1 = area.getAreaName();
+ City city = cityMapper.selectByPrimaryKey(area.getCityCode());
+ parentName = city.getCityName();
+ if ("���������".equals(area.getAreaName())) {
+ name1 = parentName;
+ parentName = provinceMapper.selectByPrimaryKey(city.getProvinceCode()).getProvinceName();
+ }
+ } else {
+ City city = cityMapper.selectByPrimaryKey(cityCode);
+ name1 = city.getCityName();
+ parentName = provinceMapper.selectByPrimaryKey(city.getProvinceCode()).getProvinceName();
+ }
+ List<Element> elements = Dom4jUtils.readDocument();
+ String cityID = "101190404";
+ for (Element element : elements) {
+ String name2 = element.element("name").getText();
+ if (name1.equals(name2)) {
+ cityID = element.element("Fweathercn").getText();
+ break;
+ }
+ if (name2.endsWith(name1)) {
+ if (name2.startsWith(parentName)) {
+ cityID = element.element("Fweathercn").getText();
+ break;
+ }
+ }
+ }
+ RestTemplate restTemplate = new RestTemplate();
+ Calendar c = Calendar.getInstance();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH");
+ String now = sdf.format(c.getTime());
+ String selectTime = parameters.get("time").toString();
+ Date t1 = sdf.parse(selectTime);
+ Date t2 = sdf.parse(now);
+ List<Map<String, Object>> resultList = new ArrayList<>();
+ if (t1.getTime() > t2.getTime()) {
+ parameters.put("now", now);
+ Map<String, Object> map = restTemplate.getForObject("https://yiketianqi.com/api?version=v9&appid=68884517&appsecret=St9sFnvi&cityid={1}", Map.class, cityID);
+ ArrayList<Map<String, Object>> dataList = (ArrayList<Map<String, Object>>) map.get("data");
+ ArrayList<Map<String, Object>> arrayList = new ArrayList<>();
+ String start = parameters.get("now").toString();
+ String end = parameters.get("time").toString();
+ for (Map<String, Object> dataMap : dataList) {
+ String date = dataMap.get("date").toString();
+ ArrayList<Map<String, Object>> list = (ArrayList<Map<String, Object>>) dataMap.get("hours");
+ if (date.equals(start)) {
+ for (int i = list.size() - 7; i < list.size(); i++) {
+ Map<String, Object> resultMap = list.get(i);
+ arrayList.add(resultMap);
+ }
+ }
+ if (date.equals(end)) {
+ for (int i = 0; i < 17; i++) {
+ Map<String, Object> resultMap = list.get(i);
+ arrayList.add(resultMap);
+ }
+ }
+ }
+
+ for (Map<String, Object> resultMap : arrayList) {
+ Map<String, Object> hashMap = new LinkedHashMap<>();
+ List<String> values = new ArrayList<>();
+ String hour = resultMap.get("hours").toString().replaceAll("[\u4e00-\u9fa5]+", "");
+ values.add(resultMap.get("tem").toString());
+ values.add("");
+ hashMap.put("values", values);
+ hashMap.put("time", Integer.valueOf(hour));
+ if (Integer.valueOf(hour) == 0) {
+ hashMap.put("time", 24);
+ }
+ resultList.add(hashMap);
+ }
+ } else {
+ parameters.put("start", selectTime);
+ c.setTime(sdf.parse(selectTime));
+ c.add(Calendar.DAY_OF_MONTH, 1);
+ c.add(Calendar.HOUR_OF_DAY, 1);
+ String end = sdf1.format(c.getTime());
+ parameters.put("end", end);
+ parameters.put("sensors", "O3C");
+ parameters.put("sensors1", "O3");
+ parameters.put("sensors2", parameters.get("sensors1").toString());
+ List<Map<String, Object>> areaList = new ArrayList<>();
+ if (areaCode == null) {
+ parameters.put("areaCode", cityCode);
+ areaList = hangzhouAqiMapper.getAreaAvgDataByAreaCode(parameters);
+ } else {
+ parameters.put("areaCode", areaCode);
+ areaList = hangzhouAqiMapper.getAreaAvgDataByAreaCode(parameters);
+ if (areaList.size() == 0) {
+ parameters.put("areaCode", cityCode);
+ areaList = hangzhouAqiMapper.getAreaAvgDataByAreaCode(parameters);
+ }
+ }
+ areaList.remove(0);
+ for (Map<String, Object> areaMap : areaList) {
+ Map<String, Object> hashMap = new LinkedHashMap<>();
+ List<String> values = new ArrayList<>();
+ values.add("");
+ values.add(areaMap.get("O3").toString());
+ hashMap.put("values", values);
+ String hour = areaMap.get("time").toString().split(" ")[1];
+ hashMap.put("time", Integer.valueOf(hour));
+ if (Integer.valueOf(hour) == 0) {
+ hashMap.put("time", 24);
+ }
+ resultList.add(hashMap);
+ }
+ }
+ return resultList;
+ }
}
--
Gitblit v1.8.0