| 
					
				 | 
			
			
				@@ -1,16 +1,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.genersoft.iot.vmp.gb28181.task.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.genersoft.iot.vmp.gb28181.bean.GbStream; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.gb28181.bean.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.scheduling.annotation.Async; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import java.text.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.sip.DialogState; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -18,6 +18,8 @@ import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class MobilePositionSubscribeHandlerTask implements ISubscribeTask { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private Logger logger = LoggerFactory.getLogger(MobilePositionSubscribeHandlerTask.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private IRedisCatchStorage redisCatchStorage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private IVideoManagerStorage storager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private ISIPCommanderForPlatform sipCommanderForPlatform; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -26,8 +28,6 @@ public class MobilePositionSubscribeHandlerTask implements ISubscribeTask { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String sn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String key; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public MobilePositionSubscribeHandlerTask(IRedisCatchStorage redisCatchStorage, ISIPCommanderForPlatform sipCommanderForPlatform, IVideoManagerStorage storager, String platformId, String sn, String key, SubscribeHolder subscribeInfo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.redisCatchStorage = redisCatchStorage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.storager = storager; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -38,40 +38,51 @@ public class MobilePositionSubscribeHandlerTask implements ISubscribeTask { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.subscribeHolder = subscribeInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Async 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void run() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("执行MobilePositionSubscribeHandlerTask"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SubscribeInfo subscribe = subscribeHolder.getMobilePositionSubscribe(platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (subscribe != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (parentPlatform == null || parentPlatform.isStatus()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // TODO 暂时只处理视频流的回复,后续增加对国标设备的支持 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (gbStreams.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    for (GbStream gbStream : gbStreams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        String gbId = gbStream.getGbId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        GPSMsgInfo gpsMsgInfo = redisCatchStorage.getGpsMsgInfo(gbId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (gpsMsgInfo != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // 发送GPS消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // 没有在redis找到新的消息就使用数据库的消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            gpsMsgInfo = new GPSMsgInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            gpsMsgInfo.setId(gbId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            gpsMsgInfo.setLat(gbStream.getLongitude()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            gpsMsgInfo.setLng(gbStream.getLongitude()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            // 发送GPS消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (parentPlatform == null ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                logger.info("发送订阅时未找到平台信息:{}", platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!parentPlatform.isStatus()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                logger.info("发送订阅时发现平台已经离线:{}", platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // TODO 暂时只处理视频流的回复,后续增加对国标设备的支持 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<GbStream> gbStreams = storager.queryGbStreamListInPlatform(platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (gbStreams.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                logger.info("发送订阅时发现平台已经没有关联的直播流:{}", platformId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (GbStream gbStream : gbStreams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String gbId = gbStream.getGbId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                GPSMsgInfo gpsMsgInfo = redisCatchStorage.getGpsMsgInfo(gbId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (gpsMsgInfo != null) { // 无最新位置不发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 经纬度都为0不发送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (gpsMsgInfo.getLng() == 0 && gpsMsgInfo.getLat() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 发送GPS消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sipCommanderForPlatform.sendNotifyMobilePosition(parentPlatform, gpsMsgInfo, subscribe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        logger.info("结束执行MobilePositionSubscribeHandlerTask"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void stop() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public DialogState getDialogState() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |