diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 2b2c4e2..6a98704 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -6,14 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.well.well.AlarmEnumDTO.LiquidAlarmEnum; import org.well.well.AlarmEnumDTO.NoiseDigAlarmEnum; import org.well.well.base.DeviceTypeEnum; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.domain.*; -import org.well.well.util.PushList; import javax.annotation.Resource; import java.io.IOException; @@ -69,7 +67,7 @@ //3.存数据 saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; - String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Dig.toString());//获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 if ( StringUtils.isNotBlank(thresh) && Double.valueOf(val) > Double.valueOf(thresh) * constant) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); @@ -105,7 +103,7 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"1"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); //2.写入新的告警 alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, alarmContent, val, device, @@ -147,7 +145,7 @@ AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); } alarmRecordManager.saveData(alarmJob.getId(), "2",null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 2b2c4e2..6a98704 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -6,14 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.well.well.AlarmEnumDTO.LiquidAlarmEnum; import org.well.well.AlarmEnumDTO.NoiseDigAlarmEnum; import org.well.well.base.DeviceTypeEnum; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.domain.*; -import org.well.well.util.PushList; import javax.annotation.Resource; import java.io.IOException; @@ -69,7 +67,7 @@ //3.存数据 saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; - String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Dig.toString());//获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 if ( StringUtils.isNotBlank(thresh) && Double.valueOf(val) > Double.valueOf(thresh) * constant) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); @@ -105,7 +103,7 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"1"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); //2.写入新的告警 alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, alarmContent, val, device, @@ -147,7 +145,7 @@ AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); } alarmRecordManager.saveData(alarmJob.getId(), "2",null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), diff --git a/src/main/java/org/well/well/resp/NoiseDigResponse.java b/src/main/java/org/well/well/resp/NoiseDigResponse.java index db75b71..bbb0a03 100644 --- a/src/main/java/org/well/well/resp/NoiseDigResponse.java +++ b/src/main/java/org/well/well/resp/NoiseDigResponse.java @@ -33,7 +33,7 @@ noiseDigManager.processAlarmData(jsonObject,devCode); } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 try { - if (DeviceTypeEnum.Dig.name().equals(json.get("devType"))) { + if (DeviceTypeEnum.NoiseDig.name().equals(json.get("devType"))) { if ("NoiseDigConfigSuccess".equals(jsonObject.get("bType"))) { deviceConfigManager.updateStatus(devCode); } diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 2b2c4e2..6a98704 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -6,14 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.well.well.AlarmEnumDTO.LiquidAlarmEnum; import org.well.well.AlarmEnumDTO.NoiseDigAlarmEnum; import org.well.well.base.DeviceTypeEnum; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.domain.*; -import org.well.well.util.PushList; import javax.annotation.Resource; import java.io.IOException; @@ -69,7 +67,7 @@ //3.存数据 saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; - String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Dig.toString());//获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 if ( StringUtils.isNotBlank(thresh) && Double.valueOf(val) > Double.valueOf(thresh) * constant) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); @@ -105,7 +103,7 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"1"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); //2.写入新的告警 alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, alarmContent, val, device, @@ -147,7 +145,7 @@ AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); } alarmRecordManager.saveData(alarmJob.getId(), "2",null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), diff --git a/src/main/java/org/well/well/resp/NoiseDigResponse.java b/src/main/java/org/well/well/resp/NoiseDigResponse.java index db75b71..bbb0a03 100644 --- a/src/main/java/org/well/well/resp/NoiseDigResponse.java +++ b/src/main/java/org/well/well/resp/NoiseDigResponse.java @@ -33,7 +33,7 @@ noiseDigManager.processAlarmData(jsonObject,devCode); } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 try { - if (DeviceTypeEnum.Dig.name().equals(json.get("devType"))) { + if (DeviceTypeEnum.NoiseDig.name().equals(json.get("devType"))) { if ("NoiseDigConfigSuccess".equals(jsonObject.get("bType"))) { deviceConfigManager.updateStatus(devCode); } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index b2863d0..7f7626d 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -25,7 +25,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); } diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 2b2c4e2..6a98704 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -6,14 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.well.well.AlarmEnumDTO.LiquidAlarmEnum; import org.well.well.AlarmEnumDTO.NoiseDigAlarmEnum; import org.well.well.base.DeviceTypeEnum; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.domain.*; -import org.well.well.util.PushList; import javax.annotation.Resource; import java.io.IOException; @@ -69,7 +67,7 @@ //3.存数据 saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; - String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Dig.toString());//获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 if ( StringUtils.isNotBlank(thresh) && Double.valueOf(val) > Double.valueOf(thresh) * constant) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); @@ -105,7 +103,7 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"1"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); //2.写入新的告警 alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, alarmContent, val, device, @@ -147,7 +145,7 @@ AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); } alarmRecordManager.saveData(alarmJob.getId(), "2",null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), diff --git a/src/main/java/org/well/well/resp/NoiseDigResponse.java b/src/main/java/org/well/well/resp/NoiseDigResponse.java index db75b71..bbb0a03 100644 --- a/src/main/java/org/well/well/resp/NoiseDigResponse.java +++ b/src/main/java/org/well/well/resp/NoiseDigResponse.java @@ -33,7 +33,7 @@ noiseDigManager.processAlarmData(jsonObject,devCode); } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 try { - if (DeviceTypeEnum.Dig.name().equals(json.get("devType"))) { + if (DeviceTypeEnum.NoiseDig.name().equals(json.get("devType"))) { if ("NoiseDigConfigSuccess".equals(jsonObject.get("bType"))) { deviceConfigManager.updateStatus(devCode); } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index b2863d0..7f7626d 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -25,7 +25,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index cb489db..4d52e37 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -153,4 +153,13 @@ # ============================================================================ gt.appId = qQqFtTBrUa7SGLjntUlpT4 gt.appKey = GNjHLiqJkD6OoeZbtbdfi5 -gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 \ No newline at end of file +gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 + +# ============================================================================ +# ACTIVEMQ配置 +# ============================================================================ +activemq_url = tcp://192.168.0.203:61616 +activemq_username = +activemq_password = + + diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 2b2c4e2..6a98704 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -6,14 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.well.well.AlarmEnumDTO.LiquidAlarmEnum; import org.well.well.AlarmEnumDTO.NoiseDigAlarmEnum; import org.well.well.base.DeviceTypeEnum; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.domain.*; -import org.well.well.util.PushList; import javax.annotation.Resource; import java.io.IOException; @@ -69,7 +67,7 @@ //3.存数据 saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; - String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Dig.toString());//获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 if ( StringUtils.isNotBlank(thresh) && Double.valueOf(val) > Double.valueOf(thresh) * constant) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); @@ -105,7 +103,7 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"1"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); //2.写入新的告警 alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, alarmContent, val, device, @@ -147,7 +145,7 @@ AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); } alarmRecordManager.saveData(alarmJob.getId(), "2",null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), diff --git a/src/main/java/org/well/well/resp/NoiseDigResponse.java b/src/main/java/org/well/well/resp/NoiseDigResponse.java index db75b71..bbb0a03 100644 --- a/src/main/java/org/well/well/resp/NoiseDigResponse.java +++ b/src/main/java/org/well/well/resp/NoiseDigResponse.java @@ -33,7 +33,7 @@ noiseDigManager.processAlarmData(jsonObject,devCode); } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 try { - if (DeviceTypeEnum.Dig.name().equals(json.get("devType"))) { + if (DeviceTypeEnum.NoiseDig.name().equals(json.get("devType"))) { if ("NoiseDigConfigSuccess".equals(jsonObject.get("bType"))) { deviceConfigManager.updateStatus(devCode); } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index b2863d0..7f7626d 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -25,7 +25,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index cb489db..4d52e37 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -153,4 +153,13 @@ # ============================================================================ gt.appId = qQqFtTBrUa7SGLjntUlpT4 gt.appKey = GNjHLiqJkD6OoeZbtbdfi5 -gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 \ No newline at end of file +gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 + +# ============================================================================ +# ACTIVEMQ配置 +# ============================================================================ +activemq_url = tcp://192.168.0.203:61616 +activemq_username = +activemq_password = + + diff --git a/src/main/resources/wellSensor/applicationContex-ActiveMQ.xml b/src/main/resources/wellSensor/applicationContex-ActiveMQ.xml new file mode 100644 index 0000000..b5e0991 --- /dev/null +++ b/src/main/resources/wellSensor/applicationContex-ActiveMQ.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + hjt.msg.queue + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 91475cb..a806efa 100644 --- a/pom.xml +++ b/pom.xml @@ -49,14 +49,14 @@ - - + + - - - + + + @@ -242,6 +242,25 @@ 2.7.6 - + + org.apache.activemq + activemq-spring + 5.14.5 + + + commons-httpclient + commons-httpclient + 3.1 + + + com.alibaba + fastjson + 1.1.15 + + + org.springframework + spring-jms + 3.2.8.RELEASE + \ No newline at end of file diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 371ab51..31461c9 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -129,7 +129,7 @@ // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidPressureError\"],\"logTime\":\"20190510134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; // temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019010212\",\"mBody\":{\"eventType\":[\"WellLowBatteryAlarm\"],\"logTime\":\"20190624114710\",\"bType\":\"WellEvent\"},\"ts\":1560484030810}"; temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"71201900001\",\"mBody\":{\"datas\":[{\"longitude\":126.243324343,\"latitude\":39.2546546546,\"uptime\":\"20190809140900\"}],\"logTime\":\"20190809141012\",\"bType\":\"LocatorData\"},\"ts\":1565331012453}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Dig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; + temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"61201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"noiseVal\":84.7926,\"noiseFreq\":1421,\"uptime\":\"20191017141000\"},{\"noiseVal\":48.1797,\"noiseFreq\":212,\"uptime\":\"20190822141300\"},{\"noiseVal\":33.1398,\"noiseFreq\":553,\"uptime\":\"20190822141600\"},{\"noiseVal\":31.533299999999997,\"noiseFreq\":1049,\"uptime\":\"20190822141900\"},{\"noiseVal\":2.99591,\"noiseFreq\":1545,\"uptime\":\"20191017142200\"}],\"logTime\":\"20190822141337\",\"bType\":\"NoiseDigData\"},\"ts\":1566454417130}"; // temp="{\"mType\":\"Data\",\"devType\":\"WasteGas\",\"devCode\":\"21201900001\",\"mBody\":{\"datas\":[{\"CO\":60,\"O2\":25,\"H2S\":15,\"CH4\":7,\"liquidSwitch\":true,\"uptime\":\"20191018163319\"}],\"logTime\":\"20191018151844\",\"bType\":\"WasteGasData\"},\"ts\":1571296724288}"; // temp="{\"mType\":\"Data\",\"devType\":\"TempHumi\",\"devCode\":\"51201900001\",\"mBody\":{\"cell\":99,\"datas\":[{\"temperature\":55.1,\"humidity\":26.7,\"uptime\":\"20191017150000\"}],\"logTime\":\"20191017150225\",\"bType\":\"TempHumiData\"},\"ts\":1571295745881}"; // temp="{\"mType\":\"Event\",\"devType\":\"Liquid\",\"devCode\":\"11201900001\",\"mBody\":{\"eventType\":[\"LiquidUltrasonicError\"],\"logTime\":\"20190710134635\",\"bType\":\"LiquidEvent\"},\"ts\":1557467195358}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java index 32a329c..3b50d4c 100644 --- a/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java +++ b/src/main/java/org/well/well/AlarmEnumDTO/DigAlarmEnum.java @@ -1,48 +1,48 @@ -package org.well.well.AlarmEnumDTO; - -/** - * Created by admin on 2017/4/6. - */ -public enum DigAlarmEnum { - - - DigAlarm("开挖设备报警", 1), - DigLowBatteryAlarm("开挖低电量报警", 2); - // 成员变量 - private String name; - private int index; - - // 构造方法 - private DigAlarmEnum(String name, int index) { - this.name = name; - this.index = index; - } - - public int getIndex() { - return this.index; - } - - public String getName() { - return this.name; - } - - public static DigAlarmEnum getByIndex(String index) { - try { - for (DigAlarmEnum temp : values()) { - if (temp.index == Integer.parseInt(index)) { - return temp; - } - } - } catch (Exception e) { - } - return null; - } - - //覆盖方法 - @Override - public String toString() { - return this.name; - } - - -} +//package org.well.well.AlarmEnumDTO; +// +///** +// * Created by admin on 2017/4/6. +// */ +//public enum DigAlarmEnum { +// +// +// DigAlarm("开挖设备报警", 1), +// DigLowBatteryAlarm("开挖低电量报警", 2); +// // 成员变量 +// private String name; +// private int index; +// +// // 构造方法 +// private DigAlarmEnum(String name, int index) { +// this.name = name; +// this.index = index; +// } +// +// public int getIndex() { +// return this.index; +// } +// +// public String getName() { +// return this.name; +// } +// +// public static DigAlarmEnum getByIndex(String index) { +// try { +// for (DigAlarmEnum temp : values()) { +// if (temp.index == Integer.parseInt(index)) { +// return temp; +// } +// } +// } catch (Exception e) { +// } +// return null; +// } +// +// //覆盖方法 +// @Override +// public String toString() { +// return this.name; +// } +// +// +//} diff --git a/src/main/java/org/well/well/activemq/QueueMessageListener.java b/src/main/java/org/well/well/activemq/QueueMessageListener.java new file mode 100644 index 0000000..8b77375 --- /dev/null +++ b/src/main/java/org/well/well/activemq/QueueMessageListener.java @@ -0,0 +1,34 @@ +package org.well.well.activemq; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.well.well.core.util.MeterDecoderUtil; +import org.well.well.manager.MeterManager; + +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; +import java.util.Map; + +@Component +public class QueueMessageListener implements MessageListener { + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + @Autowired + private MeterManager meterManager; + public void onMessage(Message message) { + try { + + TextMessage tm = (TextMessage)(message); + System.out.println(tm.getText()); + logger.info("**********收到ACTIVEMQ消息:"+tm.getText()); + Map meterMap= MeterDecoderUtil.decodeStr(tm.getText()); + meterManager.processMeterData(meterMap); + } catch (Exception e) { + e.printStackTrace(); + logger.info("**********解析ACTIVEMQ消息出错"); + } + + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 29c5bad..f06802c 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -18,8 +18,10 @@ TempHumi("温湿度监测仪", 13), Concentrator("数据集中器", 14), Lamphouse("灯箱监测仪", 15), - Dig("开挖监测仪", 16), - Locator("井盖定位监测仪", 17); +// Dig("开挖监测仪", 16), + NoiseDig("噪声开挖监测仪", 17), + Locator("井盖定位监测仪", 18), + Meter("水质监测仪", 19); // 成员变量 diff --git a/src/main/java/org/well/well/core/util/MeterDecoderUtil.java b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java new file mode 100644 index 0000000..3c49080 --- /dev/null +++ b/src/main/java/org/well/well/core/util/MeterDecoderUtil.java @@ -0,0 +1,36 @@ +package org.well.well.core.util; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by test203 on 2019/5/23. + */ +public class MeterDecoderUtil { + + + public static Map decodeStr(String str) { + Map meterMap = new HashMap(); + meterMap.put("temp",subString(str,"w01010-Rtd=",",w01010-Flag=")); + meterMap.put("PH",subString(str,"w01001-Rtd=",",w01001-Flag=")); + meterMap.put("conductivity",subString(str,"w01014-Rtd=", ",w01014-Flag=")); + meterMap.put("DO",subString(str,"w01009-Rtd=",",w01009-Flag=")); + meterMap.put("turbidity",subString(str,"w01012-Rtd=",",w01012-Flag=")); + meterMap.put("COD",subString(str,"w01018-Rtd=",",w01018-Flag=")); + meterMap.put("AN",subString(str,"w21003-Rtd=",",w21003-Flag=")); + meterMap.put("TP",subString(str,"w21011-Rtd=",",w21011-Flag=")); + meterMap.put("TN",subString(str,"w21001-Rtd=",",w21001-Flag=")); + meterMap.put("devCode",subString(str.substring(str.indexOf("MN=")),"MN=",";")); + meterMap.put("DataTime",subString(str.substring(str.indexOf("DataTime=")),"DataTime=",";")); + return meterMap; + } + + + public static String subString(String str, String strStart, String strEnd) { + int strStartIndex = str.indexOf(strStart); + int strEndIndex = str.indexOf(strEnd); + return (strStartIndex < 0||strEndIndex < 0)?"": + str.substring(strStartIndex, strEndIndex).substring(strStart.length()); + } + +} diff --git a/src/main/java/org/well/well/core/util/PointConvertUtility.java b/src/main/java/org/well/well/core/util/PointConvertUtility.java index 088171a..c2da6cc 100644 --- a/src/main/java/org/well/well/core/util/PointConvertUtility.java +++ b/src/main/java/org/well/well/core/util/PointConvertUtility.java @@ -2,7 +2,6 @@ import com.alibaba.fastjson.JSONObject; import com.google.gson.GsonBuilder; -import io.netty.handler.codec.http.HttpUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/well/well/domain/DataMeter.java b/src/main/java/org/well/well/domain/DataMeter.java new file mode 100644 index 0000000..a11a8aa --- /dev/null +++ b/src/main/java/org/well/well/domain/DataMeter.java @@ -0,0 +1,264 @@ +package org.well.well.domain; + +import org.well.well.core.util.DateUtils; + +import javax.persistence.*; +import java.io.Serializable; +import java.text.ParseException; +import java.util.Date; +import java.util.Map; + +/** + *

