diff --git a/mateclaw-server/src/main/java/vip/mate/dashboard/controller/DashboardController.java b/mateclaw-server/src/main/java/vip/mate/dashboard/controller/DashboardController.java index 67e24556..94803ec1 100644 --- a/mateclaw-server/src/main/java/vip/mate/dashboard/controller/DashboardController.java +++ b/mateclaw-server/src/main/java/vip/mate/dashboard/controller/DashboardController.java @@ -4,8 +4,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import vip.mate.agent.AgentService; -import vip.mate.agent.model.AgentEntity; import vip.mate.common.result.R; import vip.mate.cron.model.CronJobEntity; import vip.mate.cron.repository.CronJobMapper; @@ -32,7 +30,6 @@ public class DashboardController { private final DashboardService dashboardService; private final CronJobRunService cronJobRunService; private final CronJobMapper cronJobMapper; - private final AgentService agentService; @Operation(summary = "获取概览统计") @GetMapping("/overview") @@ -58,15 +55,14 @@ public class DashboardController { @PathVariable Long cronJobId, @RequestHeader(value = "X-Workspace-Id", required = false) Long workspaceId, @RequestParam(defaultValue = "20") int limit) { - // 校验 cronJobId 对应的 agent 属于当前 workspace + // Verify the cron job belongs to the caller's workspace. Checked + // against the job's own workspace_id so agent-less system jobs + // (e.g. wiki_process) verify the same way as agent-bound jobs. CronJobEntity job = cronJobMapper.selectById(cronJobId); - if (job != null && job.getAgentId() != null) { - AgentEntity agent = agentService.getAgent(job.getAgentId()); - if (agent != null && agent.getWorkspaceId() != null) { - long wsId = workspaceId != null ? workspaceId : 1L; - if (!agent.getWorkspaceId().equals(wsId)) { - throw new MateClawException("err.common.wrong_workspace", "资源不属于当前工作区"); - } + if (job != null && job.getWorkspaceId() != null) { + long wsId = workspaceId != null ? workspaceId : 1L; + if (!job.getWorkspaceId().equals(wsId)) { + throw new MateClawException("err.common.wrong_workspace", "资源不属于当前工作区"); } } return R.ok(cronJobRunService.listByJobId(cronJobId, Math.min(limit, 100))); diff --git a/mateclaw-server/src/main/java/vip/mate/dashboard/service/CronJobRunService.java b/mateclaw-server/src/main/java/vip/mate/dashboard/service/CronJobRunService.java index af49008e..ef0607a7 100644 --- a/mateclaw-server/src/main/java/vip/mate/dashboard/service/CronJobRunService.java +++ b/mateclaw-server/src/main/java/vip/mate/dashboard/service/CronJobRunService.java @@ -3,8 +3,6 @@ package vip.mate.dashboard.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import vip.mate.agent.model.AgentEntity; -import vip.mate.agent.repository.AgentMapper; import vip.mate.cron.model.CronJobEntity; import vip.mate.cron.repository.CronJobMapper; import vip.mate.dashboard.model.ActiveCronRunVO; @@ -30,7 +28,6 @@ public class CronJobRunService { private final CronJobRunMapper runMapper; private final CronJobMapper cronJobMapper; - private final AgentMapper agentMapper; /** * 记录一次执行开始 @@ -95,26 +92,21 @@ public class CronJobRunService { /** * 查询指定 workspace 关联的最近执行记录 - * 路径:workspace → agents → cronJobs → cronJobRuns + * 路径:workspace → cronJobs → cronJobRuns + *

+ * Cron jobs are matched by their own workspace_id, so agent-less system + * jobs (e.g. wiki_process) are included alongside agent-bound jobs. */ public List listRecentByWorkspace(Long workspaceId, int limit) { - // 1. workspace 下的 agent IDs - List agents = agentMapper.selectList( - new LambdaQueryWrapper() - .eq(AgentEntity::getWorkspaceId, workspaceId) - .select(AgentEntity::getId)); - if (agents.isEmpty()) return Collections.emptyList(); - Set agentIds = agents.stream().map(AgentEntity::getId).collect(Collectors.toSet()); - - // 2. 这些 agent 关联的 cronJob IDs + // 1. workspace 下的 cronJob IDs List jobs = cronJobMapper.selectList( new LambdaQueryWrapper() - .in(CronJobEntity::getAgentId, agentIds) + .eq(CronJobEntity::getWorkspaceId, workspaceId) .select(CronJobEntity::getId)); if (jobs.isEmpty()) return Collections.emptyList(); Set jobIds = jobs.stream().map(CronJobEntity::getId).collect(Collectors.toSet()); - // 3. 这些 cronJob 的执行记录 + // 2. 这些 cronJob 的执行记录 return runMapper.selectList( new LambdaQueryWrapper() .in(CronJobRunEntity::getCronJobId, jobIds)