From 45be44fb95325305373647231ef74e72d1501f8c Mon Sep 17 00:00:00 2001
From: 沈斌 <bluelazysb@hotmail.com>
Date: Sat, 11 Nov 2017 08:08:22 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/com/moral/monitor/util/RedisUtil.java                |   15 ++-
 src/main/resources/mapper/JobDao.xml                               |   16 ++-
 src/main/java/com/moral/monitor/service/impl/RedisServiceImpl.java |  115 +++++++++++++++++++++++
 src/main/java/com/moral/monitor/dao/JobDao.java                    |   11 +-
 src/main/java/com/moral/monitor/listener/TaskListener.java         |   61 ++++--------
 src/main/java/com/moral/monitor/service/RedisService.java          |   17 +++
 src/main/resources/system/alarmLevels.json                         |   36 +++---
 7 files changed, 198 insertions(+), 73 deletions(-)

diff --git a/src/main/java/com/moral/monitor/dao/JobDao.java b/src/main/java/com/moral/monitor/dao/JobDao.java
index b227515..a92c6d4 100644
--- a/src/main/java/com/moral/monitor/dao/JobDao.java
+++ b/src/main/java/com/moral/monitor/dao/JobDao.java
@@ -1,17 +1,18 @@
 package com.moral.monitor.dao;
 
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.stereotype.Repository;
+
 import com.moral.monitor.entity.Equipment;
 import com.moral.monitor.entity.History;
 import com.moral.monitor.entity.Logger;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.Map;
 
 @Repository
 public interface JobDao {
 
-    public List<Map<String, String>> findAdjustByMac(String mac);
+    public Map<String,Object> findEquWithAdjustsByMac(String mac);
 
     public void updateStateByMac(String mac, int state);
 
diff --git a/src/main/java/com/moral/monitor/listener/TaskListener.java b/src/main/java/com/moral/monitor/listener/TaskListener.java
index af8c890..93462e8 100644
--- a/src/main/java/com/moral/monitor/listener/TaskListener.java
+++ b/src/main/java/com/moral/monitor/listener/TaskListener.java
@@ -17,7 +17,6 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.MessageListener;
-import org.springframework.amqp.core.MessageProperties;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.ClassPathResource;
@@ -32,6 +31,7 @@
 import com.moral.monitor.dao.TaskDao;
 import com.moral.monitor.entity.History;
 import com.moral.monitor.entity.Sensor;
+import com.moral.monitor.service.RedisService;
 import com.moral.monitor.util.RedisUtil;
 
 public class TaskListener implements MessageListener {
@@ -52,7 +52,8 @@
     protected MongoTemplate mongoTemplate;
 
     private Logger logger = LoggerFactory.getLogger(TaskListener.class);
-
+    @Resource
+    RedisService redisService;
     @Override
     public void onMessage(Message msg) {
 
@@ -70,17 +71,9 @@
         if(StringUtils.isEmpty(ver) || StringUtils.isEmpty(mac)) {
             return;
         }
-
-        Map<String, Float> adjustMap;
-        String adjust_key = "adjust_" + mac;
-        if(RedisUtil.hasKey(redisTemplate, adjust_key)) {
-            adjustMap = JSON.parseObject(RedisUtil.get(redisTemplate, adjust_key), new TypeReference<Map<String, Float>>() {});
-        } else {
-            adjustMap = getAdjustData(mac);
-            RedisUtil.set(redisTemplate, adjust_key, JSON.toJSONString(adjustMap));
-        }
-
-        if(!adjustMap.isEmpty()) {
+        //���������������������������map
+        Map<String, Float> adjustMap = redisService.getAdjustsByMac(mac);
+        if(adjustMap!=null&&!adjustMap.isEmpty()) {
             for (Map.Entry<String, Float> entry : adjustMap.entrySet()) {
                 String key = entry.getKey();
                 if(msgData.containsKey(key)) {
@@ -90,7 +83,6 @@
                 }
             }
         }
-
 //        System.out.println(message);
 //        System.out.println(JSON.toJSONString(msgData));
 
@@ -130,22 +122,6 @@
         //mongoTemplate.insert(JSON.toJSONString(histories), "data");
         mongoTemplate.insert(new_message, "data");
     }
-
-    private Map<String, Float> getAdjustData(String mac) {
-        List<Map<String, String>> adjusts = jobDao.findAdjustByMac(mac);
-        Map<String, Float> dataMap = new HashMap<String, Float>();
-        for (int i = 0; i < adjusts.size(); i++) {
-            Map adjust = adjusts.get(i);
-            if(adjust.get("value") != null) {
-                String key = String.valueOf(adjust.get("key"));
-                String data = String.valueOf(adjust.get("value"));
-                BigDecimal value = new BigDecimal(data);
-                value.setScale(3, BigDecimal.ROUND_HALF_UP);
-                dataMap.put(key, value.floatValue());
-            }
-        }
-        return dataMap;
-    }
     //���������������������
     private static Map<String,Double[]> alarmLevles =new HashMap<String, Double[]>();
     /*
@@ -175,6 +151,7 @@
 	//���������������������������������������������
     private int detEquState(Map<String,String> data) {
     	int state = 0;
+    	Map<String, Object> equMap = new HashMap<String, Object>();
     	if(data!=null) {
     			for(String key:alarmLevles.keySet()) {
     				  String value = data.get(key);
@@ -186,21 +163,25 @@
     						    if(val>=arr[index]) {
     						    	//���������������������������������������������������������������������������
     						    	state = (index>state)?index:state;
-    						    	break;
+    						    	String e_key = "level"+Integer.toString(index);
+    						        Object e_States = equMap.get(e_key);
+    						        if(e_States!=null&&e_States instanceof List) {
+    						        	((List)e_States).add(key);
+    						        }else {
+    						        	e_States = new ArrayList<String>();
+    						        	equMap.put(e_key, e_States);
+    						        	((List)e_States).add(key);
+    						        	
+    						        }
+    						        equMap.put(e_key, e_States);
+    						        break;
     						    }
-    					  }
-    					  //���������������������������������������������������������
-    					  if(state == (arr.length-1)) {
-    						  break;
     					  }
     				  }
     			}
     	}
+    	equMap.put("state", state);//������������  
+    	redisService.setEquState(data.get("mac"),equMap);
     	return state;
-    }
-    private String getDate() {
-        Date d = new Date();
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        return formatter.format(d);
     }
 }
diff --git a/src/main/java/com/moral/monitor/service/RedisService.java b/src/main/java/com/moral/monitor/service/RedisService.java
new file mode 100644
index 0000000..de86d04
--- /dev/null
+++ b/src/main/java/com/moral/monitor/service/RedisService.java
@@ -0,0 +1,17 @@
+package com.moral.monitor.service;
+
+import java.util.Map;
+
+/**
+ * @author fengxiang
+ * @Time���2017���11���7��� ������2:42:19
+ * @version 1.0
+ */
+public interface RedisService {
+	public void setEquState(String mac,Map<String,Object> equWithStateMap);
+	public Map<String,Object> getEquState(String mac);
+    /*
+     * ������ mac������ ���������������map
+     */
+    public Map<String,Float> getAdjustsByMac(String mac);
+}
diff --git a/src/main/java/com/moral/monitor/service/impl/RedisServiceImpl.java b/src/main/java/com/moral/monitor/service/impl/RedisServiceImpl.java
new file mode 100644
index 0000000..fdb06af
--- /dev/null
+++ b/src/main/java/com/moral/monitor/service/impl/RedisServiceImpl.java
@@ -0,0 +1,115 @@
+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.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<String, String> 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= "monitorpoint";
+    //������������������������������������
+    private static String getStaticEquKey(String mac) {
+    	return "static_equ_"+mac;
+    }
+    public void setStaticEqu(String mac,Map<String,Object> equMap) {
+		 RedisUtil.set(redis, getStaticEquKey(mac),JSON.toJSONString(equMap));
+    }
+    public Map<String,Object> getStaticEqu(String mac) {
+    	String staticEqu_key = getStaticEquKey(mac);
+    	String staticEquJson = RedisUtil.get(redis,staticEqu_key);
+    	Map<String,Object> equMap = null;
+    	if(StringUtils.isEmpty(staticEquJson)) {
+    		 equMap = jobDao.findEquWithAdjustsByMac(mac);
+    		 if(equMap!=null) {
+     		    //���������������adjust������������
+     	    	List<Map<String,Object>> adjustList = (List<Map<String, Object>>) equMap.get(ADJUSTS);
+     	    	List<Object> adjustListWithData = new ArrayList<Object>();
+     	    	//list to map
+     	    	for(Map<String,Object> adjust:adjustList) {
+     	    		if(adjust.get("value")!=null) {
+     	    			//������������������
+     	    			adjustListWithData.add(adjust);
+     	    		}
+     	    	}
+        	     equMap.put(ADJUSTS,adjustListWithData);
+         		 setStaticEqu(mac,equMap);
+    		 }
+    	}else {
+    		 equMap = JSON.parseObject(staticEquJson,new TypeReference<Map<String,Object>>(){});
+    	   }
+    	return equMap;
+    }
+    /*
+     * ������ mac������ ���������������map
+     */
+    public Map<String,Float> getAdjustsByMac(String mac){
+    	Map<String,Object> equMap = getStaticEqu(mac);
+    	Map<String,Float> adjustMap = null;
+    	if(equMap!=null) {
+        	 List<Map<String,Object>> adjustList = (List<Map<String, Object>>) equMap.get(ADJUSTS);
+        	 if(adjustList!=null) {
+        		 adjustMap = new HashMap<String, Float>();
+             	//list to map
+             	for(Map<String,Object> adjust:adjustList) {
+             		if(adjust.get("value")!=null) {
+             			adjustMap.put(adjust.get("key").toString(), Float.valueOf(adjust.get("value").toString()));
+             		}
+             	}
+        	 }
+    	}
+    	return adjustMap;
+    }
+    //���������state_������ID_������ID_���������ID_mac
+    private String getEquStateKey(String mac) {
+    	  Map<String,Object> 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<String,Object> equWithStateMap) {
+    	String key = getEquStateKey(mac);
+    	String equWithStateJsonStr = JSON.toJSONString(equWithStateMap);
+    	RedisUtil.set(redis,key,equWithStateJsonStr,10,TimeUnit.SECONDS);
+    }
+    //���redis���������������������������������������������
+    public Map<String,Object> getEquState(String mac) {
+    	String equ_key = getEquStateKey(mac);
+    	String equWithStateJsonStr = RedisUtil.get(redis, equ_key);
+    	Map<String,Object> equMap= JSON.parseObject(equWithStateJsonStr,new TypeReference<Map<String,Object>>() {});
+    	return equMap;
+    }
+    
+}
diff --git a/src/main/java/com/moral/monitor/util/RedisUtil.java b/src/main/java/com/moral/monitor/util/RedisUtil.java
index d688933..c9abef8 100644
--- a/src/main/java/com/moral/monitor/util/RedisUtil.java
+++ b/src/main/java/com/moral/monitor/util/RedisUtil.java
@@ -1,21 +1,26 @@
 package com.moral.monitor.util;
 
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
 import org.springframework.data.redis.core.RedisTemplate;
 
 public class RedisUtil {
 
     public static boolean hasKey(RedisTemplate<String, String> redis, String key) {
-
         return redis.hasKey(key);
     }
-
     public static void set(RedisTemplate<String, String> redis, String key, String value) {
-
         redis.opsForValue().set(key, value);
     }
-
     public static String get(RedisTemplate<String, String> redis, String key) {
-
         return redis.opsForValue().get(key);
     }
+    public static void set(RedisTemplate<String, String> redis, String key, String value,
+    		int timeout,TimeUnit unit) {
+        redis.opsForValue().set(key, value,timeout, unit);
+    }
+    public static Set<String> keys(RedisTemplate<String, String> redis,String pattern) {
+    	return redis.keys(pattern);
+    }
 }
diff --git a/src/main/resources/mapper/JobDao.xml b/src/main/resources/mapper/JobDao.xml
index d4baa19..e132f52 100644
--- a/src/main/resources/mapper/JobDao.xml
+++ b/src/main/resources/mapper/JobDao.xml
@@ -6,16 +6,22 @@
 <mapper namespace="com.moral.monitor.dao.JobDao">
 
     <resultMap type="HashMap" id="adjustResultMap">
-        <result column="mac_key"   property="key" javaType="java.lang.String" />
-        <result column="value"   property="value" javaType="java.lang.Float" />
+        <result column="owner_id"   property="orgId" javaType="java.lang.String" />
+        <result column="areacode"   property="areaCode" javaType="java.lang.String" />
+        <result column="monitorpoint"   property="monitorpointId" javaType="java.lang.String" />
+        <collection property="adjusts" column="id" javaType="java.util.List"  ofType="java.util.Map">
+		        <result column="mac_key" property="key" javaType="java.lang.String"/>  
+		        <result column="value" property="value" javaType="java.lang.Float"/>  
+        </collection>    
     </resultMap>
 
-    <select id="findAdjustByMac" resultMap="adjustResultMap">
-        select c.mac_key, d.`value`
+    <select id="findEquWithAdjustsByMac" resultMap="adjustResultMap">
+        select a.id,a.owner_id,a.monitorpoint,e.areacode,c.mac_key,d.`value`
         from equipment a
-        inner join mac b on a.id = b.equipment_id
+        inner join mac b on a.id = b.equipment_id			
         inner join sensor c on b.sensor = c.id
         left join sensoradjust d on b.id = d.sen_dev_id
+		left join monitorpoint e on e.id = a.monitorpoint
         where a.mac = #{0}
     </select>
 
diff --git a/src/main/resources/system/alarmLevels.json b/src/main/resources/system/alarmLevels.json
index cd81564..25bfccb 100644
--- a/src/main/resources/system/alarmLevels.json
+++ b/src/main/resources/system/alarmLevels.json
@@ -12,9 +12,9 @@
         "enable":1
     },
     "e3":{
-        "level1":5000,
-        "level2":8000,
-        "level3":20000
+        "level1":20000,
+        "level2":30000,
+        "level3":40000
     },
     "e4":{
         "level1":30,
@@ -53,9 +53,9 @@
         "enable":1
     },
     "e11":{
-        "level1":0.05,
-        "level2":0.475,
-        "level3":1.6,
+        "level1":50,
+        "level2":475,
+        "level3":1600,
         "enable":1
     },
     "e12":{
@@ -69,20 +69,20 @@
         "level3":120
     },
     "e14":{
-        "level1":2,
-        "level2":4,
-        "level3":6
+        "level1":100,
+        "level2":200,
+        "level3":300
     },
     "e15":{
-        "level1":0.16,
-        "level2":0.3,
-        "level3":0.8,
+        "level1":160,
+        "level2":300,
+        "level3":800,
         "enable":1
     },
     "e16":{
-        "level1":0.04,
-        "level2":0.18,
-        "level3":0.565,
+        "level1":40,
+        "level2":180,
+        "level3":565,
         "enable":1
     },
     "e17":{
@@ -96,8 +96,8 @@
         "level3":8
     },
     "e19":{
-        "level1":800,
-        "level2":1200,
-        "level3":1600
+        "level1":3000,
+        "level2":4000,
+        "level3":5000
     }
 }
\ No newline at end of file

--
Gitblit v1.8.0