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