diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java index 1792320..f322ea8 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.tube.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -15,4 +16,41 @@ "报警数值:" + value + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java index 1792320..f322ea8 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.tube.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -15,4 +16,41 @@ "报警数值:" + value + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java index 3c097dd..79f1577 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java @@ -34,11 +34,13 @@ obj.put("cell", ""); JSONObject body = new JSONObject(); - body.put("bType", "TubeData"); + body.put("bType", "TubeOtherData"); body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); JSONArray dataArr = new JSONArray(); for (DataItem dataItem : dataItemList) { dataArr.add(dataItem.toJSON()); + + body.put("rsrp", ((DataItemMHK) dataItem).rsrp); } body.put("datas", dataArr); diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java index 1792320..f322ea8 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.tube.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -15,4 +16,41 @@ "报警数值:" + value + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java index 3c097dd..79f1577 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java @@ -34,11 +34,13 @@ obj.put("cell", ""); JSONObject body = new JSONObject(); - body.put("bType", "TubeData"); + body.put("bType", "TubeOtherData"); body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); JSONArray dataArr = new JSONArray(); for (DataItem dataItem : dataItemList) { dataArr.add(dataItem.toJSON()); + + body.put("rsrp", ((DataItemMHK) dataItem).rsrp); } body.put("datas", dataArr); diff --git a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java index b8937ad..cf85658 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java @@ -26,7 +26,17 @@ JSONObject data = new JSONObject(); data.put("gasval", gasval); data.put("vbat", vbat); - data.put("batsta", ""); + data.put("ssState", batsta); // 电池状态 + // 信号质量 + String sig = "0"; + if (rsrp <= -90) { + sig = "1"; + } else if (rsrp <= -70) { + sig = "2"; + } else { + sig ="3"; + } + data.put("sig", sig); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java index 1792320..f322ea8 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.tube.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -15,4 +16,41 @@ "报警数值:" + value + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java index 3c097dd..79f1577 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java @@ -34,11 +34,13 @@ obj.put("cell", ""); JSONObject body = new JSONObject(); - body.put("bType", "TubeData"); + body.put("bType", "TubeOtherData"); body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); JSONArray dataArr = new JSONArray(); for (DataItem dataItem : dataItemList) { dataArr.add(dataItem.toJSON()); + + body.put("rsrp", ((DataItemMHK) dataItem).rsrp); } body.put("datas", dataArr); diff --git a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java index b8937ad..cf85658 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java @@ -26,7 +26,17 @@ JSONObject data = new JSONObject(); data.put("gasval", gasval); data.put("vbat", vbat); - data.put("batsta", ""); + data.put("ssState", batsta); // 电池状态 + // 信号质量 + String sig = "0"; + if (rsrp <= -90) { + sig = "1"; + } else if (rsrp <= -70) { + sig = "2"; + } else { + sig ="3"; + } + data.put("sig", sig); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java index ec2d005..48f8511 100644 --- a/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java @@ -2,10 +2,14 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.casic.common.general.DataItem; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -19,6 +23,90 @@ } @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemMHK itemMHK = (EventItemMHK) eventItem; + switch (itemMHK.getType()) { + case "01": + // 所有状态恢复正常 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelAllStateError"); + } + break; + + case "02": + // 设备故障 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelDeviceError"); + } else { + eventArr.add("DeviceError"); + } + break; + + case "03": + // 低电量关机 + eventArr.add("PowerOffAlarm"); + break; + + case "04": + // 水浸报警 判断报警和取消报警 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelWaterImmersionAlarm"); // 00 表示报警取消 + } else { + eventArr.add("WaterImmersionAlarm"); // 非00 表示报警 + } + break; + + case "05": + // 振动报警 无需判断取消报警 + eventArr.add("VibrationAlarm"); + break; + + case "06": + // 位移报警 需要同时推送位置 + eventArr.add(itemMHK.toJSON()); + break; + + case "07": + // 泄漏报警低报 + eventArr.add(itemMHK.toJSON()); + break; + case "08": + // 泄漏报警高报 + eventArr.add(itemMHK.toJSON()); + break; + + case "09": + // 电池低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "12": + // 传感器故障 + eventArr.add("sensorState"); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } + + @Override public void parseMessageBody() { JSONArray eventArray = getMessageBody().getJSONArray("DATAS"); eventItemList = new ArrayList<>(); diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java index 1792320..f322ea8 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.tube.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -15,4 +16,41 @@ "报警数值:" + value + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java index 3c097dd..79f1577 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java @@ -34,11 +34,13 @@ obj.put("cell", ""); JSONObject body = new JSONObject(); - body.put("bType", "TubeData"); + body.put("bType", "TubeOtherData"); body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); JSONArray dataArr = new JSONArray(); for (DataItem dataItem : dataItemList) { dataArr.add(dataItem.toJSON()); + + body.put("rsrp", ((DataItemMHK) dataItem).rsrp); } body.put("datas", dataArr); diff --git a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java index b8937ad..cf85658 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java @@ -26,7 +26,17 @@ JSONObject data = new JSONObject(); data.put("gasval", gasval); data.put("vbat", vbat); - data.put("batsta", ""); + data.put("ssState", batsta); // 电池状态 + // 信号质量 + String sig = "0"; + if (rsrp <= -90) { + sig = "1"; + } else if (rsrp <= -70) { + sig = "2"; + } else { + sig ="3"; + } + data.put("sig", sig); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java index ec2d005..48f8511 100644 --- a/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java @@ -2,10 +2,14 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.casic.common.general.DataItem; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -19,6 +23,90 @@ } @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemMHK itemMHK = (EventItemMHK) eventItem; + switch (itemMHK.getType()) { + case "01": + // 所有状态恢复正常 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelAllStateError"); + } + break; + + case "02": + // 设备故障 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelDeviceError"); + } else { + eventArr.add("DeviceError"); + } + break; + + case "03": + // 低电量关机 + eventArr.add("PowerOffAlarm"); + break; + + case "04": + // 水浸报警 判断报警和取消报警 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelWaterImmersionAlarm"); // 00 表示报警取消 + } else { + eventArr.add("WaterImmersionAlarm"); // 非00 表示报警 + } + break; + + case "05": + // 振动报警 无需判断取消报警 + eventArr.add("VibrationAlarm"); + break; + + case "06": + // 位移报警 需要同时推送位置 + eventArr.add(itemMHK.toJSON()); + break; + + case "07": + // 泄漏报警低报 + eventArr.add(itemMHK.toJSON()); + break; + case "08": + // 泄漏报警高报 + eventArr.add(itemMHK.toJSON()); + break; + + case "09": + // 电池低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "12": + // 传感器故障 + eventArr.add("sensorState"); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } + + @Override public void parseMessageBody() { JSONArray eventArray = getMessageBody().getJSONArray("DATAS"); eventItemList = new ArrayList<>(); diff --git a/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java b/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java index e5ffed6..2b31172 100644 --- a/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java @@ -1,5 +1,7 @@ package com.casic.tube.frame.mhk; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -18,4 +20,27 @@ "报警位置:" + lon + ", " + lat + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getType()) { + case "06": + event.put("alarmType", "DisplacementAlarm"); + event.put("lon", lon); + event.put("lat", lat); + break; + case "07": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "08": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/common/CasicFrameBuildFactory.java b/src/main/java/com/casic/common/CasicFrameBuildFactory.java index 328c635..497f6d4 100644 --- a/src/main/java/com/casic/common/CasicFrameBuildFactory.java +++ b/src/main/java/com/casic/common/CasicFrameBuildFactory.java @@ -72,7 +72,7 @@ return buildSentinelEventFrame(manufacturerCode); case "32": - return buildTubeMethaneFrame(manufacturerCode); + return buildMethaneFrame(manufacturerCode); default: return null; @@ -150,14 +150,11 @@ } } - private static CasicFrame buildTubeMethaneFrame(String manufacturerCode) { + private static CasicFrame buildMethaneFrame(String manufacturerCode) { switch (manufacturerCode) { case "15": return new MethaneEventFrameBRS(); - case "16": - return new EventFrameMHK(); - default: return null; } diff --git a/src/main/java/com/casic/common/general/EventFrame.java b/src/main/java/com/casic/common/general/EventFrame.java index 83a7a1d..3a56597 100644 --- a/src/main/java/com/casic/common/general/EventFrame.java +++ b/src/main/java/com/casic/common/general/EventFrame.java @@ -1,7 +1,10 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.List; public class EventFrame extends CasicFrame { @@ -27,4 +30,14 @@ builder.append("}"); return builder.toString(); } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + + obj.put("mType", MESSAGE_TYPE_STRING); + obj.put("ts", LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); + + return obj; + } } diff --git a/src/main/java/com/casic/common/general/EventItem.java b/src/main/java/com/casic/common/general/EventItem.java index ee0dc9e..2f79d20 100644 --- a/src/main/java/com/casic/common/general/EventItem.java +++ b/src/main/java/com/casic/common/general/EventItem.java @@ -1,4 +1,9 @@ package com.casic.common.general; +import com.alibaba.fastjson.JSONObject; + public class EventItem { + public JSONObject toJSON() { + return null; + } } diff --git a/src/main/java/com/casic/methane/controller/MethaneDataController.java b/src/main/java/com/casic/methane/controller/MethaneDataController.java index f78ef84..ffde5ba 100644 --- a/src/main/java/com/casic/methane/controller/MethaneDataController.java +++ b/src/main/java/com/casic/methane/controller/MethaneDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,41 +59,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 存库 - frameService.afterAction(frame); + // 存库 + frameService.afterAction(frame); - String devCode = frame.getDeviceCode(); + String devCode = frame.getDeviceCode(); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java index ecdbca5..ff0de18 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataFrameBRS.java @@ -23,7 +23,7 @@ @Override public String getDevTypeName() { - return getDeviceType().equals("31") ? "Methane" : "LG"; + return getDeviceType().equals("31") ? "Methane" : "LGGasOther"; } @Override diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java index 8d63f0a..8afe2e9 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneDataItemBRS.java @@ -25,7 +25,12 @@ @Override public JSONObject toJSON() { JSONObject data = new JSONObject(); - data.put("gas", gas); + data.put("gasval", gas); + data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); + data.put("batsta", ""); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java index a6e0455..4b13aa1 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventFrameBRS.java @@ -3,9 +3,13 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; +import com.casic.tube.frame.brs.EventItemBRS; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -38,4 +42,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "LGGasOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "LGGasOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + MethaneEventItemBRS itemBRS = (MethaneEventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java index 9f888f7..87ffd53 100644 --- a/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java +++ b/src/main/java/com/casic/methane/frame/brs/MethaneEventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.methane.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -10,6 +11,43 @@ String time; @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } + + @Override public String toString() { return "报警类型:" + eventType + ";" + "报警数值:" + value + ";" + diff --git a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java index fe99e52..cac14c8 100644 --- a/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java +++ b/src/main/java/com/casic/methane/service/MethaneFrameServiceImpl.java @@ -56,6 +56,7 @@ String deviceType = protocol.getDeviceType(frame); String messageType = protocol.getMessageType(frame); String messageBody = protocol.getMessageBody(frame).toUpperCase(); + String sequence = protocol.getMessageSequence(frame); String uptime = protocol.getUptime(frame); String manufacturerCode = protocol.getManufacturerCode(frame); @@ -66,6 +67,7 @@ gasFrame.setUptime(uptime); gasFrame.setMessageType(messageType); gasFrame.setDeviceType(deviceType); + gasFrame.setSequence(sequence); // 心跳类的消息不解析MessageBody if (!gasFrame.getMessageType().equals("00")) { diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 71a8a72..82af606 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -39,8 +40,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -58,7 +59,7 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); - if (frame != null) { + if (ObjectUtil.isNotNull(frame)) { // 异步推送 ThreadUtil.execAsync(() -> { log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 2d307d8..9225568 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -62,6 +62,7 @@ sentinelFrame.setUptime(uptime); sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); + sentinelFrame.setDeviceType(deviceType); // 心跳类、配置参数响应类的消息不解析MessageBody if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { diff --git a/src/main/java/com/casic/tube/controller/TubeDataController.java b/src/main/java/com/casic/tube/controller/TubeDataController.java index 05f5f52..687d008 100644 --- a/src/main/java/com/casic/tube/controller/TubeDataController.java +++ b/src/main/java/com/casic/tube/controller/TubeDataController.java @@ -2,6 +2,7 @@ import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -42,8 +43,8 @@ JSONObject retObj = new JSONObject(); log.info(JSONObject.toJSONString(map)); - String deviceId = (String) map.get("deviceId"); - String productId = (String) map.get("productId"); + String deviceId = StrUtil.toString(map.get("deviceId")); + String productId = StrUtil.toString(map.get("productId")); JSONObject recvObj = (JSONObject) JSONObject.toJSON(map); if (recvObj.containsKey("payload")) { @@ -60,42 +61,43 @@ // 根据协议进行解析 CasicFrame frame = frameService.dataParse(frameStr); + if (ObjectUtil.isNotNull(frame)) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); - // 异步推送 - ThreadUtil.execAsync(() -> { - log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); - frameService.pushToApi(frame); - }); + // 存库 + frameService.afterAction(frame); - // 存库 - frameService.afterAction(frame); + String devCode = frame.getDeviceCode(); - String devCode = frame.getDeviceCode(); + // 回复和参数配置 + BusDevice device = deviceService.getDeviceByCode(devCode); + if (ObjectUtil.isNotNull(device)) { + AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); + aepCommandSend.setMasterApiKey(device.getMasterApiKey()); + aepCommandSend.setAppKey(device.getNbAppKey()); + aepCommandSend.setAppSecret(device.getNbAppSecret()); - // 回复和参数配置 - BusDevice device = deviceService.getDeviceByCode(devCode); - if (ObjectUtil.isNotNull(device)) { - AepCommandSend aepCommandSend = new AepCommandSend(deviceId, productId); - aepCommandSend.setMasterApiKey(device.getMasterApiKey()); - aepCommandSend.setAppKey(device.getNbAppKey()); - aepCommandSend.setAppSecret(device.getNbAppSecret()); + // 查询数据库中是否有配置参数 + BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); + if (ObjectUtil.isNotNull(busConfig)) { + String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); + try { + int code = aepCommandSend.handleAndReply(configCmdStr); + log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - // 查询数据库中是否有配置参数 - BusConfig busConfig = busConfigService.getConfigTobeSend(device.getId()); - if (ObjectUtil.isNotNull(busConfig)) { - String configCmdStr = frameService.doBuildCommand(devCode, busConfig.getFrameContent()); - try { - int code = aepCommandSend.handleAndReply(configCmdStr); - log.info("下发参数配置[retCode={}]: {}", code, JSON.toJSONString(configCmdStr)); - - if (code == 0) { - busConfigService.updateConfigState(device.getId(), "1"); - } else { + if (code == 0) { + busConfigService.updateConfigState(device.getId(), "1"); + } else { + busConfigService.updateConfigState(device.getId(), "2"); + } + } catch (Exception ex) { + log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); busConfigService.updateConfigState(device.getId(), "2"); } - } catch (Exception ex) { - log.error("向设备下发参数配置异常:[message={}], {}", ex.getMessage(), configCmdStr); - busConfigService.updateConfigState(device.getId(), "2"); } } } diff --git a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java index 6f68aab..1662a17 100644 --- a/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/DataItemBRS.java @@ -27,6 +27,9 @@ JSONObject data = new JSONObject(); data.put("gasval", gas); data.put("vbat", bat); + data.put("sig", sig); + data.put("temp", temp); + data.put("ssState", ssState); data.put("batsta", ""); data.put("uptime", getTime()); diff --git a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java index 2e5c145..2cd4211 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventFrameBRS.java @@ -3,9 +3,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -33,4 +36,80 @@ eventItemList.add(eventItem); } } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemBRS itemBRS = (EventItemBRS) eventItem; + switch (itemBRS.getEventType().toUpperCase()) { + case "GASL": + // 浓度低报 + eventArr.add(itemBRS.toJSON()); + break; + + case "GASH": + // 浓度高报 + eventArr.add(itemBRS.toJSON()); + break; + + case "LIQUID": + // 液位报警 + if (itemBRS.getValue().equals("0")) { + eventArr.add("CancelWaterImmersionAlarm"); // 解除液位报警 + } else { + eventArr.add("WaterImmersionAlarm"); + } + break; + + case "MV": + // 位移报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "VIBERATE": + // 振动报警 不自动消警 + if (itemBRS.getValue().equals("1")) { + eventArr.add("VibrationAlarm"); + } + break; + + case "SENSORSTATE": + // 传感器故障报警 + eventArr.add("sensorState"); + break; + + case "BATL": + // 低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "TEMPL": + // 温度超低限报警 + eventArr.add(itemBRS.toJSON()); + break; + + case "TEMPH": + // 温度超高限报警 + eventArr.add(itemBRS.toJSON()); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } } diff --git a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java index 1792320..f322ea8 100644 --- a/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java +++ b/src/main/java/com/casic/tube/frame/brs/EventItemBRS.java @@ -1,5 +1,6 @@ package com.casic.tube.frame.brs; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -15,4 +16,41 @@ "报警数值:" + value + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getEventType().toUpperCase()) { + case "MV": + event.put("alarmType", "DisplacementAlarm"); + String[] location = value.split(","); + if (location.length == 2) { + event.put("lon", location[0]); + event.put("lat", location[1]); + } else { + event.put("lon", "0.00"); + event.put("lat", "0.00"); + } + break; + case "GASL": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "GASH": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + case "TEMPL": + event.put("alarmType", "TempOverLowAlarm"); + event.put("alarmValue", value); + break; + case "TEMPH": + event.put("alarmType", "TempOverHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java index 3c097dd..79f1577 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataFrameMHK.java @@ -34,11 +34,13 @@ obj.put("cell", ""); JSONObject body = new JSONObject(); - body.put("bType", "TubeData"); + body.put("bType", "TubeOtherData"); body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); JSONArray dataArr = new JSONArray(); for (DataItem dataItem : dataItemList) { dataArr.add(dataItem.toJSON()); + + body.put("rsrp", ((DataItemMHK) dataItem).rsrp); } body.put("datas", dataArr); diff --git a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java index b8937ad..cf85658 100644 --- a/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/DataItemMHK.java @@ -26,7 +26,17 @@ JSONObject data = new JSONObject(); data.put("gasval", gasval); data.put("vbat", vbat); - data.put("batsta", ""); + data.put("ssState", batsta); // 电池状态 + // 信号质量 + String sig = "0"; + if (rsrp <= -90) { + sig = "1"; + } else if (rsrp <= -70) { + sig = "2"; + } else { + sig ="3"; + } + data.put("sig", sig); data.put("uptime", getTime()); return data; diff --git a/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java b/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java index ec2d005..48f8511 100644 --- a/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/EventFrameMHK.java @@ -2,10 +2,14 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.casic.common.general.DataItem; import com.casic.common.general.EventFrame; +import com.casic.common.general.EventItem; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; @Data @@ -19,6 +23,90 @@ } @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + + obj.put("devType", "TubeOther"); + obj.put("devCode", getDeviceCode()); + + JSONObject body = new JSONObject(); + body.put("bType", "TubeOtherEvent"); + body.put("logTime", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); + JSONArray eventArr = new JSONArray(); + for (EventItem eventItem : eventItemList) { + EventItemMHK itemMHK = (EventItemMHK) eventItem; + switch (itemMHK.getType()) { + case "01": + // 所有状态恢复正常 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelAllStateError"); + } + break; + + case "02": + // 设备故障 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelDeviceError"); + } else { + eventArr.add("DeviceError"); + } + break; + + case "03": + // 低电量关机 + eventArr.add("PowerOffAlarm"); + break; + + case "04": + // 水浸报警 判断报警和取消报警 + if (itemMHK.getValue().equals("00")) { + eventArr.add("CancelWaterImmersionAlarm"); // 00 表示报警取消 + } else { + eventArr.add("WaterImmersionAlarm"); // 非00 表示报警 + } + break; + + case "05": + // 振动报警 无需判断取消报警 + eventArr.add("VibrationAlarm"); + break; + + case "06": + // 位移报警 需要同时推送位置 + eventArr.add(itemMHK.toJSON()); + break; + + case "07": + // 泄漏报警低报 + eventArr.add(itemMHK.toJSON()); + break; + case "08": + // 泄漏报警高报 + eventArr.add(itemMHK.toJSON()); + break; + + case "09": + // 电池低电量报警 + eventArr.add("LowBatAlarm"); + break; + + case "12": + // 传感器故障 + eventArr.add("sensorState"); + break; + + default: + break; + } + } + body.put("eventType", eventArr); + + obj.put("mBody", body); + + return obj; + } + + @Override public void parseMessageBody() { JSONArray eventArray = getMessageBody().getJSONArray("DATAS"); eventItemList = new ArrayList<>(); diff --git a/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java b/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java index e5ffed6..2b31172 100644 --- a/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java +++ b/src/main/java/com/casic/tube/frame/mhk/EventItemMHK.java @@ -1,5 +1,7 @@ package com.casic.tube.frame.mhk; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.casic.common.general.EventItem; import lombok.Data; @@ -18,4 +20,27 @@ "报警位置:" + lon + ", " + lat + ";" + "报警时间:" + time; } + + @Override + public JSONObject toJSON() { + JSONObject event = new JSONObject(); + + switch (getType()) { + case "06": + event.put("alarmType", "DisplacementAlarm"); + event.put("lon", lon); + event.put("lat", lat); + break; + case "07": + event.put("alarmType", "GasLeakLowAlarm"); + event.put("alarmValue", value); + break; + case "08": + event.put("alarmType", "GasLeakHighAlarm"); + event.put("alarmValue", value); + break; + } + + return event; + } } diff --git a/src/main/java/com/casic/tube/service/TubeFrameServiceImpl.java b/src/main/java/com/casic/tube/service/TubeFrameServiceImpl.java index c6f1060..84ce641 100644 --- a/src/main/java/com/casic/tube/service/TubeFrameServiceImpl.java +++ b/src/main/java/com/casic/tube/service/TubeFrameServiceImpl.java @@ -51,6 +51,7 @@ String deviceType = tubeProtocol.getDeviceType(frame); String messageType = tubeProtocol.getMessageType(frame); String messageBody = tubeProtocol.getMessageBody(frame).toUpperCase(); + String sequence = tubeProtocol.getMessageSequence(frame); String uptime = tubeProtocol.getUptime(frame); String manufacturerCode = tubeProtocol.getManufacturerCode(frame); @@ -60,6 +61,8 @@ tubeFrame.setDeviceCode(deviceId); tubeFrame.setUptime(uptime); tubeFrame.setMessageType(messageType); + tubeFrame.setSequence(sequence); + tubeFrame.setDeviceType(deviceType); // 心跳类的消息不解析MessageBody if (!tubeFrame.getMessageType().equals("00")) {