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