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/task/WeatherInsertTask.java | 22 ++ /dev/null | 30 --- src/main/resources/mapper/WeatherMapper.xml | 35 +++ src/main/java/com/moral/mapper/WeatherMapper.java | 11 + src/main/java/com/moral/service/WeatherService.java | 4 src/main/java/com/moral/service/impl/RealWeatherDailyImpl.java | 10 src/main/java/com/moral/service/impl/WeatherServiceImpl.java | 349 ++++++++++++++---------------------------- 7 files changed, 182 insertions(+), 279 deletions(-) diff --git a/src/main/java/com/moral/entity/ForecastWeather.java b/src/main/java/com/moral/entity/ForecastWeather.java deleted file mode 100644 index 9ff80c9..0000000 --- a/src/main/java/com/moral/entity/ForecastWeather.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.moral.entity; - -import lombok.Data; - -import java.util.Date; - -import javax.persistence.Id; - -@Data -public class ForecastWeather { - private String cityCode; - private Date time; - private String json; -} \ No newline at end of file diff --git a/src/main/java/com/moral/entity/RealWeather.java b/src/main/java/com/moral/entity/RealWeather.java deleted file mode 100644 index 8fa5178..0000000 --- a/src/main/java/com/moral/entity/RealWeather.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.moral.entity; - -import java.util.Date; - -import lombok.Data; - -import javax.persistence.Id; - -@Data -public class RealWeather { - private String cityCode; - private Date time; - private String json; -} \ No newline at end of file diff --git a/src/main/java/com/moral/mapper/ForecastWeatherMapper.java b/src/main/java/com/moral/mapper/ForecastWeatherMapper.java deleted file mode 100644 index f546bd5..0000000 --- a/src/main/java/com/moral/mapper/ForecastWeatherMapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.moral.mapper; - -import java.util.List; -import java.util.Map; - -public interface ForecastWeatherMapper { - - int insertForecastWeather(List<Map<String,Object>> list); - - void deleteByTime(Map<String,Object> parameters); - - String getBeam(Map<String,Object> parameters); -} diff --git a/src/main/java/com/moral/mapper/RealWeatherMapper.java b/src/main/java/com/moral/mapper/WeatherMapper.java similarity index 72% rename from src/main/java/com/moral/mapper/RealWeatherMapper.java rename to src/main/java/com/moral/mapper/WeatherMapper.java index 113e5cc..65f94f4 100644 --- a/src/main/java/com/moral/mapper/RealWeatherMapper.java +++ b/src/main/java/com/moral/mapper/WeatherMapper.java @@ -3,7 +3,15 @@ import java.util.List; import java.util.Map; -public interface RealWeatherMapper { +public interface WeatherMapper { + + List<Map<String, Object>> getCityWeatherConfig(); + + int insertForecastWeather(List<Map<String,Object>> list); + + void deleteByTime(Map<String,Object> parameters); + + String getBeam(Map<String,Object> parameters); int insertRealWeather(List<Map<String, Object>> list); @@ -22,5 +30,4 @@ List<String> getSampleFromHistoryWeather(Map<String, Object> params); List<String> getSampleFromRealWeather(Map<String, Object> params); - } diff --git a/src/main/java/com/moral/service/RealWeatherService.java b/src/main/java/com/moral/service/RealWeatherService.java deleted file mode 100644 index f96b5f9..0000000 --- a/src/main/java/com/moral/service/RealWeatherService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.moral.service; - -import java.text.ParseException; - -public interface RealWeatherService { - - int insertRealWeather() throws ParseException; - -} diff --git a/src/main/java/com/moral/service/ForecastWeatherService.java b/src/main/java/com/moral/service/WeatherService.java similarity index 67% rename from src/main/java/com/moral/service/ForecastWeatherService.java rename to src/main/java/com/moral/service/WeatherService.java index f54dee7..be49f6f 100644 --- a/src/main/java/com/moral/service/ForecastWeatherService.java +++ b/src/main/java/com/moral/service/WeatherService.java @@ -2,10 +2,12 @@ import java.text.ParseException; -public interface ForecastWeatherService { +public interface WeatherService { int insertForecastWeatherNew() throws ParseException; int insertForecastWeather() throws ParseException; + int insertRealWeather() throws ParseException; + } diff --git a/src/main/java/com/moral/service/impl/RealWeatherDailyImpl.java b/src/main/java/com/moral/service/impl/RealWeatherDailyImpl.java index ea95a1b..f8fe867 100644 --- a/src/main/java/com/moral/service/impl/RealWeatherDailyImpl.java +++ b/src/main/java/com/moral/service/impl/RealWeatherDailyImpl.java @@ -28,7 +28,7 @@ import com.moral.mapper.MonitorPointMapper; import com.moral.mapper.ProvinceMapper; import com.moral.mapper.RealWeatherDailyMapper; -import com.moral.mapper.RealWeatherMapper; +import com.moral.mapper.WeatherMapper; import com.moral.service.RealWeatherDailyService; import com.moral.util.Dom4jUtils; @@ -48,7 +48,7 @@ private ProvinceMapper provinceMapper; @Resource - private RealWeatherMapper realWeatherMapper; + private WeatherMapper weatherMapper; @Resource private RealWeatherDailyMapper realWeatherDailyMapper; @@ -158,7 +158,7 @@ Map<String, Object> dailyMap = (Map<String, Object>) JSONObject.parse(string); //��������������� dailyMap.remove("date"); - Map<String, Object> dayData = realWeatherMapper.getDayData(map); + Map<String, Object> dayData = weatherMapper.getDayData(map); for (String key : dayData.keySet()) { if (!key.equals("precip")) { dayData.put(key, String.valueOf(Math.round(Double.valueOf(dayData.get(key).toString())))); @@ -202,12 +202,12 @@ } //������������������������������ - Map<String, Object> timeMaxTemp = realWeatherMapper.getTimeMaxTemp(map); + Map<String, Object> timeMaxTemp = weatherMapper.getTimeMaxTemp(map); String hour1 = timeMaxTemp.get("time").toString().substring(11, 13); System.out.println(hour1); dayData.put("maxTempTime", hour1); - Map<String, Object> timeMinTemp = realWeatherMapper.getTimeMinTemp(map); + Map<String, Object> timeMinTemp = weatherMapper.getTimeMinTemp(map); String hour2 = timeMinTemp.get("time").toString().substring(11, 13); dayData.put("minTempTime", hour2); System.out.println(hour2); diff --git a/src/main/java/com/moral/service/impl/RealWeatherServiceImpl.java b/src/main/java/com/moral/service/impl/RealWeatherServiceImpl.java deleted file mode 100644 index 8e4d4e9..0000000 --- a/src/main/java/com/moral/service/impl/RealWeatherServiceImpl.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.moral.service.impl; - -import java.text.DecimalFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; - -import java.util.ArrayList; -import java.util.Calendar; -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.AreaMapper; -import com.moral.mapper.CityMapper; -import com.moral.mapper.MonitorPointMapper; -import com.moral.mapper.ProvinceMapper; -import com.moral.mapper.RealWeatherMapper; -import com.moral.service.RealWeatherService; -import com.moral.util.Dom4jUtils; - -@Service -public class RealWeatherServiceImpl implements RealWeatherService { - - @Resource - private RealWeatherMapper realWeatherMapper; - - @Resource - private MonitorPointMapper monitorPointMapper; - - @Resource - private AreaMapper areaMapper; - - @Resource - private CityMapper cityMapper; - - @Resource - private ProvinceMapper provinceMapper; - - @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<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<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; - } - } - } - } - int count = 0; - for (Map<String, Object> map : hashSet) { - 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 : hashSet) { - 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); - } - realWeatherMapper.deleteRealWeather(sdf1.format(now)); - return realWeatherMapper.insertRealWeather(resultList); - } -} 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); + } } diff --git a/src/main/java/com/moral/task/RealWeatherInsertTask.java b/src/main/java/com/moral/task/RealWeatherInsertTask.java deleted file mode 100644 index 3fa2663..0000000 --- a/src/main/java/com/moral/task/RealWeatherInsertTask.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.moral.task; - -import java.text.ParseException; - -import javax.annotation.Resource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import com.moral.service.RealWeatherService; -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.handler.annotation.XxlJob; - -@Component -public class RealWeatherInsertTask { - private static transient Logger logger = LoggerFactory.getLogger(RealWeatherInsertTask.class); - - @Resource - private RealWeatherService realWeatherService; - - @XxlJob("realWeatherHour") - public ReturnT insertRealWeather(String param) throws ParseException { - int count = realWeatherService.insertRealWeather(); - if (count > 0) { - return new ReturnT(200, "������������"); - }else { - return new ReturnT(500, "������������"); - } - } -} diff --git a/src/main/java/com/moral/task/ForecastWeatherInsertTask.java b/src/main/java/com/moral/task/WeatherInsertTask.java similarity index 61% rename from src/main/java/com/moral/task/ForecastWeatherInsertTask.java rename to src/main/java/com/moral/task/WeatherInsertTask.java index c29ff9b..773975f 100644 --- a/src/main/java/com/moral/task/ForecastWeatherInsertTask.java +++ b/src/main/java/com/moral/task/WeatherInsertTask.java @@ -8,20 +8,30 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; -import com.moral.service.ForecastWeatherService; +import com.moral.service.WeatherService; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; @Component -public class ForecastWeatherInsertTask { - private static transient Logger logger = LoggerFactory.getLogger(ForecastWeatherInsertTask.class); +public class WeatherInsertTask { + private static transient Logger logger = LoggerFactory.getLogger(WeatherInsertTask.class); @Resource - private ForecastWeatherService forecastWeatherService; + private WeatherService weatherService; + + @XxlJob("realWeatherHour") + public ReturnT insertRealWeather(String param) throws ParseException { + int count = weatherService.insertRealWeather(); + if (count > 0) { + return new ReturnT(200, "������������"); + }else { + return new ReturnT(500, "������������"); + } + } @XxlJob("forecastWeatherHour") public ReturnT insertForecastWeather(String param) throws ParseException { - int count = forecastWeatherService.insertForecastWeather(); + int count = weatherService.insertForecastWeather(); if (count > 0) { return new ReturnT(200, "������������"); }else { @@ -31,7 +41,7 @@ @XxlJob("forecastWeatherHourNew") public ReturnT insertForecastWeatherNew(String param) throws ParseException { - int count = forecastWeatherService.insertForecastWeatherNew(); + int count = weatherService.insertForecastWeatherNew(); if (count > 0) { return new ReturnT(200, "������������"); }else { diff --git a/src/main/resources/mapper/ForecastWeatherMapper.xml b/src/main/resources/mapper/ForecastWeatherMapper.xml deleted file mode 100644 index ccc220f..0000000 --- a/src/main/resources/mapper/ForecastWeatherMapper.xml +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.moral.mapper.ForecastWeatherMapper"> - <resultMap id="BaseResultMap" type="com.moral.entity.ForecastWeather" > - <id column="cityCode" property="cityCode" jdbcType="INTEGER" /> - </resultMap> - <insert id="insertForecastWeather"> - insert into - forecast_weather - values - <foreach collection="list" item="item" separator=","> - (#{item.cityCode},#{item.time},#{item.json}) - </foreach> - </insert> - - <delete id="deleteByTime"> - delete from forecast_weather - where - time >= #{start} - AND time <![CDATA[<]]> #{end} - and city_code=#{cityCode} - </delete> - - <select id="getBeam" resultType="java.lang.String"> - select json->'$.beam' as 'beam' - from forecast_weather - where time=#{time} - and city_code=#{cityCode} - </select> -</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/RealWeatherMapper.xml b/src/main/resources/mapper/WeatherMapper.xml similarity index 86% rename from src/main/resources/mapper/RealWeatherMapper.xml rename to src/main/resources/mapper/WeatherMapper.xml index 90e1c55..11c492c 100644 --- a/src/main/resources/mapper/RealWeatherMapper.xml +++ b/src/main/resources/mapper/WeatherMapper.xml @@ -1,9 +1,36 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> -<mapper namespace="com.moral.mapper.RealWeatherMapper"> - <resultMap id="BaseResultMap" type="com.moral.entity.RealWeather"> - <id column="city_code" property="cityCode" jdbcType="INTEGER"/> - </resultMap> +<mapper namespace="com.moral.mapper.WeatherMapper"> + <select id="getCityWeatherConfig" resultType="java.util.Map"> + select city_code AS cityCode, + city_id AS cityId + from city_weather_config + </select> + + <insert id="insertForecastWeather"> + insert into + forecast_weather + values + <foreach collection="list" item="item" separator=","> + (#{item.cityCode},#{item.time},#{item.json}) + </foreach> + </insert> + + <delete id="deleteByTime"> + delete from forecast_weather + where + time >= #{start} + AND time <![CDATA[<]]> #{end} + and city_code=#{cityCode} + </delete> + + <select id="getBeam" resultType="java.lang.String"> + select json->'$.beam' as 'beam' + from forecast_weather + where time=#{time} + and city_code=#{cityCode} + </select> + <insert id="insertRealWeather"> insert into real_weather -- Gitblit v1.8.0