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 runningCamera = ConcurrentHashMap.newKeySet(); /** * 采集任务(不会堆积) */ @Scheduled(initialDelay = 5000, fixedDelay = 1000) public void startCollectTask() { List 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 list = ptzCacheManager.getAllValidData(5000); if (!list.isEmpty()) { PTZWebSocketUtils.sendMessageAll(list); } } catch (Exception e) { log.error("推送PTZ异常", e); } } }