From c56bd485c56d94d731fa525143057a06a735386f Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Fri, 17 Jul 2020 17:29:11 +0800 Subject: [PATCH] 从墨迹天气获得小时实时数据插入realtime_weather表 --- src/main/resources/mapper/RealTimeWeatherMapper.xml | 12 ++ src/main/resources/mapper/mybatis-config.xml | 13 ++ src/main/java/com/moral/entity/Area.java | 15 ++ src/main/java/com/moral/service/RealTimeWeatherService.java | 9 + src/main/resources/mapper/AreaMapper.xml | 12 ++ src/main/java/com/moral/mapper/RealTimeWeatherMapper.java | 9 + src/main/java/com/moral/mapper/MonitorPointMapper.java | 10 + src/main/java/com/moral/mapper/ProvinceMapper.java | 8 + src/main/java/com/moral/entity/Province.java | 13 ++ src/main/java/com/moral/entity/City.java | 16 ++ src/main/resources/mapper/MonitorPointMapper.xml | 7 + src/main/java/com/moral/task/RealTimeWeatherInsertTask.java | 25 ++++ src/main/resources/mapper/ProvinceMapper.xml | 11 + src/main/java/com/moral/mapper/AreaMapper.java | 8 + src/main/java/com/moral/service/impl/RealTimeWeatherServiceImpl.java | 139 +++++++++++++++++++++++ src/main/resources/mapper/CityMapper.xml | 12 ++ src/main/java/com/moral/mapper/CityMapper.java | 8 + src/main/resources/application.yml | 3 18 files changed, 329 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/moral/entity/Area.java b/src/main/java/com/moral/entity/Area.java new file mode 100644 index 0000000..ae35d44 --- /dev/null +++ b/src/main/java/com/moral/entity/Area.java @@ -0,0 +1,15 @@ +package com.moral.entity; + +import lombok.Data; + +import javax.persistence.Id; + +@Data +public class Area { + @Id + private Integer areaCode; + + private String areaName; + + private Integer cityCode; +} \ No newline at end of file diff --git a/src/main/java/com/moral/entity/City.java b/src/main/java/com/moral/entity/City.java new file mode 100644 index 0000000..23d3285 --- /dev/null +++ b/src/main/java/com/moral/entity/City.java @@ -0,0 +1,16 @@ +package com.moral.entity; + +import lombok.Data; + +import javax.persistence.Id; + +@Data +public class City { + @Id + private Integer cityCode; + + private String cityName; + + private Integer provinceCode; + +} \ No newline at end of file diff --git a/src/main/java/com/moral/entity/Province.java b/src/main/java/com/moral/entity/Province.java new file mode 100644 index 0000000..ff4a86e --- /dev/null +++ b/src/main/java/com/moral/entity/Province.java @@ -0,0 +1,13 @@ +package com.moral.entity; + +import lombok.Data; + +import javax.persistence.Id; + +@Data +public class Province { + @Id + private Integer provinceCode; + + private String provinceName; +} \ No newline at end of file diff --git a/src/main/java/com/moral/mapper/AreaMapper.java b/src/main/java/com/moral/mapper/AreaMapper.java new file mode 100644 index 0000000..b388581 --- /dev/null +++ b/src/main/java/com/moral/mapper/AreaMapper.java @@ -0,0 +1,8 @@ +package com.moral.mapper; + +import com.moral.entity.Area; + +public interface AreaMapper { + + Area getAreaByAreaCode(int areaCode); +} diff --git a/src/main/java/com/moral/mapper/CityMapper.java b/src/main/java/com/moral/mapper/CityMapper.java new file mode 100644 index 0000000..4e7efc1 --- /dev/null +++ b/src/main/java/com/moral/mapper/CityMapper.java @@ -0,0 +1,8 @@ +package com.moral.mapper; + +import com.moral.entity.City; + +public interface CityMapper { + + City getCityByCityCode(int cityCode); +} diff --git a/src/main/java/com/moral/mapper/MonitorPointMapper.java b/src/main/java/com/moral/mapper/MonitorPointMapper.java new file mode 100644 index 0000000..f55396b --- /dev/null +++ b/src/main/java/com/moral/mapper/MonitorPointMapper.java @@ -0,0 +1,10 @@ +package com.moral.mapper; + +import java.util.List; + +import com.moral.entity.MonitorPoint; + +public interface MonitorPointMapper { + + List<MonitorPoint> getMonitorPointList(); +} diff --git a/src/main/java/com/moral/mapper/ProvinceMapper.java b/src/main/java/com/moral/mapper/ProvinceMapper.java new file mode 100644 index 0000000..ab9bd12 --- /dev/null +++ b/src/main/java/com/moral/mapper/ProvinceMapper.java @@ -0,0 +1,8 @@ +package com.moral.mapper; + +import com.moral.entity.Province; + +public interface ProvinceMapper { + + Province getProvinceByProvinceCode(int provinceCode); +} diff --git a/src/main/java/com/moral/mapper/RealTimeWeatherMapper.java b/src/main/java/com/moral/mapper/RealTimeWeatherMapper.java new file mode 100644 index 0000000..337df9a --- /dev/null +++ b/src/main/java/com/moral/mapper/RealTimeWeatherMapper.java @@ -0,0 +1,9 @@ +package com.moral.mapper; + +import java.util.List; +import java.util.Map; + +public interface RealTimeWeatherMapper { + + void insertRealTimeWeather(List<Map<String,Object>> list); +} diff --git a/src/main/java/com/moral/service/RealTimeWeatherService.java b/src/main/java/com/moral/service/RealTimeWeatherService.java new file mode 100644 index 0000000..80c1147 --- /dev/null +++ b/src/main/java/com/moral/service/RealTimeWeatherService.java @@ -0,0 +1,9 @@ +package com.moral.service; + +import java.text.ParseException; + +public interface RealTimeWeatherService { + + void insertRealTimeWeather() throws ParseException; + +} diff --git a/src/main/java/com/moral/service/impl/RealTimeWeatherServiceImpl.java b/src/main/java/com/moral/service/impl/RealTimeWeatherServiceImpl.java new file mode 100644 index 0000000..f8401a8 --- /dev/null +++ b/src/main/java/com/moral/service/impl/RealTimeWeatherServiceImpl.java @@ -0,0 +1,139 @@ +package com.moral.service.impl; + +import java.text.ParseException; +import java.text.SimpleDateFormat; + +import java.util.ArrayList; +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.mapper.AreaMapper; +import com.moral.mapper.CityMapper; +import com.moral.mapper.MonitorPointMapper; +import com.moral.mapper.ProvinceMapper; +import com.moral.mapper.RealTimeWeatherMapper; +import com.moral.service.RealTimeWeatherService; +import com.moral.util.Dom4jUtils; + +@Service +public class RealTimeWeatherServiceImpl implements RealTimeWeatherService { + + @Resource + private RealTimeWeatherMapper realTimeWeatherMapper; + + @Resource + private MonitorPointMapper monitorPointMapper; + + @Resource + private AreaMapper areaMapper; + + @Resource + private CityMapper cityMapper; + + @Resource + private ProvinceMapper provinceMapper; + + @Override + public void insertRealTimeWeather() throws ParseException { + RestTemplate restTemplate = new RestTemplate(); + List<MonitorPoint> monitorPointList = monitorPointMapper.getMonitorPointList(); + List<Map<String, Object>> list = new ArrayList<>(); + 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"; + 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 (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("http://sapi.7drlb.com/api/mj?cityID={1}&apiKey=condition", Map.class, cityID); + Map<String, Object> dateMap = (Map<String, Object>) map1.get("data"); + Map<String, Object> conditionMap = (Map<String, Object>) dateMap.get("condition"); + conditionMap.put("name", name1); + list.add(conditionMap); + } + List<Map<String, Object>> insertList = new ArrayList<>(); + for (Map<String, Object> resultMap : resultList) { + Map<String, Object> map = new HashMap<>(); + String monitorPointId = resultMap.get("monitorPointId").toString(); + map.put("monitorPointId", Integer.valueOf(monitorPointId)); + for (Map<String, Object> listMap : list) { + if (resultMap.get("name").equals(listMap.get("name"))) { + String json = JSONObject.toJSONString(listMap); + String[] strings = listMap.get("updatetime").toString().split(" "); + String time = strings[0] + " " + strings[1].split(":")[0] + ":00:00"; + Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time); + map.put("json", json); + map.put("time", date); + } + } + insertList.add(map); + } + + for (Map<String, Object> map : insertList) { + String json = map.get("json").toString(); + Map<String, Object> parse = (Map<String, Object>) JSONObject.parse(json); + parse.remove("name"); + parse.remove("icon"); + parse.remove("conditionId"); + map.put("json", JSONObject.toJSONString(parse)); + } + realTimeWeatherMapper.insertRealTimeWeather(insertList); + } +} diff --git a/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java b/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java new file mode 100644 index 0000000..b343c2d --- /dev/null +++ b/src/main/java/com/moral/task/RealTimeWeatherInsertTask.java @@ -0,0 +1,25 @@ +package com.moral.task; + +import java.text.ParseException; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.moral.service.RealTimeWeatherService; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; + +public class RealTimeWeatherInsertTask { + private static transient Logger logger = LoggerFactory.getLogger(AlarmTableInsertTask.class); + + @Resource + private RealTimeWeatherService realTimeWeatherService; + + @XxlJob("realtimeWeatherHour") + public ReturnT insertRealTimeWeather(String param) throws ParseException { + realTimeWeatherService.insertRealTimeWeather(); + return new ReturnT(200, "������������������"); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cdb2e43..71fab61 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -61,4 +61,5 @@ max-idle: 8 min-idle: 0 mybatis: - mapper-locations: classpath*:/mapper/*Mapper.xml \ No newline at end of file + mapper-locations: classpath*:/mapper/*Mapper.xml + config-location: classpath:/mapper/mybatis-config.xml \ No newline at end of file diff --git a/src/main/resources/mapper/AreaMapper.xml b/src/main/resources/mapper/AreaMapper.xml new file mode 100644 index 0000000..092ecf5 --- /dev/null +++ b/src/main/resources/mapper/AreaMapper.xml @@ -0,0 +1,12 @@ +<?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.AreaMapper"> + <resultMap id="BaseResultMap" type="com.moral.entity.Area"> + <id column="area_code" property="areaCode" jdbcType="INTEGER"/> + <result column="area_name" property="areaName" jdbcType="VARCHAR"/> + <result column="city_code" property="cityCode" jdbcType="INTEGER"/> + </resultMap> + <select id="getAreaByAreaCode" resultType="com.moral.entity.Area"> + select * from area where area_code=#{areaCode} + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/CityMapper.xml b/src/main/resources/mapper/CityMapper.xml new file mode 100644 index 0000000..ff19463 --- /dev/null +++ b/src/main/resources/mapper/CityMapper.xml @@ -0,0 +1,12 @@ +<?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.CityMapper"> + <resultMap id="BaseResultMap" type="com.moral.entity.City" > + <id column="city_code" property="cityCode" jdbcType="INTEGER" /> + <result column="city_name" property="cityName" jdbcType="VARCHAR" /> + <result column="province_code" property="provinceCode" jdbcType="INTEGER" /> + </resultMap> + <select id="getCityByCityCode" resultType="com.moral.entity.City"> + select * from city where city_code=#{cityCode} + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/MonitorPointMapper.xml b/src/main/resources/mapper/MonitorPointMapper.xml new file mode 100644 index 0000000..53cd8f1 --- /dev/null +++ b/src/main/resources/mapper/MonitorPointMapper.xml @@ -0,0 +1,7 @@ +<?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.MonitorPointMapper"> + <select id="getMonitorPointList" resultType="com.moral.entity.MonitorPoint"> + select * from monitor_point + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/ProvinceMapper.xml b/src/main/resources/mapper/ProvinceMapper.xml new file mode 100644 index 0000000..6eeee91 --- /dev/null +++ b/src/main/resources/mapper/ProvinceMapper.xml @@ -0,0 +1,11 @@ +<?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.ProvinceMapper"> + <resultMap id="BaseResultMap" type="com.moral.entity.Province" > + <id column="province_code" property="provinceCode" jdbcType="INTEGER" /> + <result column="province_name" property="provinceName" jdbcType="VARCHAR" /> + </resultMap> + <select id="getProvinceByProvinceCode" resultType="com.moral.entity.Province"> + select * from province where province_code=#{provinceCode} + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/RealTimeWeatherMapper.xml b/src/main/resources/mapper/RealTimeWeatherMapper.xml new file mode 100644 index 0000000..26c4d2e --- /dev/null +++ b/src/main/resources/mapper/RealTimeWeatherMapper.xml @@ -0,0 +1,12 @@ +<?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.RealTimeWeatherMapper"> + <insert id="insertRealTimeWeather"> + insert into + realtime_weather + values + <foreach collection="list" item="item" separator=","> + (#{item.monitorPointId},#{item.time},#{item.json}) + </foreach> + </insert> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/mybatis-config.xml b/src/main/resources/mapper/mybatis-config.xml new file mode 100644 index 0000000..2891d41 --- /dev/null +++ b/src/main/resources/mapper/mybatis-config.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE configuration + PUBLIC "-//mybatis.org//DTD Config 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-config.dtd"> + +<configuration> + <settings> + <setting name="mapUnderscoreToCamelCase" value="true"/> + </settings> + <typeAliases> + <package name="com.moral.entity" /> + </typeAliases> +</configuration> \ No newline at end of file -- Gitblit v1.8.0