From 4ac9edd4c0030d2daafd712cd14ef9080b2f1e43 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Tue, 10 Feb 2026 11:52:40 +0800
Subject: [PATCH] 优化

---
 ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java |  145 +++++++++++++++++++++++++----------------------
 1 files changed, 77 insertions(+), 68 deletions(-)

diff --git a/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java b/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
index de0230f..f5671f0 100644
--- a/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
+++ b/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
@@ -30,16 +30,15 @@
 @Slf4j
 @Service
 public class ArdChannelServiceImpl implements IArdChannelService {
-   // @Resource
-    //private IArdCameraService ardCameraService;
+
     @Resource
     private ArdChannelMapper ardChannelMapper;
+    @Resource
+    private RedisCache redisCache;
     @Resource
     private IArdVtduService ardVtduService;
     @Resource
     private MediamtxConfig mediamtxConfig;
-    @Resource
-    private RedisCache redisCache;
 
     /**
      * 查询通道管理
@@ -146,79 +145,89 @@
     }
 
 
-    @Scheduled(fixedDelay = 5000)
+    /**
+     * 同步通道流媒体
+     */
+    @Scheduled(cron = "0/10 * * * * ?")
     public void syncVtdu() {
         log.debug("定时同步Vtdu任务");
-        List<ArdChannel> channels = this.selectArdChannelList(new ArdChannel());
-        if (channels == null || channels.isEmpty()) {
-            // log.warn("没有获取到通道数据,退出同步");
-            return;
-        }
-        List<ArdVtdu> ardVtduList = ardVtduService.selectArdVtduList(new ArdVtdu());
+        try {
+            ArdChannel ardChannel = new ArdChannel();
+            ardChannel.setUseDataScope(false);
+            List<ArdChannel> channels = this.selectArdChannelList(ardChannel);
+//            if (channels == null || channels.isEmpty()) {
+//                // log.warn("没有获取到通道数据,退出同步");
+//                return;
+//            }
+            List<ArdVtdu> ardVtduList = ardVtduService.selectArdVtduList(new ArdVtdu());
 
-        Set<String> validNames = channels.stream()
-                .map(channel -> channel.getDeviceId() + "_" + channel.getChanNo())
-                .collect(Collectors.toSet());
-        // 2. 合并操作:增、删、改
-        channels.forEach(channel -> {
-            String name = channel.getDeviceId() + "_" + channel.getChanNo();  // 生成媒体表的 name
-            String cameraId = channel.getDeviceId();  // cameraId 就是通道的 deviceId
-            String rtspSourceUrl = getRtspSource(channel);
-            String rtspUrl =
-                    "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + name;  //
-            // 拼接 webrtcUrl
-            String rtmpUrl =
-                    "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + name;  // 拼接
-            // webrtcUrl
-            String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
-            String webrtcUrl =
-                    protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + name;
-            // 拼接 webrtcUrl
+            Set<String> validNames = channels.stream()
+                    .map(channel -> channel.getDeviceId() + "_" + channel.getChanNo())
+                    .collect(Collectors.toSet());
+            // 2. 合并操作:增、删、改
+            channels.forEach(channel -> {
+                String name = channel.getDeviceId() + "_" + channel.getChanNo();  // 生成媒体表的 name
+                String cameraId = channel.getDeviceId();  // cameraId 就是通道的 deviceId
+                String rtspSourceUrl = getRtspSource(channel);
+                String rtspUrl =
+                        "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + name;  //
+                // 拼接 webrtcUrl
+                String rtmpUrl =
+                        "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + name;
+                // 拼接
+                // webrtcUrl
+                String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
+                String webrtcUrl =
+                        protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + name;
+                // 拼接 webrtcUrl
 
-            // 先检查媒体表是否已有此记录
-            Optional<ArdVtdu> existingMedia = ardVtduList.stream()
-                    .filter(media -> media.getName().equals(name))  // 查找是否已有对应的媒体记录
-                    .findFirst();
+                // 先检查媒体表是否已有此记录
+                Optional<ArdVtdu> existingMedia = ardVtduList.stream()
+                        .filter(media -> media.getName().equals(name))  // 查找是否已有对应的媒体记录
+                        .findFirst();
 
-            if (existingMedia.isPresent()) {
-                // 如果已有,更新现有记录
-                ArdVtdu vtdu = existingMedia.get();
-                // 更新前后内容相同则不进行更新
-                if (!vtdu.getRtspSource().equals(rtspSourceUrl) ||
-                        !vtdu.getWebrtcUrl().equals(webrtcUrl) ||
-                        !vtdu.getRtspUrl().equals(rtspUrl) ||
-                        !vtdu.getRtmpUrl().equals(rtmpUrl)) {
+                if (existingMedia.isPresent()) {
+                    // 如果已有,更新现有记录
+                    ArdVtdu vtdu = existingMedia.get();
+                    // 更新前后内容相同则不进行更新
+                    if (!vtdu.getRtspSource().equals(rtspSourceUrl) ||
+                            !vtdu.getWebrtcUrl().equals(webrtcUrl) ||
+                            !vtdu.getRtspUrl().equals(rtspUrl) ||
+                            !vtdu.getRtmpUrl().equals(rtmpUrl)) {
+                        vtdu.setRtspUrl(rtspUrl);
+                        vtdu.setRtmpUrl(rtmpUrl);
+                        vtdu.setWebrtcUrl(webrtcUrl);
+                        ardVtduService.updateArdVtdu(vtdu);
+                        log.info("更新媒体记录:{}", vtdu.getName());
+                    }
+                } else {
+                    // 如果没有,插入新的记录
+                    ArdVtdu vtdu = new ArdVtdu();
+                    vtdu.setName(name);
+                    vtdu.setRtspSource(rtspSourceUrl);
+                    vtdu.setCameraId(cameraId);
                     vtdu.setRtspUrl(rtspUrl);
                     vtdu.setRtmpUrl(rtmpUrl);
                     vtdu.setWebrtcUrl(webrtcUrl);
-                    ardVtduService.updateArdVtdu(vtdu);
-                    log.info("更新媒体记录:{}", vtdu.getName());
+                    ardVtduService.insertArdVtdu(vtdu);  // 保存到媒体表
+                    log.info("插入新媒体记录:{}", vtdu.getName());
                 }
-            } else {
-                // 如果没有,插入新的记录
-                ArdVtdu vtdu = new ArdVtdu();
-                vtdu.setName(name);
-                vtdu.setRtspSource(rtspSourceUrl);
-                vtdu.setCameraId(cameraId);
-                vtdu.setRtspUrl(rtspUrl);
-                vtdu.setRtmpUrl(rtmpUrl);
-                vtdu.setWebrtcUrl(webrtcUrl);
-                ardVtduService.insertArdVtdu(vtdu);  // 保存到媒体表
-                log.info("插入新媒体记录:{}", vtdu.getName());
-            }
-        });
-        // 3. 删除操作:删除媒体表中多余的记录
-        List<String> invalidNames = ardVtduList.stream()
-                .filter(vtdu -> !validNames.contains(vtdu.getName()))
-                .filter(vtdu -> !"publisher".equalsIgnoreCase(vtdu.getRtspSource())) // 不是机场流
-                .map(ArdVtdu::getName)
-                .collect(Collectors.toList());
+            });
+            // 3. 删除操作:删除媒体表中多余的记录
+            List<String> invalidNames = ardVtduList.stream()
+                    .filter(vtdu -> !validNames.contains(vtdu.getName()))
+                    .filter(vtdu -> !"publisher".equalsIgnoreCase(vtdu.getRtspSource())) // 不是机场流
+                    .map(ArdVtdu::getName)
+                    .collect(Collectors.toList());
 
-        if (!invalidNames.isEmpty()) {
-            // 将 List<String> 转换为 String[]
-            String[] namesArray = invalidNames.toArray(new String[0]);
-            ardVtduService.deleteArdVtduByNames(namesArray); // 传递数组
-            log.info("删除不再存在的媒体记录:{}", Arrays.toString(namesArray));
+            if (!invalidNames.isEmpty()) {
+                // 将 List<String> 转换为 String[]
+                String[] namesArray = invalidNames.toArray(new String[0]);
+                ardVtduService.deleteArdVtduByNames(namesArray); // 传递数组
+                log.info("删除不再存在的媒体记录:{}", Arrays.toString(namesArray));
+            }
+        } catch (Exception e) {
+            log.error("定时同步Vtdu任务异常:{}", e.getMessage());
         }
 
     }
@@ -226,7 +235,7 @@
     // 根据通道信息获取rtsp源地址
     private String getRtspSource(ArdChannel channel) {
         String rtspSource = "";
-        ArdCamera ardCamera =  redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + channel.getDeviceId());
+        ArdCamera ardCamera = redisCache.getCacheMapValue(CacheConstants.CAMERA_LIST, channel.getDeviceId());
         if (ardCamera != null) {
             switch (ardCamera.getFactory()) {
                 case "1":

--
Gitblit v1.9.3