diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index 024a8ff..8f1cd36 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -2,6 +2,7 @@ package com.ycwl.basic.service.task.impl; import cn.hutool.core.date.DateUtil; import com.ycwl.basic.integration.common.manager.RenderWorkerConfigManager; +import com.ycwl.basic.integration.common.manager.ScenicConfigManager; import com.ycwl.basic.utils.JacksonUtil; import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.biz.TaskStatusBiz; @@ -81,6 +82,8 @@ import java.util.stream.Collectors; @Slf4j @Service public class TaskTaskServiceImpl implements TaskService { + private static final String WORKER_SELF_HOSTED_CACHE_KEY = "worker_self_hosted_scenic:%s"; + private static final int CACHE_EXPIRE_MINUTES = 3; @Autowired private TaskMapper taskMapper; @Autowired @@ -119,6 +122,8 @@ public class TaskTaskServiceImpl implements TaskService { private DeviceRepository deviceRepository; @Autowired private VideoReUploader videoReUploader; + @Autowired + private RedisTemplate redisTemplate; private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { String accessKey = req.getAccessKey(); @@ -128,6 +133,24 @@ public class TaskTaskServiceImpl implements TaskService { return repository.getWorkerByAccessKey(accessKey); } + private boolean isWorkerSelfHostedScenic(Long scenicId) { + String cacheKey = String.format(WORKER_SELF_HOSTED_CACHE_KEY, scenicId); + String cachedValue = redisTemplate.opsForValue().get(cacheKey); + + if (cachedValue != null) { + return Boolean.parseBoolean(cachedValue); + } + + // 缓存中没有,查询配置 + ScenicConfigManager config = scenicRepository.getScenicConfigManager(scenicId); + boolean workerSelfHostedScenic = Boolean.TRUE.equals(config.getBoolean("worker_self_hosted")); + + // 缓存结果,设置30分钟过期 + redisTemplate.opsForValue().set(cacheKey, String.valueOf(workerSelfHostedScenic), CACHE_EXPIRE_MINUTES, TimeUnit.MINUTES); + + return workerSelfHostedScenic; + } + @Override public TaskSyncRespVo handleSyncTask(@NonNull TaskReqVo req) { RenderWorkerEntity worker = getWorker(req); @@ -159,14 +182,19 @@ public class TaskTaskServiceImpl implements TaskService { } else { updTemplateList = templateRepository.getAllEnabledTemplateList(); } + RenderWorkerConfigManager configManager = repository.getWorkerConfigManager(worker.getId()); try { if (lock.tryLock(2, TimeUnit.SECONDS)) { try { List taskList; - if (worker.getScenicOnly() != null) { - taskList = taskMapper.selectNotRunningByScenicList(worker.getScenicOnly()); + if (Strings.isNotBlank(configManager.getString("scenic_only"))) { + taskList = taskMapper.selectNotRunningByScenicList(configManager.getString("scenic_only")); } else { - taskList = taskMapper.selectNotRunning(); + var _taskList = taskMapper.selectNotRunning(); + taskList = _taskList.stream().filter(task -> { + boolean workerSelfHostedScenic = isWorkerSelfHostedScenic(task.getScenicId()); + return !workerSelfHostedScenic; + }).toList(); } resp.setTasks(taskList); resp.setTemplates(updTemplateList);