option('user-id'); $this->info('开始测试宠物技能处理日志功能...'); // 1. 查看当前激活的技能 $this->info('1. 查看当前激活的技能'); $activeSkills = PetActiveSkill::active(); if ($userId) { $activeSkills = $activeSkills->whereHas('pet', function ($query) use ($userId) { $query->where('user_id', $userId); }); } $activeSkills = $activeSkills->get(); if ($activeSkills->isEmpty()) { $this->warn('没有找到激活的技能'); return 0; } $this->table( ['ID', '宠物ID', '用户ID', '技能名称', '状态', '开始时间', '结束时间'], $activeSkills->map(function ($skill) { return [ $skill->id, $skill->pet_id, $skill->pet->user_id, $skill->skill_name, $skill->status, $skill->start_time->format('Y-m-d H:i:s'), $skill->end_time->format('Y-m-d H:i:s'), ]; })->toArray() ); // 2. 执行技能处理任务 $this->info('2. 执行技能处理任务'); $job = new ProcessActiveSkillsJob(); $result = $job->run(); if ($result) { $this->info('技能处理任务执行成功'); } else { $this->error('技能处理任务执行失败'); return 1; } // 3. 查看生成的处理日志 $this->info('3. 查看生成的处理日志(最近10条)'); $logs = PetSkillProcessLog::with(['activeSkill', 'pet']) ->orderBy('processed_at', 'desc') ->limit(10); if ($userId) { $logs = $logs->where('user_id', $userId); } $logs = $logs->get(); if ($logs->isEmpty()) { $this->warn('没有找到处理日志'); } else { $this->table( ['ID', '技能ID', '用户ID', '技能名称', '状态', '原因', '执行时间(秒)', '处理时间'], $logs->map(function ($log) { return [ $log->id, $log->active_skill_id, $log->user_id, $log->skill_name, $log->process_status, Str::limit($log->process_reason, 30), $log->execution_time, $log->processed_at->format('Y-m-d H:i:s'), ]; })->toArray() ); } // 4. 显示处理数据详情 if ($logs->isNotEmpty()) { $this->info('4. 显示最新日志的处理数据详情'); $latestLog = $logs->first(); $this->line("日志ID: {$latestLog->id}"); $this->line("技能名称: {$latestLog->skill_name}"); $this->line("处理状态: {$latestLog->process_status}"); $this->line("处理原因: {$latestLog->process_reason}"); $this->line("执行时间: {$latestLog->execution_time}秒"); if ($latestLog->process_data) { $this->line("处理数据:"); $this->line(json_encode($latestLog->process_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE)); } } // 5. 统计信息 $this->info('5. 处理日志统计信息'); $stats = PetSkillProcessLog::selectRaw(' process_status, skill_name, COUNT(*) as count, AVG(execution_time) as avg_execution_time, MAX(execution_time) as max_execution_time ') ->where('processed_at', '>=', now()->subHour()) ->groupBy('process_status', 'skill_name') ->get(); if ($stats->isNotEmpty()) { $this->table( ['状态', '技能名称', '次数', '平均执行时间(秒)', '最大执行时间(秒)'], $stats->map(function ($stat) { return [ $stat->process_status, $stat->skill_name, $stat->count, round($stat->avg_execution_time, 3), round($stat->max_execution_time, 3), ]; })->toArray() ); } else { $this->warn('最近1小时内没有处理日志'); } $this->info('测试完成!'); return 0; } }