jinpengyong
2020-05-21 a46f5f1db19dc1af644a4ed013bb12555621e135
Merge remote-tracking branch 'origin/master'
2 files added
3 files modified
305 ■■■■ changed files
src/main/java/com/moral/common/BooleanValueFilter.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/task/AQIDataInsertTask.java 102 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/util/RedisUtils.java 182 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/AQIMapper.xml 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryMinutelyMapper.xml 2 ●●● 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,