| 
					
				 | 
			
			
				@@ -10,19 +10,14 @@ import javax.sip.SipException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.sip.message.Request;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.sip.message.Response;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.dom4j.Document;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.dom4j.DocumentException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.dom4j.Element;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.dom4j.io.SAXReader;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.slf4j.Logger;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.slf4j.LoggerFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.beans.factory.annotation.Autowired;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.common.StreamInfo;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.common.VideoManagerConstants;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.conf.UserSetup;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.gb28181.bean.BaiduPoint;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.bean.Device;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.gb28181.bean.MobilePosition;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -32,18 +27,31 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.SpringBeanFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.dom4j.Document;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.dom4j.DocumentException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.dom4j.Element;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.dom4j.io.SAXReader;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.Logger;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.LoggerFactory;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.StringUtils;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.genersoft.iot.vmp.common.StreamInfo;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @Description:MESSAGE请求处理器
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author: swwheihei
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @date: 2020年5月3日 下午5:32:41
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class MessageRequestProcessor extends SIPRequestAbstractProcessor {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private UserSetup userSetup = (UserSetup) SpringBeanFactory.getBean("userSetup");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private SIPCommander cmder;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -71,7 +79,7 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private static final String MESSAGE_MEDIA_STATUS = "MediaStatus";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// private static final String MESSAGE_BROADCAST = "Broadcast";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	// private static final String MESSAGE_MOBILE_POSITION = "MobilePosition";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private static final String MESSAGE_MOBILE_POSITION = "MobilePosition";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// private static final String MESSAGE_MOBILE_POSITION_INTERVAL = "Interval";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/**
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,10 +114,74 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}else if (MESSAGE_MEDIA_STATUS.equals(cmd)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				logger.info("接收到MediaStatus消息");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				processMessageMediaStatus(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else if (MESSAGE_MOBILE_POSITION.equals(cmd)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				logger.info("接收到MobilePosition消息");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				processMessageMobilePosition(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				logger.info("接收到消息:" + cmd);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				responseAck(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} catch (DocumentException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} catch (DocumentException | SipException |InvalidArgumentException | ParseException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			e.printStackTrace();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 处理MobilePosition移动位置消息
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param evt
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private void processMessageMobilePosition(RequestEvent evt) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			//回复 200 OK
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Element rootElement = getRootElement(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MobilePosition mobilePosition = new MobilePosition();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Element deviceIdElement = rootElement.element("DeviceID");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			String deviceId = deviceIdElement.getTextTrim().toString();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Device device = storager.queryVideoDevice(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (device != null) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (!StringUtils.isEmpty(device.getName())) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					mobilePosition.setDeviceName(device.getName());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			mobilePosition.setDeviceId(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")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Speed"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setSpeed(Double.parseDouble(XmlUtil.getText(rootElement, "Speed")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setSpeed(0.0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Direction"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setDirection(Double.parseDouble(XmlUtil.getText(rootElement, "Direction")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setDirection(0.0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Altitude"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setAltitude(Double.parseDouble(XmlUtil.getText(rootElement, "Altitude")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setAltitude(0.0);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			mobilePosition.setReportSource("Mobile Position");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			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()) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				storager.clearMobilePositionsByDeviceId(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			storager.insertMobilePosition(mobilePosition);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// List<MobilePosition> all= storager.queryMobilePositions(deviceId, "2021-01-23T00:00:00", "2021-02-28T23:59:59");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// all= storager.queryMobilePositions(deviceId, null, "2021-01-24T23:59:59");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// all= storager.queryMobilePositions(deviceId, "2021-01-24T00:00:00", null);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// //logger.debug(all.toString());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// MobilePosition mp = storager.queryLatestPosition(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// logger.debug("最新位置:" + mp.getLongitude() + ", " + mp.getLatitude());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			responseAck(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			e.printStackTrace();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -123,7 +195,7 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Element rootElement = getRootElement(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Element deviceIdElement = rootElement.element("DeviceID");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			String deviceId = deviceIdElement.getText().toString();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			String deviceId = deviceIdElement.getTextTrim().toString();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Device device = storager.queryVideoDevice(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (device == null) {
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -180,11 +252,11 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if (channelDeviceElement == null) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						continue;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					String channelDeviceId = channelDeviceElement.getText();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					String channelDeviceId = channelDeviceElement.getTextTrim();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					Element channdelNameElement = itemDevice.element("Name");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					Element statusElement = itemDevice.element("Status");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					String status = statusElement != null ? statusElement.getText().toString() : "ON";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON";
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					DeviceChannel deviceChannel = new DeviceChannel();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					deviceChannel.setName(channelName);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					deviceChannel.setChannelId(channelDeviceId);
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -238,15 +310,15 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (XmlUtil.getText(itemDevice, "Longitude") == null || XmlUtil.getText(itemDevice, "Longitude") == "") {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						deviceChannel.setLongitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Longitude"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (XmlUtil.getText(itemDevice, "Latitude") == null || XmlUtil.getText(itemDevice, "Latitude") =="") {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						deviceChannel.setLatitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						deviceChannel.setLongitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Latitude"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						deviceChannel.setLatitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if (XmlUtil.getText(itemDevice, "PTZType") == null || XmlUtil.getText(itemDevice, "PTZType") == "") {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						deviceChannel.setPTZType(0);
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -274,8 +346,7 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/***
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 * 收到alarm设备报警信息 处理
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 * 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * alarm设备报警信息处理
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * @param evt
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private void processMessageAlarm(RequestEvent evt) {
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -286,11 +357,8 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Device device = storager.queryVideoDevice(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (device == null) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// TODO 也可能是通道
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// storager.queryChannel(deviceId)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				return;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			DeviceAlarm deviceAlarm = new DeviceAlarm();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			deviceAlarm.setDeviceId(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			deviceAlarm.setAlarmPriority(XmlUtil.getText(rootElement, "AlarmPriority"));
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -301,26 +369,37 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				deviceAlarm.setAlarmDescription(XmlUtil.getText(rootElement, "AlarmDescription"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (XmlUtil.getText(rootElement, "Longitude") == null || XmlUtil.getText(rootElement, "Longitude") == "") {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				deviceAlarm.setLongitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Longitude"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				deviceAlarm.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (XmlUtil.getText(rootElement, "Latitude") == null || XmlUtil.getText(rootElement, "Latitude") =="") {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				deviceAlarm.setLatitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				deviceAlarm.setLongitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Latitude"))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				deviceAlarm.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude")));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				deviceAlarm.setLatitude(0.00);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ( deviceAlarm.getAlarmMethod().equals("4")) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				MobilePosition mobilePosition = new MobilePosition();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setDeviceId(deviceAlarm.getDeviceId());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				mobilePosition.setTime(deviceAlarm.getAlarmTime());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				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()) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					storager.clearMobilePositionsByDeviceId(deviceId);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				storager.insertMobilePosition(mobilePosition);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// TODO: 需要实现存储报警信息、报警分类
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// device.setName(XmlUtil.getText(rootElement, "DeviceName"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// device.setManufacturer(XmlUtil.getText(rootElement, "Manufacturer"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// device.setModel(XmlUtil.getText(rootElement, "Model"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// device.setFirmware(XmlUtil.getText(rootElement, "Firmware"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// if (StringUtils.isEmpty(device.getStreamMode())) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// 	device.setStreamMode("UDP");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// storager.updateDevice(device);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//cmder.catalogQuery(device, null);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 回复200 OK
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			responseAck(evt);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (offLineDetector.isOnline(deviceId)) {
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -350,7 +429,6 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} else {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			e.printStackTrace();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -458,7 +536,11 @@ public class MessageRequestProcessor extends SIPRequestAbstractProcessor { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * 收到MediaStatus消息处理
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	 *  
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	 * @param evt
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	 */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private void processMessageMediaStatus(RequestEvent evt){
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		try {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 回复200 OK
 
			 |