From d7a1b94f905c5f28c9c8f2d48c3f9e28ebcf9cc4 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期六, 24 九月 2022 21:04:58 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0'

---
 src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java
new file mode 100644
index 0000000..8d1b066
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/service/redisMsg/RedisAlarmMsgListener.java
@@ -0,0 +1,102 @@
+package com.genersoft.iot.vmp.service.redisMsg;
+
+import com.alibaba.fastjson.JSON;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.utils.DateUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.connection.Message;
+import org.springframework.data.redis.connection.MessageListener;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+
+@Component
+public class RedisAlarmMsgListener implements MessageListener {
+
+    private final static Logger logger = LoggerFactory.getLogger(RedisAlarmMsgListener.class);
+
+    @Autowired
+    private ISIPCommander commander;
+
+    @Autowired
+    private ISIPCommanderForPlatform commanderForPlatform;
+
+    @Autowired
+    private IVideoManagerStorage storage;
+
+    private boolean taskQueueHandlerRun = false;
+
+    private ConcurrentLinkedQueue<Message> taskQueue = new ConcurrentLinkedQueue<>();
+
+    @Qualifier("taskExecutor")
+    @Autowired
+    private ThreadPoolTaskExecutor taskExecutor;
+
+    @Override
+    public void onMessage(@NotNull Message message, byte[] bytes) {
+        logger.info("鏀跺埌鏉ヨ嚜REDIS鐨凙LARM閫氱煡锛� {}", new String(message.getBody()));
+
+        taskQueue.offer(message);
+        if (!taskQueueHandlerRun) {
+            taskQueueHandlerRun = true;
+            logger.info("[绾跨▼姹犱俊鎭痌娲诲姩绾跨▼鏁帮細{}, 鏈�澶х嚎绋嬫暟锛� {}", taskExecutor.getActiveCount(), taskExecutor.getMaxPoolSize());
+            taskExecutor.execute(() -> {
+                while (!taskQueue.isEmpty()) {
+                    Message msg = taskQueue.poll();
+
+                    AlarmChannelMessage alarmChannelMessage = JSON.parseObject(msg.getBody(), AlarmChannelMessage.class);
+                    if (alarmChannelMessage == null) {
+                        logger.warn("[REDIS鐨凙LARM閫氱煡]娑堟伅瑙f瀽澶辫触");
+                        continue;
+                    }
+                    String gbId = alarmChannelMessage.getGbId();
+
+                    DeviceAlarm deviceAlarm = new DeviceAlarm();
+                    deviceAlarm.setCreateTime(DateUtil.getNow());
+                    deviceAlarm.setChannelId(gbId);
+                    deviceAlarm.setAlarmDescription(alarmChannelMessage.getAlarmDescription());
+                    deviceAlarm.setAlarmMethod("" + alarmChannelMessage.getAlarmSn());
+                    deviceAlarm.setAlarmPriority("1");
+                    deviceAlarm.setAlarmTime(DateUtil.getNowForISO8601());
+                    deviceAlarm.setAlarmType("1");
+                    deviceAlarm.setLongitude(0);
+                    deviceAlarm.setLatitude(0);
+
+                    if (ObjectUtils.isEmpty(gbId)) {
+                        // 鍙戦�佺粰鎵�鏈夌殑涓婄骇
+                        List<ParentPlatform> parentPlatforms = storage.queryEnableParentPlatformList(true);
+                        if (parentPlatforms.size() > 0) {
+                            for (ParentPlatform parentPlatform : parentPlatforms) {
+                                commanderForPlatform.sendAlarmMessage(parentPlatform, deviceAlarm);
+                            }
+                        }
+                    }else {
+                        Device device = storage.queryVideoDevice(gbId);
+                        ParentPlatform platform = storage.queryParentPlatByServerGBId(gbId);
+                        if (device != null && platform == null) {
+                            commander.sendAlarmMessage(device, deviceAlarm);
+                        }else if (device == null && platform != null){
+                            commanderForPlatform.sendAlarmMessage(platform, deviceAlarm);
+                        }else {
+                            logger.warn("鏃犳硶纭畾" + gbId + "鏄钩鍙拌繕鏄澶�");
+                        }
+                    }
+                }
+                taskQueueHandlerRun = false;
+            });
+        }
+
+
+    }
+}

--
Gitblit v1.8.0