From 6e0f7fae6eda7ffa18c4289d19a705f272174911 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 05 一月 2022 15:23:14 +0800 Subject: [PATCH] 为级联平台增加虚拟目录功能 --- src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 163 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java index 35dda13..7f0efcd 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java @@ -71,6 +71,9 @@ @Autowired private GbStreamMapper gbStreamMapper; + + @Autowired + private PlatformCatalogMapper catalogMapper; ; @Autowired @@ -110,6 +113,7 @@ */ @Override public synchronized boolean create(Device device) { + redisCatchStorage.updateDevice(device); return deviceMapper.add(device) > 0; } @@ -128,10 +132,13 @@ Device deviceByDeviceId = deviceMapper.getDeviceByDeviceId(device.getDeviceId()); if (deviceByDeviceId == null) { device.setCreateTime(now); + redisCatchStorage.updateDevice(device); return deviceMapper.add(device) > 0; }else { + redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; } + } @@ -152,7 +159,7 @@ } @Override - public void updateChannels(String deviceId, List<DeviceChannel> channels) { + public int updateChannels(String deviceId, List<DeviceChannel> channels) { List<DeviceChannel> addChannels = new ArrayList<>(); List<DeviceChannel> updateChannels = new ArrayList<>(); HashMap<String, DeviceChannel> channelsInStore = new HashMap<>(); @@ -185,13 +192,68 @@ } } } + int limitCount = 300; if (addChannels.size() > 0) { - deviceChannelMapper.batchAdd(addChannels); + 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) { - deviceChannelMapper.batchUpdate(updateChannels); + 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) { + TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); + try { + int cleanChannelsResult = deviceChannelMapper.cleanChannelsByDeviceId(deviceId); + int limitCount = 300; + boolean result = cleanChannelsResult <0; + if (!result && deviceChannelList.size() > 0) { + if (deviceChannelList.size() > limitCount) { + for (int i = 0; i < deviceChannelList.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > deviceChannelList.size()) { + toIndex = deviceChannelList.size(); + } + result = result || deviceChannelMapper.batchAdd(deviceChannelList.subList(i, toIndex)) < 0; + } + }else { + result = result || deviceChannelMapper.batchAdd(deviceChannelList) < 0; + } + } + if (result) { + //浜嬪姟鍥炴粴 + dataSourceTransactionManager.rollback(transactionStatus); + } + dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦 + return true; + }catch (Exception e) { + dataSourceTransactionManager.rollback(transactionStatus); + return false; + } + } @Override @@ -231,6 +293,11 @@ PageHelper.startPage(page, count); List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online); return new PageInfo<>(all); + } + + @Override + public List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit) { + return deviceChannelMapper.queryChannelsByDeviceIdWithStartAndLimit(deviceId, null, query, hasSubChannel, online, start, limit); } @Override @@ -322,6 +389,7 @@ } device.setOnline(1); logger.info("鏇存柊璁惧鍦ㄧ嚎: " + deviceId); + redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; } @@ -337,6 +405,7 @@ Device device = deviceMapper.getDeviceByDeviceId(deviceId); if (device == null) return false; device.setOnline(0); + redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; } @@ -383,6 +452,9 @@ @Override public boolean addParentPlatform(ParentPlatform parentPlatform) { + if (parentPlatform.getCatalogId() == null) { + parentPlatform.setCatalogId(parentPlatform.getServerGBId()); + } int result = platformMapper.addParentPlatform(parentPlatform); return result > 0; } @@ -392,6 +464,9 @@ int result = 0; ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); // .getDeviceGBId()); if (parentPlatform.getId() == null ) { + if (parentPlatform.getCatalogId() == null) { + parentPlatform.setCatalogId(parentPlatform.getServerGBId()); + } result = platformMapper.addParentPlatform(parentPlatform); if (parentPlatformCatch == null) { parentPlatformCatch = new ParentPlatformCatch(); @@ -414,8 +489,11 @@ // 鍏变韩鎵�鏈夎棰戞祦锛岄渶瑕佸皢鐜版湁瑙嗛娴佹坊鍔犲埌姝ゅ钩鍙� List<GbStream> gbStreams = gbStreamMapper.selectAll(); if (gbStreams.size() > 0) { + for (GbStream gbStream : gbStreams) { + gbStream.setCatalogId(parentPlatform.getCatalogId()); + } if (parentPlatform.isShareAllLiveStream()) { - gbStreamService.addPlatformInfo(gbStreams, parentPlatform.getServerGBId()); + gbStreamService.addPlatformInfo(gbStreams, parentPlatform.getServerGBId(), parentPlatform.getCatalogId()); }else { gbStreamService.delPlatformInfo(gbStreams); } @@ -470,10 +548,11 @@ } @Override - public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces) { + public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces, String catalogId) { Map<String, ChannelReduce> deviceAndChannels = new HashMap<>(); for (ChannelReduce channelReduce : channelReduces) { + channelReduce.setCatalogId(catalogId); deviceAndChannels.put(channelReduce.getDeviceId() + "_" + channelReduce.getChannelId(), channelReduce); } List<String> deviceAndChannelList = new ArrayList<>(deviceAndChannels.keySet()); @@ -508,6 +587,18 @@ public DeviceChannel queryChannelInParentPlatform(String platformId, String channelId) { DeviceChannel channel = platformChannelMapper.queryChannelInParentPlatform(platformId, channelId); return channel; + } + + @Override + public List<PlatformCatalog> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId) { + List<PlatformCatalog> catalogs = platformChannelMapper.queryChannelInParentPlatformAndCatalog(platformId, catalogId); + return catalogs; + } + + @Override + public List<PlatformCatalog> queryStreamInParentPlatformAndCatalog(String platformId, String catalogId) { + List<PlatformCatalog> catalogs = platformGbStreamMapper.queryChannelInParentPlatformAndCatalogForCatlog(platformId, catalogId); + return catalogs; } @Override @@ -673,13 +764,13 @@ List<ParentPlatform> parentPlatforms = parentPlatformMapper.selectAllAhareAllLiveStream(); if (parentPlatforms.size() > 0) { for (ParentPlatform parentPlatform : parentPlatforms) { + streamPushItem.setCatalogId(parentPlatform.getCatalogId()); streamPushItem.setPlatformId(parentPlatform.getServerGBId()); String stream = streamPushItem.getStream(); StreamProxyItem streamProxyItems = platformGbStreamMapper.selectOne(streamPushItem.getApp(), stream, parentPlatform.getServerGBId()); if (streamProxyItems == null) { platformGbStreamMapper.add(streamPushItem); } - } } } @@ -738,4 +829,70 @@ public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) { return streamProxyMapper.selectOne(app, streamId); } + + @Override + public List<PlatformCatalog> getChildrenCatalogByPlatform(String platformId, String parentId) { + return catalogMapper.selectByParentId(platformId, parentId); + } + + @Override + public int addCatalog(PlatformCatalog platformCatalog) { + return catalogMapper.add(platformCatalog); + } + + @Override + public PlatformCatalog getCatalog(String id) { + return catalogMapper.select(id); + } + + @Override + public int delCatalog(String id) { + PlatformCatalog platformCatalog = catalogMapper.select(id); + if (platformCatalog.getChildrenCount() > 0) { + List<PlatformCatalog> platformCatalogList = catalogMapper.selectByParentId(platformCatalog.getPlatformId(), platformCatalog.getId()); + for (PlatformCatalog catalog : platformCatalogList) { + if (catalog.getChildrenCount() == 0) { + catalogMapper.del(catalog.getId()); + platformGbStreamMapper.delByCatalogId(catalog.getId()); + platformChannelMapper.delByCatalogId(catalog.getId()); + }else { + delCatalog(catalog.getId()); + } + } + } + int delresult = catalogMapper.del(id); + int delStreamresult = platformGbStreamMapper.delByCatalogId(id); + int delChanneresult = platformChannelMapper.delByCatalogId(id); + return delresult + delChanneresult + delStreamresult; + } + + @Override + public int updateCatalog(PlatformCatalog platformCatalog) { + return catalogMapper.update(platformCatalog); + } + + @Override + public int setDefaultCatalog(String platformId, String catalogId) { + return platformMapper.setDefaultCatalog(platformId, catalogId); + } + + @Override + public List<PlatformCatalog> queryCatalogInPlatform(String platformId) { + return catalogMapper.selectByPlatForm(platformId); + } + + @Override + public int delRelation(PlatformCatalog platformCatalog) { + if (platformCatalog.getType() == 1) { + return platformChannelMapper.delByCatalogIdAndChannelIdAndPlatformId(platformCatalog); + }else if (platformCatalog.getType() == 2) { + List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformCatalog.getPlatformId(), platformCatalog.getParentId()); + for (GbStream gbStream : gbStreams) { + if (gbStream.getGbId().equals(platformCatalog.getId())) { + return platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream()); + } + } + } + return 0; + } } -- Gitblit v1.8.0