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);
|
}
|
}
|