From c1d7f867c2ffcb1364334a5e013eb8f208819ef5 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 10 三月 2022 20:53:56 +0800
Subject: [PATCH] 优化目录订阅以及国标级联目录订阅回复

---
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 47 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index 39d37c5..e59a090 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -1,14 +1,12 @@
 package com.genersoft.iot.vmp.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.conf.UserSetup;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.GbStream;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog;
+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.ZLMHttpHookSubscribe;
@@ -23,6 +21,8 @@
 import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
 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.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -32,6 +32,8 @@
 
 @Service
 public class StreamPushServiceImpl implements IStreamPushService {
+
+    private final static Logger logger = LoggerFactory.getLogger(StreamPushServiceImpl.class);
 
     @Autowired
     private GbStreamMapper gbStreamMapper;
@@ -158,12 +160,17 @@
     public boolean removeFromGB(GbStream stream) {
         // 鍒ゆ柇鏄惁闇�瑕佸彂閫佷簨浠�
         gbStreamService.sendCatalogMsg(stream, CatalogEvent.DEL);
-        int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
         platformGbStreamMapper.delByAppAndStream(stream.getApp(), stream.getStream());
+        int del = gbStreamMapper.del(stream.getApp(), stream.getStream());
         MediaServerItem mediaInfo = mediaServerService.getOne(stream.getMediaServerId());
         JSONObject mediaList = zlmresTfulUtils.getMediaList(mediaInfo, stream.getApp(), stream.getStream());
-        if (mediaList == null) {
-            streamPushMapper.del(stream.getApp(), stream.getStream());
+        if (mediaList != null) {
+            if (mediaList.getInteger("code") == 0) {
+                JSONArray data = mediaList.getJSONArray("data");
+                if (data == null) {
+                    streamPushMapper.del(stream.getApp(), stream.getStream());
+                }
+            }
         }
         return del > 0;
     }
@@ -180,9 +187,9 @@
         StreamPushItem streamPushItem = streamPushMapper.selectOne(app, streamId);
         gbStreamService.sendCatalogMsg(streamPushItem, CatalogEvent.DEL);
 
-        int delStream = streamPushMapper.del(app, streamId);
-        gbStreamMapper.del(app, streamId);
         platformGbStreamMapper.delByAppAndStream(app, streamId);
+        gbStreamMapper.del(app, streamId);
+        int delStream = streamPushMapper.del(app, streamId);
         if (delStream > 0) {
             MediaServerItem mediaServerItem = mediaServerService.getOne(streamPushItem.getMediaServerId());
             zlmresTfulUtils.closeStreams(mediaServerItem,app, streamId);
@@ -376,6 +383,29 @@
                 .collect(Collectors.toList());
 
         if (streamPushItemsForPlatform.size() > 0) {
+            // 鑾峰彇鎵�鏈夊钩鍙帮紝骞冲彴鍜岀洰褰曚俊鎭竴鑸笉浼氱壒鍒ぇ閲忋��
+            List<ParentPlatform> parentPlatformList = parentPlatformMapper.getParentPlatformList();
+            Map<String, Map<String, PlatformCatalog>> platformInfoMap = new HashMap<>();
+            if (parentPlatformList.size() == 0) {
+                return;
+            }
+            for (ParentPlatform platform : parentPlatformList) {
+                Map<String, PlatformCatalog> catalogMap = new HashMap<>();
+
+                // 鍒涘缓鏍硅妭鐐�
+                PlatformCatalog platformCatalog = new PlatformCatalog();
+                platformCatalog.setId(platform.getServerGBId());
+                catalogMap.put(platform.getServerGBId(), platformCatalog);
+
+                // 鏌ヨ鎵�鏈夎妭鐐逛俊鎭�
+                List<PlatformCatalog> platformCatalogs = platformCatalogMapper.selectByPlatForm(platform.getServerGBId());
+                if (platformCatalogs.size() > 0) {
+                    for (PlatformCatalog catalog : platformCatalogs) {
+                        catalogMap.put(catalog.getId(), catalog);
+                    }
+                }
+                platformInfoMap.put(platform.getServerGBId(), catalogMap);
+            }
             List<StreamPushItem> streamPushItemListFroPlatform = new ArrayList<>();
             Map<String, List<GbStream>> platformForEvent = new HashMap<>();
             // 閬嶅巻瀛樺偍缁撴灉锛屾煡鎵綼pp+Stream->platformId+catalogId鐨勫搴斿叧绯伙紝鐒跺悗鎵ц鎵归噺鍐欏叆
@@ -388,6 +418,12 @@
                             streamPushItemForPlatform.setGbStreamId(streamPushItem.getGbStreamId());
                             if (platFormInfoArray.length > 0) {
                                 // 鏁扮粍 platFormInfoArray 0 涓哄钩鍙癐D銆� 1涓虹洰褰旾D
+                                // 涓嶅瓨鍦ㄨ繖涓钩鍙帮紝鍒欏拷鐣ュ鍏ユ鍏宠仈鍏崇郴
+                                if (platformInfoMap.get(platFormInfoArray[0]) == null
+                                        || platformInfoMap.get(platFormInfoArray[0]).get(platFormInfoArray[1]) == null) {
+                                    logger.info("瀵煎叆鏁版嵁鏃朵笉瀛樺湪骞冲彴鎴栫洰褰晎}/{},宸插鍏ユ湭鍒嗛厤", platFormInfoArray[0], platFormInfoArray[1] );
+                                    continue;
+                                }
                                 streamPushItemForPlatform.setPlatformId(platFormInfoArray[0]);
 
                                 List<GbStream> gbStreamList = platformForEvent.get(streamPushItem.getPlatformId());
@@ -406,8 +442,6 @@
                                 streamPushItemForPlatform.setCatalogId(platFormInfoArray[1]);
                             }
                             streamPushItemListFroPlatform.add(streamPushItemForPlatform);
-
-
                         }
                     }
 
@@ -432,9 +466,9 @@
         }
         gbStreamService.sendCatalogMsgs(gbStreams, CatalogEvent.DEL);
 
-        int delStream = streamPushMapper.delAllForGbStream(gbStreams);
-        gbStreamMapper.batchDelForGbStream(gbStreams);
         platformGbStreamMapper.delByGbStreams(gbStreams);
+        gbStreamMapper.batchDelForGbStream(gbStreams);
+        int delStream = streamPushMapper.delAllForGbStream(gbStreams);
         if (delStream > 0) {
             for (GbStream gbStream : gbStreams) {
                 MediaServerItem mediaServerItem = mediaServerService.getOne(gbStream.getMediaServerId());

--
Gitblit v1.8.0