src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java
@@ -78,7 +78,6 @@ public SyncStatus getSyncStatus(String deviceId) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) return null; if (catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end)) return null; SyncStatus syncStatus = new SyncStatus(); syncStatus.setCurrent(catalogData.getChannelList().size()); syncStatus.setTotal(catalogData.getTotal()); @@ -86,6 +85,12 @@ return syncStatus; } public boolean isSyncRunning(String deviceId) { CatalogData catalogData = data.get(deviceId); if (catalogData == null) return false; return !catalogData.getStatus().equals(CatalogData.CatalogDataStatus.end); } @Scheduled(fixedRate = 5 * 1000) //每5秒执行一次, 发现数据5秒未更新则移除数据并认为数据接收超时 private void timerTask(){ 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 boolean isSyncRunning(String deviceId) { if (catalogDataCatch.get(deviceId) == null) { return false; }else { return catalogDataCatch.isSyncRunning(deviceId); } } public void setChannelSyncReady(Device device, int sn) { catalogDataCatch.addReady(device, sn); } src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
@@ -44,6 +44,13 @@ SyncStatus getChannelSyncStatus(String deviceId); /** * 查看是否仍在同步 * @param deviceId 设备ID * @return */ Boolean isSyncRunning(String deviceId); /** * 通道同步 * @param device */ src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -100,6 +100,11 @@ } @Override public Boolean isSyncRunning(String deviceId) { return catalogResponseMessageHandler.isSyncRunning(deviceId); } @Override public void sync(Device device) { if (catalogResponseMessageHandler.getChannelSyncProgress(device.getDeviceId()) != null) { logger.info("开启同步时发现同步已经存在"); src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -164,12 +164,13 @@ logger.debug("设备通道信息同步API调用,deviceId:" + deviceId); } Device device = storager.queryVideoDevice(deviceId); SyncStatus syncStatus = deviceService.getChannelSyncStatus(deviceId); boolean status = deviceService.isSyncRunning(deviceId); // 已存在则返回进度 if (syncStatus != null && syncStatus.getErrorMsg() == null) { if (status) { WVPResult<SyncStatus> wvpResult = new WVPResult<>(); wvpResult.setCode(0); wvpResult.setData(syncStatus); SyncStatus channelSyncStatus = deviceService.getChannelSyncStatus(deviceId); wvpResult.setData(channelSyncStatus); return wvpResult; } deviceService.sync(device);