src/main/java/com/moral/common/BooleanValueFilter.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/task/AQIDataInsertTask.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/moral/util/RedisUtils.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/AQIMapper.xml | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/HistoryMinutelyMapper.xml | ●●●●● patch | view | raw | blame | history |
src/main/java/com/moral/common/BooleanValueFilter.java
New file @@ -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; } } 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; } } src/main/java/com/moral/util/RedisUtils.java
New file @@ -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; } } 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} 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,