diff --git a/sql/mysql.sql b/sql/mysql.sql index dba42c16..45012577 100644 --- a/sql/mysql.sql +++ b/sql/mysql.sql @@ -66,6 +66,7 @@ create table device_alarm 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 log 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 bbb304ca..8176c1c9 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 @@ -13,6 +13,11 @@ public class DeviceAlarm { */ private String deviceId; + /** + * 通道Id + */ + private String channelId; + /** * 报警级别, 1为一级警情, 2为二级警情, 3为三级警情, 4为四级 警情- */ @@ -121,4 +126,12 @@ public class DeviceAlarm { 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 47535a6d..aba33924 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 @@ -12,6 +12,11 @@ public class MobilePosition { */ private String deviceId; + /** + * 通道Id + */ + private String channelId; + /** * 设备名称 */ @@ -163,4 +168,12 @@ public class MobilePosition { 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 6f38e560..f76048cf 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.text.ParseException; 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.service.IDeviceAlarmService; 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 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { */ 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 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { */ private void processMessageAlarm(RequestEvent evt) { try { - Element rootElement = getRootElement(evt); - Element deviceIdElement = rootElement.element("DeviceID"); - String deviceId = deviceIdElement.getText().toString(); - // 回复200 OK - responseAck(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 channelId = deviceIdElement.getText().toString(); + // 回复200 OK + responseAck(evt); + if (device.getCharset() != null) { rootElement = getRootElement(evt, device.getCharset()); } @@ -708,6 +716,7 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 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 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 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 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 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 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 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 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { } 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 e41eb96c..7e4a544e 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 @@ import java.util.List; @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 29f3c4d1..f3e42615 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 @@ import org.apache.ibatis.annotations.*; //@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 = {"