package com.ard.work.device.camera.service;
|
|
import com.ard.common.core.constant.CacheConstants;
|
import com.ard.common.redis.service.RedisService;
|
import com.ard.work.api.domian.ArdCamera;
|
import com.ard.work.device.camera.domain.PtzParamDTO;
|
import com.ard.work.websocket.utils.PTZWebSocketUtils;
|
import jakarta.annotation.Resource;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
import java.util.List;
|
import java.util.Set;
|
import java.util.concurrent.ConcurrentHashMap;
|
|
@Slf4j
|
@Component
|
public class PtzTask {
|
|
@Resource
|
private PtzDataCollector ptzDataCollector;
|
|
@Resource
|
private PtzCacheManager ptzCacheManager;
|
|
@Resource
|
private RedisService redisService;
|
|
private final Set<String> runningCamera = ConcurrentHashMap.newKeySet();
|
|
/**
|
* 采集任务(不会堆积)
|
*/
|
@Scheduled(initialDelay = 5000, fixedDelay = 1000)
|
public void startCollectTask() {
|
|
List<Object> cameraList = redisService.getCacheMapValues(CacheConstants.CAMERA_LIST);
|
if (cameraList == null || cameraList.isEmpty()) return;
|
|
for (Object obj : cameraList) {
|
ArdCamera camera = (ArdCamera) obj;
|
String camId = camera.getId();
|
|
// ✅ 防重复执行
|
if (!runningCamera.add(camId)) continue;
|
|
ptzDataCollector.collectCamera(camera, runningCamera);
|
}
|
}
|
|
/**
|
* 推送
|
*/
|
@Scheduled(fixedDelay = 1000)
|
public void pushPTZ() {
|
try {
|
List<PtzParamDTO> list = ptzCacheManager.getAllValidData(5000);
|
if (!list.isEmpty()) {
|
PTZWebSocketUtils.sendMessageAll(list);
|
}
|
} catch (Exception e) {
|
log.error("推送PTZ异常", e);
|
}
|
}
|
}
|