old mode 100644
new mode 100755
 |  |  | 
 |  |  | 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.baomidou.dynamic.datasource.annotation.DS; | 
 |  |  | 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; | 
 |  |  | 
 |  |  | 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; | 
 |  |  | import java.util.HashMap; | 
 |  |  | 
 |  |  |  * @author lin | 
 |  |  |  */ | 
 |  |  | @Service | 
 |  |  | @DS("master") | 
 |  |  | public class PlatformChannelServiceImpl implements IPlatformChannelService { | 
 |  |  |  | 
 |  |  |     private final static Logger logger = LoggerFactory.getLogger(PlatformChannelServiceImpl.class); | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private PlatformChannelMapper platformChannelMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     TransactionDefinition transactionDefinition; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     DataSourceTransactionManager dataSourceTransactionManager; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SubscribeHolder subscribeHolder; | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private DeviceChannelMapper deviceChannelMapper; | 
 |  |  | 
 |  |  |         } | 
 |  |  |         List<ChannelReduce> channelReducesToAdd = new ArrayList<>(deviceAndChannels.values()); | 
 |  |  |         // 对剩下的数据进行存储 | 
 |  |  |         int result = 0; | 
 |  |  |         int allCount = 0; | 
 |  |  |         boolean result = false; | 
 |  |  |         TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); | 
 |  |  |         int limitCount = 50; | 
 |  |  |         if (channelReducesToAdd.size() > 0) { | 
 |  |  |             result = platformChannelMapper.addChannels(platformId, channelReducesToAdd); | 
 |  |  |             // TODO 后续给平台增加控制开关以控制是否响应目录订阅 | 
 |  |  |             List<DeviceChannel> deviceChannelList = getDeviceChannelListByChannelReduceList(channelReducesToAdd, catalogId, platform); | 
 |  |  |             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) { | 
 |  |  |         List<DeviceChannel> deviceChannelList = new ArrayList<>(); | 
 |  |  |         if (channelReduces.size() > 0){ | 
 |  |  |             PlatformCatalog catalog = catalogManager.select(catalogId); | 
 |  |  |             if (catalog == null && !catalogId.equals(platform.getServerGBId())) { | 
 |  |  |             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; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public int delAllChannelForGB(String platformId, String catalogId) { | 
 |  |  |  | 
 |  |  |         int result; | 
 |  |  |         if (platformId == null) { | 
 |  |  |             return 0; | 
 |  |  |         } | 
 |  |  |         ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformId); | 
 |  |  |         if (platform == null) { | 
 |  |  |             return 0; | 
 |  |  |         } | 
 |  |  |         if (ObjectUtils.isEmpty(catalogId)) { | 
 |  |  |            catalogId = null; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<DeviceChannel> deviceChannels = platformChannelMapper.queryAllChannelInCatalog(platformId, catalogId); | 
 |  |  |         eventPublisher.catalogEventPublish(platformId, deviceChannels, CatalogEvent.DEL); | 
 |  |  |  | 
 |  |  |         return platformChannelMapper.delChannelForGBByCatalogId(platformId, catalogId); | 
 |  |  |     } | 
 |  |  | } |