From b444585ebe70764117fd0433183b7bcd63c430f3 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 22 三月 2023 15:20:48 +0800 Subject: [PATCH] 优化国标级联中的通道全部导入 --- /dev/null | 4 - web_src/src/components/dialog/chooseChannel.vue | 14 ++-- sql/2.6.6-2.6.7更新.sql | 6 ++ src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java | 64 +++++++++++++++++---- src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java | 14 ++++ web_src/src/components/dialog/chooseChannelForGb.vue | 15 ++++ web_src/src/components/dialog/chooseChannelForStream.vue | 11 +++ 7 files changed, 100 insertions(+), 28 deletions(-) diff --git "a/sql/2.6.6-2.6.7\346\233\264\346\226\260.sql" "b/sql/2.6.6-2.6.7\346\233\264\346\226\260.sql" index df595a8..09732b3 100755 --- "a/sql/2.6.6-2.6.7\346\233\264\346\226\260.sql" +++ "b/sql/2.6.6-2.6.7\346\233\264\346\226\260.sql" @@ -4,3 +4,9 @@ alter table parent_platform add asMessageChannel int default 0; +alter table device + add mediaServerId varchar(50) default null; + + + + diff --git "a/sql/2.6.7-2.6.8\346\233\264\346\226\260.sql" "b/sql/2.6.7-2.6.8\346\233\264\346\226\260.sql" deleted file mode 100755 index 208f0bf..0000000 --- "a/sql/2.6.7-2.6.8\346\233\264\346\226\260.sql" +++ /dev/null @@ -1,4 +0,0 @@ -alter table device - add mediaServerId varchar(50) default null; - - diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java index 89acb06..37e3b9e 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java +++ b/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); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java index 601ff5d..7d827d7 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java +++ b/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("[鍏宠仈閫氶亾]鍥芥爣閫氶亾 骞冲彴锛歿}, 姝e湪瀛樺叆鏁版嵁搴�", 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) { diff --git a/web_src/src/components/dialog/chooseChannel.vue b/web_src/src/components/dialog/chooseChannel.vue index e0e79c3..be7e969 100644 --- a/web_src/src/components/dialog/chooseChannel.vue +++ b/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; diff --git a/web_src/src/components/dialog/chooseChannelForGb.vue b/web_src/src/components/dialog/chooseChannelForGb.vue index fc97b4c..bc71577 100644 --- a/web_src/src/components/dialog/chooseChannelForGb.vue +++ b/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" diff --git a/web_src/src/components/dialog/chooseChannelForStream.vue b/web_src/src/components/dialog/chooseChannelForStream.vue index 6c4653b..b522a63 100644 --- a/web_src/src/components/dialog/chooseChannelForStream.vue +++ b/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) }) -- Gitblit v1.8.0