From da68adc69a8a925bc9eae153af0e9797b14ba409 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 24 Jul 2020 14:45:47 +0800 Subject: [PATCH] 未来一天天气预报小时数据存入forecast_weather表 --- src/main/java/com/moral/service/ForecastWeatherService.java | 9 + src/main/resources/mapper/ForecastWeatherMapper.xml | 16 +++ src/main/java/com/moral/mapper/ForecastWeatherMapper.java | 9 + src/main/java/com/moral/entity/ForecastWeather.java | 16 +++ src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java | 184 ++++++++++++++++++++++++++++++++++++ src/main/java/com/moral/task/RealTimeWeatherInsertTask.java | 2 src/main/java/com/moral/task/ForecastWeatherInsertTask.java | 27 +++++ 7 files changed, 262 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/moral/entity/ForecastWeather.java b/src/main/java/com/moral/entity/ForecastWeather.java new file mode 100644 index 0000000..0018501 --- /dev/null +++ b/src/main/java/com/moral/entity/ForecastWeather.java @@ -0,0 +1,16 @@ +package com.moral.entity; + +import lombok.Data; + +import java.util.Date; + +import javax.persistence.Id; + +@Data +public class ForecastWeather { + @Id + private Integer monitorPointId; + private Date time; + private String json; + private String result; +} \ 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 new file mode 100644 index 0000000..721a2ae --- /dev/null +++ b/src/main/java/com/moral/mapper/ForecastWeatherMapper.java @@ -0,0 +1,9 @@ +package com.moral.mapper; + +import java.util.List; +import java.util.Map; + +public interface ForecastWeatherMapper { + + void insertForecastWeather(List<Map<String,Object>> list); +} diff --git a/src/main/java/com/moral/service/ForecastWeatherService.java b/src/main/java/com/moral/service/ForecastWeatherService.java new file mode 100644 index 0000000..0f1bb59 --- /dev/null +++ b/src/main/java/com/moral/service/ForecastWeatherService.java @@ -0,0 +1,9 @@ +package com.moral.service; + +import java.text.ParseException; + +public interface ForecastWeatherService { + + void insertForecastWeather() throws ParseException; + +} diff --git a/src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java b/src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java new file mode 100644 index 0000000..5f4b537 --- /dev/null +++ b/src/main/java/com/moral/service/impl/ForecastWeatherServiceImpl.java @@ -0,0 +1,184 @@ +package com.moral.service.impl; + +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.Iterator; +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.JSON; +import com.alibaba.fastjson.JSONObject; +import com.moral.entity.Area; +import com.moral.entity.City; +import com.moral.entity.MonitorPoint; +import com.moral.mapper.AreaMapper; +import com.moral.mapper.CityMapper; +import com.moral.mapper.ForecastWeatherMapper; +import com.moral.mapper.MonitorPointMapper; +import com.moral.mapper.ProvinceMapper; +import com.moral.service.ForecastWeatherService; +import com.moral.util.Dom4jUtils; + +@Service +public class ForecastWeatherServiceImpl implements ForecastWeatherService { + + @Resource + private ForecastWeatherMapper forecastWeatherMapper; + + @Resource + private MonitorPointMapper monitorPointMapper; + + @Resource + private AreaMapper areaMapper; + + @Resource + private CityMapper cityMapper; + + @Resource + private ProvinceMapper provinceMapper; + + @Override + public void insertForecastWeather() throws ParseException { + Calendar c = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String now = sdf.format(c.getTime()); + c.add(Calendar.DAY_OF_MONTH, 1); + String nextDay = sdf.format(c.getTime()); + c.add(Calendar.DAY_OF_MONTH, 1); + String nextNextDay = sdf.format(c.getTime()); + + RestTemplate restTemplate = new RestTemplate(); + List<MonitorPoint> monitorPointList = monitorPointMapper.getMonitorPointList(); + + Set<Map<String, Object>> hashSet = new HashSet<>(); + List<Map<String, Object>> resultList = new ArrayList<>(); + for (MonitorPoint monitorPoint : monitorPointList) { + Map<String, Object> hashMap1 = new HashMap<>(); + Map<String, Object> hashMap = new HashMap<>(); + Integer areaCode = monitorPoint.getAreaCode(); + Integer cityCode = monitorPoint.getCityCode(); + Integer provinceCode = monitorPoint.getProvinceCode(); + String parentName = ""; + String name1 = ""; + if (areaCode != null) { + Area area = areaMapper.getAreaByAreaCode(areaCode); + City city = cityMapper.getCityByCityCode(cityCode); + name1 = area.getAreaName(); + parentName = city.getCityName(); + if ("���������".equals(name1)) { + name1 = parentName; + parentName = provinceMapper.getProvinceByProvinceCode(provinceCode).getProvinceName(); + } + } else { + City city = cityMapper.getCityByCityCode(cityCode); + name1 = city.getCityName(); + parentName = provinceMapper.getProvinceByProvinceCode(provinceCode).getProvinceName(); + } + hashMap.put("name1", name1); + hashMap.put("parentName", parentName); + hashSet.add(hashMap); + hashMap1.put("monitorPointId", monitorPoint.getId()); + hashMap1.put("name", name1); + resultList.add(hashMap1); + } + List<Element> elements = Dom4jUtils.readDocument(); + String cityID = "101190404"; + List<Map<String, Object>> insertList = new ArrayList<>(); + for (Map<String, Object> map : hashSet) { + Map<String, Object> hashMap = new HashMap<>(); + String name1 = map.get("name1").toString(); + hashMap.put("name", name1); + for (Element element : elements) { + String name2 = element.element("name").getText(); + String parentName = map.get("parentName").toString(); + if (name1.equals(name2)) { + cityID = element.element("Fid").getText(); + break; + } + if (name2.endsWith(name1)) { + if (name2.startsWith(parentName)) { + cityID = element.element("Fid").getText(); + break; + } + } + } + Map<String, Object> map1 = restTemplate.getForObject("https://yiketianqi.com/api?version=v9&appid=68884517&appsecret=kqUYTBk3&cityid={1}", Map.class, cityID); + if (map1 == null) { + map1=new HashMap<>(); + } + + List<Map<String, Object>> dataList = (ArrayList<Map<String, Object>>) map1.get("data"); + List<Map<String, Object>> arrayList = new ArrayList<>(); + + for (Map<String, Object> dataMap : dataList) { + String date = dataMap.get("date").toString(); + ArrayList<Map<String, Object>> list = (ArrayList<Map<String, Object>>) dataMap.get("hours"); + if (date.equals(now)) { + for (int i = list.size() - 7; i < list.size(); i++) { + Map<String, Object> resultMap = list.get(i); + arrayList.add(resultMap); + } + } + if (date.equals(nextDay)) { + for (int i = 0; i < 17; i++) { + Map<String, Object> resultMap = list.get(i); + arrayList.add(resultMap); + } + } + } + hashMap.put("data", arrayList); + insertList.add(hashMap); + } + + for (Map<String, Object> resultMap : resultList) { + List<Map<String, Object>> list = new ArrayList<>(); + String monitorPointId = resultMap.get("monitorPointId").toString(); + for (Map<String, Object> insertMap : insertList) { + if (resultMap.get("name").equals(insertMap.get("name"))) { + ArrayList<Map<String, Object>> dataList = (ArrayList<Map<String, Object>>) insertMap.get("data"); + for (Map<String, Object> dataMap : dataList) { + dataMap.remove("wea_img"); + Map<String, Object> map = new HashMap<>(); + map.put("monitorPointId", Integer.valueOf(monitorPointId)); + String hour = dataMap.get("hours").toString().replaceAll("[\u4e00-\u9fa5]+", ""); + Date date = sdf1.parse(nextDay + " " + hour + ":00:00"); + if (hour.equals("00")) { + date = sdf1.parse(nextNextDay + " 00:00:00"); + } + map.put("time", date); + String json = JSONObject.toJSONString(dataMap); + map.put("json", json); + list.add(map); + } + } + } + + for (Map<String, Object> map : list) { + String json = map.get("json").toString(); + Map<String, Object> jsonMap = JSON.parseObject(json, Map.class); + Iterator<String> iterator = jsonMap.keySet().iterator(); + while (iterator.hasNext()) { + if (iterator.next().equals("hours")) { + iterator.remove(); + json = JSONObject.toJSONString(jsonMap); + map.put("json",json); + } + } + } + forecastWeatherMapper.insertForecastWeather(list); + } + } +} diff --git a/src/main/java/com/moral/task/ForecastWeatherInsertTask.java b/src/main/java/com/moral/task/ForecastWeatherInsertTask.java new file mode 100644 index 0000000..c81b7e8 --- /dev/null +++ b/src/main/java/com/moral/task/ForecastWeatherInsertTask.java @@ -0,0 +1,27 @@ +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.ForecastWeatherService; +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); + + @Resource + private ForecastWeatherService forecastWeatherService; + + @XxlJob("forecastWeatherHour") + public ReturnT insertForecastWeather(String param) throws ParseException { + forecastWeatherService.insertForecastWeather(); + return new ReturnT(200, "������������"); + } +} diff --git a/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java b/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java index 99abc7e..c6e9829 100644 --- a/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java +++ b/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java @@ -22,6 +22,6 @@ @XxlJob("realtimeWeatherHour") public ReturnT insertRealTimeWeather(String param) throws ParseException { realTimeWeatherService.insertRealTimeWeather(); - return new ReturnT(200, "������������������"); + return new ReturnT(200, "������������"); } } diff --git a/src/main/resources/mapper/ForecastWeatherMapper.xml b/src/main/resources/mapper/ForecastWeatherMapper.xml new file mode 100644 index 0000000..11bb2b6 --- /dev/null +++ b/src/main/resources/mapper/ForecastWeatherMapper.xml @@ -0,0 +1,16 @@ +<?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="monitor_point_id" property="monitorPointId" jdbcType="INTEGER" /> + </resultMap> + <insert id="insertForecastWeather"> + insert into + forecast_weather + (monitor_point_id,time,json) + values + <foreach collection="list" item="item" separator=","> + (#{item.monitorPointId},#{item.time},#{item.json}) + </foreach> + </insert> +</mapper> \ No newline at end of file -- Gitblit v1.8.0