From 497e581e5e26840400f5f2cd1cf083c3de5e66c2 Mon Sep 17 00:00:00 2001
From: 648540858 <18010473990@163.com>
Date: 星期一, 27 九月 2021 15:36:41 +0800
Subject: [PATCH] 处理报警和位置上报时使用fromHeader获取deviceId, xml的deviceId作为channelId使用。
---
src/main/java/com/genersoft/iot/vmp/utils/SipUtils.java | 23 +++++++++++
sql/mysql.sql | 2 +
src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java | 13 ++++++
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java | 4 +-
src/main/resources/wvp.sqlite | 0
src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java | 13 ++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 55 ++++++++++++++++++---------
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java | 4 +-
8 files changed, 91 insertions(+), 23 deletions(-)
diff --git a/sql/mysql.sql b/sql/mysql.sql
index dba42c1..4501257 100644
--- a/sql/mysql.sql
+++ b/sql/mysql.sql
@@ -66,6 +66,7 @@
id int auto_increment
primary key,
deviceId varchar(50) not null,
+ channelId varchar(50) not null,
alarmPriority varchar(50) not null,
alarmMethod varchar(50),
alarmTime varchar(50) not null,
@@ -92,6 +93,7 @@
create table device_mobile_position
(
deviceId varchar(50) not null,
+ channelId varchar(50) not null,
deviceName varchar(255) null,
time varchar(50) not null,
longitude double not null,
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java
index bbb304c..8176c1c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java
@@ -14,6 +14,11 @@
private String deviceId;
/**
+ * 閫氶亾Id
+ */
+ private String channelId;
+
+ /**
* 鎶ヨ绾у埆, 1涓轰竴绾ц鎯�, 2涓轰簩绾ц鎯�, 3涓轰笁绾ц鎯�, 4涓哄洓绾� 璀︽儏-
*/
private String alarmPriority;
@@ -121,4 +126,12 @@
public void setAlarmType(String alarmType) {
this.alarmType = alarmType;
}
+
+ public String getChannelId() {
+ return channelId;
+ }
+
+ public void setChannelId(String channelId) {
+ this.channelId = channelId;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java
index 47535a6..aba3392 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java
@@ -13,6 +13,11 @@
private String deviceId;
/**
+ * 閫氶亾Id
+ */
+ private String channelId;
+
+ /**
* 璁惧鍚嶇О
*/
private String deviceName;
@@ -163,4 +168,12 @@
public void setCnLat(String cnLat) {
this.cnLat = cnLat;
}
+
+ public String getChannelId() {
+ return channelId;
+ }
+
+ public void setChannelId(String channelId) {
+ this.channelId = channelId;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index 6f38e56..f76048c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -5,9 +5,11 @@
import java.util.*;
import javax.sip.*;
+import javax.sip.address.Address;
import javax.sip.address.SipURI;
import javax.sip.header.FromHeader;
+import javax.sip.header.Header;
import javax.sip.header.HeaderAddress;
import javax.sip.header.ToHeader;
import javax.sip.message.Request;
@@ -34,6 +36,7 @@
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.utils.GpsUtil;
+import com.genersoft.iot.vmp.utils.SipUtils;
import com.genersoft.iot.vmp.utils.SpringBeanFactory;
import com.genersoft.iot.vmp.utils.redis.RedisUtil;
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
@@ -166,18 +169,21 @@
*/
private void processMessageMobilePosition(RequestEvent evt) {
try {
- Element rootElement = getRootElement(evt);
+ String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device == null) {
+ logger.warn("澶勭悊MobilePosition绉诲姩浣嶇疆娑堟伅鏃舵湭鎵惧埌璁惧淇℃伅");
+ return;
+ }
+ Element rootElement = getRootElement(evt, device.getCharset());
+
MobilePosition mobilePosition = new MobilePosition();
Element deviceIdElement = rootElement.element("DeviceID");
- String deviceId = deviceIdElement.getTextTrim().toString();
- Device device = storager.queryVideoDevice(deviceId);
- if (device != null) {
- rootElement = getRootElement(evt, device.getCharset());
- if (!StringUtils.isEmpty(device.getName())) {
- mobilePosition.setDeviceName(device.getName());
- }
+ if (!StringUtils.isEmpty(device.getName())) {
+ mobilePosition.setDeviceName(device.getName());
}
- mobilePosition.setDeviceId(XmlUtil.getText(rootElement, "DeviceID"));
+ mobilePosition.setDeviceId(deviceId);
+ mobilePosition.setChannelId(XmlUtil.getText(rootElement, "DeviceID"));
mobilePosition.setTime(XmlUtil.getText(rootElement, "Time"));
mobilePosition.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
mobilePosition.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
@@ -691,16 +697,18 @@
*/
private void processMessageAlarm(RequestEvent evt) {
try {
- Element rootElement = getRootElement(evt);
+ String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device == null) {
+ logger.warn("澶勭悊alarm璁惧鎶ヨ淇℃伅鏈壘鍒拌澶囦俊鎭�");
+ return;
+ }
+ Element rootElement = getRootElement(evt, device.getCharset());
Element deviceIdElement = rootElement.element("DeviceID");
- String deviceId = deviceIdElement.getText().toString();
+ String channelId = deviceIdElement.getText().toString();
// 鍥炲200 OK
responseAck(evt);
- Device device = storager.queryVideoDevice(deviceId);
- if (device == null) {
- return;
- }
if (device.getCharset() != null) {
rootElement = getRootElement(evt, device.getCharset());
}
@@ -708,6 +716,7 @@
if (rootElement.getName().equals("Notify")) { // 澶勭悊鎶ヨ閫氱煡
DeviceAlarm deviceAlarm = new DeviceAlarm();
deviceAlarm.setDeviceId(deviceId);
+ deviceAlarm.setChannelId(channelId);
deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority"));
deviceAlarm.setAlarmMethod(XmlUtil.getText(rootElement, "AlarmMethod"));
deviceAlarm.setAlarmTime(XmlUtil.getText(rootElement, "AlarmTime"));
@@ -792,7 +801,9 @@
Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest());
ServerTransaction serverTransaction = getServerTransaction(evt);
serverTransaction.sendResponse(response);
- if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
+ if (serverTransaction.getDialog() != null) {
+ serverTransaction.getDialog().delete();
+ }
}
// if (device != null && device.getOnline() == 1) {
@@ -1006,7 +1017,9 @@
Response response = getMessageFactory().createResponse(Response.OK, evt.getRequest());
ServerTransaction serverTransaction = getServerTransaction(evt);
serverTransaction.sendResponse(response);
- if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
+ if (serverTransaction.getDialog() != null) {
+ serverTransaction.getDialog().delete();
+ }
}
/***
@@ -1020,7 +1033,9 @@
Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest());
ServerTransaction serverTransaction = getServerTransaction(evt);
serverTransaction.sendResponse(response);
- if (serverTransaction.getDialog() != null) serverTransaction.getDialog().delete();
+ if (serverTransaction.getDialog() != null) {
+ serverTransaction.getDialog().delete();
+ }
}
private Element getRootElement(RequestEvent evt) throws DocumentException {
@@ -1029,7 +1044,9 @@
}
private Element getRootElement(RequestEvent evt, String charset) throws DocumentException {
- if (charset == null) charset = "gb2312";
+ if (charset == null) {
+ charset = "gb2312";
+ }
Request request = evt.getRequest();
SAXReader reader = new SAXReader();
reader.setEncoding(charset);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java
index e41eb96..7e4a544 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java
@@ -15,8 +15,8 @@
@Repository
public interface DeviceAlarmMapper {
- @Insert("INSERT INTO device_alarm (deviceId, alarmPriority, alarmMethod, alarmTime, alarmDescription, longitude, latitude, alarmType ) " +
- "VALUES ('${deviceId}', '${alarmPriority}', '${alarmMethod}', '${alarmTime}', '${alarmDescription}', ${longitude}, ${latitude}, '${alarmType}')")
+ @Insert("INSERT INTO device_alarm (deviceId, channelId, alarmPriority, alarmMethod, alarmTime, alarmDescription, longitude, latitude, alarmType ) " +
+ "VALUES ('${deviceId}', '${channelId}', '${alarmPriority}', '${alarmMethod}', '${alarmTime}', '${alarmDescription}', ${longitude}, ${latitude}, '${alarmType}')")
int add(DeviceAlarm alarm);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
index 29f3c4d..f3e4261 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java
@@ -10,8 +10,8 @@
//@Repository
public interface DeviceMobilePositionMapper {
- @Insert("INSERT INTO device_mobile_position (deviceId, deviceName, time, longitude, latitude, altitude, speed, direction, reportSource, geodeticSystem, cnLng, cnLat) " +
- "VALUES ('${deviceId}', '${deviceName}', '${time}', ${longitude}, ${latitude}, ${altitude}, ${speed}, ${direction}, '${reportSource}', '${geodeticSystem}', '${cnLng}', '${cnLat}')")
+ @Insert("INSERT INTO device_mobile_position (deviceId,channelId, deviceName, time, longitude, latitude, altitude, speed, direction, reportSource, geodeticSystem, cnLng, cnLat) " +
+ "VALUES ('${deviceId}','${channelId}', '${deviceName}', '${time}', ${longitude}, ${latitude}, ${altitude}, ${speed}, ${direction}, '${reportSource}', '${geodeticSystem}', '${cnLng}', '${cnLat}')")
int insertNewPosition(MobilePosition mobilePosition);
@Select(value = {" <script>" +
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/SipUtils.java
new file mode 100644
index 0000000..b889be2
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/utils/SipUtils.java
@@ -0,0 +1,23 @@
+package com.genersoft.iot.vmp.utils;
+
+import gov.nist.javax.sip.address.AddressImpl;
+import gov.nist.javax.sip.address.SipUri;
+
+import javax.sip.header.FromHeader;
+import javax.sip.message.Request;
+
+/**
+ * @author panlinlin
+ * @version 1.0.0
+ * @Description JAIN SIP鐨勫伐鍏风被
+ * @createTime 2021骞�09鏈�27鏃� 15:12:00
+ */
+public class SipUtils {
+
+ public static String getUserIdFromFromHeader(Request request) {
+ FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME);
+ AddressImpl address = (AddressImpl)fromHeader.getAddress();
+ SipUri uri = (SipUri) address.getURI();
+ return uri.getUser();
+ }
+}
diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite
index 40bdad8..78d6da3 100644
--- a/src/main/resources/wvp.sqlite
+++ b/src/main/resources/wvp.sqlite
Binary files differ
--
Gitblit v1.8.0