| package com.genersoft.iot.vmp.service.impl; | 
|   | 
| 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.media.zlm.dto.StreamPushItem; | 
| import com.genersoft.iot.vmp.service.IGbStreamService; | 
| import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; | 
| import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; | 
| import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper; | 
| import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; | 
| import com.github.pagehelper.PageHelper; | 
| import com.github.pagehelper.PageInfo; | 
| 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.List; | 
|   | 
| @Service | 
| public class GbStreamServiceImpl implements IGbStreamService { | 
|   | 
|     private final static Logger logger = LoggerFactory.getLogger(GbStreamServiceImpl.class); | 
|   | 
|     @Autowired | 
|     DataSourceTransactionManager dataSourceTransactionManager; | 
|   | 
|     @Autowired | 
|     TransactionDefinition transactionDefinition; | 
|   | 
|     @Autowired | 
|     private GbStreamMapper gbStreamMapper; | 
|   | 
|     @Autowired | 
|     private PlatformGbStreamMapper platformGbStreamMapper; | 
|   | 
|     @Autowired | 
|     private ParentPlatformMapper platformMapper; | 
|   | 
|     @Autowired | 
|     private PlatformCatalogMapper catalogMapper; | 
|   | 
|     @Autowired | 
|     private EventPublisher eventPublisher; | 
|   | 
|     @Override | 
|     public PageInfo<GbStream> getAll(Integer page, Integer count, String platFormId, String catalogId, String query, String mediaServerId) { | 
|         PageHelper.startPage(page, count); | 
|         List<GbStream> all = gbStreamMapper.selectAll(platFormId, catalogId, query, mediaServerId); | 
|         return new PageInfo<>(all); | 
|     } | 
|   | 
|     @Override | 
|     public void del(String app, String stream) { | 
|         gbStreamMapper.del(app, stream); | 
|     } | 
|   | 
|   | 
|     @Override | 
|     public boolean addPlatformInfo(List<GbStream> gbStreams, String platformId, String catalogId) { | 
|         // 放在事务内执行 | 
|         boolean result = false; | 
|         TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); | 
|         ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId); | 
|         if (catalogId == null) { | 
|             catalogId = parentPlatform.getCatalogId(); | 
|         } | 
|         try { | 
|             List<DeviceChannel> deviceChannelList = new ArrayList<>(); | 
|             for (GbStream gbStream : gbStreams) { | 
|                 gbStream.setCatalogId(catalogId); | 
|                 gbStream.setPlatformId(platformId); | 
|                 // TODO 修改为批量提交 | 
|                 platformGbStreamMapper.add(gbStream); | 
|                 DeviceChannel deviceChannelListByStream = getDeviceChannelListByStreamWithStatus(gbStream, catalogId, parentPlatform); | 
|                 deviceChannelList.add(deviceChannelListByStream); | 
|             } | 
|             dataSourceTransactionManager.commit(transactionStatus);     //手动提交 | 
|             eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD); | 
|             result = true; | 
|         }catch (Exception e) { | 
|             logger.error("批量保存流与平台的关系时错误", e); | 
|             dataSourceTransactionManager.rollback(transactionStatus); | 
|         } | 
|         return result; | 
|     } | 
|   | 
|     @Override | 
|     public DeviceChannel getDeviceChannelListByStream(GbStream gbStream, String catalogId, ParentPlatform platform) { | 
|         DeviceChannel deviceChannel = new DeviceChannel(); | 
|         deviceChannel.setChannelId(gbStream.getGbId()); | 
|         deviceChannel.setName(gbStream.getName()); | 
|         deviceChannel.setLongitude(gbStream.getLongitude()); | 
|         deviceChannel.setLatitude(gbStream.getLatitude()); | 
|         deviceChannel.setDeviceId(platform.getDeviceGBId()); | 
|         deviceChannel.setManufacture("wvp-pro"); | 
|         deviceChannel.setStatus(gbStream.isStatus()?1:0); | 
|   | 
|         deviceChannel.setRegisterWay(1); | 
|         deviceChannel.setCivilCode(platform.getAdministrativeDivision()); | 
|   | 
|         if (platform.getTreeType().equals(TreeType.CIVIL_CODE)){ | 
|             deviceChannel.setCivilCode(catalogId); | 
|         }else if (platform.getTreeType().equals(TreeType.BUSINESS_GROUP)){ | 
|             PlatformCatalog catalog = catalogMapper.select(catalogId); | 
|             if (catalog == null) { | 
|                 deviceChannel.setParentId(platform.getDeviceGBId()); | 
|                 deviceChannel.setBusinessGroupId(null); | 
|             }else { | 
|                 deviceChannel.setParentId(catalog.getId()); | 
|                 deviceChannel.setBusinessGroupId(catalog.getBusinessGroupId()); | 
|             } | 
|   | 
|         } | 
|   | 
|         deviceChannel.setModel("live"); | 
|         deviceChannel.setOwner("wvp-pro"); | 
|         deviceChannel.setParental(0); | 
|         deviceChannel.setSecrecy("0"); | 
|         return deviceChannel; | 
|     } | 
|   | 
|     @Override | 
|     public boolean delPlatformInfo(String platformId, List<GbStream> gbStreams) { | 
|         // 放在事务内执行 | 
|         boolean result = false; | 
|         TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); | 
|         try { | 
|             List<DeviceChannel> deviceChannelList = new ArrayList<>(); | 
|             platformGbStreamMapper.delByAppAndStreamsByPlatformId(gbStreams, platformId); | 
|             for (GbStream gbStream : gbStreams) { | 
|                 DeviceChannel deviceChannel = new DeviceChannel(); | 
|                 deviceChannel.setChannelId(gbStream.getGbId()); | 
|                 deviceChannelList.add(deviceChannel); | 
|             } | 
|   | 
|             eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL); | 
|             dataSourceTransactionManager.commit(transactionStatus);     //手动提交 | 
|             result = true; | 
|         }catch (Exception e) { | 
|             logger.error("批量移除流与平台的关系时错误", e); | 
|             dataSourceTransactionManager.rollback(transactionStatus); | 
|         } | 
|         return result; | 
|     } | 
|   | 
|     @Override | 
|     public void sendCatalogMsg(GbStream gbStream, String type) { | 
|         if (gbStream == null || type == null) { | 
|             logger.warn("[发送目录订阅]类型:流信息或类型为NULL"); | 
|             return; | 
|         } | 
|         List<GbStream> gbStreams = new ArrayList<>(); | 
|         if (gbStream.getGbId() != null) { | 
|             gbStreams.add(gbStream); | 
|         }else { | 
|             GbStream gbStreamIndb  = gbStreamMapper.selectOne(gbStream.getApp(), gbStream.getStream()); | 
|             if (gbStreamIndb != null && gbStreamIndb.getGbId() != null){ | 
|                 gbStreams.add(gbStreamIndb); | 
|             } | 
|         } | 
|         sendCatalogMsgs(gbStreams, type); | 
|     } | 
|   | 
|     @Override | 
|     public void sendCatalogMsgs(List<GbStream> gbStreams, String type) { | 
|         if (gbStreams.size() > 0) { | 
|             for (GbStream gs : gbStreams) { | 
|                 if (ObjectUtils.isEmpty(gs.getGbId())){ | 
|                     continue; | 
|                 } | 
|                 List<ParentPlatform> parentPlatforms = platformGbStreamMapper.selectByAppAndStream(gs.getApp(), gs.getStream()); | 
|                 if (parentPlatforms.size() > 0) { | 
|                     for (ParentPlatform parentPlatform : parentPlatforms) { | 
|                         if (parentPlatform != null) { | 
|                             eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), gs, type); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|     } | 
|   | 
|     @Override | 
|     public int updateGbIdOrName(List<StreamPushItem> streamPushItemForUpdate) { | 
|         return gbStreamMapper.updateGbIdOrName(streamPushItemForUpdate); | 
|     } | 
|   | 
|     @Override | 
|     public DeviceChannel getDeviceChannelListByStreamWithStatus(GbStream gbStream, String catalogId, ParentPlatform platform) { | 
|         DeviceChannel deviceChannel = new DeviceChannel(); | 
|         deviceChannel.setChannelId(gbStream.getGbId()); | 
|         deviceChannel.setName(gbStream.getName()); | 
|         deviceChannel.setLongitude(gbStream.getLongitude()); | 
|         deviceChannel.setLatitude(gbStream.getLatitude()); | 
|         deviceChannel.setDeviceId(platform.getDeviceGBId()); | 
|         deviceChannel.setManufacture("wvp-pro"); | 
|         // todo 目前是每一条查询一次,需要优化 | 
|         Boolean status = null; | 
|         if ("proxy".equals(gbStream.getStreamType())) { | 
|             status = gbStreamMapper.selectStatusForProxy(gbStream.getApp(), gbStream.getStream()); | 
|         }else { | 
|             status = gbStreamMapper.selectStatusForPush(gbStream.getApp(), gbStream.getStream()); | 
|         } | 
|         deviceChannel.setStatus((status != null && status )?1:0); | 
|   | 
|         deviceChannel.setRegisterWay(1); | 
|         deviceChannel.setCivilCode(platform.getAdministrativeDivision()); | 
|   | 
|         if (platform.getTreeType().equals(TreeType.CIVIL_CODE)){ | 
|             deviceChannel.setCivilCode(catalogId); | 
|         }else if (platform.getTreeType().equals(TreeType.BUSINESS_GROUP)){ | 
|             PlatformCatalog catalog = catalogMapper.select(catalogId); | 
|             if (catalog == null) { | 
|                 deviceChannel.setParentId(platform.getDeviceGBId()); | 
|                 deviceChannel.setBusinessGroupId(null); | 
|             }else { | 
|                 deviceChannel.setParentId(catalog.getId()); | 
|                 deviceChannel.setBusinessGroupId(catalog.getBusinessGroupId()); | 
|             } | 
|   | 
|         } | 
|   | 
|         deviceChannel.setModel("live"); | 
|         deviceChannel.setOwner("wvp-pro"); | 
|         deviceChannel.setParental(0); | 
|         deviceChannel.setSecrecy("0"); | 
|         return deviceChannel; | 
|     } | 
|   | 
|     @Override | 
|     public List<GbStream> getAllGBChannels(String platformId) { | 
|   | 
|         return gbStreamMapper.selectAll(platformId, null, null, null); | 
|   | 
|     } | 
|   | 
|     @Override | 
|     public void delAllPlatformInfo(String platformId, String catalogId) { | 
|         if (platformId == null) { | 
|             return ; | 
|         } | 
|         ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformId); | 
|         if (platform == null) { | 
|             return ; | 
|         } | 
|         if (ObjectUtils.isEmpty(catalogId)) { | 
|             catalogId = platform.getDeviceGBId(); | 
|         } | 
|         if (platformGbStreamMapper.delByPlatformAndCatalogId(platformId, catalogId) > 0) { | 
|             List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformId, catalogId); | 
|             List<DeviceChannel> deviceChannelList = new ArrayList<>(); | 
|             for (GbStream gbStream : gbStreams) { | 
|                 DeviceChannel deviceChannel = new DeviceChannel(); | 
|                 deviceChannel.setChannelId(gbStream.getGbId()); | 
|                 deviceChannelList.add(deviceChannel); | 
|             } | 
|             eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL); | 
|         } | 
|     } | 
| } |