|
|
@@ -48,12 +48,13 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
@Autowired
|
|
|
SipConfig sipConfig;
|
|
|
|
|
|
- @Autowired
|
|
|
- DataSourceTransactionManager dataSourceTransactionManager;
|
|
|
|
|
|
@Autowired
|
|
|
TransactionDefinition transactionDefinition;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ DataSourceTransactionManager dataSourceTransactionManager;
|
|
|
+
|
|
|
@Autowired
|
|
|
private DeviceMapper deviceMapper;
|
|
|
|
|
|
@@ -104,96 +105,6 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
return deviceMapper.getDeviceByDeviceId(deviceId) != null;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public synchronized void updateChannel(String deviceId, DeviceChannel channel) {
|
|
|
- String channelId = channel.getChannelId();
|
|
|
- channel.setDeviceId(deviceId);
|
|
|
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
|
|
|
- if (streamInfo != null) {
|
|
|
- channel.setStreamId(streamInfo.getStream());
|
|
|
- }
|
|
|
- String now = DateUtil.getNow();
|
|
|
- channel.setUpdateTime(now);
|
|
|
- DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId);
|
|
|
- if (deviceChannel == null) {
|
|
|
- channel.setCreateTime(now);
|
|
|
- deviceChannelMapper.add(channel);
|
|
|
- }else {
|
|
|
- deviceChannelMapper.update(channel);
|
|
|
- }
|
|
|
- deviceChannelMapper.updateChannelSubCount(deviceId,channel.getParentId());
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public int updateChannels(String deviceId, List<DeviceChannel> channels) {
|
|
|
- List<DeviceChannel> addChannels = new ArrayList<>();
|
|
|
- List<DeviceChannel> updateChannels = new ArrayList<>();
|
|
|
- HashMap<String, DeviceChannel> channelsInStore = new HashMap<>();
|
|
|
- if (channels != null && channels.size() > 0) {
|
|
|
- List<DeviceChannel> channelList = deviceChannelMapper.queryChannels(deviceId, null, null, null, null);
|
|
|
- if (channelList.size() == 0) {
|
|
|
- for (DeviceChannel channel : channels) {
|
|
|
- channel.setDeviceId(deviceId);
|
|
|
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId());
|
|
|
- if (streamInfo != null) {
|
|
|
- channel.setStreamId(streamInfo.getStream());
|
|
|
- }
|
|
|
- String now = DateUtil.getNow();
|
|
|
- channel.setUpdateTime(now);
|
|
|
- channel.setCreateTime(now);
|
|
|
- addChannels.add(channel);
|
|
|
- }
|
|
|
- }else {
|
|
|
- for (DeviceChannel deviceChannel : channelList) {
|
|
|
- channelsInStore.put(deviceChannel.getChannelId(), deviceChannel);
|
|
|
- }
|
|
|
- for (DeviceChannel channel : channels) {
|
|
|
- channel.setDeviceId(deviceId);
|
|
|
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId());
|
|
|
- if (streamInfo != null) {
|
|
|
- channel.setStreamId(streamInfo.getStream());
|
|
|
- }
|
|
|
- String now = DateUtil.getNow();
|
|
|
- channel.setUpdateTime(now);
|
|
|
- if (channelsInStore.get(channel.getChannelId()) != null) {
|
|
|
- updateChannels.add(channel);
|
|
|
- }else {
|
|
|
- addChannels.add(channel);
|
|
|
- channel.setCreateTime(now);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- int limitCount = 300;
|
|
|
- if (addChannels.size() > 0) {
|
|
|
- if (addChannels.size() > limitCount) {
|
|
|
- for (int i = 0; i < addChannels.size(); i += limitCount) {
|
|
|
- int toIndex = i + limitCount;
|
|
|
- if (i + limitCount > addChannels.size()) {
|
|
|
- toIndex = addChannels.size();
|
|
|
- }
|
|
|
- deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex));
|
|
|
- }
|
|
|
- }else {
|
|
|
- deviceChannelMapper.batchAdd(addChannels);
|
|
|
- }
|
|
|
- }
|
|
|
- if (updateChannels.size() > 0) {
|
|
|
- if (updateChannels.size() > limitCount) {
|
|
|
- for (int i = 0; i < updateChannels.size(); i += limitCount) {
|
|
|
- int toIndex = i + limitCount;
|
|
|
- if (i + limitCount > updateChannels.size()) {
|
|
|
- toIndex = updateChannels.size();
|
|
|
- }
|
|
|
- deviceChannelMapper.batchUpdate(updateChannels.subList(i, toIndex));
|
|
|
- }
|
|
|
- }else {
|
|
|
- deviceChannelMapper.batchUpdate(updateChannels);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return addChannels.size() + updateChannels.size();
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public boolean resetChannels(String deviceId, List<DeviceChannel> deviceChannelList) {
|
|
|
if (CollectionUtils.isEmpty(deviceChannelList)) {
|
|
|
@@ -532,20 +443,6 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
// 更新缓存
|
|
|
parentPlatformCatch.setParentPlatform(parentPlatform);
|
|
|
redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
|
|
|
- if (parentPlatform.isEnable()) {
|
|
|
- // 共享所有视频流,需要将现有视频流添加到此平台
|
|
|
- List<GbStream> gbStreams = gbStreamMapper.queryStreamNotInPlatform();
|
|
|
- if (gbStreams.size() > 0) {
|
|
|
- for (GbStream gbStream : gbStreams) {
|
|
|
- gbStream.setCatalogId(parentPlatform.getCatalogId());
|
|
|
- }
|
|
|
- if (parentPlatform.isShareAllLiveStream()) {
|
|
|
- gbStreamService.addPlatformInfo(gbStreams, parentPlatform.getServerGBId(), parentPlatform.getCatalogId());
|
|
|
- }else {
|
|
|
- gbStreamService.delPlatformInfo(parentPlatform.getServerGBId(), gbStreams);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
return result > 0;
|
|
|
}
|
|
|
@@ -596,36 +493,6 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
return deviceChannelMapper.queryChannelByPlatformId(platformId);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces, String catalogId) {
|
|
|
-
|
|
|
- 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);
|
|
|
- eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.ADD);
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
@Override
|
|
|
public int delChannelForGB(String platformId, List<ChannelReduce> channelReduces) {
|
|
|
@@ -701,77 +568,6 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
return deviceMobilePositionMapper.clearMobilePositionsByDeviceId(deviceId);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 新增代理流
|
|
|
- * @param streamProxyItem
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean addStreamProxy(StreamProxyItem streamProxyItem) {
|
|
|
- TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
|
|
|
- boolean result = false;
|
|
|
- streamProxyItem.setStreamType("proxy");
|
|
|
- streamProxyItem.setStatus(true);
|
|
|
- String now = DateUtil.getNow();
|
|
|
- streamProxyItem.setCreateTime(now);
|
|
|
- try {
|
|
|
- if (streamProxyMapper.add(streamProxyItem) > 0) {
|
|
|
- if (!StringUtils.isEmpty(streamProxyItem.getGbId())) {
|
|
|
- if (gbStreamMapper.add(streamProxyItem) < 0) {
|
|
|
- //事务回滚
|
|
|
- dataSourceTransactionManager.rollback(transactionStatus);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- }else {
|
|
|
- //事务回滚
|
|
|
- dataSourceTransactionManager.rollback(transactionStatus);
|
|
|
- return false;
|
|
|
- }
|
|
|
- result = true;
|
|
|
- dataSourceTransactionManager.commit(transactionStatus); //手动提交
|
|
|
- }catch (Exception e) {
|
|
|
- logger.error("向数据库添加流代理失败:", e);
|
|
|
- dataSourceTransactionManager.rollback(transactionStatus);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新代理流
|
|
|
- * @param streamProxyItem
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Override
|
|
|
- public boolean updateStreamProxy(StreamProxyItem streamProxyItem) {
|
|
|
- TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
|
|
|
- boolean result = false;
|
|
|
- streamProxyItem.setStreamType("proxy");
|
|
|
- try {
|
|
|
- if (streamProxyMapper.update(streamProxyItem) > 0) {
|
|
|
- if (!StringUtils.isEmpty(streamProxyItem.getGbId())) {
|
|
|
- if (gbStreamMapper.updateByAppAndStream(streamProxyItem) == 0) {
|
|
|
- //事务回滚
|
|
|
- dataSourceTransactionManager.rollback(transactionStatus);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- //事务回滚
|
|
|
- dataSourceTransactionManager.rollback(transactionStatus);
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- dataSourceTransactionManager.commit(transactionStatus); //手动提交
|
|
|
- result = true;
|
|
|
- }catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- dataSourceTransactionManager.rollback(transactionStatus);
|
|
|
- }
|
|
|
- return result;
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 移除代理流
|
|
|
@@ -824,7 +620,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<GbStream> queryGbStreamListInPlatform(String platformId) {
|
|
|
+ public List<DeviceChannel> queryGbStreamListInPlatform(String platformId) {
|
|
|
return gbStreamMapper.queryGbStreamListInPlatform(platformId);
|
|
|
}
|
|
|
|
|
|
@@ -848,7 +644,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
streamPushMapper.addAll(streamPushItems);
|
|
|
// TODO 待优化
|
|
|
for (int i = 0; i < streamPushItems.size(); i++) {
|
|
|
- int onlineResult = gbStreamMapper.setStatus(streamPushItems.get(i).getApp(), streamPushItems.get(i).getStream(), true);
|
|
|
+ int onlineResult = mediaOnline(streamPushItems.get(i).getApp(), streamPushItems.get(i).getStream());
|
|
|
if (onlineResult > 0) {
|
|
|
// 发送上线通知
|
|
|
eventPublisher.catalogEventPublishForStream(null, streamPushItems.get(i), CatalogEvent.ON);
|
|
|
@@ -856,29 +652,13 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public void updateMedia(StreamPushItem streamPushItem) {
|
|
|
streamPushMapper.del(streamPushItem.getApp(), streamPushItem.getStream());
|
|
|
streamPushMapper.add(streamPushItem);
|
|
|
- gbStreamMapper.setStatus(streamPushItem.getApp(), streamPushItem.getStream(), true);
|
|
|
-
|
|
|
- if(!StringUtils.isEmpty(streamPushItem.getGbId() )){
|
|
|
- // 查找开启了全部直播流共享的上级平台
|
|
|
- List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream();
|
|
|
- if (parentPlatforms.size() > 0) {
|
|
|
- for (ParentPlatform parentPlatform : parentPlatforms) {
|
|
|
- StreamProxyItem streamProxyItem = platformGbStreamMapper.selectOne(streamPushItem.getApp(), streamPushItem.getStream(),
|
|
|
- parentPlatform.getServerGBId());
|
|
|
- if (streamProxyItem == null) {
|
|
|
- streamPushItem.setCatalogId(parentPlatform.getCatalogId());
|
|
|
- streamPushItem.setPlatformId(parentPlatform.getServerGBId());
|
|
|
- platformGbStreamMapper.add(streamPushItem);
|
|
|
- eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), streamPushItem, CatalogEvent.ADD);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ mediaOffline(streamPushItem.getApp(), streamPushItem.getStream());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -897,8 +677,27 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public int mediaOutline(String app, String streamId) {
|
|
|
- return gbStreamMapper.setStatus(app, streamId, false);
|
|
|
+ public int mediaOffline(String app, String stream) {
|
|
|
+ GbStream gbStream = gbStreamMapper.selectOne(app, stream);
|
|
|
+ int result;
|
|
|
+ if ("proxy".equals(gbStream.getStreamType())) {
|
|
|
+ result = streamProxyMapper.updateStatus(app, stream, false);
|
|
|
+ }else {
|
|
|
+ result = streamPushMapper.updateStatus(app, stream, false);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int mediaOnline(String app, String stream) {
|
|
|
+ GbStream gbStream = gbStreamMapper.selectOne(app, stream);
|
|
|
+ int result;
|
|
|
+ if ("proxy".equals(gbStream.getStreamType())) {
|
|
|
+ result = streamProxyMapper.updateStatus(app, stream, true);
|
|
|
+ }else {
|
|
|
+ result = streamPushMapper.updateStatus(app, stream, true);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -934,6 +733,24 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
|
|
|
@Override
|
|
|
public int addCatalog(PlatformCatalog platformCatalog) {
|
|
|
+ ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformCatalog.getPlatformId());
|
|
|
+ if (platform == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if (platform.getTreeType().equals(TreeType.BUSINESS_GROUP)) {
|
|
|
+ if (platformCatalog.getPlatformId().equals(platformCatalog.getParentId())) {
|
|
|
+ // 第一层节点
|
|
|
+ platformCatalog.setBusinessGroupId(platformCatalog.getId());
|
|
|
+ }else {
|
|
|
+ // 获取顶层的
|
|
|
+ PlatformCatalog topCatalog = getTopCatalog(platformCatalog.getParentId(), platformCatalog.getPlatformId());
|
|
|
+ platformCatalog.setBusinessGroupId(topCatalog.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (platform.getTreeType().equals(TreeType.CIVIL_CODE)) {
|
|
|
+ platformCatalog.setCivilCode(platformCatalog.getId());
|
|
|
+ }
|
|
|
+
|
|
|
int result = catalogMapper.add(platformCatalog);
|
|
|
if (result > 0) {
|
|
|
DeviceChannel deviceChannel = getDeviceChannelByCatalog(platformCatalog);
|
|
|
@@ -942,6 +759,15 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ private PlatformCatalog getTopCatalog(String id, String platformId) {
|
|
|
+ PlatformCatalog catalog = catalogMapper.selectParentCatalog(id);
|
|
|
+ if (catalog.getParentId().equals(platformId)) {
|
|
|
+ return catalog;
|
|
|
+ }else {
|
|
|
+ return getTopCatalog(catalog.getParentId(), platformId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public PlatformCatalog getCatalog(String id) {
|
|
|
return catalogMapper.select(id);
|
|
|
@@ -1012,8 +838,8 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<PlatformCatalog> queryCatalogInPlatform(String platformId) {
|
|
|
- return catalogMapper.selectByPlatForm(platformId);
|
|
|
+ public List<DeviceChannel> queryCatalogInPlatform(String platformId) {
|
|
|
+ return catalogMapper.queryCatalogInPlatform(platformId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -1056,20 +882,24 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
}
|
|
|
|
|
|
private DeviceChannel getDeviceChannelByCatalog(PlatformCatalog catalog) {
|
|
|
- ParentPlatform parentPlatByServerGBId = platformMapper.getParentPlatByServerGBId(catalog.getPlatformId());
|
|
|
+ ParentPlatform platform = platformMapper.getParentPlatByServerGBId(catalog.getPlatformId());
|
|
|
DeviceChannel deviceChannel = new DeviceChannel();
|
|
|
deviceChannel.setChannelId(catalog.getId());
|
|
|
deviceChannel.setName(catalog.getName());
|
|
|
deviceChannel.setLongitude(0.0);
|
|
|
deviceChannel.setLatitude(0.0);
|
|
|
- deviceChannel.setDeviceId(parentPlatByServerGBId.getDeviceGBId());
|
|
|
+ deviceChannel.setDeviceId(platform.getDeviceGBId());
|
|
|
deviceChannel.setManufacture("wvp-pro");
|
|
|
deviceChannel.setStatus(1);
|
|
|
deviceChannel.setParental(1);
|
|
|
- deviceChannel.setParentId(catalog.getParentId());
|
|
|
+
|
|
|
deviceChannel.setRegisterWay(1);
|
|
|
// 行政区划应该是Domain的前八位
|
|
|
- deviceChannel.setCivilCode(parentPlatByServerGBId.getAdministrativeDivision());
|
|
|
+ if (platform.getTreeType().equals(TreeType.BUSINESS_GROUP)) {
|
|
|
+ deviceChannel.setParentId(catalog.getParentId());
|
|
|
+ deviceChannel.setBusinessGroupId(catalog.getBusinessGroupId());
|
|
|
+ }
|
|
|
+
|
|
|
deviceChannel.setModel("live");
|
|
|
deviceChannel.setOwner("wvp-pro");
|
|
|
deviceChannel.setSecrecy("0");
|
|
|
@@ -1131,4 +961,27 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
|
|
|
|
|
|
deviceChannelMapper.updatePosition(deviceChannel);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void cleanContentForPlatform(String serverGBId) {
|
|
|
+// List<PlatformCatalog> catalogList = catalogMapper.selectByPlatForm(serverGBId);
|
|
|
+// if (catalogList.size() > 0) {
|
|
|
+// int result = catalogMapper.delByPlatformId(serverGBId);
|
|
|
+// if (result > 0) {
|
|
|
+// List<DeviceChannel> deviceChannels = new ArrayList<>();
|
|
|
+// for (PlatformCatalog catalog : catalogList) {
|
|
|
+// deviceChannels.add(getDeviceChannelByCatalog(catalog));
|
|
|
+// }
|
|
|
+// eventPublisher.catalogEventPublish(serverGBId, deviceChannels, CatalogEvent.DEL);
|
|
|
+// }
|
|
|
+// }
|
|
|
+ catalogMapper.delByPlatformId(serverGBId);
|
|
|
+ platformChannelMapper.delByPlatformId(serverGBId);
|
|
|
+ platformGbStreamMapper.delByPlatformId(serverGBId);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DeviceChannel> queryChannelWithCatalog(String serverGBId) {
|
|
|
+ return deviceChannelMapper.queryChannelWithCatalog(serverGBId);
|
|
|
+ }
|
|
|
}
|