From f4f4fc53260eb67483dce406a963628273786a61 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 30 May 2026 17:22:17 +0800
Subject: [PATCH] 优化

---
 ard-modules/ard-modules-work/src/main/java/com/ard/work/device/camera/service/PtzCacheManager.java |   51 +++++++++++++++++++++++++++++++++------------------
 1 files changed, 33 insertions(+), 18 deletions(-)

diff --git a/ard-modules/ard-modules-work/src/main/java/com/ard/work/device/camera/service/PtzCacheManager.java b/ard-modules/ard-modules-work/src/main/java/com/ard/work/device/camera/service/PtzCacheManager.java
index 9ba82b3..02c6af6 100644
--- a/ard-modules/ard-modules-work/src/main/java/com/ard/work/device/camera/service/PtzCacheManager.java
+++ b/ard-modules/ard-modules-work/src/main/java/com/ard/work/device/camera/service/PtzCacheManager.java
@@ -2,10 +2,11 @@
 
 import com.ard.work.device.camera.domain.PtzParamDTO;
 import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
 
 /**
  * ptz缓存管理器
@@ -13,36 +14,50 @@
  * @author 刘苏义
  * @date 2026-03-20
  */
-
 @Component
 public class PtzCacheManager {
-    // Key: cameraId_chanNo (例如 "CAM001_1"), Value: 最新的 PTZ 数据对象
-    // 使用 ConcurrentHashMap 保证多线程安全
+
+    /** Key: cameraId_chanNo, Value: 最新PTZ数据(自带 updateTime) */
     private final ConcurrentHashMap<String, PtzParamDTO> ptzDataMap = new ConcurrentHashMap<>();
-    
-    // 记录最后更新时间,用于判断数据是否过期
-    private final ConcurrentHashMap<String, Long> updateTimeMap = new ConcurrentHashMap<>();
 
     public void updatePtzData(String key, PtzParamDTO data) {
+        if (data == null) return;
+        data.setUpdateTime(System.currentTimeMillis());
         ptzDataMap.put(key, data);
-        updateTimeMap.put(key, System.currentTimeMillis());
     }
 
     public PtzParamDTO getPtzData(String key) {
         return ptzDataMap.get(key);
     }
-    
-    // 获取所有有效数据快照
+
+    /** 获取所有未过期数据快照 */
     public List<PtzParamDTO> getAllValidData(long timeoutMs) {
         long now = System.currentTimeMillis();
-        return ptzDataMap.entrySet().stream()
-            .filter(entry -> (now - updateTimeMap.get(entry.getKey())) < timeoutMs)
-            .map(Map.Entry::getValue)
-            .collect(Collectors.toList());
+        Collection<PtzParamDTO> values = ptzDataMap.values();
+        List<PtzParamDTO> result = new ArrayList<>(values.size());
+        for (PtzParamDTO dto : values) {
+            if (now - dto.getUpdateTime() < timeoutMs) {
+                result.add(dto);
+            }
+        }
+        return result;
     }
-    
+
     public void removeData(String key) {
         ptzDataMap.remove(key);
-        updateTimeMap.remove(key);
     }
-}
\ No newline at end of file
+
+    /** 清理过期数据,返回清理条数 */
+    public int evictStale(long timeoutMs) {
+        long now = System.currentTimeMillis();
+        int[] count = {0};
+        ptzDataMap.entrySet().removeIf(e -> {
+            if (now - e.getValue().getUpdateTime() > timeoutMs) {
+                count[0]++;
+                return true;
+            }
+            return false;
+        });
+        return count[0];
+    }
+}

--
Gitblit v1.9.3