diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 9e56343..71a8a72 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -1,5 +1,6 @@ package com.casic.senitnel.controller; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -58,6 +59,12 @@ CasicFrame frame = frameService.dataParse(frameStr); if (frame != null) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); + // 存库 frameService.afterAction(frame); diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 9e56343..71a8a72 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -1,5 +1,6 @@ package com.casic.senitnel.controller; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -58,6 +59,12 @@ CasicFrame frame = frameService.dataParse(frameStr); if (frame != null) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); + // 存库 frameService.afterAction(frame); diff --git a/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java b/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java index 5e8bcba..96a4c0c 100644 --- a/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java +++ b/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java @@ -13,4 +13,6 @@ String doBuildCommand(String deviceCode, String cmdList); void afterAction(CasicFrame frame); + + void pushToApi(CasicFrame frame); } diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 9e56343..71a8a72 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -1,5 +1,6 @@ package com.casic.senitnel.controller; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -58,6 +59,12 @@ CasicFrame frame = frameService.dataParse(frameStr); if (frame != null) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); + // 存库 frameService.afterAction(frame); diff --git a/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java b/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java index 5e8bcba..96a4c0c 100644 --- a/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java +++ b/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java @@ -13,4 +13,6 @@ String doBuildCommand(String deviceCode, String cmdList); void afterAction(CasicFrame frame); + + void pushToApi(CasicFrame frame); } diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 00aa216..2d307d8 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -1,5 +1,8 @@ package com.casic.senitnel.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -12,6 +15,7 @@ import com.casic.dao.model.DeviceWellView; import com.casic.dao.service.IDataSentinelOtherService; import com.casic.dao.service.IDeviceWellViewService; +import com.casic.util.DataPushConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -35,6 +39,9 @@ @Resource IDeviceWellViewService deviceService; + @Resource + DataPushConfig pushConfig; + public CasicFrame dataParse(String frame) { // 1. 判断帧结构 boolean frameValid = protocol.checkFrame(frame); @@ -56,8 +63,8 @@ sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); - // 心跳类的消息不解析MessageBody - if (!sentinelFrame.getMessageType().equals("00")) { + // 心跳类、配置参数响应类的消息不解析MessageBody + if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { sentinelFrame.setMessageBody(protocol.parseMessageBody(messageBody)); sentinelFrame.parseMessageBody(); } @@ -123,4 +130,18 @@ } } } + + @Override + public void pushToApi(CasicFrame frame) { + HttpRequest request = HttpUtil.createPost(pushConfig.getUrl()); + request.contentType("application/json"); + request.body(frame.toJSON().toJSONString()); + request.timeout(5 * 1000); + + try (HttpResponse response = request.execute()) { + log.info("向接口推送数据[url={}][{}]", pushConfig.getUrl(), response.getStatus()); + } catch (Exception ex) { + log.info("向接口推送数据失败[url={}]: {}", pushConfig.getUrl(), ex.getMessage()); + } + } } diff --git a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java index 9e56343..71a8a72 100644 --- a/src/main/java/com/casic/senitnel/controller/SentinelDataController.java +++ b/src/main/java/com/casic/senitnel/controller/SentinelDataController.java @@ -1,5 +1,6 @@ package com.casic.senitnel.controller; +import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -58,6 +59,12 @@ CasicFrame frame = frameService.dataParse(frameStr); if (frame != null) { + // 异步推送 + ThreadUtil.execAsync(() -> { + log.info("异步推送数据到接口:{}", frame.toJSON().toJSONString()); + frameService.pushToApi(frame); + }); + // 存库 frameService.afterAction(frame); diff --git a/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java b/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java index 5e8bcba..96a4c0c 100644 --- a/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java +++ b/src/main/java/com/casic/senitnel/service/ISentinelFrameService.java @@ -13,4 +13,6 @@ String doBuildCommand(String deviceCode, String cmdList); void afterAction(CasicFrame frame); + + void pushToApi(CasicFrame frame); } diff --git a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java index 00aa216..2d307d8 100644 --- a/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java +++ b/src/main/java/com/casic/senitnel/service/SentinelFrameServiceImpl.java @@ -1,5 +1,8 @@ package com.casic.senitnel.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.casic.common.CasicFrame; @@ -12,6 +15,7 @@ import com.casic.dao.model.DeviceWellView; import com.casic.dao.service.IDataSentinelOtherService; import com.casic.dao.service.IDeviceWellViewService; +import com.casic.util.DataPushConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -35,6 +39,9 @@ @Resource IDeviceWellViewService deviceService; + @Resource + DataPushConfig pushConfig; + public CasicFrame dataParse(String frame) { // 1. 判断帧结构 boolean frameValid = protocol.checkFrame(frame); @@ -56,8 +63,8 @@ sentinelFrame.setMessageType(messageType); sentinelFrame.setSequence(sequence); - // 心跳类的消息不解析MessageBody - if (!sentinelFrame.getMessageType().equals("00")) { + // 心跳类、配置参数响应类的消息不解析MessageBody + if (!sentinelFrame.getMessageType().equals("00") && !sentinelFrame.getMessageType().equals("03")) { sentinelFrame.setMessageBody(protocol.parseMessageBody(messageBody)); sentinelFrame.parseMessageBody(); } @@ -123,4 +130,18 @@ } } } + + @Override + public void pushToApi(CasicFrame frame) { + HttpRequest request = HttpUtil.createPost(pushConfig.getUrl()); + request.contentType("application/json"); + request.body(frame.toJSON().toJSONString()); + request.timeout(5 * 1000); + + try (HttpResponse response = request.execute()) { + log.info("向接口推送数据[url={}][{}]", pushConfig.getUrl(), response.getStatus()); + } catch (Exception ex) { + log.info("向接口推送数据失败[url={}]: {}", pushConfig.getUrl(), ex.getMessage()); + } + } } diff --git a/src/main/java/com/casic/util/DataPushConfig.java b/src/main/java/com/casic/util/DataPushConfig.java new file mode 100644 index 0000000..53a0d94 --- /dev/null +++ b/src/main/java/com/casic/util/DataPushConfig.java @@ -0,0 +1,13 @@ +package com.casic.util; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@ConfigurationProperties(prefix = "casic.push") +@Data +@Component +public class DataPushConfig { + + private String url; +}