处理报警和位置上报时使用fromHeader获取deviceId, xml的deviceId作为channelId使用。
7个文件已修改
1个文件已添加
114 ■■■■ 已修改文件
sql/mysql.sql 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceAlarm.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/bean/MobilePosition.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceAlarmMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMobilePositionMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/utils/SipUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/wvp.sqlite 补丁 | 查看 | 原始文档 | blame | 历史
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,
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;
    }
}
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;
    }
}
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);
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);
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>" +
src/main/java/com/genersoft/iot/vmp/utils/SipUtils.java
New file
@@ -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();
    }
}
src/main/resources/wvp.sqlite
Binary files differ