From 04f938ef623eb1f69a0b08ba8910bb5639372316 Mon Sep 17 00:00:00 2001
From: wangyimeng <421132955@qq.com>
Date: 星期五, 06 五月 2022 12:19:44 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0' of https://github.com/648540858/wvp-GB28181-pro into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java | 125 ++++++++++++++++++++++++++++++++++-------
1 files changed, 104 insertions(+), 21 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
index 8f412f7..fa20d51 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
@@ -1,17 +1,17 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.cmd;
import com.genersoft.iot.vmp.conf.SipConfig;
-import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.*;
-import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
+import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
import com.genersoft.iot.vmp.service.IDeviceAlarmService;
-import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.GpsUtil;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,7 +20,12 @@
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
+import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
+import javax.sip.SipException;
+import javax.sip.message.Response;
+
+import java.text.ParseException;
import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.*;
@@ -37,19 +42,19 @@
private EventPublisher publisher;
@Autowired
- private UserSetup userSetup;
+ private UserSetting userSetting;
@Autowired
private SipConfig sipConfig;
@Autowired
- private IVideoManagerStorager storager;
+ private IVideoManagerStorage storager;
+
+ @Autowired
+ private IRedisCatchStorage redisCatchStorage;
@Autowired
private IDeviceAlarmService deviceAlarmService;
-
- @Autowired
- private DeviceOffLineDetector offLineDetector;
@Override
public void afterPropertiesSet() throws Exception {
@@ -58,11 +63,22 @@
@Override
public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
- if (!sipConfig.isAlarm()) {
- return;
+ logger.info("鏀跺埌鏉ヨ嚜璁惧[{}]鐨勬姤璀﹂�氱煡", device.getDeviceId());
+ // 鍥炲200 OK
+ try {
+ responseAck(evt, Response.OK);
+ } catch (SipException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidArgumentException e) {
+ throw new RuntimeException(e);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
}
+
Element deviceIdElement = rootElement.element("DeviceID");
String channelId = deviceIdElement.getText().toString();
+
+
DeviceAlarm deviceAlarm = new DeviceAlarm();
deviceAlarm.setDeviceId(device.getDeviceId());
deviceAlarm.setChannelId(channelId);
@@ -93,13 +109,13 @@
mobilePosition.setLongitude(deviceAlarm.getLongitude());
mobilePosition.setLatitude(deviceAlarm.getLatitude());
mobilePosition.setReportSource("GPS Alarm");
- BaiduPoint bp = new BaiduPoint();
- bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
- logger.info("鐧惧害鍧愭爣锛�" + bp.getBdLng() + ", " + bp.getBdLat());
- mobilePosition.setGeodeticSystem("BD-09");
- mobilePosition.setCnLng(bp.getBdLng());
- mobilePosition.setCnLat(bp.getBdLat());
- if (!userSetup.getSavePositionHistory()) {
+ // 榛樿鏉ユ簮鍧愭爣绯讳负WGS-84澶勭悊
+ Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
+ logger.info("GCJ02鍧愭爣锛�" + gcj02Point[0] + ", " + gcj02Point[1]);
+ mobilePosition.setGeodeticSystem("GCJ-02");
+ mobilePosition.setCnLng(gcj02Point[0] + "");
+ mobilePosition.setCnLat(gcj02Point[1] + "");
+ if (!userSetting.getSavePositionHistory()) {
storager.clearMobilePositionsByDeviceId(device.getDeviceId());
}
storager.insertMobilePosition(mobilePosition);
@@ -110,17 +126,84 @@
deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType"));
}
}
+
+ if (channelId.equals(sipConfig.getId())) {
+ // 鍙戦�佺粰骞冲彴鐨勬姤璀︿俊鎭�� 鍙戦�乺edis閫氱煡
+ AlarmChannelMessage alarmChannelMessage = new AlarmChannelMessage();
+ alarmChannelMessage.setAlarmSn(Integer.parseInt(deviceAlarm.getAlarmMethod()));
+ alarmChannelMessage.setAlarmDescription(deviceAlarm.getAlarmDescription());
+ alarmChannelMessage.setGbId(channelId);
+ redisCatchStorage.sendAlarmMsg(alarmChannelMessage);
+
+ return;
+ }
+
logger.debug("瀛樺偍鎶ヨ淇℃伅銆佹姤璀﹀垎绫�");
// 瀛樺偍鎶ヨ淇℃伅銆佹姤璀﹀垎绫�
- deviceAlarmService.add(deviceAlarm);
+ if (sipConfig.isAlarm()) {
+ deviceAlarmService.add(deviceAlarm);
+ }
- if (offLineDetector.isOnline(device.getDeviceId())) {
+
+ if (redisCatchStorage.deviceIsOnline(device.getDeviceId())) {
publisher.deviceAlarmEventPublish(deviceAlarm);
}
}
@Override
- public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element element) {
+ public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) {
+ logger.info("鏀跺埌鏉ヨ嚜骞冲彴[{}]鐨勬姤璀﹂�氱煡", parentPlatform.getServerGBId());
+ // 鍥炲200 OK
+ try {
+ responseAck(evt, Response.OK);
+ } catch (SipException e) {
+ throw new RuntimeException(e);
+ } catch (InvalidArgumentException e) {
+ throw new RuntimeException(e);
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ Element deviceIdElement = rootElement.element("DeviceID");
+ String channelId = deviceIdElement.getText().toString();
+
+ DeviceAlarm deviceAlarm = new DeviceAlarm();
+ deviceAlarm.setDeviceId(parentPlatform.getServerGBId());
+ deviceAlarm.setChannelId(channelId);
+ deviceAlarm.setAlarmPriority(getText(rootElement, "AlarmPriority"));
+ deviceAlarm.setAlarmMethod(getText(rootElement, "AlarmMethod"));
+ deviceAlarm.setAlarmTime(getText(rootElement, "AlarmTime"));
+ if (getText(rootElement, "AlarmDescription") == null) {
+ deviceAlarm.setAlarmDescription("");
+ } else {
+ deviceAlarm.setAlarmDescription(getText(rootElement, "AlarmDescription"));
+ }
+ if (NumericUtil.isDouble(getText(rootElement, "Longitude"))) {
+ deviceAlarm.setLongitude(Double.parseDouble(getText(rootElement, "Longitude")));
+ } else {
+ deviceAlarm.setLongitude(0.00);
+ }
+ if (NumericUtil.isDouble(getText(rootElement, "Latitude"))) {
+ deviceAlarm.setLatitude(Double.parseDouble(getText(rootElement, "Latitude")));
+ } else {
+ deviceAlarm.setLatitude(0.00);
+ }
+
+ if (!StringUtils.isEmpty(deviceAlarm.getAlarmMethod())) {
+
+ if (deviceAlarm.getAlarmMethod().equals("5")) {
+ deviceAlarm.setAlarmType(getText(rootElement.element("Info"), "AlarmType"));
+ }
+ }
+
+ if (channelId.equals(parentPlatform.getDeviceGBId())) {
+ // 鍙戦�佺粰骞冲彴鐨勬姤璀︿俊鎭�� 鍙戦�乺edis閫氱煡
+ AlarmChannelMessage alarmChannelMessage = new AlarmChannelMessage();
+ alarmChannelMessage.setAlarmSn(Integer.parseInt(deviceAlarm.getAlarmMethod()));
+ alarmChannelMessage.setAlarmDescription(deviceAlarm.getAlarmDescription());
+ alarmChannelMessage.setGbId(channelId);
+ redisCatchStorage.sendAlarmMsg(alarmChannelMessage);
+ return;
+ }
}
}
--
Gitblit v1.8.0