progressService = $progressService; } /** * 执行命令 * * @return int */ public function handle() { $this->info('开始检查任务进度...'); // 获取命令选项 $userId = $this->option('user-id'); $taskId = $this->option('task-id'); $batchSize = $this->option('batch-size'); $dryRun = $this->option('dry-run'); // 构建查询 $query = TaskUserTask::query() ->where('status', TASK_STATUS::IN_PROGRESS->value) ->where('progress', '>=', 100); // 应用过滤条件 if ($userId) { $query->where('user_id', $userId); } if ($taskId) { $query->where('task_id', $taskId); } // 获取符合条件的任务数量 $totalTasks = $query->count(); if ($totalTasks === 0) { $this->info('没有找到需要完成的任务'); return 0; } $this->info("找到 {$totalTasks} 个需要完成的任务"); if ($dryRun) { $this->warn('仅检查模式,不执行实际操作'); return 0; } // 创建进度条 $bar = $this->output->createProgressBar($totalTasks); $bar->start(); // 分批处理 $completedCount = 0; $failedCount = 0; $query->chunk($batchSize, function ($userTasks) use (&$completedCount, &$failedCount, $bar) { foreach ($userTasks as $userTask) { try { // 检查任务是否需要重置 $this->progressService->checkAndResetTask($userTask); // 如果任务仍然是进行中状态且进度达到100%,则完成任务 if ($userTask->status === TASK_STATUS::IN_PROGRESS->value && $userTask->progress >= 100) { $result = $this->progressService->checkTaskCompletion($userTask->user_id, $userTask->task_id); if ($result['success']) { $completedCount++; } else { $failedCount++; $this->error("完成任务失败: 用户ID={$userTask->user_id}, 任务ID={$userTask->task_id}, 错误: {$result['message']}"); } } } catch (\Exception $e) { $failedCount++; Log::error('检查任务进度失败', [ 'user_id' => $userTask->user_id, 'task_id' => $userTask->task_id, 'error' => $e->getMessage(), ]); $this->error("处理任务异常: 用户ID={$userTask->user_id}, 任务ID={$userTask->task_id}, 错误: {$e->getMessage()}"); } $bar->advance(); } }); $bar->finish(); $this->newLine(2); $this->info("任务处理完成: 成功完成 {$completedCount} 个任务, 失败 {$failedCount} 个任务"); return 0; } }