648540858
2022-04-18 20622d20d63870e54118c70b75bfa53839c4b801
修复更新通道状态回复不准的问题
5个文件已修改
34 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/session/CatalogDataCatch.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);