package com.ard.work.device.camera.service; import com.ard.work.device.camera.domain.PtzParamDTO; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** * ptz缓存管理器 * * @author 刘苏义 * @date 2026-03-20 */ @Component public class PtzCacheManager { // Key: cameraId_chanNo (例如 "CAM001_1"), Value: 最新的 PTZ 数据对象 // 使用 ConcurrentHashMap 保证多线程安全 private final ConcurrentHashMap ptzDataMap = new ConcurrentHashMap<>(); // 记录最后更新时间,用于判断数据是否过期 private final ConcurrentHashMap updateTimeMap = new ConcurrentHashMap<>(); public void updatePtzData(String key, PtzParamDTO data) { ptzDataMap.put(key, data); updateTimeMap.put(key, System.currentTimeMillis()); } public PtzParamDTO getPtzData(String key) { return ptzDataMap.get(key); } // 获取所有有效数据快照 public List 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()); } public void removeData(String key) { ptzDataMap.remove(key); updateTimeMap.remove(key); } }