package com.moral.monitor.service.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.moral.monitor.dao.JobDao; import com.moral.monitor.service.RedisService; import com.moral.monitor.util.RedisUtil; /** * @author fengxiang * @Time:2017年11月7日 上午10:16:33 * @version 1.0 */ @Service public class RedisServiceImpl implements RedisService{ @Resource JobDao jobDao; @Resource RedisTemplate redis; private static final String ADJUSTS = "adjusts"; private static final String ORG_ID = "orgId"; private static final String AREA_CODE = "areaCode"; private static final String MONITORPOINT_ID= "monitorpointId"; //设备静态数据,不常改动。 private static String getStaticEquKey(String mac) { return "static_equ_"+mac; } public void setStaticEqu(String mac,Map equMap) { if(mac==null) { throw new RuntimeException("Value for mac cannot be null"); } RedisUtil.set(redis, getStaticEquKey(mac),JSON.toJSONString(equMap)); } public Map getStaticEqu(String mac) { String staticEqu_key = getStaticEquKey(mac); String staticEquJson = RedisUtil.get(redis,staticEqu_key); Map equMap = null; if(StringUtils.isEmpty(staticEquJson)) { equMap = jobDao.findEquWithAdjustsByMac(mac); if(equMap!=null) { //list转map没有赋值的adjust,不储存, List> adjustList = (List>) equMap.get(ADJUSTS); Map adjustMap = new HashMap(); //list to map for(Map adjust:adjustList) { if(adjust.get("value")!=null&&Float.parseFloat(adjust.get("value").toString())!=0.0) { //没有值的清空 adjustMap.put(adjust.get("key").toString(), adjust.get("value").toString()); } } equMap.put(ADJUSTS,adjustMap); setStaticEqu(mac,equMap); } }else { equMap = JSON.parseObject(staticEquJson,new TypeReference>(){}); } return equMap; } /* * 根据 mac地址 获取校正值map */ public Map getAdjustsByMac(String mac){ Map equMap = getStaticEqu(mac); Object adjusts = equMap.get(ADJUSTS); Map adjustMap = null; if(adjusts!=null&&adjusts instanceof JSONObject) { adjustMap = ((JSONObject)adjusts).toJavaObject(new TypeReference>(){}); } return adjustMap; } //格式:state_组织ID_地区ID_监控点ID_mac private String getEquStateKey(String mac) { Map equMap = getStaticEqu(mac); if(equMap!=null) { String orgId = equMap.get(ORG_ID)==null?"$":equMap.get(ORG_ID).toString(); String areaCode = equMap.get(AREA_CODE)==null?"$":equMap.get(AREA_CODE).toString(); String mpointId = equMap.get(MONITORPOINT_ID)==null?"$":equMap.get(MONITORPOINT_ID).toString(); return "state_"+orgId+"_"+areaCode+"_"+mpointId+"_"+mac; } else { return "state_$_$_$_"+mac; } } //把含有状态的设备监控功能数据 存储到redis public void setEquState(String mac,Map equWithStateMap) { String key = getEquStateKey(mac); String equWithStateJsonStr = JSON.toJSONString(equWithStateMap); RedisUtil.set(redis,key,equWithStateJsonStr,1200,TimeUnit.SECONDS); } //从redis获取含有状态的设备监控功能数据 public Map getEquState(String mac) { String equ_key = getEquStateKey(mac); String equWithStateJsonStr = RedisUtil.get(redis, equ_key); Map equMap= JSON.parseObject(equWithStateJsonStr,new TypeReference>() {}); return equMap; } }