From 2b1f7a47394363e95deb4dfa0f1c67d41e747f7f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 01 二月 2023 10:56:40 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0' into fix-269

---
 src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java |  194 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 194 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
new file mode 100644
index 0000000..be73ebd
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
@@ -0,0 +1,194 @@
+package com.genersoft.iot.vmp.gb28181.event.subscribe.catalog;
+
+import com.genersoft.iot.vmp.common.VideoManagerConstants;
+import com.genersoft.iot.vmp.conf.SipConfig;
+import com.genersoft.iot.vmp.conf.UserSetting;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.service.IGbStreamService;
+import com.genersoft.iot.vmp.service.IMediaServerService;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import javax.sip.InvalidArgumentException;
+import javax.sip.SipException;
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * catalog浜嬩欢
+ */
+@Component
+public class CatalogEventLister implements ApplicationListener<CatalogEvent> {
+
+    private final static Logger logger = LoggerFactory.getLogger(CatalogEventLister.class);
+
+    @Autowired
+    private IVideoManagerStorage storager;
+
+    @Autowired
+    private SIPCommanderFroPlatform sipCommanderFroPlatform;
+
+    @Autowired
+    private IGbStreamService gbStreamService;
+
+    @Autowired
+    private SubscribeHolder subscribeHolder;
+
+    @Override
+    public void onApplicationEvent(CatalogEvent event) {
+        SubscribeInfo subscribe = null;
+        ParentPlatform parentPlatform = null;
+
+        Map<String, List<ParentPlatform>> parentPlatformMap = new HashMap<>();
+        if (!ObjectUtils.isEmpty(event.getPlatformId())) {
+            subscribe = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
+            if (subscribe == null) {
+                return;
+            }
+            parentPlatform = storager.queryParentPlatByServerGBId(event.getPlatformId());
+            if (parentPlatform != null && !parentPlatform.isStatus()) {
+                return;
+            }
+
+        }else {
+            // 鑾峰彇鎵�鐢ㄨ闃�
+            List<String> platforms = subscribeHolder.getAllCatalogSubscribePlatform();
+            if (event.getDeviceChannels() != null) {
+                if (platforms.size() > 0) {
+                    for (DeviceChannel deviceChannel : event.getDeviceChannels()) {
+                        List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForGBWithGBId(deviceChannel.getChannelId(), platforms);
+                        parentPlatformMap.put(deviceChannel.getChannelId(), parentPlatformsForGB);
+                    }
+                }
+            }else if (event.getGbStreams() != null) {
+                if (platforms.size() > 0) {
+                    for (GbStream gbStream : event.getGbStreams()) {
+                        if (gbStream == null || ObjectUtils.isEmpty(gbStream.getGbId())) {
+                            continue;
+                        }
+                        List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForStreamWithGBId(gbStream.getApp(),gbStream.getStream(), platforms);
+                        parentPlatformMap.put(gbStream.getGbId(), parentPlatformsForGB);
+                    }
+                }
+            }
+        }
+        switch (event.getType()) {
+            case CatalogEvent.ON:
+            case CatalogEvent.OFF:
+            case CatalogEvent.DEL:
+
+                if (parentPlatform != null || subscribe != null) {
+                    List<DeviceChannel> deviceChannelList = new ArrayList<>();
+                    if (event.getDeviceChannels() != null) {
+                        deviceChannelList.addAll(event.getDeviceChannels());
+                    }
+                    if (event.getGbStreams() != null && event.getGbStreams().size() > 0){
+                        for (GbStream gbStream : event.getGbStreams()) {
+                            DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStream(gbStream, gbStream.getCatalogId(), parentPlatform);
+                            deviceChannelList.add(deviceChannelByStream);
+                        }
+                    }
+                    if (deviceChannelList.size() > 0) {
+                        logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}涓�", event.getType(), event.getPlatformId(), deviceChannelList.size());
+                        try {
+                            sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), parentPlatform, deviceChannelList, subscribe, null);
+                        } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
+                                 IllegalAccessException e) {
+                            logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 Catalog閫氱煡: {}", e.getMessage());
+                        }
+                    }
+                }else if (parentPlatformMap.keySet().size() > 0) {
+                    for (String gbId : parentPlatformMap.keySet()) {
+                        List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
+                        if (parentPlatforms != null && parentPlatforms.size() > 0) {
+                            for (ParentPlatform platform : parentPlatforms) {
+                                SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId());
+                                if (subscribeInfo == null) {
+                                    continue;
+                                }
+                                logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId);
+                                List<DeviceChannel> deviceChannelList = new ArrayList<>();
+                                DeviceChannel deviceChannel = new DeviceChannel();
+                                deviceChannel.setChannelId(gbId);
+                                deviceChannelList.add(deviceChannel);
+                                try {
+                                    sipCommanderFroPlatform.sendNotifyForCatalogOther(event.getType(), platform, deviceChannelList, subscribeInfo, null);
+                                } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
+                                         IllegalAccessException e) {
+                                    logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 Catalog閫氱煡: {}", e.getMessage());
+                                }
+                            }
+                        }
+                    }
+                }
+                break;
+            case CatalogEvent.VLOST:
+                break;
+            case CatalogEvent.DEFECT:
+                break;
+            case CatalogEvent.ADD:
+            case CatalogEvent.UPDATE:
+                if (parentPlatform != null || subscribe != null) {
+                     List<DeviceChannel> deviceChannelList = new ArrayList<>();
+                     if (event.getDeviceChannels() != null) {
+                         deviceChannelList.addAll(event.getDeviceChannels());
+                     }
+                    if (event.getGbStreams() != null && event.getGbStreams().size() > 0){
+                        for (GbStream gbStream : event.getGbStreams()) {
+                            deviceChannelList.add(
+                                    gbStreamService.getDeviceChannelListByStreamWithStatus(gbStream, gbStream.getCatalogId(), parentPlatform));
+                        }
+                    }
+                    if (deviceChannelList.size() > 0) {
+                        logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}涓�", event.getType(), event.getPlatformId(), deviceChannelList.size());
+                        try {
+                            sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), parentPlatform, deviceChannelList, subscribe, null);
+                        } catch (InvalidArgumentException | ParseException | NoSuchFieldException | SipException |
+                                 IllegalAccessException e) {
+                            logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 Catalog閫氱煡: {}", e.getMessage());
+                        }
+                    }
+                }else if (parentPlatformMap.keySet().size() > 0) {
+                    for (String gbId : parentPlatformMap.keySet()) {
+                        List<ParentPlatform> parentPlatforms = parentPlatformMap.get(gbId);
+                        if (parentPlatforms != null && parentPlatforms.size() > 0) {
+                            for (ParentPlatform platform : parentPlatforms) {
+                                SubscribeInfo subscribeInfo = subscribeHolder.getCatalogSubscribe(platform.getServerGBId());
+                                if (subscribeInfo == null) {
+                                    continue;
+                                }
+                                logger.info("[Catalog浜嬩欢: {}]骞冲彴锛歿}锛屽奖鍝嶉�氶亾{}", event.getType(), platform.getServerGBId(), gbId);
+                                List<DeviceChannel> deviceChannelList = new ArrayList<>();
+                                DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(platform.getServerGBId(), gbId);
+                                deviceChannelList.add(deviceChannel);
+                                GbStream gbStream = storager.queryStreamInParentPlatform(platform.getServerGBId(), gbId);
+                                if(gbStream != null){
+                                    DeviceChannel deviceChannelByStream = gbStreamService.getDeviceChannelListByStreamWithStatus(gbStream, gbStream.getCatalogId(), platform);
+                                    deviceChannelList.add(deviceChannelByStream);
+                                }
+                                try {
+                                    sipCommanderFroPlatform.sendNotifyForCatalogAddOrUpdate(event.getType(), platform, deviceChannelList, subscribeInfo, null);
+                                } catch (InvalidArgumentException | ParseException | NoSuchFieldException |
+                                         SipException | IllegalAccessException e) {
+                                    logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 Catalog閫氱煡: {}", e.getMessage());
+                                }
+                            }
+                        }
+                    }
+                }
+                break;
+            default:
+                break;
+        }
+    }
+}
+ 
\ No newline at end of file

--
Gitblit v1.8.0