From 2c42977a1a38e4f079c5c44fe51a46c27b865f80 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 23 Oct 2020 10:29:27 +0800 Subject: [PATCH] 增加天气城市配置表,优化相关接口 --- src/main/java/com/moral/service/impl/WeatherServiceImpl.java | 349 +++++++++++++++++++-------------------------------------- 1 files changed, 118 insertions(+), 231 deletions(-) diff --git a/src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java similarity index 73% rename from src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java rename to src/main/java/com/moral/service/impl/WeatherServiceImpl.java index 7be449b..6ebfd4b 100644 --- a/src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java +++ b/src/main/java/com/moral/service/impl/WeatherServiceImpl.java @@ -8,54 +8,33 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import javax.annotation.Resource; -import org.dom4j.Element; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import com.alibaba.fastjson.JSONObject; -import com.moral.entity.Area; -import com.moral.entity.City; -import com.moral.entity.MonitorPoint; -import com.moral.entity.Province; import com.moral.mapper.AQIMapper; import com.moral.mapper.AreaMapper; import com.moral.mapper.CityMapper; import com.moral.mapper.DeviceMapper; -import com.moral.mapper.ForecastWeatherMapper; +import com.moral.mapper.WeatherMapper; import com.moral.mapper.HistoryHourlyMapper; import com.moral.mapper.MonitorPointMapper; import com.moral.mapper.ProvinceMapper; -import com.moral.mapper.RealWeatherMapper; -import com.moral.service.ForecastWeatherService; -import com.moral.util.Dom4jUtils; +import com.moral.service.WeatherService; @Service -public class ForecastWeatherServiceImpl implements ForecastWeatherService { +public class WeatherServiceImpl implements WeatherService { @Resource - private ForecastWeatherMapper forecastWeatherMapper; + private WeatherMapper weatherMapper; @Resource private MonitorPointMapper monitorPointMapper; - - @Resource - private AreaMapper areaMapper; - - @Resource - private CityMapper cityMapper; - - @Resource - private ProvinceMapper provinceMapper; - - @Resource - private RealWeatherMapper realWeatherMapper; @Resource private AQIMapper aqiMapper; @@ -79,114 +58,19 @@ c.add(Calendar.DAY_OF_MONTH, 1); String nextNextDay = sdf.format(c.getTime()) + " 00"; RestTemplate restTemplate = new RestTemplate(); - List<MonitorPoint> monitorPointList = monitorPointMapper.getMonitorPointList(); - Set<Map<String, Object>> hashSet = new HashSet<>(); - for (MonitorPoint monitorPoint : monitorPointList) { - Map<String, Object> hashMap = new HashMap<>(); - Integer areaCode = monitorPoint.getAreaCode(); - Integer cityCode = monitorPoint.getCityCode(); - Integer provinceCode = monitorPoint.getProvinceCode(); - String parentName; - String name1; - Integer code; - Integer parentCode; - if (areaCode != null) { - Area area = areaMapper.getAreaByAreaCode(areaCode); - City city = cityMapper.getCityByCityCode(cityCode); - name1 = area.getAreaName(); - parentName = city.getCityName(); - parentCode = cityCode; - code = areaCode; - if ("���������".equals(name1)) { - name1 = parentName; - Province province = provinceMapper.getProvinceByProvinceCode(provinceCode); - parentName = province.getProvinceName(); - parentCode = provinceCode; - code = cityCode; - } - } else { - if (cityCode != null) { - City city = cityMapper.getCityByCityCode(cityCode); - name1 = city.getCityName(); - code = cityCode; - Province province = provinceMapper.getProvinceByProvinceCode(provinceCode); - parentName = province.getProvinceName(); - parentCode = provinceCode; - if ("���������".equals(name1)) { - name1 = parentName; - code = provinceCode; - } - } else { - code = provinceCode; - Province province = provinceMapper.getProvinceByProvinceCode(provinceCode); - name1 = province.getProvinceName(); - parentCode = provinceCode; - parentName = name1; - } - } - hashMap.put("name1", name1); - hashMap.put("parentName", parentName); - hashMap.put("cityCode", code); - hashMap.put("parentCode", parentCode); - hashSet.add(hashMap); - } - - Map<String, Object> smap = new HashMap<>(); - smap.put("name1", "���������"); - smap.put("parentName", "���������"); - smap.put("cityCode", 320500); - smap.put("parentCode", 320000); - hashSet.add(smap); - - Map<String, Object> bmap = new HashMap<>(); - bmap.put("name1", "���������"); - bmap.put("parentName", "���������"); - bmap.put("cityCode", 110000); - bmap.put("parentCode", 110000); - hashSet.add(bmap); - + List<Map<String, Object>> cityList = weatherMapper.getCityWeatherConfig(); + cityList.clear(); Map<String, Object> cz = new HashMap<>(); - Set<Map<String, Object>> set = new HashSet<>(); - cz.put("name1", "���������"); - cz.put("parentName", "���������"); cz.put("cityCode", 130900); - cz.put("parentCode", 130000); - set.add(cz); - + cz.put("cityId", 101090701); + cityList.add(cz); Map<String, Object> ks = new HashMap<>(); - ks.put("name1", "���������"); - ks.put("parentName", "���������"); ks.put("cityCode", 320583); - ks.put("parentCode", 320500); - set.add(ks); - - List<Element> elements = Dom4jUtils.readDocument(); - String cityID; - for (Map<String, Object> map : set) { - String name1 = map.get("name1").toString(); - for (Element element : elements) { - String name2 = element.element("name").getText(); - String parentName = map.get("parentName").toString(); - if (name2.equals("���������")) { - name2 = "���������"; - } - if (name1.equals(name2)) { - cityID = element.element("Fweathercn").getText(); - map.put("cityID", cityID); - break; - } - if (name2.endsWith(name1)) { - if (name2.startsWith(parentName)) { - cityID = element.element("Fweathercn").getText(); - map.put("cityID", cityID); - break; - } - } - } - } + ks.put("cityId", 101190404); + cityList.add(ks); int count = 0; - for (Map<String, Object> map : set) { - String id = map.get("cityID").toString(); + for (Map<String, Object> map : cityList) { + String id = map.get("cityId").toString(); Map<String, Object> dataMap = restTemplate.getForObject("https://api.heweather.net/v7/weather/72h?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, id); if (dataMap == null) { return count; @@ -243,7 +127,6 @@ condition = "50"; } hourlyMap.put("condition", condition); - String hour = fxTime.split(" ")[0]; String hour1 = fxTime.split(":")[0]; if (hour.equals(nextDay)) { @@ -274,7 +157,7 @@ //���45��������������� c.add(Calendar.DAY_OF_MONTH, -30); Date slicedTime2 = c.getTime(); - for (Map<String, Object> map : set) { + for (Map<String, Object> map : cityList) { String cityCode = map.get("cityCode").toString(); ArrayList<Map<String, Object>> dataList = (ArrayList<Map<String, Object>>) map.get("data"); for (Map<String, Object> dataMap : dataList) { @@ -349,9 +232,9 @@ Map<String, Object> params = new HashMap<>(); params.put("cityCode", cityCode); params.put("time", sdf1.parse(time)); - String beam = forecastWeatherMapper.getBeam(params); + String beam = weatherMapper.getBeam(params); if (beam != null) { - dataMap.put("beam",beam.replace("\"","")); + dataMap.put("beam", beam.replace("\"", "")); } resultMap.put("cityCode", cityCode); resultMap.put("time", time); @@ -359,13 +242,13 @@ resultList.add(resultMap); } Map<String, Object> parameters = new HashMap<>(); - parameters.put("start",sdf1.parse(nextDay + " 01:00:00")); + parameters.put("start", sdf1.parse(nextDay + " 01:00:00")); c.setTime(sdf1.parse(nextDay + " 01:00:00")); c.add(Calendar.DAY_OF_MONTH, 1); parameters.put("end", c.getTime()); parameters.put("cityCode", cityCode); - forecastWeatherMapper.deleteByTime(parameters); - count = count + forecastWeatherMapper.insertForecastWeather(resultList); + weatherMapper.deleteByTime(parameters); + count = count + weatherMapper.insertForecastWeather(resultList); } return count; } @@ -375,10 +258,10 @@ if (years.size() > 0) { for (Integer year : years) { params.put("timeUnits", year); - samples.addAll(realWeatherMapper.getSampleFromHistoryWeather(params)); + samples.addAll(weatherMapper.getSampleFromHistoryWeather(params)); } } - samples.addAll(realWeatherMapper.getSampleFromRealWeather(params)); + samples.addAll(weatherMapper.getSampleFromRealWeather(params)); return samples; } @@ -440,8 +323,6 @@ } else { values = getSample(params, years); } - - if (values.size() == 0) { hours.add(params.get("sHour").toString()); hours.add(params.get("eHour").toString()); @@ -473,96 +354,14 @@ String nextNextDay = sdf.format(c.getTime()) + " 00"; Date end = sdf1.parse(sdf.format(c.getTime()) + " 01:00:00"); RestTemplate restTemplate = new RestTemplate(); - List<MonitorPoint> monitorPointList = monitorPointMapper.getMonitorPointList(); - Set<Map<String, Object>> hashSet = new HashSet<>(); - for (MonitorPoint monitorPoint : monitorPointList) { - Map<String, Object> hashMap = new HashMap<>(); - Integer areaCode = monitorPoint.getAreaCode(); - Integer cityCode = monitorPoint.getCityCode(); - Integer provinceCode = monitorPoint.getProvinceCode(); - String parentName = ""; - String name1 = ""; - Integer code = 0; - Integer parentCode = 0; - if (areaCode != null) { - Area area = areaMapper.getAreaByAreaCode(areaCode); - City city = cityMapper.getCityByCityCode(cityCode); - name1 = area.getAreaName(); - parentName = city.getCityName(); - parentCode = city.getCityCode(); - code = areaCode; - if ("���������".equals(name1)) { - name1 = parentName; - Province province = provinceMapper.getProvinceByProvinceCode(provinceCode); - parentName = province.getProvinceName(); - parentCode = province.getProvinceCode(); - code = cityCode; - } - } else { - City city = cityMapper.getCityByCityCode(cityCode); - name1 = city.getCityName(); - Province province = provinceMapper.getProvinceByProvinceCode(provinceCode); - parentName = province.getProvinceName(); - code = cityCode; - parentCode = province.getProvinceCode(); - if ("���������".equals(name1)) { - name1 = parentName; - parentName = ""; - code = provinceCode; - } - } - hashMap.put("name1", name1); - hashMap.put("parentName", parentName); - hashMap.put("cityCode", code); - hashMap.put("parentCode", parentCode); - hashSet.add(hashMap); - } - - Map<String, Object> bmap = new HashMap<>(); - bmap.put("name1", "���������"); - bmap.put("parentName", "���������"); - bmap.put("cityCode", 110000); - bmap.put("parentCode", 110000); - hashSet.add(bmap); - Map<String, Object> smap = new HashMap<>(); - smap.put("name1", "���������"); - smap.put("parentName", "���������"); - smap.put("cityCode", 320500); - smap.put("parentCode", 320000); - hashSet.add(smap); - - List<Element> elements = Dom4jUtils.readDocument(); - String cityID = "101190404"; - for (Map<String, Object> map : hashSet) { - String name1 = map.get("name1").toString(); - for (Element element : elements) { - String name2 = element.element("name").getText(); - String parentName = map.get("parentName").toString(); - if (name2.equals("���������")) { - name2 = "���������"; - } - if (name1.equals(name2)) { - cityID = element.element("Fweathercn").getText(); - map.put("cityID", cityID); - break; - } - if (name2.endsWith(name1)) { - if (name2.startsWith(parentName)) { - cityID = element.element("Fweathercn").getText(); - map.put("cityID", cityID); - break; - } - } - } - } - c.setTime(new Date()); Date endTime = sdf.parse(sdf.format(c.getTime())); c.add(Calendar.MONTH, -2); Date startTime = sdf.parse(sdf.format(c.getTime())); int count = 0; - for (Map<String, Object> map : hashSet) { - String id = map.get("cityID").toString(); + List<Map<String, Object>> cityList = weatherMapper.getCityWeatherConfig(); + for (Map<String, Object> map : cityList) { + String id = map.get("cityId").toString(); Map<String, Object> dataMap = restTemplate.getForObject("https://api.heweather.net/v7/weather/72h?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, id); if (dataMap == null) { return count; @@ -627,9 +426,18 @@ map.put("data", nextDayList); } - for (Map<String, Object> map : hashSet) { + for (Map<String, Object> map : cityList) { List<Map<String, Object>> resultList = new ArrayList<>(); String cityCode = map.get("cityCode").toString(); + String parentCode = ""; + if (cityCode.endsWith("0000")) { + parentCode = cityCode; + } else if (cityCode.endsWith("00")) { + parentCode = cityCode.substring(0, cityCode.length() - 4) + "0000"; + } else { + parentCode = cityCode.substring(0, cityCode.length() - 2) + "00"; + } + map.put("parentCode", parentCode); map.put("startTime", startTime); map.put("endTime", endTime); map.put("typeFormat", "%Y-%m-%d %H:%i:%s"); @@ -651,7 +459,10 @@ } else { pointList = monitorPointMapper.getMonitorList(params); } - List<String> macList = deviceMapper.getMacsByMonitorPointIds(pointList); + List<String> macList = new ArrayList<>(); + if (pointList.size() != 0) { + macList = deviceMapper.getMacsByMonitorPointIds(pointList); + } if (macList.size() != 0) { map.put("macs", macList); } @@ -675,7 +486,7 @@ value = 0; } map.put("condition", value); - List<Map<String, Object>> tempAndCloudList = realWeatherMapper.getTempAndCloud(map); + List<Map<String, Object>> tempAndCloudList = weatherMapper.getTempAndCloud(map); List<String> times = new ArrayList<>(); for (Map<String, Object> tempAndCloudMap : tempAndCloudList) { times.add(tempAndCloudMap.get("time").toString()); @@ -725,8 +536,8 @@ double sum1 = 0.0;// double sum2 = 0.0; - double cloudSum = 0.0;//��������� - double beamSum = 0.0;//O3��� + double cloudSum = 0.0;//������������ + double beamSum = 0.0;//��������� double sum3 = 0.0;// double sum4 = 0.0; int size = tempAndCloudList.size(); @@ -797,9 +608,85 @@ parameters.put("start", start); parameters.put("end", end); parameters.put("cityCode", cityCode); - forecastWeatherMapper.deleteByTime(parameters); - count = count + forecastWeatherMapper.insertForecastWeather(resultList); + weatherMapper.deleteByTime(parameters); + count = count + weatherMapper.insertForecastWeather(resultList); } return count; } + + @Override + public int insertRealWeather() throws ParseException { + DecimalFormat df = new DecimalFormat("0.0"); + Calendar c = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date now = sdf1.parse(sdf.format(c.getTime()) + ":00:00"); + RestTemplate restTemplate = new RestTemplate(); + List<Map<String, Object>> cityList = weatherMapper.getCityWeatherConfig(); + int count = 0; + for (Map<String, Object> map : cityList) { + String id = map.get("cityId").toString(); + Map<String, Object> dataMap = restTemplate.getForObject("https://api.heweather.net/v7/weather/now?key=da05c6c4852d4f7aa3364a9236ee9e26&gzip=n&location={1}", Map.class, id); + if (dataMap == null) { + return count; + } + String json = JSONObject.toJSONString(dataMap); + dataMap = (Map<String, Object>) JSONObject.parse(json); + Map<String, Object> nowMap = (Map<String, Object>) dataMap.get("now"); + map.put("data", nowMap); + } + List<Map<String, Object>> resultList = new ArrayList<>(); + for (Map<String, Object> map : cityList) { + Map<String, Object> resultMap = new HashMap<>(); + resultMap.put("cityCode", map.get("cityCode").toString()); + resultMap.put("time", now); + Map<String, Object> jsonMap = (Map<String, Object>) map.get("data"); + + //������km/h->m/s + Double windSpeed = Double.valueOf(jsonMap.get("windSpeed").toString()); + windSpeed = windSpeed * 1000 / 3600; + jsonMap.put("windSpeed", df.format(windSpeed)); + jsonMap.remove("obsTime"); + jsonMap.remove("icon"); + String text = jsonMap.get("text").toString(); + String condition; + if ("���".equals(text)) { + condition = "100"; + } else if ("���".equals(text)) { + condition = "90"; + } else if ("������".equals(text)) { + condition = "80"; + } else if ("���".equals(text)) { + condition = "70"; + } else if ("���".equals(text) || "������".equals(text) || "������".equals(text) || "".equals(text)) { + condition = "60"; + } else if ("������".equals(text)) { + condition = "45"; + } else if ("���������".equals(text)) { + condition = "40"; + } else if ("������������������".equals(text) || "���������������".equals(text)) { + condition = "30"; + } else if ("������".equals(text)) { + condition = "20"; + } else if ("���".equals(text)) { + condition = "10"; + } else if ("������������������".equals(text)) { + condition = "5"; + } else if ("������������������".equals(text)) { + condition = "4"; + } else if ("������".equals(text) || "������".equals(text) || "������".equals(text) + || "������".equals(text) || "������".equals(text) || "������".equals(text) + || "���������".equals(text) || "���������������������������".equals(text) || "������".equals(text) + ) { + condition = "0"; + } else { + condition = "50"; + } + jsonMap.put("condition", condition); + resultMap.put("json", JSONObject.toJSONString(jsonMap)); + resultList.add(resultMap); + } + weatherMapper.deleteRealWeather(sdf1.format(now)); + return weatherMapper.insertRealWeather(resultList); + } } -- Gitblit v1.8.0