+ * 水质监测仪上传数据表 + *

+ * + * @author stylefeng123 + * @since 2019-10-28 + */ +@Entity +@Table(name = "data_meter") +public class DataMeter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + private Long id; + /** + * 井编号 + */ + @Column(name ="WELL_CODE") + private String wellCode; + /** + * 设备编号 + */ + @Column(name ="DEVCODE") + private String devcode; + /** + * 温度 + */ + @Column(name ="temp") + private String temp; + /** + * PH + */ + @Column(name ="PH") + private String ph; + /** + * 电导率 + */ + @Column(name ="conductivity") + private String conductivity; + /** + * 溶解氧 + */ + @Column(name ="DO") + private String do2; + /** + * 浊度 + */ + @Column(name ="turbidity") + private String turbidity; + /** + * COD + */ + @Column(name ="COD") + private String cod; + /** + * 氨氮 + */ + @Column(name ="AN") + private String an; + /** + * 总磷 + */ + @Column(name ="TP") + private String tp; + /** + * 总氮 + */ + @Column(name ="TN") + private String tn; + /** + * 状态描述 + */ + @Column(name ="DESCN") + private String descn; + /** + * 采集时间 + */ + @Column(name ="UPTIME") + private Date uptime; + /** + * 记录时间 + */ + @Column(name ="LOGTIME") + private Date logtime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public String getDevcode() { + return devcode; + } + + public void setDevcode(String devcode) { + this.devcode = devcode; + } + + public String getTemp() { + return temp; + } + + public void setTemp(String temp) { + this.temp = temp; + } + + public String getPh() { + return ph; + } + + public void setPh(String ph) { + this.ph = ph; + } + + public String getConductivity() { + return conductivity; + } + + public void setConductivity(String conductivity) { + this.conductivity = conductivity; + } + + public String getDo2() { + return do2; + } + + public void setDo2(String do2) { + this.do2 = do2; + } + + public String getTurbidity() { + return turbidity; + } + + public void setTurbidity(String turbidity) { + this.turbidity = turbidity; + } + + public String getCod() { + return cod; + } + + public void setCod(String cod) { + this.cod = cod; + } + + public String getAn() { + return an; + } + + public void setAn(String an) { + this.an = an; + } + + public String getTp() { + return tp; + } + + public void setTp(String tp) { + this.tp = tp; + } + + public String getTn() { + return tn; + } + + public void setTn(String tn) { + this.tn = tn; + } + + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + + @Override + public String toString() { + return "DataMeter{" + + "id=" + id + + ", wellCode=" + wellCode + + ", devcode=" + devcode + + ", temp=" + temp + + ", ph=" + ph + + ", conductivity=" + conductivity + + ", do=" + do2+ + ", turbidity=" + turbidity + + ", cod=" + cod + + ", an=" + an + + ", tp=" + tp + + ", tn=" + tn + + ", descn=" + descn + + ", uptime=" + uptime + + ", logtime=" + logtime + + "}"; + } + + public DataMeter(Map meterMap,String wellCode) { + this.devcode=(meterMap.get("devCode")); + this.logtime=(new Date()); + try { + this.uptime=(DateUtils.sdf4.parse(DateUtils.DateFormat(meterMap.get("DataTime")))); + } catch (ParseException e) { + e.printStackTrace(); + } + this.temp=(meterMap.get("temp")); + this.ph=(meterMap.get("PH")); + this.conductivity=(meterMap.get("conductivity")); + this.do2=(meterMap.get("DO")); + this.cod=(meterMap.get("COD")); + this.turbidity=(meterMap.get("turbidity")); + this.an=(meterMap.get("AN")); + this.tp=(meterMap.get("TP")); + this.tn=(meterMap.get("TN")); + this.wellCode=wellCode; + } +} diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index 8b9114a..1a74d4e 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -26,9 +26,10 @@ deviceAlarmMap.put(DeviceTypeEnum.Liquid.toString(), "YWCX"); deviceAlarmMap.put(DeviceTypeEnum.Well.toString(), "JGKQ"); deviceAlarmMap.put(DeviceTypeEnum.Methane.toString(), "RQCX"); - deviceAlarmMap.put(DeviceTypeEnum.Dig.toString(), "KWCX"); + deviceAlarmMap.put(DeviceTypeEnum.NoiseDig.toString(), "KWCX"); deviceAlarmMap.put(DeviceTypeEnum.WasteGas.toString(), "YHCX"); deviceAlarmMap.put(DeviceTypeEnum.TempHumi.toString(), "WSCX"); + deviceAlarmMap.put(DeviceTypeEnum.Meter.toString(), "SZCX"); } public Criteria getCriteria() { diff --git a/src/main/java/org/well/well/manager/AlarmRuleManager.java b/src/main/java/org/well/well/manager/AlarmRuleManager.java index db931d2..97f91e1 100644 --- a/src/main/java/org/well/well/manager/AlarmRuleManager.java +++ b/src/main/java/org/well/well/manager/AlarmRuleManager.java @@ -60,7 +60,7 @@ if (null != alarmRule) { ruleStr = String.valueOf(alarmRule.getHighValue()); } - } else if (DeviceTypeEnum.Dig.toString().equals(devTypeName)) { + } else if (DeviceTypeEnum.NoiseDig.toString().equals(devTypeName)) { // SensorType sensorType = sensorTypeManager.get("000064"); alarmRule = findRuleByDevAndSensor(devCode, null); if (null != alarmRule) { diff --git a/src/main/java/org/well/well/manager/DeviceManager.java b/src/main/java/org/well/well/manager/DeviceManager.java index e939c23..9ae68d2 100644 --- a/src/main/java/org/well/well/manager/DeviceManager.java +++ b/src/main/java/org/well/well/manager/DeviceManager.java @@ -113,7 +113,7 @@ " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; findDeviceDataInSevenDays(device, sql); - } else if (devTypeName.equals(DeviceTypeEnum.Dig.toString())) { + } else if (devTypeName.equals(DeviceTypeEnum.NoiseDig.toString())) { sql = "select * from data_dig " + " where date_format(UPTIME,'%Y-%m-%d')>=:beg and" + " DEVCODE=:devCode"; diff --git a/src/main/java/org/well/well/manager/LocatorManager.java b/src/main/java/org/well/well/manager/LocatorManager.java index 8953d01..25698f0 100644 --- a/src/main/java/org/well/well/manager/LocatorManager.java +++ b/src/main/java/org/well/well/manager/LocatorManager.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DecimalUtils; -import org.well.well.core.util.PointConvertUtility; import org.well.well.core.util.StringUtils; import org.well.well.domain.BusWell; import org.well.well.domain.Locator; diff --git a/src/main/java/org/well/well/manager/MeterManager.java b/src/main/java/org/well/well/manager/MeterManager.java new file mode 100644 index 0000000..452bfdf --- /dev/null +++ b/src/main/java/org/well/well/manager/MeterManager.java @@ -0,0 +1,110 @@ +package org.well.well.manager; + +import org.springframework.stereotype.Service; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; + +import javax.annotation.Resource; +import java.util.Map; + +@Service +public class MeterManager extends HibernateEntityDao { + @Resource + private DeviceManager deviceManager; + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + BusWellManager busWellManager; + @Resource + AlarmJobManager alarmJobManager; + + public void processMeterData(Map meterMap){ + try { + String devCode=meterMap.get("devCode"); + //1.清离线 + deviceManager.clearOffline(devCode); + + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //2.存数据 + save(new DataMeter(meterMap,null==busWell?"":busWell.getWellCode())); + //3.有无超限 + String alarmContent = "", alarmValue = ""; + if(StringUtils.isNotBlank(meterMap.get("temp"))&&Float.valueOf(meterMap.get("temp"))>60){ + alarmContent+="温度超限报警,"; + alarmValue+="温度:" + meterMap.get("temp") + "℃,"; + } + if(StringUtils.isNotBlank(meterMap.get("PH"))&&(Float.valueOf(meterMap.get("PH"))>10|| + Float.valueOf(meterMap.get("PH"))<6)){ + alarmContent+="PH值超限报警,"; + alarmValue+="PH:" + meterMap.get("PH") + ","; + } + if(StringUtils.isNotBlank(meterMap.get("conductivity"))&& + Float.valueOf(meterMap.get("conductivity"))>5){ + alarmContent+="电导率超限报警,"; + alarmValue+="电导率:" + meterMap.get("conductivity") + "mS/cm,"; + } + if(StringUtils.isNotBlank(meterMap.get("DO"))&&Float.valueOf(meterMap.get("DO"))>20){ + alarmContent+="溶解氧超限报警,"; + alarmValue+="溶解氧:" + meterMap.get("DO") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("turbidity"))&&Float.valueOf(meterMap.get("turbidity"))>1000){ + alarmContent+="浊度超限报警,"; + alarmValue+="浊度:" + meterMap.get("turbidity") + "NTU,"; + } + if(StringUtils.isNotBlank(meterMap.get("COD"))&&Float.valueOf(meterMap.get("COD"))>500){ + alarmContent+="化学需氧量超限报警,"; + alarmValue+="化学需氧量:" + meterMap.get("COD") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("AN"))&&Float.valueOf(meterMap.get("AN"))>20){ + alarmContent+="氨氮超限报警,"; + alarmValue+="氨氮:" + meterMap.get("AN") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TP"))&&Float.valueOf(meterMap.get("TP"))>15){ + alarmContent+="总磷超限报警,"; + alarmValue+="总磷:" + meterMap.get("TP") + "mg/L,"; + } + if(StringUtils.isNotBlank(meterMap.get("TN"))&&Float.valueOf(meterMap.get("TN"))>30){ + alarmContent+="总氮超限报警,"; + alarmValue+="总氮:" + meterMap.get("TN") + "mg/L,"; + } + if (StringUtils.isNotBlank(alarmContent)) { + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号 + alarmRecordManager.saveData(alarmRecord.getJobId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), alarmRecord.getDevice(), devCode, + alarmRecord.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); + } else {//不存在上一条报警时 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 + //1.生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Meter.toString(),"1"); + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + "水质超限告警", + alarmValue.substring(0, alarmValue.length() - 1), device, + devCode, alarmJob.getWellCode(), meterMap.get("DataTime"), + alarmContent.substring(0, alarmContent.length() - 1)); +// //3.toDo:向app推送报警消息 +// List cids = userManager.getClients(busWell); +// if (cids.size() > 0) +// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 2b2c4e2..6a98704 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -6,14 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.well.well.AlarmEnumDTO.LiquidAlarmEnum; import org.well.well.AlarmEnumDTO.NoiseDigAlarmEnum; import org.well.well.base.DeviceTypeEnum; import org.well.well.core.hibernate.HibernateEntityDao; import org.well.well.core.util.DateUtils; import org.well.well.core.util.StringUtils; import org.well.well.domain.*; -import org.well.well.util.PushList; import javax.annotation.Resource; import java.io.IOException; @@ -69,7 +67,7 @@ //3.存数据 saveData(devCode,busWell==null?"":busWell.getWellCode(), cell, upTime, freq, val); //4.有无超限处理流程(判断最后一条数据) saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime);//存储采集数据 if (i < jsonArray.size() - 1) continue; - String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Dig.toString());//获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.NoiseDig.toString());//获取报警阈值 if ( StringUtils.isNotBlank(thresh) && Double.valueOf(val) > Double.valueOf(thresh) * constant) { AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); @@ -105,7 +103,7 @@ if (device == null) return;//未注册设备舍弃 //1.生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"1"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"1"); //2.写入新的告警 alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, alarmContent, val, device, @@ -147,7 +145,7 @@ AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); if (null == alarmJob) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Dig.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(),"0"); } alarmRecordManager.saveData(alarmJob.getId(), "2",null, NoiseDigAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), diff --git a/src/main/java/org/well/well/resp/NoiseDigResponse.java b/src/main/java/org/well/well/resp/NoiseDigResponse.java index db75b71..bbb0a03 100644 --- a/src/main/java/org/well/well/resp/NoiseDigResponse.java +++ b/src/main/java/org/well/well/resp/NoiseDigResponse.java @@ -33,7 +33,7 @@ noiseDigManager.processAlarmData(jsonObject,devCode); } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 try { - if (DeviceTypeEnum.Dig.name().equals(json.get("devType"))) { + if (DeviceTypeEnum.NoiseDig.name().equals(json.get("devType"))) { if ("NoiseDigConfigSuccess".equals(jsonObject.get("bType"))) { deviceConfigManager.updateStatus(devCode); } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index b2863d0..7f7626d 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -25,7 +25,7 @@ abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index cb489db..4d52e37 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -153,4 +153,13 @@ # ============================================================================ gt.appId = qQqFtTBrUa7SGLjntUlpT4 gt.appKey = GNjHLiqJkD6OoeZbtbdfi5 -gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 \ No newline at end of file +gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 + +# ============================================================================ +# ACTIVEMQ配置 +# ============================================================================ +activemq_url = tcp://192.168.0.203:61616 +activemq_username = +activemq_password = + + diff --git a/src/main/resources/wellSensor/applicationContex-ActiveMQ.xml b/src/main/resources/wellSensor/applicationContex-ActiveMQ.xml new file mode 100644 index 0000000..b5e0991 --- /dev/null +++ b/src/main/resources/wellSensor/applicationContex-ActiveMQ.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + hjt.msg.queue + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/classes/wellSensor/application.properties b/target/classes/wellSensor/application.properties index cb489db..4d52e37 100644 --- a/target/classes/wellSensor/application.properties +++ b/target/classes/wellSensor/application.properties @@ -153,4 +153,13 @@ # ============================================================================ gt.appId = qQqFtTBrUa7SGLjntUlpT4 gt.appKey = GNjHLiqJkD6OoeZbtbdfi5 -gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 \ No newline at end of file +gt.masterSecret = TZRYQknkxLAJ58uH56PeS6 + +# ============================================================================ +# ACTIVEMQ配置 +# ============================================================================ +activemq_url = tcp://192.168.0.203:61616 +activemq_username = +activemq_password = + +