648540858
2022-11-22 14699711028f0d157eddfb0432e26ab91f1b4493
支持配置设备上线时自动更新查询通道,修复通道刷新进度展示
4个文件已修改
80 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/all-application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/SyncChannelProgress.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
@@ -41,6 +41,8 @@
    private Boolean gbSendStreamStrict = Boolean.FALSE;
    private Boolean syncChannelOnDeviceOnline = Boolean.FALSE;
    private String serverId = "000000";
    private String thirdPartyGBIdReg = "[\\s\\S]*";
@@ -186,4 +188,12 @@
    public void setGbSendStreamStrict(Boolean gbSendStreamStrict) {
        this.gbSendStreamStrict = gbSendStreamStrict;
    }
    public Boolean getSyncChannelOnDeviceOnline() {
        return syncChannelOnDeviceOnline;
    }
    public void setSyncChannelOnDeviceOnline(Boolean syncChannelOnDeviceOnline) {
        this.syncChannelOnDeviceOnline = syncChannelOnDeviceOnline;
    }
}
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -1,6 +1,7 @@
package com.genersoft.iot.vmp.service.impl;
import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask;
@@ -12,7 +13,6 @@
import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper;
@@ -78,7 +78,7 @@
    TransactionDefinition transactionDefinition;
    @Autowired
    private IVideoManagerStorage storage;
    private UserSetting userSetting;
    @Autowired
    private ISIPCommander commander;
@@ -120,16 +120,18 @@
            if(device.getOnline() == 0){
                device.setOnline(1);
                device.setCreateTime(now);
                logger.info("[设备上线,离线状态下重新注册]: {},查询设备信息以及通道信息", device.getDeviceId());
                deviceMapper.update(device);
                redisCatchStorage.updateDevice(device);
                try {
                    commander.deviceInfoQuery(device);
                } catch (InvalidArgumentException | SipException | ParseException e) {
                    logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
                if (userSetting.getSyncChannelOnDeviceOnline()) {
                    logger.info("[设备上线,离线状态下重新注册]: {},查询设备信息以及通道信息", device.getDeviceId());
                    try {
                        commander.deviceInfoQuery(device);
                    } catch (InvalidArgumentException | SipException | ParseException e) {
                        logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage());
                    }
                    sync(device);
                    // TODO 如果设备下的通道级联到了其他平台,那么需要发送事件或者notify给上级平台
                }
                sync(device);
                // TODO 如果设备下的通道级联到了其他平台,那么需要发送事件或者notify给上级平台
            }else {
                if (deviceChannelMapper.queryAllChannels(device.getDeviceId()).size() == 0) {
                    logger.info("[设备上线]: {},通道数为0,查询通道信息", device.getDeviceId());
src/main/resources/all-application.yml
@@ -195,6 +195,8 @@
    # 国标级联发流严格模式,严格模式会使用与sdp信息中一致的端口发流,端口共享media.rtp.port-range,这会损失一些性能,
    # 非严格模式使用随机端口发流,性能更好, 默认关闭
    gb-send-stream-strict: false
    # 设备上线时是否自动同步通道
    sync-channel-on-device-online: false
# 关闭在线文档(生产环境建议关闭)
springdoc:
web_src/src/components/dialog/SyncChannelProgress.vue
@@ -63,37 +63,29 @@
          }
          if (res.data.data != null) {
            if (res.data.syncIng) {
            if (res.data.data.syncIng) {
              if (res.data.data.total == 0) {
                if (res.data.data.errorMsg !== null ){
                  this.msg = res.data.data.errorMsg;
                  this.syncStatus = "exception"
                }else {
                  this.msg = `等待同步中`;
                  this.timmer = setTimeout(this.getProgress, 300)
                }
              }else  {
                if (res.data.data.total == res.data.data.current) {
                  this.syncStatus = "success"
                  this.percentage = 100;
                  this.msg = '同步成功';
                }else {
                  if (res.data.data.errorMsg !== null ){
                    this.msg = res.data.data.errorMsg;
                    this.syncStatus = "exception"
                  }else {
                    this.total = res.data.data.total;
                    this.current = res.data.data.current;
                    this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100;
                    this.msg = `同步中...[${res.data.data.current}/${res.data.data.total}]`;
                    this.timmer = setTimeout(this.getProgress, 300)
                  }
                }
                this.msg = `等待同步中`;
                this.timmer = setTimeout(this.getProgress, 300)
              }else {
                this.total = res.data.data.total;
                this.current = res.data.data.current;
                this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100;
                this.msg = `同步中...[${res.data.data.current}/${res.data.data.total}]`;
                this.timmer = setTimeout(this.getProgress, 300)
              }
            }else {
              this.syncStatus = "success"
              this.percentage = 100;
              this.msg = '同步成功';
              if (res.data.data.errorMsg){
                this.msg = res.data.data.errorMsg;
                this.syncStatus = "exception"
              }else {
                this.syncStatus = "success"
                this.percentage = 100;
                this.msg = '同步成功';
                setTimeout(()=>{
                  this.showDialog = false;
                }, 3000)
              }
            }
          }
        }else {