| 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.event.EventPublisher; | 
| import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; | 
| import com.genersoft.iot.vmp.service.IPlatformChannelService; | 
| import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; | 
| import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; | 
| import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper; | 
| import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; | 
| import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; | 
| import org.slf4j.Logger; | 
| import org.slf4j.LoggerFactory; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.util.ObjectUtils; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.HashMap; | 
| import java.util.List; | 
| import java.util.Map; | 
|   | 
| /** | 
|  * @author lin | 
|  */ | 
| @Service | 
| public class PlatformChannelServiceImpl implements IPlatformChannelService { | 
|   | 
|     private final static Logger logger = LoggerFactory.getLogger(PlatformChannelServiceImpl.class); | 
|   | 
|     @Autowired | 
|     private PlatformChannelMapper platformChannelMapper; | 
|   | 
|     @Autowired | 
|     private DeviceChannelMapper deviceChannelMapper; | 
|   | 
|     @Autowired | 
|     private PlatformCatalogMapper catalogManager; | 
|   | 
|     @Autowired | 
|     private ParentPlatformMapper platformMapper; | 
|   | 
|     @Autowired | 
|     EventPublisher eventPublisher; | 
|   | 
|     @Override | 
|     public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces, String catalogId) { | 
|         ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformId); | 
|         if (platform == null) { | 
|             logger.warn("更新级联通道信息时未找到平台{}的信息", platformId); | 
|             return 0; | 
|         } | 
|         Map<Integer, ChannelReduce> deviceAndChannels = new HashMap<>(); | 
|         for (ChannelReduce channelReduce : channelReduces) { | 
|             channelReduce.setCatalogId(catalogId); | 
|             deviceAndChannels.put(channelReduce.getId(), channelReduce); | 
|         } | 
|         List<Integer> deviceAndChannelList = new ArrayList<>(deviceAndChannels.keySet()); | 
|         // 查询当前已经存在的 | 
|         List<Integer> channelIds = platformChannelMapper.findChannelRelatedPlatform(platformId, channelReduces); | 
|         if (deviceAndChannelList != null) { | 
|             deviceAndChannelList.removeAll(channelIds); | 
|         } | 
|         for (Integer channelId : channelIds) { | 
|             deviceAndChannels.remove(channelId); | 
|         } | 
|         List<ChannelReduce> channelReducesToAdd = new ArrayList<>(deviceAndChannels.values()); | 
|         // 对剩下的数据进行存储 | 
|         int result = 0; | 
|         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); | 
|             } | 
|         } | 
|   | 
|         return result; | 
|     } | 
|   | 
|     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())) { | 
|                 logger.warn("未查询到目录{}的信息", catalogId); | 
|                 return null; | 
|             } | 
|             for (ChannelReduce channelReduce : channelReduces) { | 
|                 DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId()); | 
|                 deviceChannel.setParental(0); | 
|                 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 = platform.getDeviceGBId(); | 
|         } | 
|   | 
|         if ((result = platformChannelMapper.delChannelForGBByCatalogId(platformId, catalogId)) > 0) { | 
|             List<DeviceChannel> deviceChannels = platformChannelMapper.queryAllChannelInCatalog(platformId, catalogId); | 
|             eventPublisher.catalogEventPublish(platformId, deviceChannels, CatalogEvent.DEL); | 
|         } | 
|         return result; | 
|     } | 
| } |