From bbea6e4bd03864d8eadd775c6d66a1bbda98a3c5 Mon Sep 17 00:00:00 2001
From: fengxiang <fengxiang@blit.7drlb>
Date: Mon, 30 Oct 2017 14:30:11 +0800
Subject: [PATCH] 更新设备状态
---
src/main/resources/alarmLevles.json | 97 ++++++++++++
.gitignore | 2
.classpath | 18 +-
src/main/java/com/moral/monitor/listener/TaskListener.java | 324 +++++++++++++++++++++++----------------
4 files changed, 297 insertions(+), 144 deletions(-)
diff --git a/.classpath b/.classpath
index a778623..bfd00c2 100644
--- a/.classpath
+++ b/.classpath
@@ -1,24 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" output="target/classes" path="src/main/java">
+ <classpathentry kind="src" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
- <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+ <classpathentry kind="src" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
- <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+ <classpathentry kind="src" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
- <attribute name="maven.pomderived" value="true"/>
- </attributes>
- </classpathentry>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
- <attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
@@ -28,5 +23,10 @@
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
- <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+ <attributes>
+ <attribute name="owner.project.facets" value="java"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path="src/main/webapp/WEB-INF/classes"/>
</classpath>
diff --git a/.gitignore b/.gitignore
index b83d222..080fe69 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
/target/
+/src/main/webapp/WEB-INF/
+/.settings/
diff --git a/src/main/java/com/moral/monitor/listener/TaskListener.java b/src/main/java/com/moral/monitor/listener/TaskListener.java
index e346459..4c259e9 100644
--- a/src/main/java/com/moral/monitor/listener/TaskListener.java
+++ b/src/main/java/com/moral/monitor/listener/TaskListener.java
@@ -1,135 +1,189 @@
-package com.moral.monitor.listener;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.TypeReference;
-import com.moral.monitor.dao.JobDao;
-import com.moral.monitor.dao.TaskDao;
-import com.moral.monitor.entity.History;
-import com.moral.monitor.entity.Sensor;
-import com.moral.monitor.util.RedisUtil;
-import org.slf4j.Logger;
-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.connection.CachingConnectionFactory;
-import org.springframework.amqp.rabbit.connection.Connection;
-import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.util.StringUtils;
-
-import javax.annotation.Resource;
-import java.io.UnsupportedEncodingException;
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-public class TaskListener implements MessageListener {
-
- @Resource
- RabbitTemplate rabbitTemplate;
-
- @Resource
- JobDao jobDao;
-
- @Resource
- TaskDao taskDao;
-
- @Resource
- RedisTemplate<String, String> redisTemplate;
-
- private Logger logger = LoggerFactory.getLogger(TaskListener.class);
-
- @Override
- public void onMessage(Message msg) {
-
- String message = null;
- try {
- message = new String(msg.getBody(), "utf-8");
- } catch (UnsupportedEncodingException e) {
- logger.warn(e.getMessage());
- }
-
- Map<String, String> msgData = JSON.parseObject(message, new TypeReference<Map<String, String>>() {});
- String mac = msgData.get("mac");
- String ver = msgData.get("ver");
-
- 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()) {
- for (Map.Entry<String, Float> entry : adjustMap.entrySet()) {
- String key = entry.getKey();
- if(msgData.containsKey(key)) {
- Float value = entry.getValue();
- Float dataValue = Float.valueOf(msgData.get(key)) ;
- msgData.put(key, String.valueOf(dataValue + value));
- }
- }
- }
-
-// System.out.println(message);
-// System.out.println(JSON.toJSONString(msgData));
-
- rabbitTemplate.convertAndSend("monitors_data2", "", JSON.toJSONString(msgData).getBytes());
-// rabbitTemplate.send("monitors_data_3", "", new Message(JSON.toJSONString(msgData).getBytes(), new MessageProperties()));
-
- int state = (new Random()).nextInt(4) % 5; //TODO
-// rabbitTemplate.convertAndSend("monitors_alarm", "", "{\"mac\": \"" + mac + "\", \"state\": " + state + "}");
-
- //������������������
- jobDao.updateStateByMac(mac, state);
-
- //������������������
- taskDao.insertTologger(mac, message, getDate());
-
- //������������������
- List<History> histories = new ArrayList<History>();
- List<Sensor> sensorList = taskDao.selectFromsensorByver(ver);
- for (Sensor sensor : sensorList) {
- String key = sensor.getMac_key();
- if(msgData.containsKey(key)) {
- //taskDao.insertTohistory(mac, sensor.getSensor(), key, msgData.get(key));
- History history = new History();
- history.setMac(mac);
- history.setMac_key(key);
- history.setSensor(sensor.getSensor());
- history.setMac_value(Double.valueOf(msgData.get(key)));
- histories.add(history);
- }
- }
- jobDao.batchInsertHistory(histories);
- }
-
- 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 String getDate() {
- Date d = new Date();
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- return formatter.format(d);
- }
-}
+package com.moral.monitor.listener;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageListener;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.util.StringUtils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONReader;
+import com.alibaba.fastjson.TypeReference;
+import com.moral.monitor.dao.JobDao;
+import com.moral.monitor.dao.TaskDao;
+import com.moral.monitor.entity.History;
+import com.moral.monitor.entity.Sensor;
+import com.moral.monitor.util.RedisUtil;
+
+public class TaskListener implements MessageListener {
+
+ @Resource
+ RabbitTemplate rabbitTemplate;
+
+ @Resource
+ JobDao jobDao;
+
+ @Resource
+ TaskDao taskDao;
+
+ @Resource
+ RedisTemplate<String, String> redisTemplate;
+
+ private Logger logger = LoggerFactory.getLogger(TaskListener.class);
+
+ @Override
+ public void onMessage(Message msg) {
+
+ String message = null;
+ try {
+ message = new String(msg.getBody(), "utf-8");
+ } catch (UnsupportedEncodingException e) {
+ logger.warn(e.getMessage());
+ }
+
+ Map<String, String> msgData = JSON.parseObject(message, new TypeReference<Map<String, String>>() {});
+ String mac = msgData.get("mac");
+ String ver = msgData.get("ver");
+
+ 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()) {
+ for (Map.Entry<String, Float> entry : adjustMap.entrySet()) {
+ String key = entry.getKey();
+ if(msgData.containsKey(key)) {
+ Float value = entry.getValue();
+ Float dataValue = Float.valueOf(msgData.get(key)) ;
+ msgData.put(key, String.valueOf(dataValue + value));
+ }
+ }
+ }
+
+// System.out.println(message);
+// System.out.println(JSON.toJSONString(msgData));
+
+ rabbitTemplate.convertAndSend("monitors_data2", "", JSON.toJSONString(msgData).getBytes());
+// rabbitTemplate.send("monitors_data_3", "", new Message(JSON.toJSONString(msgData).getBytes(), new MessageProperties()));
+
+// int state = (new Random()).nextInt(4) % 5; //TODO
+ int state = detEquState(msgData);
+// rabbitTemplate.convertAndSend("monitors_alarm", "", "{\"mac\": \"" + mac + "\", \"state\": " + state + "}");
+
+ //������������������
+ jobDao.updateStateByMac(mac, state);
+
+ //������������������
+ taskDao.insertTologger(mac, message, getDate());
+
+ //������������������
+ List<History> histories = new ArrayList<History>();
+ List<Sensor> sensorList = taskDao.selectFromsensorByver(ver);
+ for (Sensor sensor : sensorList) {
+ String key = sensor.getMac_key();
+ if(msgData.containsKey(key)) {
+ //taskDao.insertTohistory(mac, sensor.getSensor(), key, msgData.get(key));
+ History history = new History();
+ history.setMac(mac);
+ history.setMac_key(key);
+ history.setSensor(sensor.getSensor());
+ history.setMac_value(Double.valueOf(msgData.get(key)));
+ histories.add(history);
+ }
+ }
+ jobDao.batchInsertHistory(histories);
+ }
+
+ 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[]>();
+ @Value(value="alarmLevles.json")
+ public void setAlarmLevles(String path) throws IOException {
+ org.springframework.core.io.Resource resource = new ClassPathResource(path);
+ InputStreamReader reader=new InputStreamReader(resource.getInputStream());
+ JSONReader jsonReader = new JSONReader(reader);
+ //���������������������
+ Map<String,Map<String,Double>> alarmLevleMap= jsonReader.readObject(new TypeReference<Map<String,Map<String,Double>>>(){});
+ //���map���������������
+ for(String key:alarmLevleMap.keySet()) {
+ Map<String,Double> levels = alarmLevleMap.get(key);
+ double level1 = levels.get("level1");
+ double level2 = levels.get("level2");
+ double level3 = levels.get("level3");
+ //������������������
+ Double arr[] = {0.0,level1,level2,level3};
+ alarmLevles.put(key, arr);
+ }
+ }
+ //���������������������������������������������
+ private int detEquState(Map<String,String> data) {
+ int state = 0;
+ if(data!=null) {
+ for(String key:alarmLevles.keySet()) {
+ String value = data.get(key);
+ if(!StringUtils.isEmpty(value)) {
+ double val = Double.parseDouble(value);
+ //������������������������
+ Double[] arr = alarmLevles.get(key);
+ for(int index = arr.length-1;index>0;index--) {
+ if(val>=arr[index]) {
+ //���������������������������������������������������������������������������
+ state = (index>state)?index:state;
+ break;
+ }
+ }
+ //���������������������������������������������������������
+ if(state == (arr.length-1)) {
+ break;
+ }
+ }
+ }
+ }
+ 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/resources/alarmLevles.json b/src/main/resources/alarmLevles.json
new file mode 100644
index 0000000..d270c5f
--- /dev/null
+++ b/src/main/resources/alarmLevles.json
@@ -0,0 +1,97 @@
+{
+ e1:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e2:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e3:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e4:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e5:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e6:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e7:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e8:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e9:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e10:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e11:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e12:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e13:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e14:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e15:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e16:{
+ level1:10,
+ level2:20,
+ level3:30
+ } ,
+ e17:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e18:{
+ level1:10,
+ level2:20,
+ level3:30
+ },
+ e19:{
+ level1:10,
+ level2:20,
+ level3:30
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0