From 985082d33930868c3cc1723f28fd9aaae9013a8f Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 16 八月 2023 09:11:22 +0800 Subject: [PATCH] 添加缺少的内容 --- src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java | 87 ++++++++++++++++++++++++++++++++----------- 1 files changed, 65 insertions(+), 22 deletions(-) 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 old mode 100644 new mode 100755 index 601ff5d..517cb04 --- 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,39 +79,72 @@ } 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) { List<DeviceChannel> deviceChannelList = new ArrayList<>(); if (channelReduces.size() > 0){ - PlatformCatalog catalog = catalogManager.select(catalogId); - if (catalog == null && !catalogId.equals(platform.getDeviceGBId())) { + PlatformCatalog catalog = catalogManager.selectByPlatFormAndCatalogId(platform.getServerGBId(),catalogId); + if (catalog == null && catalogId.equals(platform.getDeviceGBId())) { + for (ChannelReduce channelReduce : channelReduces) { + DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId()); + deviceChannel.setParental(0); + deviceChannel.setCivilCode(platform.getServerGBDomain()); + deviceChannelList.add(deviceChannel); + } + return deviceChannelList; + } else if (catalog == null || !catalogId.equals(platform.getDeviceGBId())) { logger.warn("鏈煡璇㈠埌鐩綍{}鐨勪俊鎭�", catalogId); return null; } for (ChannelReduce channelReduce : channelReduces) { DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId()); deviceChannel.setParental(0); + deviceChannel.setCivilCode(catalog.getCivilCode()); + deviceChannel.setParentId(catalog.getParentId()); + deviceChannel.setBusinessGroupId(catalog.getBusinessGroupId()); deviceChannelList.add(deviceChannel); - if (platform.getTreeType().equals(TreeType.CIVIL_CODE)){ - deviceChannel.setCivilCode(catalogId); - }else if (platform.getTreeType().equals(TreeType.BUSINESS_GROUP)){ - deviceChannel.setParentId(catalogId); - if (catalog != null) { - deviceChannel.setBusinessGroupId(catalog.getBusinessGroupId()); - } - } } } return deviceChannelList; -- Gitblit v1.8.0