diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index c21a55c..0fc2590 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -68,6 +68,17 @@ save(alarmJob); return alarmJob; } + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(produceJobCode(devTypeName)); + alarmJob.setJogType(jobType); + save(alarmJob); + return alarmJob; + } public String produceJobCode(String devTypeName) { String pre = deviceAlarmMap.get(devTypeName); diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index c21a55c..0fc2590 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -68,6 +68,17 @@ save(alarmJob); return alarmJob; } + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(produceJobCode(devTypeName)); + alarmJob.setJogType(jobType); + save(alarmJob); + return alarmJob; + } public String produceJobCode(String devTypeName) { String pre = deviceAlarmMap.get(devTypeName); diff --git a/src/main/java/org/well/well/manager/H2SManager.java b/src/main/java/org/well/well/manager/H2SManager.java new file mode 100644 index 0000000..2bfb5bb --- /dev/null +++ b/src/main/java/org/well/well/manager/H2SManager.java @@ -0,0 +1,165 @@ +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.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.H2s; +import org.well.well.AlarmEnumDTO.H2SAlarmEnum; +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class H2SManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devcode, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + H2s h2s = new H2s(devcode, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(h2s); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String hs = ((JSONObject) jsonArray.get(i)).get("hs").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + hs = String.format("%.2f", Double.valueOf(hs)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), hs, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(hs) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = H2SAlarmEnum.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(hs) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + + if (alarmJob == null) { + alarmJob=alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, hs, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getName()); + + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储报警数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } +} diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index c21a55c..0fc2590 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -68,6 +68,17 @@ save(alarmJob); return alarmJob; } + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(produceJobCode(devTypeName)); + alarmJob.setJogType(jobType); + save(alarmJob); + return alarmJob; + } public String produceJobCode(String devTypeName) { String pre = deviceAlarmMap.get(devTypeName); diff --git a/src/main/java/org/well/well/manager/H2SManager.java b/src/main/java/org/well/well/manager/H2SManager.java new file mode 100644 index 0000000..2bfb5bb --- /dev/null +++ b/src/main/java/org/well/well/manager/H2SManager.java @@ -0,0 +1,165 @@ +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.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.H2s; +import org.well.well.AlarmEnumDTO.H2SAlarmEnum; +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class H2SManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devcode, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + H2s h2s = new H2s(devcode, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(h2s); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String hs = ((JSONObject) jsonArray.get(i)).get("hs").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + hs = String.format("%.2f", Double.valueOf(hs)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), hs, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(hs) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = H2SAlarmEnum.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(hs) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + + if (alarmJob == null) { + alarmJob=alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, hs, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + H2SAlarmEnum.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/resp/H2SResponse.java b/src/main/java/org/well/well/resp/H2SResponse.java new file mode 100644 index 0000000..79804b7 --- /dev/null +++ b/src/main/java/org/well/well/resp/H2SResponse.java @@ -0,0 +1,40 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.H2SManager; +import org.well.well.manager.ImeiManager; + +public class H2SResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + H2SManager h2SManager = ac.getBean(H2SManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + h2SManager.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + h2SManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index c21a55c..0fc2590 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -68,6 +68,17 @@ save(alarmJob); return alarmJob; } + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(produceJobCode(devTypeName)); + alarmJob.setJogType(jobType); + save(alarmJob); + return alarmJob; + } public String produceJobCode(String devTypeName) { String pre = deviceAlarmMap.get(devTypeName); diff --git a/src/main/java/org/well/well/manager/H2SManager.java b/src/main/java/org/well/well/manager/H2SManager.java new file mode 100644 index 0000000..2bfb5bb --- /dev/null +++ b/src/main/java/org/well/well/manager/H2SManager.java @@ -0,0 +1,165 @@ +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.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.H2s; +import org.well.well.AlarmEnumDTO.H2SAlarmEnum; +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class H2SManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devcode, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + H2s h2s = new H2s(devcode, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(h2s); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String hs = ((JSONObject) jsonArray.get(i)).get("hs").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + hs = String.format("%.2f", Double.valueOf(hs)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), hs, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(hs) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = H2SAlarmEnum.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(hs) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + + if (alarmJob == null) { + alarmJob=alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, hs, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + H2SAlarmEnum.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/resp/H2SResponse.java b/src/main/java/org/well/well/resp/H2SResponse.java new file mode 100644 index 0000000..79804b7 --- /dev/null +++ b/src/main/java/org/well/well/resp/H2SResponse.java @@ -0,0 +1,40 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.H2SManager; +import org.well.well.manager.ImeiManager; + +public class H2SResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + H2SManager h2SManager = ac.getBean(H2SManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + h2SManager.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + h2SManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index 6dcfba9..4314736 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -30,6 +30,7 @@ // abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Tube.name(), new TubeResponse()); abstractResponseHashMap.put(DeviceTypeEnum.WellPlus.name(), new WellPlusResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.HydrogenSulfide.name(), new H2SResponse()); } diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index c21a55c..0fc2590 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -68,6 +68,17 @@ save(alarmJob); return alarmJob; } + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(produceJobCode(devTypeName)); + alarmJob.setJogType(jobType); + save(alarmJob); + return alarmJob; + } public String produceJobCode(String devTypeName) { String pre = deviceAlarmMap.get(devTypeName); diff --git a/src/main/java/org/well/well/manager/H2SManager.java b/src/main/java/org/well/well/manager/H2SManager.java new file mode 100644 index 0000000..2bfb5bb --- /dev/null +++ b/src/main/java/org/well/well/manager/H2SManager.java @@ -0,0 +1,165 @@ +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.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.H2s; +import org.well.well.AlarmEnumDTO.H2SAlarmEnum; +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class H2SManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devcode, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + H2s h2s = new H2s(devcode, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(h2s); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String hs = ((JSONObject) jsonArray.get(i)).get("hs").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + hs = String.format("%.2f", Double.valueOf(hs)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), hs, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(hs) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = H2SAlarmEnum.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(hs) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + + if (alarmJob == null) { + alarmJob=alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, hs, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + H2SAlarmEnum.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/resp/H2SResponse.java b/src/main/java/org/well/well/resp/H2SResponse.java new file mode 100644 index 0000000..79804b7 --- /dev/null +++ b/src/main/java/org/well/well/resp/H2SResponse.java @@ -0,0 +1,40 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.H2SManager; +import org.well.well.manager.ImeiManager; + +public class H2SResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + H2SManager h2SManager = ac.getBean(H2SManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + h2SManager.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + h2SManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index 6dcfba9..4314736 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -30,6 +30,7 @@ // abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Tube.name(), new TubeResponse()); abstractResponseHashMap.put(DeviceTypeEnum.WellPlus.name(), new WellPlusResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.HydrogenSulfide.name(), new H2SResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index c766804..5838d5f 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -19,10 +19,11 @@ #db.default.url=jdbc:oracle:thin:@119.254.103.80:1521:chengdu #db.default.username=sensor #db.default.password=sensor -db.default.driverClassName=com.mysql.jdbc.Driver -db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false +#db.default.driverClassName=com.mysql.jdbc.Driver +db.default.driverClassName=com.mysql.cj.jdbc.Driver +db.default.url=jdbc:mysql://111.198.10.15:11336/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root -db.default.password=Casic203! +db.default.password=Casic203 ### ============================================================================ # dbReal # ============================================================================ @@ -171,7 +172,7 @@ bootstrap.servers = 111.198.10.15:12502 kafka.topic = gas -bootstrap.groupid = 0 +bootstrap.groupid = 2 # ============================================================================ # 告警、工单推送地址 diff --git a/pom.xml b/pom.xml index f7c0fa6..d83c03a 100644 --- a/pom.xml +++ b/pom.xml @@ -42,12 +42,19 @@ flume-ng-configuration + + + + + + mysql mysql-connector-java - 5.1.25 + 8.0.27 + org.springframework diff --git a/src/main/java/org/well/mysql/sink/WellSink.java b/src/main/java/org/well/mysql/sink/WellSink.java index f800a2a..3115112 100644 --- a/src/main/java/org/well/mysql/sink/WellSink.java +++ b/src/main/java/org/well/mysql/sink/WellSink.java @@ -144,12 +144,13 @@ // temp="{"mType":"Data","devType":"LG","devCode":"322020080276","mBody":{"cell":96,"datas":[{"gas":0.0,"uptime":"20210610181200"}],"logTime":"20210610180245","bType":"LGData"},"ts":1623319365811}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"321120080150\",\"mBody\":{\"cell\":90,\"datas\":[{\"liquid\":55.8,\"uptime\":\"20210511191000\"},{\"liquid\":55.8,\"uptime\":\"20210511201000\"},{\"liquid\":55.8,\"uptime\":\"20210511211000\"},{\"liquid\":55.8,\"uptime\":\"20210511221000\"},{\"liquid\":55.8,\"uptime\":\"20210511231000\"},{\"liquid\":55.8,\"uptime\":\"20210512001000\"},{\"liquid\":55.8,\"uptime\":\"20210512011000\"},{\"liquid\":55.8,\"uptime\":\"20210512021000\"},{\"liquid\":55.8,\"uptime\":\"20210512031000\"},{\"liquid\":55.8,\"uptime\":\"20210512041000\"},{\"liquid\":55.8,\"uptime\":\"20210512051000\"},{\"liquid\":55.8,\"uptime\":\"20210512061000\"},{\"liquid\":55.8,\"uptime\":\"20210512071000\"},{\"liquid\":55.8,\"uptime\":\"20210512081000\"},{\"liquid\":55.8,\"uptime\":\"20210512091000\"},{\"liquid\":55.8,\"uptime\":\"20210512101000\"},{\"liquid\":55.8,\"uptime\":\"20210512111000\"},{\"liquid\":55.8,\"uptime\":\"20210512121000\"},{\"liquid\":55.8,\"uptime\":\"20210512131000\"},{\"liquid\":55.8,\"uptime\":\"20210512141000\"},{\"liquid\":55.8,\"uptime\":\"20210512151000\"},{\"liquid\":55.8,\"uptime\":\"20210512161000\"},{\"liquid\":55.8,\"uptime\":\"20210512171000\"},{\"liquid\":55.8,\"uptime\":\"20210512181000\"}],\"logTime\":\"20210513092856\",\"bType\":\"LGData\"},\"ts\":1620869336245}"; -// temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"Methane\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"gas\":1.8,\"uptime\":\"20210610160600\"},{\"gas\":1.8,\"uptime\":\"20210610170600\"},{\"gas\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; + temp="{\"mType\":\"Data\",\"devType\":\"HydrogenSulfide\",\"devCode\":\"312020030044\",\"mBody\":{\"cell\":49,\"pci\":272,\"rsrp\":-88,\"snr\":25,\"datas\":[{\"hs\":1.8,\"uptime\":\"20210610160600\"},{\"hs\":1.8,\"uptime\":\"20210610170600\"},{\"hs\":1.8,\"uptime\":\"20210610180600\"}],\"logTime\":\"20210610180304\",\"bType\":\"MethaneData\"},\"ts\":1623319384413}"; // temp="{\"mType\":\"Data\",\"devType\":\"LG\",\"devCode\":\"322020080276\",\"mBody\":{\"cell\":96,\"datas\":[{\"gas\":0.0,\"uptime\":\"20210610181200\"}],\"logTime\":\"20210610180245\",\"bType\":\"LGData\"},\"ts\":1623319365811}"; -// AbstractResponse resp = ResponseResolver.makeResponse(temp); -// resp.setAc(ac); -// resp.process(temp); + AbstractResponse resp = ResponseResolver.makeResponse(temp); + resp.setAc(ac); + resp.process(temp); // DeviceManager deviceManager = ac.getBean(DeviceManager.class); // deviceManager.updateDeviceStatus(); diff --git a/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java new file mode 100644 index 0000000..d5fdb13 --- /dev/null +++ b/src/main/java/org/well/well/AlarmEnumDTO/H2SAlarmEnum.java @@ -0,0 +1,50 @@ +package org.well.well.AlarmEnumDTO; + +public enum H2SAlarmEnum { + + NO_DATA1("设备异常", -1), + NORMAL("状态正常", 0), + OVER_THRESH("浓度超限",1), + H2SAlarmFail("硫化氢探头采集失败",2), + H2SAlarmError("硫化氢数据异常",3), + H2SUnknown("硫化氢未知异常",4), + OVER_THRESH1("一级浓度超限",5), + OVER_THRESH2("二级浓度超限",6); + + // 成员变量 + private String name; + private int index; + + // 构造方法 + private H2SAlarmEnum(String name, int index) { + this.name = name; + this.index = index; + } + + public int getIndex() { + return index; + } + + public static H2SAlarmEnum getByIndex(String index) { + try { + for (H2SAlarmEnum h2SAlarmEnum : values()) { + if (h2SAlarmEnum.index == Integer.parseInt(index)) { + return h2SAlarmEnum; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + //覆盖方法 + @Override + public String toString() { + return this.name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/base/DeviceTypeEnum.java b/src/main/java/org/well/well/base/DeviceTypeEnum.java index 960885f..aa4fa46 100644 --- a/src/main/java/org/well/well/base/DeviceTypeEnum.java +++ b/src/main/java/org/well/well/base/DeviceTypeEnum.java @@ -26,7 +26,8 @@ RAINGAUGE("雨量计", 21), LG("燃气智能监测终端(一体化)", 22), Tube("管盯", 23), - WellPlus("井盖液位一体机", 24); + WellPlus("井盖液位一体机", 24), + HydrogenSulfide("课题硫化氢检测仪", 25); // 成员变量 diff --git a/src/main/java/org/well/well/domain/H2s.java b/src/main/java/org/well/well/domain/H2s.java new file mode 100644 index 0000000..68f5bb3 --- /dev/null +++ b/src/main/java/org/well/well/domain/H2s.java @@ -0,0 +1,143 @@ +package org.well.well.domain; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "data_h2s") +public class H2s { + + /** + * + */ + private static final long serialVersionUID = 566089135526318711L; + private Long dbId; + private String devCode; //设备编号 + private String wellCode; //井编号 + private String strength; //浓度 + private String cell; //电池电量 + private String descn; //状态描述 + private Timestamp uptime; //采集时间 + private Timestamp logtime; //记录时间 + private String pci; + private String rsrp; + private String snr; + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "ID") + public Long getDbId() { + return dbId; + } + + public void setDbId(Long dbId) { + this.dbId = dbId; + } + + @Column(name = "STRENGTH") + public String getStrength() { + return strength; + } + + public void setStrength(String strength) { + this.strength = strength; + } + + @Column(name = "DEVCODE") + public String getDevCode() { + return devCode; + } + + public void setDevCode(String devCode) { + this.devCode = devCode; + } + + @Column(name = "WELL_CODE") + public String getWellCode() { + return wellCode; + } + + public void setWellCode(String wellCode) { + this.wellCode = wellCode; + } + + @Column(name = "DESCN") + public String getDescn() { + return descn; + } + + public void setDescn(String descn) { + this.descn = descn; + } + + @Column(name = "CELL") + public String getCell() { + return cell; + } + + public void setCell(String cell) { + this.cell = cell; + } + + @Column(name = "UPTIME") + public Timestamp getUptime() { + return uptime; + } + + public void setUptime(Timestamp uptime) { + this.uptime = uptime; + } + + @Column(name = "LOGTIME") + public Timestamp getLogtime() { + return logtime; + } + + public void setLogtime(Timestamp logtime) { + this.logtime = logtime; + } + @Column(name = "PCI") + public String getPci() { + return pci; + } + + public void setPci(String pci) { + this.pci = pci; + } + + @Column(name = "RSRP") + public String getRsrp() { + return rsrp; + } + + public void setRsrp(String rsrp) { + this.rsrp = rsrp; + } + + @Column(name = "SNR") + public String getSnr() { + return snr; + } + + public void setSnr(String snr) { + this.snr = snr; + } + + public H2s() { + } + + public H2s(String devCode, String wellCode, String strength, String cell, + Timestamp uptime, Timestamp logtime, + String pci, String rsrp, String snr) { + this.devCode = devCode; + this.wellCode=wellCode; + this.strength = strength; + this.cell = cell; + this.uptime = uptime; + this.logtime = logtime; + this.pci=pci; + this.rsrp=rsrp; + this.snr=snr; + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/manager/AlarmJobManager.java b/src/main/java/org/well/well/manager/AlarmJobManager.java index c21a55c..0fc2590 100644 --- a/src/main/java/org/well/well/manager/AlarmJobManager.java +++ b/src/main/java/org/well/well/manager/AlarmJobManager.java @@ -68,6 +68,17 @@ save(alarmJob); return alarmJob; } + public AlarmJob saveData(String devCode, String wellCode, String devTypeName, String jobType) { + AlarmJob alarmJob = new AlarmJob(); + alarmJob.setDevcode(devCode); + alarmJob.setWellCode(wellCode); + alarmJob.setJobStatus("0"); + alarmJob.setCreateTime(new Date()); + alarmJob.setJobcode(produceJobCode(devTypeName)); + alarmJob.setJogType(jobType); + save(alarmJob); + return alarmJob; + } public String produceJobCode(String devTypeName) { String pre = deviceAlarmMap.get(devTypeName); diff --git a/src/main/java/org/well/well/manager/H2SManager.java b/src/main/java/org/well/well/manager/H2SManager.java new file mode 100644 index 0000000..2bfb5bb --- /dev/null +++ b/src/main/java/org/well/well/manager/H2SManager.java @@ -0,0 +1,165 @@ +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.base.DeviceTypeEnum; +import org.well.well.core.hibernate.HibernateEntityDao; +import org.well.well.core.util.DateUtils; +import org.well.well.domain.AlarmJob; +import org.well.well.domain.BusWell; +import org.well.well.domain.Device; +import org.well.well.domain.H2s; +import org.well.well.AlarmEnumDTO.H2SAlarmEnum; +import javax.annotation.Resource; +import java.io.IOException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class H2SManager extends HibernateEntityDao { + @Resource + private AlarmRecordManager alarmRecordManager; + @Resource + private AlarmRuleManager alarmRuleManager; + @Resource + private DeviceManager deviceManager; + @Resource + private BusWellManager busWellManager; + @Resource + private AlarmJobManager alarmJobManager; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public Map saveData(String devcode, String wellCode, + String strength, String cell, String uptime, + String pci, String rsrp, String snr) { + + Map resultMap = new HashMap(); + try { + H2s h2s = new H2s(devcode, wellCode, strength, cell, + new Timestamp((DateUtils.sdf4.parse(DateUtils.DateFormat(uptime)).getTime())), + new Timestamp((new Date()).getTime()), pci, rsrp, snr); + save(h2s); + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + + + public void processNormalData(JSONObject jsonObject, String devCode) { + String cell = jsonObject.get("cell").toString(); + String pci = null != jsonObject.get("pci") ? jsonObject.get("pci").toString() : ""; + String rsrp = null != jsonObject.get("rsrp") ? jsonObject.get("rsrp").toString() : ""; + String snr = null != jsonObject.get("snr") ? jsonObject.get("snr").toString() : ""; + JSONArray jsonArray = (JSONArray) jsonObject.get("datas"); + BusWell busWell = busWellManager.getWellByDevCode(devCode); + for (int i = 0; i < jsonArray.size(); i++) { + try { + String hs = ((JSONObject) jsonArray.get(i)).get("hs").toString(); + String upTime = ((JSONObject) jsonArray.get(i)).get("uptime").toString(); + hs = String.format("%.2f", Double.valueOf(hs)); + + //1.存数据 + saveData(devCode, busWell == null ? "" : busWell.getWellCode(), hs, cell, upTime, pci, rsrp, snr); + //2.有无超限处理流程(判断最后一条数据) + if (i < jsonArray.size() - 1) { + continue; + } + + //4.清除设备告警 + alarmRecordManager.clearAlarmByNormalData(devCode, ""); + //获取报警阈值 + List ruleRankList = alarmRuleManager.getRuleRank(devCode); + float rankThresh = 0; + String isAlarm = "1"; + if (ruleRankList.size() > 0 && ruleRankList.get(0)[0] != null) { + Object rankValue = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[2]; + rankThresh = rankValue != null ? Float.valueOf(rankValue.toString()) : 0; + isAlarm = ((Object[]) ruleRankList.get(ruleRankList.size() - 1))[4].toString(); + } + + if (rankThresh > 0 && "1".equals(isAlarm) && Float.valueOf(hs) >= rankThresh) {//浓度超限 + Device device = deviceManager.getDeviceByDevCode(devCode); + //获取报警等级 + String alarmContent = H2SAlarmEnum.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(hs) >= Float.valueOf(rankValue.toString())) { + alarmLevel = Integer.valueOf(((Object[]) ruleRankList.get(j))[0].toString()); + break; + } + } + } + + //未注册设备舍弃 + if (device == null) { + return; + } + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "1"); + + if (alarmJob == null) { + alarmJob=alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "1"); + } + //1.写入新的告警 + alarmRecordManager.saveData(alarmJob.getId(), "1", alarmLevel, + alarmContent, hs, device, + devCode, busWell != null ? busWell.getWellCode() : "", upTime, alarmContent); +// //3.toDo:向app推送报警消息 +// ThreadUtil.excuteMsg(alarmJob.getId(), alarmContent); + } else { + alarmJobManager.updateAlarmJobByDevCode(devCode, "数据正常,系统自动结束工单"); + } + //3.清离线 + deviceManager.clearOffline(devCode); + } catch (IOException e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",存储数据:" + jsonArray.get(i).toString() + "失败-------"); + } + } + } + + + public void processAlarmData(JSONObject jsonObject, String devCode) { + JSONArray jsonArray = (JSONArray) jsonObject.get("eventType"); + String logTime = (jsonObject.get("logTime")).toString(); + for (int i = 0; i < jsonArray.size(); i++) { + try { + //1.清除离线 + deviceManager.clearOffline(devCode); + //2.清除同类型的报警信息 + alarmRecordManager.clearAlarm(devCode, "2", + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex())); + //3.写入新的报警 + Device device = deviceManager.getDeviceByDevCode(devCode); + if (null == device) return;//没注册设备舍弃 + BusWell busWell = busWellManager.getWellByDevCode(devCode); + //4.若无工单写入新的工单 + AlarmJob alarmJob = alarmJobManager.getByDevAndType(devCode, "0"); + if (null == alarmJob) { + alarmJob = alarmJobManager.saveData(devCode, busWell != null ? + busWell.getWellCode() : "", DeviceTypeEnum.HydrogenSulfide.toString(), "0"); + } + alarmRecordManager.saveData(alarmJob.getId(), "2", null, + H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getName(), + String.valueOf(H2SAlarmEnum.valueOf(jsonArray.get(i).toString()).getIndex()), + device, devCode, null != busWell ? busWell.getWellCode() : "", logTime, + H2SAlarmEnum.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/resp/H2SResponse.java b/src/main/java/org/well/well/resp/H2SResponse.java new file mode 100644 index 0000000..79804b7 --- /dev/null +++ b/src/main/java/org/well/well/resp/H2SResponse.java @@ -0,0 +1,40 @@ +package org.well.well.resp; + +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.well.well.base.AbstractResponse; +import org.well.well.manager.H2SManager; +import org.well.well.manager.ImeiManager; + +public class H2SResponse extends AbstractResponse { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + private static final String[] mType = {"Data", "Event", "StartupRequest"}; + + @Override + public void run() { + ClassPathXmlApplicationContext ac = this.getAc(); + H2SManager h2SManager = ac.getBean(H2SManager.class); + ImeiManager imeiManager = ac.getBean(ImeiManager.class); + JSONObject json = JSONObject.fromObject(this.getContent()); + String devCode = json.get("devCode").toString(); + logger.info("--------RECEIVE:设备编号:" + devCode + ",上传数据:" + json.toString() + "-------"); + JSONObject jsonObject = (JSONObject) json.get("mBody"); + if (mType[0].equals(json.get("mType"))) {//存储上报数据 + h2SManager.processNormalData(jsonObject, devCode); + } else if (mType[1].equals(json.get("mType"))) {//存储报警事件 + h2SManager.processAlarmData(jsonObject, devCode); + } else if (mType[2].equals(json.get("mType"))) {//三码存储 + try { + String imei = jsonObject.get("imei").toString(); + String iccid = jsonObject.get("iccid").toString(); + imeiManager.saveData(devCode, imei, iccid); + } catch (Exception e) { + e.printStackTrace(); + logger.error("--------ERROR:设备编号:" + devCode + ",更新参数下发状态失败-------"); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/org/well/well/util/ResponseResolver.java b/src/main/java/org/well/well/util/ResponseResolver.java index 6dcfba9..4314736 100644 --- a/src/main/java/org/well/well/util/ResponseResolver.java +++ b/src/main/java/org/well/well/util/ResponseResolver.java @@ -30,6 +30,7 @@ // abstractResponseHashMap.put(DeviceTypeEnum.LG.name(), new LGResponse()); abstractResponseHashMap.put(DeviceTypeEnum.Tube.name(), new TubeResponse()); abstractResponseHashMap.put(DeviceTypeEnum.WellPlus.name(), new WellPlusResponse()); + abstractResponseHashMap.put(DeviceTypeEnum.HydrogenSulfide.name(), new H2SResponse()); } diff --git a/src/main/resources/wellSensor/application.properties b/src/main/resources/wellSensor/application.properties index c766804..5838d5f 100644 --- a/src/main/resources/wellSensor/application.properties +++ b/src/main/resources/wellSensor/application.properties @@ -19,10 +19,11 @@ #db.default.url=jdbc:oracle:thin:@119.254.103.80:1521:chengdu #db.default.username=sensor #db.default.password=sensor -db.default.driverClassName=com.mysql.jdbc.Driver -db.default.url=jdbc:mysql://111.198.10.15:11102/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false +#db.default.driverClassName=com.mysql.jdbc.Driver +db.default.driverClassName=com.mysql.cj.jdbc.Driver +db.default.url=jdbc:mysql://111.198.10.15:11336/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root -db.default.password=Casic203! +db.default.password=Casic203 ### ============================================================================ # dbReal # ============================================================================ @@ -171,7 +172,7 @@ bootstrap.servers = 111.198.10.15:12502 kafka.topic = gas -bootstrap.groupid = 0 +bootstrap.groupid = 2 # ============================================================================ # 告警、工单推送地址 diff --git a/target/classes/wellSensor/application.properties b/target/classes/wellSensor/application.properties index 6c1e6b5..5838d5f 100644 --- a/target/classes/wellSensor/application.properties +++ b/target/classes/wellSensor/application.properties @@ -19,7 +19,8 @@ #db.default.url=jdbc:oracle:thin:@119.254.103.80:1521:chengdu #db.default.username=sensor #db.default.password=sensor -db.default.driverClassName=com.mysql.jdbc.Driver +#db.default.driverClassName=com.mysql.jdbc.Driver +db.default.driverClassName=com.mysql.cj.jdbc.Driver db.default.url=jdbc:mysql://111.198.10.15:11336/smartwell?useUnicode=true&characterEncoding=UTF-8&useSSL=false db.default.username=root db.default.password=Casic203 @@ -171,7 +172,7 @@ bootstrap.servers = 111.198.10.15:12502 kafka.topic = gas -bootstrap.groupid = 0 +bootstrap.groupid = 2 # ============================================================================ # 告警、工单推送地址