| 
					
				 | 
			
			
				@@ -1,6 +1,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.genersoft.iot.vmp.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.dynamic.datasource.annotation.DS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.genersoft.iot.vmp.common.CommonCallback; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.common.VideoManagerConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.conf.DynamicTask; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.genersoft.iot.vmp.conf.UserSetting; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -231,8 +232,8 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 移除订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        removeCatalogSubscribe(device); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        removeMobilePositionSubscribe(device); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        removeCatalogSubscribe(device, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        removeMobilePositionSubscribe(device, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -251,7 +252,7 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public boolean removeCatalogSubscribe(Device device) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean removeCatalogSubscribe(Device device, CommonCallback<Boolean> callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (device == null || device.getSubscribeCycleForCatalog() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -261,7 +262,7 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Runnable runnable = dynamicTask.get(taskKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (runnable instanceof ISubscribeTask) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ISubscribeTask subscribeTask = (ISubscribeTask) runnable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                subscribeTask.stop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subscribeTask.stop(callback); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dynamicTask.stop(taskKey); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -284,7 +285,7 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public boolean removeMobilePositionSubscribe(Device device) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean removeMobilePositionSubscribe(Device device, CommonCallback<Boolean> callback) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (device == null || device.getSubscribeCycleForCatalog() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -294,7 +295,7 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Runnable runnable = dynamicTask.get(taskKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (runnable instanceof ISubscribeTask) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ISubscribeTask subscribeTask = (ISubscribeTask) runnable; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                subscribeTask.stop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                subscribeTask.stop(callback); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dynamicTask.stop(taskKey); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -522,39 +523,54 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!ObjectUtils.isEmpty(device.getStreamMode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             deviceInStore.setStreamMode(device.getStreamMode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //  目录订阅相关的信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (deviceInStore.getSubscribeCycleForCatalog() != device.getSubscribeCycleForCatalog()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (device.getSubscribeCycleForCatalog() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 若已开启订阅,但订阅周期不同,则先取消 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (deviceInStore.getSubscribeCycleForCatalog() != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    removeCatalogSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    removeCatalogSubscribe(deviceInStore, result->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 开启订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        addCatalogSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 因为是异步执行,需要在这里更新下数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deviceMapper.updateCustom(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        redisCatchStorage.updateDevice(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 开启订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    addCatalogSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 开启订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                addCatalogSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }else if (device.getSubscribeCycleForCatalog() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 取消订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                removeCatalogSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deviceInStore.setSubscribeCycleForCatalog(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                removeCatalogSubscribe(deviceInStore, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 移动位置订阅相关的信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (device.getSubscribeCycleForMobilePosition() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (deviceInStore.getSubscribeCycleForMobilePosition() == 0 || deviceInStore.getSubscribeCycleForMobilePosition() != device.getSubscribeCycleForMobilePosition()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // 开启订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                addMobilePositionSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else if (device.getSubscribeCycleForMobilePosition() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (deviceInStore.getSubscribeCycleForMobilePosition() != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (deviceInStore.getSubscribeCycleForMobilePosition() != device.getSubscribeCycleForMobilePosition()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (device.getSubscribeCycleForMobilePosition() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 若已开启订阅,但订阅周期不同,则先取消 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (deviceInStore.getSubscribeCycleForMobilePosition() != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    removeMobilePositionSubscribe(deviceInStore, result->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 开启订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        addMobilePositionSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        // 因为是异步执行,需要在这里更新下数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deviceMapper.updateCustom(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        redisCatchStorage.updateDevice(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // 开启订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    addMobilePositionSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else if (device.getSubscribeCycleForMobilePosition() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 取消订阅 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                removeMobilePositionSubscribe(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deviceInStore.setSubscribeCycleForCatalog(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                removeCatalogSubscribe(deviceInStore, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (deviceInStore.getGeoCoordSys() != null) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -574,9 +590,8 @@ public class DeviceServiceImpl implements IDeviceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //作为消息通道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         deviceInStore.setAsMessageChannel(device.isAsMessageChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 更新redis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         deviceMapper.updateCustom(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        redisCatchStorage.removeDevice(deviceInStore.getDeviceId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        redisCatchStorage.updateDevice(deviceInStore); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 |