diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + 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 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 836bb9c..ce8a20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -64,7 +64,7 @@ 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)); + gas = String.format("%.2f", Double.valueOf(gas)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 @@ -75,14 +75,11 @@ if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString());//获取报警阈值 if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = MethaneAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; -// alarmContent = Float.valueOf(gas) > Float.valueOf(thresh.split(",")[0]) ? -// MethaneAlarmEnum.OVER_THRESH1.getName() : -// (Float.valueOf(gas) > Float.valueOf(thresh.split(",")[1]) ? -// MethaneAlarmEnum.OVER_THRESH2.getName() : alarmContent); alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? 2 : alarmLevel); @@ -90,20 +87,25 @@ //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"1"); + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, alarmContent, gas, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 @@ -134,12 +136,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); - if (null == alarmJob) { + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 836bb9c..ce8a20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -64,7 +64,7 @@ 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)); + gas = String.format("%.2f", Double.valueOf(gas)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 @@ -75,14 +75,11 @@ if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString());//获取报警阈值 if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = MethaneAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; -// alarmContent = Float.valueOf(gas) > Float.valueOf(thresh.split(",")[0]) ? -// MethaneAlarmEnum.OVER_THRESH1.getName() : -// (Float.valueOf(gas) > Float.valueOf(thresh.split(",")[1]) ? -// MethaneAlarmEnum.OVER_THRESH2.getName() : alarmContent); alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? 2 : alarmLevel); @@ -90,20 +87,25 @@ //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"1"); + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, alarmContent, gas, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 @@ -134,12 +136,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); - if (null == alarmJob) { + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 8eafa1c..38c1f6a 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -87,7 +87,7 @@ rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); - + Device device = deviceManager.getDeviceByDevCode(devCode); //获取报警等级 String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; @@ -97,7 +97,7 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(val) >= ( new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue())/100) { + if (Float.valueOf(val) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue()) / 100) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; @@ -114,22 +114,23 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.NoiseDig.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 AlarmJob alarmJob = null; - if ("1".equals(isJob)) { + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { //1.生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); @@ -140,11 +141,8 @@ alarmContent, val, device, devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); +// ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -177,7 +175,7 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 836bb9c..ce8a20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -64,7 +64,7 @@ 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)); + gas = String.format("%.2f", Double.valueOf(gas)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 @@ -75,14 +75,11 @@ if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString());//获取报警阈值 if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = MethaneAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; -// alarmContent = Float.valueOf(gas) > Float.valueOf(thresh.split(",")[0]) ? -// MethaneAlarmEnum.OVER_THRESH1.getName() : -// (Float.valueOf(gas) > Float.valueOf(thresh.split(",")[1]) ? -// MethaneAlarmEnum.OVER_THRESH2.getName() : alarmContent); alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? 2 : alarmLevel); @@ -90,20 +87,25 @@ //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"1"); + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, alarmContent, gas, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 @@ -134,12 +136,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); - if (null == alarmJob) { + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 8eafa1c..38c1f6a 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -87,7 +87,7 @@ rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); - + Device device = deviceManager.getDeviceByDevCode(devCode); //获取报警等级 String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; @@ -97,7 +97,7 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(val) >= ( new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue())/100) { + if (Float.valueOf(val) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue()) / 100) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; @@ -114,22 +114,23 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.NoiseDig.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 AlarmJob alarmJob = null; - if ("1".equals(isJob)) { + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { //1.生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); @@ -140,11 +141,8 @@ alarmContent, val, device, devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); +// ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -177,7 +175,7 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } diff --git a/src/main/java/org/well/well/manager/WellManager.java b/src/main/java/org/well/well/manager/WellManager.java index 23b58fb..abdee1f 100644 --- a/src/main/java/org/well/well/manager/WellManager.java +++ b/src/main/java/org/well/well/manager/WellManager.java @@ -100,20 +100,20 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return; //没注册舍弃 //生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), - DeviceTypeEnum.Well.toString(), "1"); + if ("1".equals(device.getJobGenerationType())) { + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), + DeviceTypeEnum.Well.toString(), "1"); - alarmRecordManager.saveData(alarmJob.getId(), "1", null, - WellAlarmEnum.WellOpenAlarm.getName(), - String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, - devCode, alarmJob.getWellCode(), logTime, - WellAlarmEnum.WellOpenAlarm.getName()); - //toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "井盖开盖报警", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), - busWell == null ? "" : busWell.getWellCode()); + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + WellAlarmEnum.WellOpenAlarm.getName(), + String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, + devCode, alarmJob.getWellCode(), logTime, + WellAlarmEnum.WellOpenAlarm.getName()); + //toDo:向app推送报警消息 + +// ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), +// busWell == null ? "" : busWell.getWellCode()); + } } } } @@ -127,7 +127,7 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (null == device) return; AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), DeviceTypeEnum.Well.toString(), "0"); } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 836bb9c..ce8a20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -64,7 +64,7 @@ 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)); + gas = String.format("%.2f", Double.valueOf(gas)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 @@ -75,14 +75,11 @@ if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString());//获取报警阈值 if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = MethaneAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; -// alarmContent = Float.valueOf(gas) > Float.valueOf(thresh.split(",")[0]) ? -// MethaneAlarmEnum.OVER_THRESH1.getName() : -// (Float.valueOf(gas) > Float.valueOf(thresh.split(",")[1]) ? -// MethaneAlarmEnum.OVER_THRESH2.getName() : alarmContent); alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? 2 : alarmLevel); @@ -90,20 +87,25 @@ //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"1"); + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, alarmContent, gas, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 @@ -134,12 +136,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); - if (null == alarmJob) { + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 8eafa1c..38c1f6a 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -87,7 +87,7 @@ rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); - + Device device = deviceManager.getDeviceByDevCode(devCode); //获取报警等级 String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; @@ -97,7 +97,7 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(val) >= ( new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue())/100) { + if (Float.valueOf(val) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue()) / 100) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; @@ -114,22 +114,23 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.NoiseDig.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 AlarmJob alarmJob = null; - if ("1".equals(isJob)) { + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { //1.生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); @@ -140,11 +141,8 @@ alarmContent, val, device, devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); +// ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -177,7 +175,7 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } diff --git a/src/main/java/org/well/well/manager/WellManager.java b/src/main/java/org/well/well/manager/WellManager.java index 23b58fb..abdee1f 100644 --- a/src/main/java/org/well/well/manager/WellManager.java +++ b/src/main/java/org/well/well/manager/WellManager.java @@ -100,20 +100,20 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return; //没注册舍弃 //生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), - DeviceTypeEnum.Well.toString(), "1"); + if ("1".equals(device.getJobGenerationType())) { + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), + DeviceTypeEnum.Well.toString(), "1"); - alarmRecordManager.saveData(alarmJob.getId(), "1", null, - WellAlarmEnum.WellOpenAlarm.getName(), - String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, - devCode, alarmJob.getWellCode(), logTime, - WellAlarmEnum.WellOpenAlarm.getName()); - //toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "井盖开盖报警", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), - busWell == null ? "" : busWell.getWellCode()); + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + WellAlarmEnum.WellOpenAlarm.getName(), + String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, + devCode, alarmJob.getWellCode(), logTime, + WellAlarmEnum.WellOpenAlarm.getName()); + //toDo:向app推送报警消息 + +// ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), +// busWell == null ? "" : busWell.getWellCode()); + } } } } @@ -127,7 +127,7 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (null == device) return; AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), DeviceTypeEnum.Well.toString(), "0"); } diff --git a/src/main/java/org/well/well/resp/LGResponse.java b/src/main/java/org/well/well/resp/LGResponse.java new file mode 100644 index 0000000..93f3c23 --- /dev/null +++ b/src/main/java/org/well/well/resp/LGResponse.java @@ -0,0 +1,60 @@ +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.domain.LGLiquid; +import org.well.well.manager.*; + +/** + * Created by lenovo on 2018/1/9. + */ +public class LGResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void process(String content) { + ClassPathXmlApplicationContext ac = this.getAc(); + LGLiquidManager lgLiquidManager = ac.getBean(LGLiquidManager.class); + LGGasManager lgGasManager = ac.getBean(LGGasManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(content); + 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"))) {//存储上报数据 + lgGasManager.processNormalData(jsonObject,devCode); + lgLiquidManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + lgGasManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.LG.name().equals(json.get("devType"))) { + if ("LGConfigSuccess".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 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 836bb9c..ce8a20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -64,7 +64,7 @@ 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)); + gas = String.format("%.2f", Double.valueOf(gas)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 @@ -75,14 +75,11 @@ if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString());//获取报警阈值 if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = MethaneAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; -// alarmContent = Float.valueOf(gas) > Float.valueOf(thresh.split(",")[0]) ? -// MethaneAlarmEnum.OVER_THRESH1.getName() : -// (Float.valueOf(gas) > Float.valueOf(thresh.split(",")[1]) ? -// MethaneAlarmEnum.OVER_THRESH2.getName() : alarmContent); alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? 2 : alarmLevel); @@ -90,20 +87,25 @@ //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"1"); + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, alarmContent, gas, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 @@ -134,12 +136,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); - if (null == alarmJob) { + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 8eafa1c..38c1f6a 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -87,7 +87,7 @@ rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); - + Device device = deviceManager.getDeviceByDevCode(devCode); //获取报警等级 String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; @@ -97,7 +97,7 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(val) >= ( new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue())/100) { + if (Float.valueOf(val) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue()) / 100) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; @@ -114,22 +114,23 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.NoiseDig.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 AlarmJob alarmJob = null; - if ("1".equals(isJob)) { + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { //1.生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); @@ -140,11 +141,8 @@ alarmContent, val, device, devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); +// ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -177,7 +175,7 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } diff --git a/src/main/java/org/well/well/manager/WellManager.java b/src/main/java/org/well/well/manager/WellManager.java index 23b58fb..abdee1f 100644 --- a/src/main/java/org/well/well/manager/WellManager.java +++ b/src/main/java/org/well/well/manager/WellManager.java @@ -100,20 +100,20 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return; //没注册舍弃 //生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), - DeviceTypeEnum.Well.toString(), "1"); + if ("1".equals(device.getJobGenerationType())) { + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), + DeviceTypeEnum.Well.toString(), "1"); - alarmRecordManager.saveData(alarmJob.getId(), "1", null, - WellAlarmEnum.WellOpenAlarm.getName(), - String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, - devCode, alarmJob.getWellCode(), logTime, - WellAlarmEnum.WellOpenAlarm.getName()); - //toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "井盖开盖报警", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), - busWell == null ? "" : busWell.getWellCode()); + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + WellAlarmEnum.WellOpenAlarm.getName(), + String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, + devCode, alarmJob.getWellCode(), logTime, + WellAlarmEnum.WellOpenAlarm.getName()); + //toDo:向app推送报警消息 + +// ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), +// busWell == null ? "" : busWell.getWellCode()); + } } } } @@ -127,7 +127,7 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (null == device) return; AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), DeviceTypeEnum.Well.toString(), "0"); } diff --git a/src/main/java/org/well/well/resp/LGResponse.java b/src/main/java/org/well/well/resp/LGResponse.java new file mode 100644 index 0000000..93f3c23 --- /dev/null +++ b/src/main/java/org/well/well/resp/LGResponse.java @@ -0,0 +1,60 @@ +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.domain.LGLiquid; +import org.well.well.manager.*; + +/** + * Created by lenovo on 2018/1/9. + */ +public class LGResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void process(String content) { + ClassPathXmlApplicationContext ac = this.getAc(); + LGLiquidManager lgLiquidManager = ac.getBean(LGLiquidManager.class); + LGGasManager lgGasManager = ac.getBean(LGGasManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(content); + 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"))) {//存储上报数据 + lgGasManager.processNormalData(jsonObject,devCode); + lgLiquidManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + lgGasManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.LG.name().equals(json.get("devType"))) { + if ("LGConfigSuccess".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/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index 7f7626d..a1aaa68 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -22,11 +22,12 @@ abstractResponseHashMap.put(DeviceTypeEnum.Well.name(), new WellResponse()); 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.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.Locator.name(), new LocatorResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); } diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index 2762017..79eac89 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -143,9 +143,12 @@ // temp="{\"mType\":\"Data\",\"devType\":\"Liquid\",\"devCode\":\"12121212125\",\"mBody\":{\"bType\":\"LiquidData\",\"cell\":97,\"datas\":[{\"level\":4,\"uptime\":\"20191219150000\"},{\"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\":\"13131313131\",\"mBody\":{\"eventType\":[\"WellOpenAlarm\"],\"logTime\":\"20191017154056\",\"bType\":\"WellEvent\"},\"ts\":1571298056241}"; - temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020011111\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200407085400\"},{\"gas\":0.080566406,\"uptime\":\"20200407085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200407085400\"},{\"gas\":0.070898436,\"uptime\":\"20200407085400\"},{\"gas\":60,\"uptime\":\"20200408085400\"}],\"logTime\":\"20200407085400\",\"bType\":\"MethaneData\"},\"ts\":1571292084960}"; +// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312019020253\",\"mBody\":{\"cell\":95,\"datas\":[{\"gas\":0.064453125,\"uptime\":\"20200509085400\"},{\"gas\":0.080566406,\"uptime\":\"20200509085400\"},{\"gas\":25,\"uptime\":\"20200407085400\"},{\"gas\":0.09990235,\"uptime\":\"20200509085400\"},{\"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}"; + +// temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322000010001\",\"mBody\":{\"cell\":100,\"datas\":[{\"gas\":0.0,\"uptime\":\"20190825232100\"},{\"liquid\":0.0,\"uptime\":\"20190825232600\"},{\"liquid\":0.0,\"uptime\":\"20190825233100\"},{\"liquid\":0.0,\"uptime\":\"20190825233600\"},{\"liquid\":0.0,\"uptime\":\"20190825234100\"},{\"liquid\":0.0,\"uptime\":\"20190825234600\"},{\"liquid\":0.0,\"uptime\":\"20190825235100\"},{\"liquid\":0.0,\"uptime\":\"20190825235600\"},{\"liquid\":0.0,\"uptime\":\"20190826000100\"},{\"liquid\":0.0,\"uptime\":\"20190826000600\"},{\"liquid\":0.0,\"uptime\":\"20190826001100\"},{\"liquid\":0.0,\"uptime\":\"20190826001600\"},{\"liquid\":0.0,\"uptime\":\"20190826002100\"},{\"liquid\":0.0,\"uptime\":\"20190826002600\"},{\"liquid\":0.0,\"uptime\":\"20190826003100\"}],\"logTime\":\"20190826003335\",\"bType\":\"LGData\"},\"ts\":1566750815981}"; + AbstractResponse resp = ResponseResolver.makeResponse(temp); resp.setAc(ac); resp.process(temp); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java new file mode 100644 index 0000000..1c98403 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/GasLiquidAlarmEnum.java @@ -0,0 +1,55 @@ +package org.well.well.AlarmEnumDTO; + +/** + * Created by admin on 2017/4/6. + */ +public enum GasLiquidAlarmEnum { + + NO_DATA("设备异常", -1), + NORMAL("正常", 0), + GAS_OVER_THRESH("浓度超限", 1), + LIQUID_OVER_THRESH("液位超限", 2), + GasError("甲烷传感器异常", 3), + GasCommunicationFailure("甲烷传感器通信失败", 4), + LiquidError("浸水传感器异常", 5), + LiquidCommunicationFailure("浸水传感器通信失败", 6), + LGUnknown("未知异常", 7); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private GasLiquidAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static GasLiquidAlarmEnum getByIndex(String index) { + try { + for (GasLiquidAlarmEnum 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/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 80e6dea..627c9ec 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -23,7 +23,8 @@ Locator("井盖定位监测仪", 18), Meter("水质监测仪", 19), FLOWGAUGE("流量计", 20), - RAINGAUGE("雨量计", 21); + RAINGAUGE("雨量计", 21), + LG("燃气液位监测仪", 22); // 成员变量 diff --git a/src/main/java/org/well/well/domain/Device.java b/src/main/java/org/well/well/domain/Device.java index c14e6de..d86b6da 100644 --- a/src/main/java/org/well/well/domain/Device.java +++ b/src/main/java/org/well/well/domain/Device.java @@ -65,6 +65,11 @@ private Integer version; + @Column(name ="JOB_GENERATION_TYPE") + private String jobGenerationType; + + + public Long getId() { return id; } @@ -136,4 +141,12 @@ public void setVersion(Integer version) { this.version = version; } + + public String getJobGenerationType() { + return jobGenerationType; + } + + public void setJobGenerationType(String jobGenerationType) { + this.jobGenerationType = jobGenerationType; + } } diff --git a/src/main/java/org/well/well/domain/LGGas.java b/src/main/java/org/well/well/domain/LGGas.java new file mode 100644 index 0000000..b3e0f16 --- /dev/null +++ b/src/main/java/org/well/well/domain/LGGas.java @@ -0,0 +1,106 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_gasliquid_gas") +public class LGGas 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; //记录时间 + + + @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; + } + + public LGGas(String devCode, String wellCode, String strength, String cell, Timestamp uptime, Timestamp logtime) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + } +} diff --git a/src/main/java/org/well/well/domain/LGLiquid.java b/src/main/java/org/well/well/domain/LGLiquid.java new file mode 100644 index 0000000..4e714ed --- /dev/null +++ b/src/main/java/org/well/well/domain/LGLiquid.java @@ -0,0 +1,79 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.Date; + +@Entity +@Table(name = "data_gasliquid_liquid") +public class LGLiquid implements Serializable { + /** + * + */ + private static final long serialVersionUID = -6250930880206117358L; + private Long dbId; + private String devId; + private String wellCode; + private String liquidData; + private String cell; + private Date uptime; + 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 getDevId() { + return devId; + } + public void setDevId(String devId) { + this.devId = devId; + } + + @Column(name = "LIQUIDDATA") + public String getLiquidData() { + return liquidData; + } + public void setLiquidData(String liquidData) { + this.liquidData = liquidData; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Date getUptime() { + return uptime; + } + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + @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; + } +} diff --git a/src/main/java/org/well/well/manager/LGGasManager.java b/src/main/java/org/well/well/manager/LGGasManager.java new file mode 100644 index 0000000..de6f374 --- /dev/null +++ b/src/main/java/org/well/well/manager/LGGasManager.java @@ -0,0 +1,171 @@ +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.GasLiquidAlarmEnum; +import org.well.well.AlarmEnumDTO.MethaneAlarmEnum; +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.*; + +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@Service +public class LGGasManager extends HibernateEntityDao { + + + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + @Resource + private UserManager userManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String address, String wellCode, + String strength, String cell, String uptime) { + + Map resultMap = new HashMap(); + try { + LGGas methane = new LGGas(address, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime())); + save(methane); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("gas")) { + continue; + } + 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.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), gas, cell, upTime); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString()); + if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.GAS_OVER_THRESH.getName(); + Integer alarmLevel = 0; + alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? + 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? + 2 : alarmLevel); + //已存在报警 + if (null != alarmRecord) { + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,工单号为上一条告警记录的工单号 + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) { + return; + } + //判断是否生成工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + //1.生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, gas, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); + //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent, busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(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(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + //没注册设备舍弃 + if (null == device) { + return; + } + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "0"); + } + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(GasLiquidAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + GasLiquidAlarmEnum.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/LGLiquidManager.java b/src/main/java/org/well/well/manager/LGLiquidManager.java new file mode 100644 index 0000000..603c0cb --- /dev/null +++ b/src/main/java/org/well/well/manager/LGLiquidManager.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.GasLiquidAlarmEnum; +import org.well.well.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.core.util.StringUtils; +import org.well.well.domain.*; +import org.well.well.dto.LiquidDTO; + +import javax.annotation.Resource; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +/** + * Created by test203 on 2017/11/30. + */ +@Service +public class LGLiquidManager 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(LiquidDTO liquidDTO) throws IOException { + + Map resultMap = new HashMap(); + try { + LGLiquid liquid = new LGLiquid(); + liquid.setDevId(liquidDTO.getDevCode()); + liquid.setCell(liquidDTO.getCell()); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setLogtime(new Date()); + liquid.setUptime(DateUtils.sdf4.parse(DateUtils.DateFormat(liquidDTO.getUptime()))); + liquid.setLiquidData(liquidDTO.getLiquidData()); + liquid.setWellCode(liquidDTO.getWellCode()); + save(liquid); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + if (null == ((JSONObject) jsonArray.get(i)).get("liquid")) { + continue; + } + String level = ((JSONObject) jsonArray.get(i)).get("liquid").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + Float wellDeep=busWell!=null?busWell.getDeep():0; + Float liquidHeight=StringUtils.isNotBlank(level)?Float.valueOf(level)/100:0; + level = String.format("%.2f",wellDeep+liquidHeight); + + //1.清离线 + deviceManager.clearOffline(devCode); + //2.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, "2"); + //3.存数据 + LiquidDTO liquidDTO = new LiquidDTO(level, cell, + upTime, devCode, busWell == null ? "" : busWell.getWellCode()); + //存采集数据 + this.saveData(liquidDTO); + //4.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + //获取报警阈值 + String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Liquid.toString()); + List ruleRankList = new ArrayList(); + float rankThresh = 0; + //是否开启报警(1为开启) + String isAlarm = "1"; + //是否开启工单(1为开启) + String isJob = "1"; + if (busWell != null) ruleRankList = alarmRuleManager.getRuleRank(devCode, busWell.getDeptid()); + if (ruleRankList.size() > 0 && StringUtils.isNotBlank(thresh)) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = (Float.valueOf(rankValue.toString())) / 100 * Float.valueOf(thresh); + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); + } + rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; + //超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) { + Device device = deviceManager.getDeviceByDevCode(devCode); + AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); + //获取报警等级 + String alarmContent = GasLiquidAlarmEnum.LIQUID_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(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + + if (null != alarmRecord) {//已存在报警 + //1.清除上一条告警记录 + alarmRecordManager.clearAlarm(devCode, "1", ""); + //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 + Long jobID = alarmRecord.getJobId(); + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { + //生成新的工单 + AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), + DeviceTypeEnum.LG.toString(), "1"); + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } + //不需要产生工单时 + else if ("0".equals(isJob)) { + jobID = null; + } + alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, + level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); + } else {//不存在上一条报警时 + //未注册设备舍弃 + if (device == null) {return;} + AlarmJob alarmJob = null; + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { + //1.若开启告警,生成新的工单 + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.LG.toString(), "1"); + } + //2.写入新的告警 + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, + alarmContent, level, device, + devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + } + } else {//未超限 + //1.清除之前的报警 + alarmRecordManager.clearAlarmByNormalData(devCode, "1"); + //2.结束之前的工单 + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + +} diff --git a/src/main/java/org/well/well/manager/LiquidManager.java b/src/main/java/org/well/well/manager/LiquidManager.java index 67837f4..d262559 100644 --- a/src/main/java/org/well/well/manager/LiquidManager.java +++ b/src/main/java/org/well/well/manager/LiquidManager.java @@ -94,7 +94,9 @@ isJob = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[5].toString(); } rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Float.valueOf(thresh) : 0) : rankThresh; - if ("1".equals(isAlarm)&&rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + if ("1".equals(isAlarm) && rankThresh != 0 && Float.valueOf(level) >= rankThresh) {//超限 + + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = LiquidAlarmEnum.OVER_THRESH.getName(); @@ -104,7 +106,7 @@ for (int j = 0; j < ruleRankList.size(); j++) { Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue()/100) { + if (Float.valueOf(level) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh))).floatValue() / 100) { alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); break; } @@ -117,35 +119,33 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID + && device != null && "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.Liquid.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); +// ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, level, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return;//未注册设备舍弃 - AlarmJob alarmJob =null; - if("1".equals(isJob)){ + AlarmJob alarmJob = null; + if ("1".equals(isJob)&&"1".equals(device.getJobGenerationType())) { //1.若开启告警,生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.Liquid.toString(), "1"); } //2.写入新的告警 - alarmRecordManager.saveData(alarmJob!=null?alarmJob.getId():null, "1", alarmLevel, + alarmRecordManager.saveData(alarmJob != null ? alarmJob.getId() : null, "1", alarmLevel, alarmContent, level, device, devCode, busWell == null ? "" : busWell.getWellCode(), upTime, alarmContent); // //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob!=null?alarmJob.getId():null, alarmContent,busWell == null ? "" : busWell.getWellCode()); + +// ThreadUtil.excuteMsg(alarmJob != null ? alarmJob.getId() : null, alarmContent, busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 diff --git a/src/main/java/org/well/well/manager/MethaneManager.java b/src/main/java/org/well/well/manager/MethaneManager.java index 836bb9c..ce8a20a 100644 --- a/src/main/java/org/well/well/manager/MethaneManager.java +++ b/src/main/java/org/well/well/manager/MethaneManager.java @@ -64,7 +64,7 @@ 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)); + gas = String.format("%.2f", Double.valueOf(gas)); //1.清离线 deviceManager.clearOffline(devCode); //2.清除设备告警 @@ -75,14 +75,11 @@ if (i < jsonArray.size() - 1) continue; String thresh = alarmRuleManager.getRuleStr(devCode, DeviceTypeEnum.Methane.toString());//获取报警阈值 if (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1])) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); //获取报警等级 String alarmContent = MethaneAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; -// alarmContent = Float.valueOf(gas) > Float.valueOf(thresh.split(",")[0]) ? -// MethaneAlarmEnum.OVER_THRESH1.getName() : -// (Float.valueOf(gas) > Float.valueOf(thresh.split(",")[1]) ? -// MethaneAlarmEnum.OVER_THRESH2.getName() : alarmContent); alarmLevel = Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[0]) ? 1 : (Float.valueOf(gas) >= Float.valueOf(thresh.split(",")[1]) ? 2 : alarmLevel); @@ -90,20 +87,25 @@ //1.清除上一条告警记录 alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,工单号为上一条告警记录的工单号 - alarmRecordManager.saveData(alarmRecord.getJobId(), "1",alarmLevel, alarmContent, - gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime,alarmContent); + Long jobId = (device != null && "1".equals(device.getJobGenerationType())) ? alarmRecord.getJobId() : null; + alarmRecordManager.saveData(jobId, "1", alarmLevel, alarmContent, + gas, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 //1.生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"1"); + AlarmJob alarmJob = new AlarmJob(); + if ("1".equals(device.getJobGenerationType())) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "1"); + } + //2.写入新的告警 - alarmRecordManager.saveData(alarmJob.getId(), "1",alarmLevel, + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, alarmContent, gas, device, - devCode, alarmJob.getWellCode(), upTime,alarmContent); + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 - ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent,busWell == null ? "" : busWell.getWellCode()); } } else {//未超限 //1.清除之前的报警 @@ -134,12 +136,12 @@ if (null == device) return;//没注册设备舍弃 BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 - AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode,"0"); - if (null == alarmJob) { + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? - busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(),"0"); + busWell.getWellCode() : "", DeviceTypeEnum.Methane.toString(), "0"); } - alarmRecordManager.saveData(alarmJob.getId(), "2",null, + alarmRecordManager.saveData(alarmJob.getId(), "2", null, MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), String.valueOf(MethaneAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, diff --git a/src/main/java/org/well/well/manager/NoiseDigManager.java b/src/main/java/org/well/well/manager/NoiseDigManager.java index 8eafa1c..38c1f6a 100644 --- a/src/main/java/org/well/well/manager/NoiseDigManager.java +++ b/src/main/java/org/well/well/manager/NoiseDigManager.java @@ -87,7 +87,7 @@ rankThresh = rankThresh == 0 ? (StringUtils.isNotBlank(thresh) ? Double.valueOf(thresh) : 0) : rankThresh; if ("1".equals(isAlarm) && rankThresh != 0 && Double.valueOf(val) >= rankThresh) {//超限 AlarmRecord alarmRecord = alarmRecordManager.getThresholdAlarm(devCode); - + Device device = deviceManager.getDeviceByDevCode(devCode); //获取报警等级 String alarmContent = NoiseDigAlarmEnum.OVER_THRESH.getName(); Integer alarmLevel = 0; @@ -97,7 +97,7 @@ Object rankValue = ((Object[]) ruleRankList.get(j))[2]; if (null != rankValue) { - if (Float.valueOf(val) >= ( new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue())/100) { + if (Float.valueOf(val) >= (new BigDecimal(rankValue.toString()).multiply(new BigDecimal(thresh)).floatValue()) / 100) { // NoiseDigAlarmEnum noiseDigAlarmEnum=NoiseDigAlarmEnum.getByIndex( // String.valueOf(Long.valueOf(((Object[]) ruleRankList.get(j))[0].toString()) + 4)); // alarmContent = noiseDigAlarmEnum!=null?noiseDigAlarmEnum.getName():alarmContent; @@ -114,22 +114,23 @@ alarmRecordManager.clearAlarm(devCode, "1", ""); //2.写入新的告警记录,更新工单号为上一条告警记录的工单号,若以前没开启工单,现在补提工单 Long jobID = alarmRecord.getJobId(); - if ("1".equals(isJob) && null == jobID) { + if ("1".equals(isJob) && null == jobID && null != device && + "1".equals(device.getJobGenerationType())) { //生成新的工单 AlarmJob alarmJob = alarmJobManager.saveData(devCode, alarmRecord.getWellCode(), DeviceTypeEnum.NoiseDig.toString(), "1"); - jobID=alarmJob.getId(); - ThreadUtil.excuteMsg(jobID, "",busWell == null ? "" : busWell.getWellCode()); - }else if("0".equals(isJob)){//不需要产生工单时 - jobID=null; + jobID = alarmJob.getId(); + ThreadUtil.excuteMsg(jobID, "", busWell == null ? "" : busWell.getWellCode()); + } else if ("0".equals(isJob)) {//不需要产生工单时 + jobID = null; } alarmRecordManager.saveData(jobID, "1", alarmLevel, alarmContent, val, alarmRecord.getDevice(), devCode, alarmRecord.getWellCode(), upTime, alarmContent); } else {//不存在上一条报警时 - Device device = deviceManager.getDeviceByDevCode(devCode); + if (device == null) return;//未注册设备舍弃 AlarmJob alarmJob = null; - if ("1".equals(isJob)) { + if ("1".equals(isJob) && "1".equals(device.getJobGenerationType())) { //1.生成新的工单 alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "1"); @@ -140,11 +141,8 @@ alarmContent, val, device, devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); //3.toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "液位超限", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); +// ThreadUtil.excuteMsg(alarmJob == null ? null : alarmJob.getId(), alarmContent,busWell != null ? busWell.getWellCode() : ""); } } else {//未超限 @@ -177,7 +175,7 @@ BusWell busWell = busWellManager.getWellByDevCode(devCode); //4.若无工单写入新的工单 AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell != null ? busWell.getWellCode() : "", DeviceTypeEnum.NoiseDig.toString(), "0"); } diff --git a/src/main/java/org/well/well/manager/WellManager.java b/src/main/java/org/well/well/manager/WellManager.java index 23b58fb..abdee1f 100644 --- a/src/main/java/org/well/well/manager/WellManager.java +++ b/src/main/java/org/well/well/manager/WellManager.java @@ -100,20 +100,20 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (device == null) return; //没注册舍弃 //生成新的工单 - AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), - DeviceTypeEnum.Well.toString(), "1"); + if ("1".equals(device.getJobGenerationType())) { + AlarmJob alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), + DeviceTypeEnum.Well.toString(), "1"); - alarmRecordManager.saveData(alarmJob.getId(), "1", null, - WellAlarmEnum.WellOpenAlarm.getName(), - String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, - devCode, alarmJob.getWellCode(), logTime, - WellAlarmEnum.WellOpenAlarm.getName()); - //toDo:向app推送报警消息 -// List cids = userManager.getClients(busWell); -// if (cids.size() > 0) -// PushList.pushToUser(cids, "井盖开盖报警", "报警啦,快来处理"); - ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), - busWell == null ? "" : busWell.getWellCode()); + alarmRecordManager.saveData(alarmJob.getId(), "1", null, + WellAlarmEnum.WellOpenAlarm.getName(), + String.valueOf(WellAlarmEnum.WellOpenAlarm.getIndex()), device, + devCode, alarmJob.getWellCode(), logTime, + WellAlarmEnum.WellOpenAlarm.getName()); + //toDo:向app推送报警消息 + +// ThreadUtil.excuteMsg(alarmJob.getId(),WellAlarmEnum.WellOpenAlarm.getName(), +// busWell == null ? "" : busWell.getWellCode()); + } } } } @@ -127,7 +127,7 @@ Device device = deviceManager.getDeviceByDevCode(devCode); if (null == device) return; AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); - if (null == alarmJob) { + if (null == alarmJob && "1".equals(device.getJobGenerationType())) { alarmJob = alarmJobManager.saveData(devCode, busWell.getWellCode(), DeviceTypeEnum.Well.toString(), "0"); } diff --git a/src/main/java/org/well/well/resp/LGResponse.java b/src/main/java/org/well/well/resp/LGResponse.java new file mode 100644 index 0000000..93f3c23 --- /dev/null +++ b/src/main/java/org/well/well/resp/LGResponse.java @@ -0,0 +1,60 @@ +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.domain.LGLiquid; +import org.well.well.manager.*; + +/** + * Created by lenovo on 2018/1/9. + */ +public class LGResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "SetResponse", "GetResponse", "StartupRequest"}; + + + @Override + public void process(String content) { + ClassPathXmlApplicationContext ac = this.getAc(); + LGLiquidManager lgLiquidManager = ac.getBean(LGLiquidManager.class); + LGGasManager lgGasManager = ac.getBean(LGGasManager.class); + DeviceConfigManager deviceConfigManager = ac.getBean(DeviceConfigManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(content); + 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"))) {//存储上报数据 + lgGasManager.processNormalData(jsonObject,devCode); + lgLiquidManager.processNormalData(jsonObject,devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + lgGasManager.processAlarmData(jsonObject,devCode); + } else if (mType[2].equals(json.get("mType"))) {//更新下发参数状态 + try { + if (DeviceTypeEnum.LG.name().equals(json.get("devType"))) { + if ("LGConfigSuccess".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/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index 7f7626d..a1aaa68 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -22,11 +22,12 @@ abstractResponseHashMap.put(DeviceTypeEnum.Well.name(), new WellResponse()); 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.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.Locator.name(), new LocatorResponse()); +// abstractResponseHashMap.put(DeviceTypeEnum.Locator.name(), new LocatorResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index 4be2373..0c87ab4 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://139.198.17.115:3000/smartwell_yizhuang?useUnicode=true&characterEncoding=UTF-8&useSSL=false +db.default.url=jdbc:mysql://139.198.17.115:3000/smartwell_br?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root db.default.password=root ### ============================================================================