From 57e1bea2d577d09675f84104bd48876bc429cdba Mon Sep 17 00:00:00 2001 From: yuzixiang <yzx123456> Date: Mon, 25 May 2020 11:45:22 +0800 Subject: [PATCH] AQI数据插入任务 --- src/main/resources/mapper/HistoryMinutelyMapper.xml | 2 src/main/java/com/moral/util/RedisUtils.java | 182 ++++++++++++++++++++++++++++++ src/main/java/com/moral/common/BooleanValueFilter.java | 17 ++ src/main/resources/mapper/AQIMapper.xml | 2 src/main/java/com/moral/task/AQIDataInsertTask.java | 102 ++++++++-------- 5 files changed, 251 insertions(+), 54 deletions(-) diff --git a/src/main/java/com/moral/common/BooleanValueFilter.java b/src/main/java/com/moral/common/BooleanValueFilter.java new file mode 100644 index 0000000..d599894 --- /dev/null +++ b/src/main/java/com/moral/common/BooleanValueFilter.java @@ -0,0 +1,17 @@ +package com.moral.common; + +import com.alibaba.fastjson.serializer.ValueFilter; +import org.springframework.stereotype.Component; + +@Component +public class BooleanValueFilter implements ValueFilter{ + @Override + public Object process(Object object, String propertyName, Object propertyValue) { + if(propertyValue!=null){ + if(propertyValue instanceof Boolean){ + return (Boolean)propertyValue?1:0; + } + } + return propertyValue; + } +} diff --git a/src/main/java/com/moral/task/AQIDataInsertTask.java b/src/main/java/com/moral/task/AQIDataInsertTask.java index c572be8..f31d5b3 100644 --- a/src/main/java/com/moral/task/AQIDataInsertTask.java +++ b/src/main/java/com/moral/task/AQIDataInsertTask.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSONObject; import com.moral.service.AQIService; import com.moral.util.HttpUtils; +import com.moral.util.RedisUtils; import com.moral.util.WxMappingJackson2HttpMessageConverter; import com.xxl.job.core.biz.model.ReturnT; @@ -13,74 +14,71 @@ import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate; -import redis.clients.jedis.Jedis; - import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; @Component public class AQIDataInsertTask { - - - @Resource private AQIService aqiService; + @Resource + private RedisUtils redisUtils; @XxlJob("insertData") public ReturnT insertData(){ - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - RestTemplate restTemplate = new RestTemplate(); - restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter()); - Date pubtime = DateUtils.truncate(new Date(),Calendar.HOUR); - - Jedis jedis = new Jedis("r-bp1672d21a422a14161.redis.rds.aliyuncs.com", 6379); - jedis.auth("KtElFcI1sYm9NP3"); - jedis.select(1); - - List<Map<String,Object>> CityAqiConfigs =aqiService.getCityAqiConfig(); - for (Map<String, Object> cityAqiConfig : CityAqiConfigs) { - String entity = null ; - Collection<Object> values = null; - Map<String, Object> data = null; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + RestTemplate restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter()); + Date pubtime = DateUtils.truncate(new Date(),Calendar.HOUR); + List<Map<String,Object>> CityAqiConfigs =aqiService.getCityAqiConfig(); + ReturnT returnT = null; + for (Map<String, Object> cityAqiConfig : CityAqiConfigs) { + String entity = null ; + Map<String, Object> data = null; + try { + HttpResponse response = HttpUtils.doGet("https://api.epmap.org", "/api/v1/air/city", "GET", + new HashMap<String, String>() {{put("Authorization", "APPCODE " + "31b6ea8f804a4472be3b633cfee44849");}}, + new HashMap<String, String>() {{put("city", cityAqiConfig.get("city_name").toString());}} + ); + entity = EntityUtils.toString(response.getEntity()); + JSONObject json = JSON.parseObject(entity); + data = (Map<String, Object>) json.get("data"); + if (!ObjectUtils.isEmpty(data)) { + pubtime = format.parse(data.get("pubtime").toString()); + }else { + continue; + } + } catch (Exception e) { + e.printStackTrace(); + } + Map<String, Object> parameters = new HashMap<>(); + parameters.put("time",pubtime); + parameters.put("data",data.toString()); + parameters.put("code",cityAqiConfig.get("city_code")); + if (!ObjectUtils.isEmpty(data)) { try { - HttpResponse response = HttpUtils.doGet("https://api.epmap.org", "/api/v1/air/city", "GET", - new HashMap<String, String>() {{put("Authorization", "APPCODE " + "31b6ea8f804a4472be3b633cfee44849");}}, - new HashMap<String, String>() {{put("city", cityAqiConfig.get("city_name").toString());}} - ); - entity = EntityUtils.toString(response.getEntity()); - JSONObject json = JSON.parseObject(entity); - data = (Map<String, Object>) json.get("data"); - if (!ObjectUtils.isEmpty(data)) { - pubtime = format.parse(data.get("pubtime").toString()); + int i=aqiService.insertAQIData(parameters); + if (i>0){ + if ("1".equals(cityAqiConfig.get("is_compensate"))) { + returnT = new ReturnT(200, " ���������������������"); + Map<String, String> map = new HashMap<String, String>(); + map.put("e1", data.containsKey("PM25C") ? data.get("PM25C").toString() : data.get("PM2_5").toString()); + map.put("e2", data.containsKey("PM10C") ? data.get("PM10C").toString() : data.get("PM10").toString()); + map.put("e10", data.containsKey("COC") ? data.get("COC").toString() : data.get("CO").toString()); + map.put("e11", data.containsKey("SO2C") ? data.get("SO2C").toString() : data.get("SO2").toString()); + map.put("e15", data.containsKey("O3C") ? data.get("O3C").toString() : data.get("O3").toString()); + map.put("e16", data.containsKey("NO2C") ? data.get("NO2C").toString() : data.get("NO2").toString()); + redisUtils.set("aqi_" + cityAqiConfig.get("city_code"), map); + } + }else { + returnT = new ReturnT(500, " ���������������������"); } } catch (Exception e) { e.printStackTrace(); } - - Map<String, Object> parameters = new HashMap<>(); - parameters.put("time",pubtime); - parameters.put("data",data.toString()); - parameters.put("code",cityAqiConfig.get("city_code")); - if (!ObjectUtils.isEmpty(data)) { - try { - aqiService.insertAQIData(parameters); - } catch (Exception e) { - e.printStackTrace(); - } - if ("1".equals(cityAqiConfig.get("is_compensate"))) { - Map<String, String> map = new HashMap<String, String>(); - map.put("e1", data.containsKey("PM25C") ? data.get("PM25C").toString() : data.get("PM2_5").toString()); - map.put("e2", data.containsKey("PM10C") ? data.get("PM10C").toString() : data.get("PM10").toString()); - map.put("e10", data.containsKey("COC") ? data.get("COC").toString() : data.get("CO").toString()); - map.put("e11", data.containsKey("SO2C") ? data.get("SO2C").toString() : data.get("SO2").toString()); - map.put("e15", data.containsKey("O3C") ? data.get("O3C").toString() : data.get("O3").toString()); - map.put("e16", data.containsKey("NO2C") ? data.get("NO2C").toString() : data.get("NO2").toString()); - jedis.hmset("aqi_" + cityAqiConfig.get("city_code"), map); - } - } } - ReturnT returnT = new ReturnT(500, " ���������������������"); - return returnT; } + return returnT; + } } diff --git a/src/main/java/com/moral/util/RedisUtils.java b/src/main/java/com/moral/util/RedisUtils.java new file mode 100644 index 0000000..3802bc7 --- /dev/null +++ b/src/main/java/com/moral/util/RedisUtils.java @@ -0,0 +1,182 @@ +package com.moral.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.moral.common.BooleanValueFilter; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Component +public class RedisUtils { + private static final String AlarmPrefix = "alarm_"; + public static String getAlarmKey(int organizationId){ + return AlarmPrefix+organizationId; + } + private static final String Adjust = "adjust_"; + public static String getAdjustKey(String mac){ + return Adjust + mac; + } + @Resource + private RedisTemplate redisTemplate; + @Resource + private BooleanValueFilter javaTypePatchValueFilter; + /** + * ���������������������value + * + * @param keys + */ + public void remove(final String... keys) { + for (String key : keys) { + remove(key); + } + } + + /** + * ������������key + * + * @param pattern + */ + public void removePattern(final String pattern) { + Set<Serializable> keys = redisTemplate.keys(pattern); + if (keys.size() > 0) + redisTemplate.delete(keys); + } + + /** + * ���������������value + * + * @param key + */ + public void remove(final String key) { + if (exists(key)) { + redisTemplate.delete(key); + } + } + + /** + * ���������������������������������value + * + * @param key + * @return + */ + public boolean exists(final String key) { + return redisTemplate.hasKey(key); + } + + /** + * ������������ + * + * @param key + * @return + */ + public Object get(final String key) { + Object result = null; + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + result = operations.get(key); + return result; + } + /** + * ������������,������������������ + * + * @param key + * @return + */ + public <T>T get(String key,Class<T> clazz) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + return (T) parseObject(json,clazz); + } + return null; + } + /** + * ������������,������������������ + * + * @param key + * @return + */ + public <T>T get(String key,TypeReference typeReference) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + return (T) parseObject(json,typeReference); + } + return null; + } + private static <T>T parseObject(String key,Class<T> clazz) { + return (T) JSON.parseObject(key,clazz); + } + private static <T>T parseObject(String key,TypeReference typeReference) { + return (T) JSON.parseObject(key,typeReference); + } + public <T> List<T> getList(String pattern,TypeReference typeReference){ + List<String> jsonList = getList(pattern); + List<T> list = new ArrayList<T>(); + for(String json:jsonList) { + list.add((T)parseObject(json,typeReference)); + } + return list; + } + public <T> List<T> getList(String pattern,Class<T> clazz){ + List<String> jsonList = getList(pattern); + List<T> list = new ArrayList<>(); + for(String json:jsonList) { + list.add(parseObject(json,clazz)); + } + return list; + } + public List<String> getList(String pattern){ + Set<String> keys = keys(pattern); + List<String> list = new ArrayList<String>(); + for(String key:keys) { + Object obj = get(key); + String json = obj!=null?obj.toString():null; + if(json!=null) { + list.add(json); + } + } + return list; + } + public Set<String> keys(String pattern) { + return redisTemplate.keys(pattern); + } + /** + * ������������ + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, Object value) { + boolean result = false; + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer); + redisTemplate.setValueSerializer(stringSerializer); + redisTemplate.setHashKeySerializer(stringSerializer); + redisTemplate.setHashValueSerializer(stringSerializer); + this.redisTemplate = redisTemplate; + try { + if(value!=null&&!(value instanceof String)) { + value = JSON.toJSONString(value,new BooleanValueFilter()); + } + ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); + operations.set(key, value); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + +} diff --git a/src/main/resources/mapper/AQIMapper.xml b/src/main/resources/mapper/AQIMapper.xml index 766dd54..38f06db 100644 --- a/src/main/resources/mapper/AQIMapper.xml +++ b/src/main/resources/mapper/AQIMapper.xml @@ -6,7 +6,7 @@ </select> <insert id="insertAQIData"> - INSERT INTO hangzhou_aqi (time, aqi_json,city_code) values( + INSERT INTO hangzhou_aqi (`time`, aqi_json,city_code) values( #{time}, #{data}, #{code} diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml index 79f0172..3b71703 100644 --- a/src/main/resources/mapper/HistoryMinutelyMapper.xml +++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml @@ -11,7 +11,7 @@ </foreach> </insert> <update id="createHistoryMinutelyTable"> - CREATE TABLE `history_minutely_${yearAndMonth}` ( + CREATE TABLE IF NOT EXISTS `history_minutely_${yearAndMonth}` ( `mac` varchar(20) CHARACTER SET latin1 DEFAULT NULL, `time` datetime DEFAULT NULL, `json` json DEFAULT NULL, -- Gitblit v1.8.0