liusuyi
2026-05-14 9958bc1501d0daee954d9bba383475e55e24ebab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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<String, PtzParamDTO> ptzDataMap = new ConcurrentHashMap<>();
    
    // 记录最后更新时间,用于判断数据是否过期
    private final ConcurrentHashMap<String, Long> 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<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());
    }
    
    public void removeData(String key) {
        ptzDataMap.remove(key);
        updateTimeMap.remove(key);
    }
}