648540858
2023-03-22 f210952ed2377332613552e5d8134193fa2328b0
 优化国标级联中的通道全部导入
6个文件已修改
1个文件已删除
128 ■■■■ 已修改文件
sql/2.6.6-2.6.7更新.sql 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/2.6.7-2.6.8更新.sql 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/chooseChannel.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/chooseChannelForGb.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web_src/src/components/dialog/chooseChannelForStream.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/2.6.6-2.6.7¸üÐÂ.sql
@@ -4,3 +4,9 @@
alter table parent_platform
    add asMessageChannel int default 0;
alter table device
    add mediaServerId varchar(50) default null;
sql/2.6.7-2.6.8¸üÐÂ.sql
File was deleted
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
@@ -41,6 +41,9 @@
    private PlatformGbStreamMapper platformGbStreamMapper;
    @Autowired
    private SubscribeHolder subscribeHolder;
    @Autowired
    private ParentPlatformMapper platformMapper;
    @Autowired
@@ -73,16 +76,23 @@
        }
        try {
            List<DeviceChannel> deviceChannelList = new ArrayList<>();
            for (GbStream gbStream : gbStreams) {
            for (int i = 0; i < gbStreams.size(); i++) {
                GbStream gbStream = gbStreams.get(i);
                gbStream.setCatalogId(catalogId);
                gbStream.setPlatformId(platformId);
                // TODO ä¿®æ”¹ä¸ºæ‰¹é‡æäº¤
                platformGbStreamMapper.add(gbStream);
                logger.info("[关联通道]直播流通道 å¹³å°ï¼š{}, å…±éœ€å…³è”通道数:{}, å·²å…³è”:{}", platformId, gbStreams.size(), i + 1);
                DeviceChannel deviceChannelListByStream = getDeviceChannelListByStreamWithStatus(gbStream, catalogId, parentPlatform);
                deviceChannelList.add(deviceChannelListByStream);
            }
            dataSourceTransactionManager.commit(transactionStatus);     //手动提交
            eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
            if (subscribeHolder.getCatalogSubscribe(platformId) != null) {
                eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
            }
            result = true;
        }catch (Exception e) {
            logger.error("批量保存流与平台的关系时错误", e);
src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java
@@ -1,9 +1,6 @@
package com.genersoft.iot.vmp.service.impl;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
import com.genersoft.iot.vmp.gb28181.bean.TreeType;
import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.service.IPlatformChannelService;
@@ -15,7 +12,10 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
@@ -33,6 +33,16 @@
    @Autowired
    private PlatformChannelMapper platformChannelMapper;
    @Autowired
    TransactionDefinition transactionDefinition;
    @Autowired
    DataSourceTransactionManager dataSourceTransactionManager;
    @Autowired
    private SubscribeHolder subscribeHolder;
    @Autowired
    private DeviceChannelMapper deviceChannelMapper;
@@ -69,17 +79,47 @@
        }
        List<ChannelReduce> channelReducesToAdd = new ArrayList<>(deviceAndChannels.values());
        // å¯¹å‰©ä¸‹çš„æ•°æ®è¿›è¡Œå­˜å‚¨
        int result = 0;
        int allCount = 0;
        boolean result = false;
        TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
        int limitCount = 300;
        if (channelReducesToAdd.size() > 0) {
            result = platformChannelMapper.addChannels(platformId, channelReducesToAdd);
            // TODO åŽç»­ç»™å¹³å°å¢žåŠ æŽ§åˆ¶å¼€å…³ä»¥æŽ§åˆ¶æ˜¯å¦å“åº”ç›®å½•è®¢é˜…
            List<DeviceChannel> deviceChannelList = getDeviceChannelListByChannelReduceList(channelReducesToAdd, catalogId, platform);
            if (deviceChannelList != null) {
                eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
            if (channelReducesToAdd.size() > limitCount) {
                for (int i = 0; i < channelReducesToAdd.size(); i += limitCount) {
                    int toIndex = i + limitCount;
                    if (i + limitCount > channelReducesToAdd.size()) {
                        toIndex = channelReducesToAdd.size();
                    }
                    int count = platformChannelMapper.addChannels(platformId, channelReducesToAdd.subList(i, toIndex));
                    result = result || count < 0;
                    allCount += count;
                    logger.info("[关联通道]国标通道 å¹³å°ï¼š{}, å…±éœ€å…³è”通道数:{}, å·²å…³è”:{}", platformId, channelReducesToAdd.size(), toIndex);
                }
            }else {
                allCount = platformChannelMapper.addChannels(platformId, channelReducesToAdd);
                result = result || allCount < 0;
                logger.info("[关联通道]国标通道 å¹³å°ï¼š{}, å…³è”通道数:{}", platformId, channelReducesToAdd.size());
            }
        }
        return result;
            if (result) {
                //事务回滚
                dataSourceTransactionManager.rollback(transactionStatus);
                allCount = 0;
            }else {
                logger.info("[关联通道]国标通道 å¹³å°ï¼š{}, æ­£åœ¨å­˜å…¥æ•°æ®åº“", platformId);
                dataSourceTransactionManager.commit(transactionStatus);
            }
            SubscribeInfo catalogSubscribe = subscribeHolder.getCatalogSubscribe(platformId);
            if (catalogSubscribe != null) {
                List<DeviceChannel> deviceChannelList = getDeviceChannelListByChannelReduceList(channelReducesToAdd, catalogId, platform);
                if (deviceChannelList != null) {
                    eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
                }
            }
            logger.info("[关联通道]国标通道 å¹³å°ï¼š{}, å­˜å…¥æ•°æ®åº“成功", platformId);
        }
        return allCount;
    }
    private List<DeviceChannel> getDeviceChannelListByChannelReduceList(List<ChannelReduce> channelReduces, String catalogId, ParentPlatform platform) {
web_src/src/components/dialog/chooseChannel.vue
@@ -1,7 +1,7 @@
<template>
<div id="chooseChannel" v-loading="isLoging">
<div id="chooseChannel" >
    <el-dialog title="选择通道" v-if="showDialog" top="2rem" width="90%" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
    <el-dialog title="选择通道" v-loading="loading" v-if="showDialog" top="2rem" width="90%" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
      <el-row>
        <el-col :span="10">
          <el-tabs v-model="catalogTabActiveName" >
@@ -56,7 +56,7 @@
    },
    data() {
        return {
            isLoging: false,
            loading: false,
            tabActiveName: "gbChannel",
            catalogTabActiveName: "catalog",
            platformId: "",
@@ -94,18 +94,17 @@
        },
        save: function() {
            var that = this;
            this.$axios({
                method:"post",
                url:"/api/platform/update_channel_for_gb",
                data:{
                    platformId:  that.platformId,
                    channelReduces:  that.chooseData
                    platformId:  this.platformId,
                    channelReduces:  this.chooseData
                }
            }).then((res)=>{
              if (res.data.code === 0) {
                    that.$message({
                this.$message({
                        showClose: true,
                        message: '保存成功,',
                        type: 'success'
@@ -114,6 +113,7 @@
            }).catch(function (error) {
                console.log(error);
            });
        },
        catalogIdChange: function (id, name) {
            this.catalogId = id;
web_src/src/components/dialog/chooseChannelForGb.vue
@@ -1,5 +1,5 @@
<template>
<div id="chooseChannelForGb" >
<div id="chooseChannelForGb" v-loading="loading">
  <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;">
    <span v-if="catalogId == null">{{catalogName}}的国标通道</span>
    <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的国标通道</span>
@@ -79,6 +79,7 @@
    },
    data() {
        return {
            loading: false,
            gbChannels: [],
            gbChoosechannel:{},
            searchSrt: "",
@@ -118,7 +119,9 @@
        },
        add: function (row) {
          let all = typeof(row) === "undefined"
          this.getCatalogFromUser((catalogId)=> {
            let task = null;
            this.$axios({
              method:"post",
              url:"/api/platform/update_channel_for_gb",
@@ -130,12 +133,20 @@
              }
            }).then((res)=>{
              console.log("保存成功")
              window.clearTimeout(task);
              this.loading = false;
              this.getChannelList();
            }).catch(function (error) {
            }).catch((error)=> {
              window.clearTimeout(task);
              this.loading = false;
              console.log(error);
            });
            task= setTimeout(()=>{
              this.loading = true;
            }, 200)
          })
        },
        remove: function (row) {
          let all = typeof(row) === "undefined"
web_src/src/components/dialog/chooseChannelForStream.vue
@@ -1,5 +1,5 @@
<template>
<div id="chooseChannelFoStream" >
<div id="chooseChannelFoStream" v-loading="loading">
    <div style="font-size: 17px; color: #606060; white-space: nowrap; line-height: 30px; font-family: monospace;">
      <span v-if="catalogId == null">{{catalogName}}的直播通道</span>
      <span v-if="catalogId != null">{{catalogName}}({{catalogId}})的直播通道</span>
@@ -85,6 +85,7 @@
    },
    data() {
        return {
            loading: false,
            gbStreams: [],
            gbChoosechannel:{},
            channelType: "",
@@ -132,6 +133,7 @@
        add: function (row, scope) {
          let all = typeof(row) === "undefined"
          this.getCatalogFromUser((catalogId)=>{
            let task = null;
            this.$axios({
              method:"post",
              url:"/api/gbStream/add",
@@ -143,11 +145,18 @@
              }
            }).then((res)=>{
              console.log("保存成功")
              window.clearTimeout(task);
              this.loading = false;
              // this.gbStreams.splice(scope.$index,1)
              this.getChannelList();
            }).catch(function (error) {
              window.clearTimeout(task);
              this.loading = false;
              console.log(error);
            });
            task= setTimeout(()=>{
              this.loading = true;
            }, 200)
          })