Commit 20622d20d63870e54118c70b75bfa53839c4b801

Authored by 648540858
1 parent 596a633d

修复更新通道状态回复不准的问题

src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
@@ -78,7 +78,6 @@ public class CatalogDataCatch { @@ -78,7 +78,6 @@ public class CatalogDataCatch {
78 public SyncStatus getSyncStatus(String deviceId) { 78 public SyncStatus getSyncStatus(String deviceId) {
79 CatalogData catalogData = data.get(deviceId); 79 CatalogData catalogData = data.get(deviceId);
80 if (catalogData == null) return null; 80 if (catalogData == null) return null;
81 - if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) return null;  
82 SyncStatus syncStatus = new SyncStatus(); 81 SyncStatus syncStatus = new SyncStatus();
83 syncStatus.setCurrent(catalogData.getChannelList().size()); 82 syncStatus.setCurrent(catalogData.getChannelList().size());
84 syncStatus.setTotal(catalogData.getTotal()); 83 syncStatus.setTotal(catalogData.getTotal());
@@ -86,6 +85,12 @@ public class CatalogDataCatch { @@ -86,6 +85,12 @@ public class CatalogDataCatch {
86 return syncStatus; 85 return syncStatus;
87 } 86 }
88 87
  88 + public boolean isSyncRunning(String deviceId) {
  89 + CatalogData catalogData = data.get(deviceId);
  90 + if (catalogData == null) return false;
  91 + return !catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end);
  92 + }
  93 +
89 @Scheduled(fixedRate = 5 * 1000) //每5秒执行一次, 发现数据5秒未更新则移除数据并认为数据接收超时 94 @Scheduled(fixedRate = 5 * 1000) //每5秒执行一次, 发现数据5秒未更新则移除数据并认为数据接收超时
90 private void timerTask(){ 95 private void timerTask(){
91 Set<String> keys = data.keySet(); 96 Set<String> keys = data.keySet();
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -223,6 +223,14 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp @@ -223,6 +223,14 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
223 } 223 }
224 } 224 }
225 225
  226 + public boolean isSyncRunning(String deviceId) {
  227 + if (catalogDataCatch.get(deviceId) == null) {
  228 + return false;
  229 + }else {
  230 + return catalogDataCatch.isSyncRunning(deviceId);
  231 + }
  232 + }
  233 +
226 public void setChannelSyncReady(Device device, int sn) { 234 public void setChannelSyncReady(Device device, int sn) {
227 catalogDataCatch.addReady(device, sn); 235 catalogDataCatch.addReady(device, sn);
228 } 236 }
src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
@@ -44,6 +44,13 @@ public interface IDeviceService { @@ -44,6 +44,13 @@ public interface IDeviceService {
44 SyncStatus getChannelSyncStatus(String deviceId); 44 SyncStatus getChannelSyncStatus(String deviceId);
45 45
46 /** 46 /**
  47 + * 查看是否仍在同步
  48 + * @param deviceId 设备ID
  49 + * @return
  50 + */
  51 + Boolean isSyncRunning(String deviceId);
  52 +
  53 + /**
47 * 通道同步 54 * 通道同步
48 * @param device 55 * @param device
49 */ 56 */
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -100,6 +100,11 @@ public class DeviceServiceImpl implements IDeviceService { @@ -100,6 +100,11 @@ public class DeviceServiceImpl implements IDeviceService {
100 } 100 }
101 101
102 @Override 102 @Override
  103 + public Boolean isSyncRunning(String deviceId) {
  104 + return catalogResponseMessageHandler.isSyncRunning(deviceId);
  105 + }
  106 +
  107 + @Override
103 public void sync(Device device) { 108 public void sync(Device device) {
104 if (catalogResponseMessageHandler.getChannelSyncProgress(device.getDeviceId()) != null) { 109 if (catalogResponseMessageHandler.getChannelSyncProgress(device.getDeviceId()) != null) {
105 logger.info("开启同步时发现同步已经存在"); 110 logger.info("开启同步时发现同步已经存在");
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -164,12 +164,13 @@ public class DeviceQuery { @@ -164,12 +164,13 @@ public class DeviceQuery {
164 logger.debug("设备通道信息同步API调用,deviceId:" + deviceId); 164 logger.debug("设备通道信息同步API调用,deviceId:" + deviceId);
165 } 165 }
166 Device device = storager.queryVideoDevice(deviceId); 166 Device device = storager.queryVideoDevice(deviceId);
167 - SyncStatus syncStatus = deviceService.getChannelSyncStatus(deviceId); 167 + boolean status = deviceService.isSyncRunning(deviceId);
168 // 已存在则返回进度 168 // 已存在则返回进度
169 - if (syncStatus != null && syncStatus.getErrorMsg() == null) { 169 + if (status) {
170 WVPResult<SyncStatus> wvpResult = new WVPResult<>(); 170 WVPResult<SyncStatus> wvpResult = new WVPResult<>();
171 wvpResult.setCode(0); 171 wvpResult.setCode(0);
172 - wvpResult.setData(syncStatus); 172 + SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId);
  173 + wvpResult.setData(channelSyncStatus);
173 return wvpResult; 174 return wvpResult;
174 } 175 }
175 deviceService.sync(device); 176 deviceService.sync(device);