diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/TubeResponse.java b/src/main/java/org/well/well/resp/TubeResponse.java new file mode 100644 index 0000000..216f5d6 --- /dev/null +++ b/src/main/java/org/well/well/resp/TubeResponse.java @@ -0,0 +1,59 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.manager.DeviceConfigManager; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.TubeManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class TubeResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + TubeManager tubeManager = ac.getBean(TubeManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + tubeManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + tubeManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.Tube.name().equals(json.get("devType"))) { + if ("TubeConfigSuccess".equals(jsonObject.get("bType"))) { + deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode,imei,iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/TubeResponse.java b/src/main/java/org/well/well/resp/TubeResponse.java new file mode 100644 index 0000000..216f5d6 --- /dev/null +++ b/src/main/java/org/well/well/resp/TubeResponse.java @@ -0,0 +1,59 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.manager.DeviceConfigManager; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.TubeManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class TubeResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + TubeManager tubeManager = ac.getBean(TubeManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + tubeManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + tubeManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.Tube.name().equals(json.get("devType"))) { + if ("TubeConfigSuccess".equals(jsonObject.get("bType"))) { + deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode,imei,iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/WellPlusResponse.java b/src/main/java/org/well/well/resp/WellPlusResponse.java new file mode 100644 index 0000000..8db685c --- /dev/null +++ b/src/main/java/org/well/well/resp/WellPlusResponse.java @@ -0,0 +1,42 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.WellPlusManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class WellPlusResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + WellPlusManager wellPlusManager = ac.getBean(WellPlusManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + wellPlusManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + wellPlusManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/TubeResponse.java b/src/main/java/org/well/well/resp/TubeResponse.java new file mode 100644 index 0000000..216f5d6 --- /dev/null +++ b/src/main/java/org/well/well/resp/TubeResponse.java @@ -0,0 +1,59 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.manager.DeviceConfigManager; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.TubeManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class TubeResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + TubeManager tubeManager = ac.getBean(TubeManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + tubeManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + tubeManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.Tube.name().equals(json.get("devType"))) { + if ("TubeConfigSuccess".equals(jsonObject.get("bType"))) { + deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode,imei,iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/WellPlusResponse.java b/src/main/java/org/well/well/resp/WellPlusResponse.java new file mode 100644 index 0000000..8db685c --- /dev/null +++ b/src/main/java/org/well/well/resp/WellPlusResponse.java @@ -0,0 +1,42 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.WellPlusManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class WellPlusResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + WellPlusManager wellPlusManager = ac.getBean(WellPlusManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + wellPlusManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + wellPlusManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/util/PushList.java b/src/main/java/org/well/well/util/PushList.java index 74568fe..a6c556f 100644 --- a/src/main/java/org/well/well/util/PushList.java +++ b/src/main/java/org/well/well/util/PushList.java @@ -3,12 +3,12 @@ import java.util.ArrayList; import java.util.List; -import com.gexin.rp.sdk.base.IPushResult; -import com.gexin.rp.sdk.base.impl.ListMessage; -import com.gexin.rp.sdk.base.impl.Target; -import com.gexin.rp.sdk.http.IGtPush; -import com.gexin.rp.sdk.template.NotificationTemplate; -import com.gexin.rp.sdk.template.style.Style0; +//import com.gexin.rp.sdk.base.IPushResult; +//import com.gexin.rp.sdk.base.impl.ListMessage; +//import com.gexin.rp.sdk.base.impl.Target; +//import com.gexin.rp.sdk.http.IGtPush; +//import com.gexin.rp.sdk.template.NotificationTemplate; +//import com.gexin.rp.sdk.template.style.Style0; /** * Created by test203 on 2019/6/11. @@ -18,68 +18,68 @@ public class PushList { //采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换; - private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); - private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); - private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); - - //别名推送方式 - // static String Alias1 = ""; - // static String Alias2 = ""; - static String host = "http://sdk.open.api.igexin.com/apiex.htm"; - - public static void pushToUser(List cids, String title, String content){ - // 配置返回每个用户返回用户状态,可选 - System.setProperty("gexin_pushList_needDetails", "true"); - // 配置返回每个别名及其对应cid的用户状态,可选 - // System.setProperty("gexin_pushList_needAliasDetails", "true"); - IGtPush push = new IGtPush(host, appKey, masterSecret); - // 通知透传模板 - NotificationTemplate template = notificationTemplateDemo(title,content); - ListMessage message = new ListMessage(); - message.setData(template); - // 设置消息离线,并设置离线时间 - message.setOffline(true); - // 离线有效时间,单位为毫秒,可选 - message.setOfflineExpireTime(24 * 1000 * 3600); - // 配置推送目标 - List targets = new ArrayList(); - for (String cid : cids) { - Target target = new Target(); - target.setAppId(appId); - target.setClientId(cid); - targets.add(target); - } - - // taskId用于在推送时去查找对应的message - String taskId = push.getContentId(message); - IPushResult ret = push.pushMessageToList(taskId, targets); - System.out.println(ret.getResponse().toString()); - } - - public static NotificationTemplate notificationTemplateDemo(String title,String content) { - NotificationTemplate template = new NotificationTemplate(); - // 设置APPID与APPKEY - template.setAppId(appId); - template.setAppkey(appKey); - - Style0 style = new Style0(); - // 设置通知栏标题与内容 - style.setTitle(title); - style.setText(content); - // 配置通知栏图标 - style.setLogo("icon.png"); - // 配置通知栏网络图标 - style.setLogoUrl(""); - // 设置通知是否响铃,震动,或者可清除 - style.setRing(true); - style.setVibrate(true); - style.setClearable(true); - template.setStyle(style); - - // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 - template.setTransmissionType(2); - template.setTransmissionContent("请输入您要透传的内容"); - return template; - } +// private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); +// private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); +// private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); +// +// //别名推送方式 +// // static String Alias1 = ""; +// // static String Alias2 = ""; +// static String host = "http://sdk.open.api.igexin.com/apiex.htm"; +// +// public static void pushToUser(List cids, String title, String content){ +// // 配置返回每个用户返回用户状态,可选 +// System.setProperty("gexin_pushList_needDetails", "true"); +// // 配置返回每个别名及其对应cid的用户状态,可选 +// // System.setProperty("gexin_pushList_needAliasDetails", "true"); +// IGtPush push = new IGtPush(host, appKey, masterSecret); +// // 通知透传模板 +// NotificationTemplate template = notificationTemplateDemo(title,content); +// ListMessage message = new ListMessage(); +// message.setData(template); +// // 设置消息离线,并设置离线时间 +// message.setOffline(true); +// // 离线有效时间,单位为毫秒,可选 +// message.setOfflineExpireTime(24 * 1000 * 3600); +// // 配置推送目标 +// List targets = new ArrayList(); +// for (String cid : cids) { +// Target target = new Target(); +// target.setAppId(appId); +// target.setClientId(cid); +// targets.add(target); +// } +// +// // taskId用于在推送时去查找对应的message +// String taskId = push.getContentId(message); +// IPushResult ret = push.pushMessageToList(taskId, targets); +// System.out.println(ret.getResponse().toString()); +// } +// +// public static NotificationTemplate notificationTemplateDemo(String title,String content) { +// NotificationTemplate template = new NotificationTemplate(); +// // 设置APPID与APPKEY +// template.setAppId(appId); +// template.setAppkey(appKey); +// +// Style0 style = new Style0(); +// // 设置通知栏标题与内容 +// style.setTitle(title); +// style.setText(content); +// // 配置通知栏图标 +// style.setLogo("icon.png"); +// // 配置通知栏网络图标 +// style.setLogoUrl(""); +// // 设置通知是否响铃,震动,或者可清除 +// style.setRing(true); +// style.setVibrate(true); +// style.setClearable(true); +// template.setStyle(style); +// +// // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 +// template.setTransmissionType(2); +// template.setTransmissionContent("请输入您要透传的内容"); +// return template; +// } } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/TubeResponse.java b/src/main/java/org/well/well/resp/TubeResponse.java new file mode 100644 index 0000000..216f5d6 --- /dev/null +++ b/src/main/java/org/well/well/resp/TubeResponse.java @@ -0,0 +1,59 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.manager.DeviceConfigManager; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.TubeManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class TubeResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + TubeManager tubeManager = ac.getBean(TubeManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + tubeManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + tubeManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.Tube.name().equals(json.get("devType"))) { + if ("TubeConfigSuccess".equals(jsonObject.get("bType"))) { + deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode,imei,iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/WellPlusResponse.java b/src/main/java/org/well/well/resp/WellPlusResponse.java new file mode 100644 index 0000000..8db685c --- /dev/null +++ b/src/main/java/org/well/well/resp/WellPlusResponse.java @@ -0,0 +1,42 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.WellPlusManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class WellPlusResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + WellPlusManager wellPlusManager = ac.getBean(WellPlusManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + wellPlusManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + wellPlusManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/util/PushList.java b/src/main/java/org/well/well/util/PushList.java index 74568fe..a6c556f 100644 --- a/src/main/java/org/well/well/util/PushList.java +++ b/src/main/java/org/well/well/util/PushList.java @@ -3,12 +3,12 @@ import java.util.ArrayList; import java.util.List; -import com.gexin.rp.sdk.base.IPushResult; -import com.gexin.rp.sdk.base.impl.ListMessage; -import com.gexin.rp.sdk.base.impl.Target; -import com.gexin.rp.sdk.http.IGtPush; -import com.gexin.rp.sdk.template.NotificationTemplate; -import com.gexin.rp.sdk.template.style.Style0; +//import com.gexin.rp.sdk.base.IPushResult; +//import com.gexin.rp.sdk.base.impl.ListMessage; +//import com.gexin.rp.sdk.base.impl.Target; +//import com.gexin.rp.sdk.http.IGtPush; +//import com.gexin.rp.sdk.template.NotificationTemplate; +//import com.gexin.rp.sdk.template.style.Style0; /** * Created by test203 on 2019/6/11. @@ -18,68 +18,68 @@ public class PushList { //采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换; - private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); - private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); - private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); - - //别名推送方式 - // static String Alias1 = ""; - // static String Alias2 = ""; - static String host = "http://sdk.open.api.igexin.com/apiex.htm"; - - public static void pushToUser(List cids, String title, String content){ - // 配置返回每个用户返回用户状态,可选 - System.setProperty("gexin_pushList_needDetails", "true"); - // 配置返回每个别名及其对应cid的用户状态,可选 - // System.setProperty("gexin_pushList_needAliasDetails", "true"); - IGtPush push = new IGtPush(host, appKey, masterSecret); - // 通知透传模板 - NotificationTemplate template = notificationTemplateDemo(title,content); - ListMessage message = new ListMessage(); - message.setData(template); - // 设置消息离线,并设置离线时间 - message.setOffline(true); - // 离线有效时间,单位为毫秒,可选 - message.setOfflineExpireTime(24 * 1000 * 3600); - // 配置推送目标 - List targets = new ArrayList(); - for (String cid : cids) { - Target target = new Target(); - target.setAppId(appId); - target.setClientId(cid); - targets.add(target); - } - - // taskId用于在推送时去查找对应的message - String taskId = push.getContentId(message); - IPushResult ret = push.pushMessageToList(taskId, targets); - System.out.println(ret.getResponse().toString()); - } - - public static NotificationTemplate notificationTemplateDemo(String title,String content) { - NotificationTemplate template = new NotificationTemplate(); - // 设置APPID与APPKEY - template.setAppId(appId); - template.setAppkey(appKey); - - Style0 style = new Style0(); - // 设置通知栏标题与内容 - style.setTitle(title); - style.setText(content); - // 配置通知栏图标 - style.setLogo("icon.png"); - // 配置通知栏网络图标 - style.setLogoUrl(""); - // 设置通知是否响铃,震动,或者可清除 - style.setRing(true); - style.setVibrate(true); - style.setClearable(true); - template.setStyle(style); - - // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 - template.setTransmissionType(2); - template.setTransmissionContent("请输入您要透传的内容"); - return template; - } +// private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); +// private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); +// private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); +// +// //别名推送方式 +// // static String Alias1 = ""; +// // static String Alias2 = ""; +// static String host = "http://sdk.open.api.igexin.com/apiex.htm"; +// +// public static void pushToUser(List cids, String title, String content){ +// // 配置返回每个用户返回用户状态,可选 +// System.setProperty("gexin_pushList_needDetails", "true"); +// // 配置返回每个别名及其对应cid的用户状态,可选 +// // System.setProperty("gexin_pushList_needAliasDetails", "true"); +// IGtPush push = new IGtPush(host, appKey, masterSecret); +// // 通知透传模板 +// NotificationTemplate template = notificationTemplateDemo(title,content); +// ListMessage message = new ListMessage(); +// message.setData(template); +// // 设置消息离线,并设置离线时间 +// message.setOffline(true); +// // 离线有效时间,单位为毫秒,可选 +// message.setOfflineExpireTime(24 * 1000 * 3600); +// // 配置推送目标 +// List targets = new ArrayList(); +// for (String cid : cids) { +// Target target = new Target(); +// target.setAppId(appId); +// target.setClientId(cid); +// targets.add(target); +// } +// +// // taskId用于在推送时去查找对应的message +// String taskId = push.getContentId(message); +// IPushResult ret = push.pushMessageToList(taskId, targets); +// System.out.println(ret.getResponse().toString()); +// } +// +// public static NotificationTemplate notificationTemplateDemo(String title,String content) { +// NotificationTemplate template = new NotificationTemplate(); +// // 设置APPID与APPKEY +// template.setAppId(appId); +// template.setAppkey(appKey); +// +// Style0 style = new Style0(); +// // 设置通知栏标题与内容 +// style.setTitle(title); +// style.setText(content); +// // 配置通知栏图标 +// style.setLogo("icon.png"); +// // 配置通知栏网络图标 +// style.setLogoUrl(""); +// // 设置通知是否响铃,震动,或者可清除 +// style.setRing(true); +// style.setVibrate(true); +// style.setClearable(true); +// template.setStyle(style); +// +// // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 +// template.setTransmissionType(2); +// template.setTransmissionContent("请输入您要透传的内容"); +// return template; +// } } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index ddb6e49..6dcfba9 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -17,17 +17,19 @@ private static Map abstractResponseHashMap = new HashMap(); static { - abstractResponseHashMap.put(DeviceTypeEnum.Liquid.name(), new LiquidResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Liquid.name(), new LiquidResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Well.name(), new WellResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Concentrator.name(), new ConcentratorResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Methane.name(), new MethaneResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Concentrator.name(), new ConcentratorResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Methane.name(), new MethaneResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Noise.name(), new NoiseDigResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Noise.name(), new NoiseDigResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.Tube.name(), new TubeResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.WellPlus.name(), new WellPlusResponse()); } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/TubeResponse.java b/src/main/java/org/well/well/resp/TubeResponse.java new file mode 100644 index 0000000..216f5d6 --- /dev/null +++ b/src/main/java/org/well/well/resp/TubeResponse.java @@ -0,0 +1,59 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.manager.DeviceConfigManager; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.TubeManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class TubeResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + TubeManager tubeManager = ac.getBean(TubeManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + tubeManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + tubeManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.Tube.name().equals(json.get("devType"))) { + if ("TubeConfigSuccess".equals(jsonObject.get("bType"))) { + deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode,imei,iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/WellPlusResponse.java b/src/main/java/org/well/well/resp/WellPlusResponse.java new file mode 100644 index 0000000..8db685c --- /dev/null +++ b/src/main/java/org/well/well/resp/WellPlusResponse.java @@ -0,0 +1,42 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.WellPlusManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class WellPlusResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + WellPlusManager wellPlusManager = ac.getBean(WellPlusManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + wellPlusManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + wellPlusManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/util/PushList.java b/src/main/java/org/well/well/util/PushList.java index 74568fe..a6c556f 100644 --- a/src/main/java/org/well/well/util/PushList.java +++ b/src/main/java/org/well/well/util/PushList.java @@ -3,12 +3,12 @@ import java.util.ArrayList; import java.util.List; -import com.gexin.rp.sdk.base.IPushResult; -import com.gexin.rp.sdk.base.impl.ListMessage; -import com.gexin.rp.sdk.base.impl.Target; -import com.gexin.rp.sdk.http.IGtPush; -import com.gexin.rp.sdk.template.NotificationTemplate; -import com.gexin.rp.sdk.template.style.Style0; +//import com.gexin.rp.sdk.base.IPushResult; +//import com.gexin.rp.sdk.base.impl.ListMessage; +//import com.gexin.rp.sdk.base.impl.Target; +//import com.gexin.rp.sdk.http.IGtPush; +//import com.gexin.rp.sdk.template.NotificationTemplate; +//import com.gexin.rp.sdk.template.style.Style0; /** * Created by test203 on 2019/6/11. @@ -18,68 +18,68 @@ public class PushList { //采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换; - private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); - private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); - private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); - - //别名推送方式 - // static String Alias1 = ""; - // static String Alias2 = ""; - static String host = "http://sdk.open.api.igexin.com/apiex.htm"; - - public static void pushToUser(List cids, String title, String content){ - // 配置返回每个用户返回用户状态,可选 - System.setProperty("gexin_pushList_needDetails", "true"); - // 配置返回每个别名及其对应cid的用户状态,可选 - // System.setProperty("gexin_pushList_needAliasDetails", "true"); - IGtPush push = new IGtPush(host, appKey, masterSecret); - // 通知透传模板 - NotificationTemplate template = notificationTemplateDemo(title,content); - ListMessage message = new ListMessage(); - message.setData(template); - // 设置消息离线,并设置离线时间 - message.setOffline(true); - // 离线有效时间,单位为毫秒,可选 - message.setOfflineExpireTime(24 * 1000 * 3600); - // 配置推送目标 - List targets = new ArrayList(); - for (String cid : cids) { - Target target = new Target(); - target.setAppId(appId); - target.setClientId(cid); - targets.add(target); - } - - // taskId用于在推送时去查找对应的message - String taskId = push.getContentId(message); - IPushResult ret = push.pushMessageToList(taskId, targets); - System.out.println(ret.getResponse().toString()); - } - - public static NotificationTemplate notificationTemplateDemo(String title,String content) { - NotificationTemplate template = new NotificationTemplate(); - // 设置APPID与APPKEY - template.setAppId(appId); - template.setAppkey(appKey); - - Style0 style = new Style0(); - // 设置通知栏标题与内容 - style.setTitle(title); - style.setText(content); - // 配置通知栏图标 - style.setLogo("icon.png"); - // 配置通知栏网络图标 - style.setLogoUrl(""); - // 设置通知是否响铃,震动,或者可清除 - style.setRing(true); - style.setVibrate(true); - style.setClearable(true); - template.setStyle(style); - - // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 - template.setTransmissionType(2); - template.setTransmissionContent("请输入您要透传的内容"); - return template; - } +// private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); +// private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); +// private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); +// +// //别名推送方式 +// // static String Alias1 = ""; +// // static String Alias2 = ""; +// static String host = "http://sdk.open.api.igexin.com/apiex.htm"; +// +// public static void pushToUser(List cids, String title, String content){ +// // 配置返回每个用户返回用户状态,可选 +// System.setProperty("gexin_pushList_needDetails", "true"); +// // 配置返回每个别名及其对应cid的用户状态,可选 +// // System.setProperty("gexin_pushList_needAliasDetails", "true"); +// IGtPush push = new IGtPush(host, appKey, masterSecret); +// // 通知透传模板 +// NotificationTemplate template = notificationTemplateDemo(title,content); +// ListMessage message = new ListMessage(); +// message.setData(template); +// // 设置消息离线,并设置离线时间 +// message.setOffline(true); +// // 离线有效时间,单位为毫秒,可选 +// message.setOfflineExpireTime(24 * 1000 * 3600); +// // 配置推送目标 +// List targets = new ArrayList(); +// for (String cid : cids) { +// Target target = new Target(); +// target.setAppId(appId); +// target.setClientId(cid); +// targets.add(target); +// } +// +// // taskId用于在推送时去查找对应的message +// String taskId = push.getContentId(message); +// IPushResult ret = push.pushMessageToList(taskId, targets); +// System.out.println(ret.getResponse().toString()); +// } +// +// public static NotificationTemplate notificationTemplateDemo(String title,String content) { +// NotificationTemplate template = new NotificationTemplate(); +// // 设置APPID与APPKEY +// template.setAppId(appId); +// template.setAppkey(appKey); +// +// Style0 style = new Style0(); +// // 设置通知栏标题与内容 +// style.setTitle(title); +// style.setText(content); +// // 配置通知栏图标 +// style.setLogo("icon.png"); +// // 配置通知栏网络图标 +// style.setLogoUrl(""); +// // 设置通知是否响铃,震动,或者可清除 +// style.setRing(true); +// style.setVibrate(true); +// style.setClearable(true); +// template.setStyle(style); +// +// // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 +// template.setTransmissionType(2); +// template.setTransmissionContent("请输入您要透传的内容"); +// return template; +// } } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index ddb6e49..6dcfba9 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -17,17 +17,19 @@ private static Map abstractResponseHashMap = new HashMap(); static { - abstractResponseHashMap.put(DeviceTypeEnum.Liquid.name(), new LiquidResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Liquid.name(), new LiquidResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Well.name(), new WellResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Concentrator.name(), new ConcentratorResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Methane.name(), new MethaneResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Concentrator.name(), new ConcentratorResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Methane.name(), new MethaneResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Noise.name(), new NoiseDigResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Noise.name(), new NoiseDigResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.Tube.name(), new TubeResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.WellPlus.name(), new WellPlusResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index 2f92034..c766804 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -20,7 +20,7 @@ #db.default.username=sensor #db.default.password=sensor db.default.driverClassName=com.mysql.jdbc.Driver -db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell_br_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false +db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root db.default.password=Casic203! ### ============================================================================ @@ -170,7 +170,7 @@ #bootstrap.servers = localhost:9092 bootstrap.servers = 111.198.10.15:12502 -kafka.topic = sensor +kafka.topic = gas bootstrap.groupid = 0 # ============================================================================ diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index ffe1f64..f800a2a 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -114,8 +114,8 @@ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext( new String[]{"classpath:wellSensor/*.xml"}); ac.start(); -// String temp = -// "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; + String temp = + "{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"112018030001\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\": 90,\"datas\": [{\"uptime\":\"20180911222000\",\"level\":0.55}, {\"uptime\":\"20181111212001\",\"level\": 0.46}],\"logTime\":\"20190315010000\"},\"ts\":\"12345678901\"}"; // temp="{\"mType\":\"Event\",\"devType\":\"Concentrator\",\"devCode\":\"00003\",\"mBody\":{\"logTime\":\"20190605002024\",\"bType\":\"ConcentratorOnline\"},\"ts\":1559665224343}"; @@ -137,7 +137,7 @@ // temp="{\"mType\":\"SetResponse\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidConfigSuccess\"},\"ts\":1556182310514}"; // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20201219150000\"},{\"level\":4,\"uptime\":\"20191219151000\"},{\"level\":6.5,\"uptime\":\"20191219152000\"}],\"logTime\":\"20191219152000\"},\"ts\":1556186030842}"; // temp="{\"mType\":\"Data\",\"devType\":\"NoiseDig\",\"devCode\":\"14141414146\",\"mBody\":{\"bType\":\"NoiseDigData\",\"cell\":88,\"datas\":[{\"noiseVal\":60,\"noiseFreq\":50,\"uptime\":\"20200109123131\"}],\"logTime\":\"20200119123131\"},\"ts\":1556184691451}"; -// temp="{\"mType\":\"Event\",\"devType\":\"Well\",\"devCode\":\"412019060037\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; + temp="{\"mType\":\"Event\",\"devType\":\"WellPlus\",\"devCode\":\"412019080025\",\"mBody\":{\"eventType\":[\"WellPusOpenAlarm\"],\"logTime\":\"20220406154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; // temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312018020163\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200925173900\"},{\"gas\":0.080566406,\"uptime\":\"20200925175400\"},{\"gas\":25,\"uptime\":\"20200925165400\"},{\"gas\":0.09990235,\"uptime\":\"20200925085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200509085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; // temp="{\"mType\":\"Data\",\"devType\":\"Locator\",\"devCode\":\"642019010387\",\"mBody\":{\"datas\":[{\"longitude\":0.0,\"latitude\":0.0,\"uptime\":\"20200118111000\"}],\"logTime\":\"20200118111006\",\"bType\":\"LocatorData\"},\"ts\":1579317006078}"; diff --git a/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java new file mode 100644 index 0000000..c65f8b5 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/TubeAlarmEnum.java @@ -0,0 +1,54 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum TubeAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + OVER_THRESH("浓度超限", 1), + TubeCommunicationFailure("传感器通信失败", 2), + TubeError("管盯传感器异常", 3), + TubeUnknown("管盯未知异常", 4), + OVER_THRESH1("一级浓度超限", 5), + OVER_THRESH2("二级浓度超限", 6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private TubeAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static TubeAlarmEnum getByIndex(String index) { + try { + for (TubeAlarmEnum 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/AlarmEnumDTO/WellPlusAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java new file mode 100644 index 0000000..10b0204 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/WellPlusAlarmEnum.java @@ -0,0 +1,49 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum WellPlusAlarmEnum { + NO_DATA("设备异常", -1), + NORMAL("心跳", 0), + WellPlusOpenAlarm("井盖开盖报警", 1), + WellPlusLevelAlarm("液位超限报警", 2), + WellPlusUnknown("未知异常", 3); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private WellPlusAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static WellPlusAlarmEnum getByIndex(String index) { + try { + for (WellPlusAlarmEnum wellAlarmEnum : values()) { + if (wellAlarmEnum.index == Integer.parseInt(index)) { + return wellAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 7578d81..960885f 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -24,7 +24,9 @@ Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), RAINGAUGE("雨量计", 21), - LG("燃气智能监测终端(一体化)", 22); + LG("燃气智能监测终端(一体化)", 22), + Tube("管盯", 23), + WellPlus("井盖液位一体机", 24); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index 8529a1e..4eabfe6 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,8 +65,8 @@ private Long version; - @Column(name ="JOB_GENERATION_TYPE") - private String jobGenerationType; +// @Column(name ="JOB_GENERATION_TYPE") +// private String jobGenerationType; @@ -142,11 +142,11 @@ this.version = version; } - public String getJobGenerationType() { - return jobGenerationType; - } - - public void setJobGenerationType(String jobGenerationType) { - this.jobGenerationType = jobGenerationType; - } +// public String getJobGenerationType() { +// return jobGenerationType; +// } +// +// public void setJobGenerationType(String jobGenerationType) { +// this.jobGenerationType = jobGenerationType; +// } } diff --git a/src/main/java/org/well/well/domain/Tube.java b/src/main/java/org/well/well/domain/Tube.java new file mode 100644 index 0000000..d6efa2c --- /dev/null +++ b/src/main/java/org/well/well/domain/Tube.java @@ -0,0 +1,140 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_tube") +public class Tube implements Serializable { + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public Tube(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} diff --git a/src/main/java/org/well/well/domain/WellPlus.java b/src/main/java/org/well/well/domain/WellPlus.java new file mode 100644 index 0000000..e21f0be --- /dev/null +++ b/src/main/java/org/well/well/domain/WellPlus.java @@ -0,0 +1,87 @@ +package org.well.well.domain; + +import org.well.well.util.SnowFlakeUtil; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_wellplus") +public class WellPlus implements Serializable { + + private static final long serialVersionUID = 429994083551525856L; + private Long dbId; + private String devCode; + private String wellCode; + private String desc; + private String status; + private Date logtime; + + @Id +// @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + + @Column(name = "DESCN") + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + + @Column(name = "STATUS") + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + + @Column(name = "LOGTIME") + public Date getLogtime() { + return logtime; + } + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + public WellPlus(String devCode, String wellCode, String desc, String status) { + this.dbId= SnowFlakeUtil.getId(); + this.devCode = devCode; + this.wellCode = wellCode; + this.desc = desc; + this.status = status; + this.logtime = new Date(); + } +} diff --git a/src/main/java/org/well/well/manager/TubeManager.java b/src/main/java/org/well/well/manager/TubeManager.java new file mode 100644 index 0000000..6ac686b --- /dev/null +++ b/src/main/java/org/well/well/manager/TubeManager.java @@ -0,0 +1,170 @@ +package org.well.well.manager; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.well.well.AlarmEnumDTO.TubeAlarmEnum; +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.ThreadUtil; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Tube; +import org.well.well.util.SnowFlakeUtil; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class TubeManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + Tube Tube = new Tube(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(Tube); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String gas = ((JSONObject) jsonArray.get(i)).get("gas").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + gas = String.format("%.2f", Double.valueOf(gas)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(gas) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = TubeAlarmEnum.OVER_THRESH.getName(); + Integer alarmLevel = 0; + for (int j = 0; j < ruleRankList.size(); j++) { + Object rankValue = ((Object[]) ruleRankList.get(j))[2]; + if (null != rankValue) { + if (Float.valueOf(gas) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (alarmJob == null) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 + ThreadUtil.excuteMsg(null, alarmContent, busWell == null ? "" : busWell.getWellCode()); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + Long jobId = alarmJob == null ? SnowFlakeUtil.getId() : alarmJob.getId(); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(jobId, devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Tube.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + TubeAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/manager/WellPlusManager.java b/src/main/java/org/well/well/manager/WellPlusManager.java new file mode 100644 index 0000000..1141d0c --- /dev/null +++ b/src/main/java/org/well/well/manager/WellPlusManager.java @@ -0,0 +1,128 @@ +package org.well.well.manager; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.well.well.AlarmEnumDTO.WellAlarmEnum; +import org.well.well.AlarmEnumDTO.WellPlusAlarmEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.Well; +import org.well.well.domain.WellPlus; + +import javax.annotation.Resource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Service +public class WellPlusManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private DeviceManager deviceManager; + @Resource + private UserManager userManager; + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devCode, String wellCode, + String desc, String status) { + + Map resultMap = new HashMap(); + try { + + WellPlus wellPlus = new WellPlus(devCode, wellCode, desc, status); + save(wellPlus); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String level = ((JSONObject) jsonArray.get(i)).get("value").toString();//"00" + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + //3.存数据 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.NORMAL.toString(), + String.valueOf(WellPlusAlarmEnum.NORMAL.getIndex()));//存采集数据 + + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + @Transactional + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + + //2.存入数据表 + this.saveData(devCode, busWell == null ? "" : busWell.getWellCode(), + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.根据不同的报警,进入不同的处理方法(主要分开盖和其他类型的报警) + + //3.1井盖开盖报警处理 + if (WellPlusAlarmEnum.WellPlusOpenAlarm.name().equals(jsonArray.get(i).toString())) { + +// alarmRecordManager.clearAlarm(devCode, "2", "");//清除设备本身报警 + if (null != busWell && "1".equals(busWell.getBfzt())) {//布防状态 + + alarmRecordManager.clearAlarm(devCode, "", "");//清除以前报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return; //没注册舍弃 + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName(), + String.valueOf(WellPlusAlarmEnum.WellPlusOpenAlarm.getIndex()), device, + devCode, busWell != null ? busWell.getWellCode() : null, logTime, + WellPlusAlarmEnum.WellPlusOpenAlarm.getName()); + } + } + //3.2低电量和设备故障报警处理 + else if (WellPlusAlarmEnum.WellPlusLevelAlarm.name().equals(jsonArray.get(i).toString()) || + WellPlusAlarmEnum.WellPlusUnknown.name().equals(jsonArray.get(i).toString())) { + + //写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return; + alarmRecordManager.saveData(null, "1", null, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + WellPlusAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + } + if (i < jsonArray.size() - 1) continue; + //1.清离线 + deviceManager.clearOffline(devCode); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/TubeResponse.java b/src/main/java/org/well/well/resp/TubeResponse.java new file mode 100644 index 0000000..216f5d6 --- /dev/null +++ b/src/main/java/org/well/well/resp/TubeResponse.java @@ -0,0 +1,59 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.manager.DeviceConfigManager; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.TubeManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class TubeResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + TubeManager tubeManager = ac.getBean(TubeManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType")) || mType[3].equals(json.get("mType"))) {//存储上报数据 + tubeManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + tubeManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.Tube.name().equals(json.get("devType"))) { + if ("TubeConfigSuccess".equals(jsonObject.get("bType"))) { + deviceConfigManager.updateStatus(devCode); + } + } + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + else if (mType[4].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode,imei,iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/resp/WellPlusResponse.java b/src/main/java/org/well/well/resp/WellPlusResponse.java new file mode 100644 index 0000000..8db685c --- /dev/null +++ b/src/main/java/org/well/well/resp/WellPlusResponse.java @@ -0,0 +1,42 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.ImeiManager; +import org.well.well.manager.WellPlusManager; + +/** + * Created by lenovo on 2018/1/9. + */ +public class WellPlusResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + WellPlusManager wellPlusManager = ac.getBean(WellPlusManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + wellPlusManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + wellPlusManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} diff --git a/src/main/java/org/well/well/util/PushList.java b/src/main/java/org/well/well/util/PushList.java index 74568fe..a6c556f 100644 --- a/src/main/java/org/well/well/util/PushList.java +++ b/src/main/java/org/well/well/util/PushList.java @@ -3,12 +3,12 @@ import java.util.ArrayList; import java.util.List; -import com.gexin.rp.sdk.base.IPushResult; -import com.gexin.rp.sdk.base.impl.ListMessage; -import com.gexin.rp.sdk.base.impl.Target; -import com.gexin.rp.sdk.http.IGtPush; -import com.gexin.rp.sdk.template.NotificationTemplate; -import com.gexin.rp.sdk.template.style.Style0; +//import com.gexin.rp.sdk.base.IPushResult; +//import com.gexin.rp.sdk.base.impl.ListMessage; +//import com.gexin.rp.sdk.base.impl.Target; +//import com.gexin.rp.sdk.http.IGtPush; +//import com.gexin.rp.sdk.template.NotificationTemplate; +//import com.gexin.rp.sdk.template.style.Style0; /** * Created by test203 on 2019/6/11. @@ -18,68 +18,68 @@ public class PushList { //采用"Java SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换; - private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); - private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); - private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); - - //别名推送方式 - // static String Alias1 = ""; - // static String Alias2 = ""; - static String host = "http://sdk.open.api.igexin.com/apiex.htm"; - - public static void pushToUser(List cids, String title, String content){ - // 配置返回每个用户返回用户状态,可选 - System.setProperty("gexin_pushList_needDetails", "true"); - // 配置返回每个别名及其对应cid的用户状态,可选 - // System.setProperty("gexin_pushList_needAliasDetails", "true"); - IGtPush push = new IGtPush(host, appKey, masterSecret); - // 通知透传模板 - NotificationTemplate template = notificationTemplateDemo(title,content); - ListMessage message = new ListMessage(); - message.setData(template); - // 设置消息离线,并设置离线时间 - message.setOffline(true); - // 离线有效时间,单位为毫秒,可选 - message.setOfflineExpireTime(24 * 1000 * 3600); - // 配置推送目标 - List targets = new ArrayList(); - for (String cid : cids) { - Target target = new Target(); - target.setAppId(appId); - target.setClientId(cid); - targets.add(target); - } - - // taskId用于在推送时去查找对应的message - String taskId = push.getContentId(message); - IPushResult ret = push.pushMessageToList(taskId, targets); - System.out.println(ret.getResponse().toString()); - } - - public static NotificationTemplate notificationTemplateDemo(String title,String content) { - NotificationTemplate template = new NotificationTemplate(); - // 设置APPID与APPKEY - template.setAppId(appId); - template.setAppkey(appKey); - - Style0 style = new Style0(); - // 设置通知栏标题与内容 - style.setTitle(title); - style.setText(content); - // 配置通知栏图标 - style.setLogo("icon.png"); - // 配置通知栏网络图标 - style.setLogoUrl(""); - // 设置通知是否响铃,震动,或者可清除 - style.setRing(true); - style.setVibrate(true); - style.setClearable(true); - template.setStyle(style); - - // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 - template.setTransmissionType(2); - template.setTransmissionContent("请输入您要透传的内容"); - return template; - } +// private static String appId = Configure.getProperty("gt.appId","qQqFtTBrUa7SGLjntUlpT4"); +// private static String appKey = Configure.getProperty("gt.appKey","GNjHLiqJkD6OoeZbtbdfi5"); +// private static String masterSecret = Configure.getProperty("gt.masterSecret","TZRYQknkxLAJ58uH56PeS6"); +// +// //别名推送方式 +// // static String Alias1 = ""; +// // static String Alias2 = ""; +// static String host = "http://sdk.open.api.igexin.com/apiex.htm"; +// +// public static void pushToUser(List cids, String title, String content){ +// // 配置返回每个用户返回用户状态,可选 +// System.setProperty("gexin_pushList_needDetails", "true"); +// // 配置返回每个别名及其对应cid的用户状态,可选 +// // System.setProperty("gexin_pushList_needAliasDetails", "true"); +// IGtPush push = new IGtPush(host, appKey, masterSecret); +// // 通知透传模板 +// NotificationTemplate template = notificationTemplateDemo(title,content); +// ListMessage message = new ListMessage(); +// message.setData(template); +// // 设置消息离线,并设置离线时间 +// message.setOffline(true); +// // 离线有效时间,单位为毫秒,可选 +// message.setOfflineExpireTime(24 * 1000 * 3600); +// // 配置推送目标 +// List targets = new ArrayList(); +// for (String cid : cids) { +// Target target = new Target(); +// target.setAppId(appId); +// target.setClientId(cid); +// targets.add(target); +// } +// +// // taskId用于在推送时去查找对应的message +// String taskId = push.getContentId(message); +// IPushResult ret = push.pushMessageToList(taskId, targets); +// System.out.println(ret.getResponse().toString()); +// } +// +// public static NotificationTemplate notificationTemplateDemo(String title,String content) { +// NotificationTemplate template = new NotificationTemplate(); +// // 设置APPID与APPKEY +// template.setAppId(appId); +// template.setAppkey(appKey); +// +// Style0 style = new Style0(); +// // 设置通知栏标题与内容 +// style.setTitle(title); +// style.setText(content); +// // 配置通知栏图标 +// style.setLogo("icon.png"); +// // 配置通知栏网络图标 +// style.setLogoUrl(""); +// // 设置通知是否响铃,震动,或者可清除 +// style.setRing(true); +// style.setVibrate(true); +// style.setClearable(true); +// template.setStyle(style); +// +// // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动 +// template.setTransmissionType(2); +// template.setTransmissionContent("请输入您要透传的内容"); +// return template; +// } } diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index ddb6e49..6dcfba9 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -17,17 +17,19 @@ private static Map abstractResponseHashMap = new HashMap(); static { - abstractResponseHashMap.put(DeviceTypeEnum.Liquid.name(), new LiquidResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Liquid.name(), new LiquidResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Well.name(), new WellResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Concentrator.name(), new ConcentratorResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Methane.name(), new MethaneResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Concentrator.name(), new ConcentratorResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Methane.name(), new MethaneResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.WasteGas.name(), new WasteGasResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.TempHumi.name(), new TempHumiResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Dig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.Noise.name(), new NoiseDigResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.NoiseDig.name(), new NoiseDigResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Noise.name(), new NoiseDigResponse()); // abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); - abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.Tube.name(), new TubeResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.WellPlus.name(), new WellPlusResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index 2f92034..c766804 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -20,7 +20,7 @@ #db.default.username=sensor #db.default.password=sensor db.default.driverClassName=com.mysql.jdbc.Driver -db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell_br_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false +db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root db.default.password=Casic203! ### ============================================================================ @@ -170,7 +170,7 @@ #bootstrap.servers = localhost:9092 bootstrap.servers = 111.198.10.15:12502 -kafka.topic = sensor +kafka.topic = gas bootstrap.groupid = 0 # ============================================================================ diff --git a/target/classes/wellSensor/application.properties b/target/classes/wellSensor/application.properties index 2f92034..c766804 100644 --- a/target/classes/wellSensor/application.properties +++ b/target/classes/wellSensor/application.properties @@ -20,7 +20,7 @@ #db.default.username=sensor #db.default.password=sensor db.default.driverClassName=com.mysql.jdbc.Driver -db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell_br_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false +db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root db.default.password=Casic203! ### ============================================================================ @@ -170,7 +170,7 @@ #bootstrap.servers = localhost:9092 bootstrap.servers = 111.198.10.15:12502 -kafka.topic = sensor +kafka.topic = gas bootstrap.groupid = 0 # ============================================================================