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/impl/WeatherServiceImpl.java |  358 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 254 insertions(+), 104 deletions(-)

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