| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- namespace App\Jobs;
- use App\Services\BetService;
- use App\Services\LogService;
- use App\Services\PcIssueService;
- use Exception;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use App\Services\IssueService;
- use Illuminate\Support\Facades\Log;
- class FiveSecondTaskJob implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- /**
- * 任务尝试次数
- */
- public $tries = 3;
- /**
- * 任务超时时间(秒),需小于队列的 retry_after。
- */
- public $timeout = 85;
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct()
- {
- //
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- try {
- //(极速28)自定义开奖
- $this->runTimedStep('极速28开奖处理', fn () => PcIssueService::index());
- // 提前60秒秒提醒封盘倒数
- $this->runTimedStep('加拿大28封盘倒计时', fn () => IssueService::syncCountdownIssue());
- // 停止下注 //封盘
- $this->runTimedStep('加拿大28封盘', fn () => IssueService::syncCloseIssue());
- // 获取最新的期号
- $this->runTimedStep('加拿大28开奖同步', fn () => IssueService::getLatestIssue());
- //随机虚拟投注
- $this->runTimedStep('虚拟投注', fn () => BetService::randomVirtualBetting(3));
- // 重要:使用类名而不是 self(),避免递归
- FiveSecondTaskJob::dispatch()->delay(now()->addSeconds(15));
- // Log::error('📅 下一个15秒任务已安排');
- } catch (Exception $e) {
- try {
- throw new Exception('❌ 15秒任务执行异常: ' . $e->getMessage());
- }catch (Exception $e) {
- LogService::error($e);
- }
- // 异常后15秒重试
- FiveSecondTaskJob::dispatch()->delay(now()->addSeconds(15));
- }
- }
- private function runTimedStep(string $step, callable $callback): void
- {
- $startedAt = microtime(true);
- $completed = false;
- $context = [
- 'step' => $step,
- 'job_id' => $this->job?->getJobId(),
- 'attempt' => $this->attempts(),
- 'process_id' => getmypid(),
- ];
- Log::channel('issue')->info('PC28任务步骤开始', $context);
- try {
- $callback();
- $completed = true;
- } finally {
- Log::channel('issue')->info('PC28任务步骤结束', $context + [
- 'elapsed_ms' => round((microtime(true) - $startedAt) * 1000, 1),
- 'status' => $completed ? 'completed' : 'failed',
- ]);
- }
- }
- // 可选:失败处理
- public function failed(\Throwable $exception)
- {
- Log::error('任务失败: ' . $exception->getMessage());
- // 可选:重新分发或通知
- dispatch(new self())->delay(now()->addSeconds(15));
- }
- }
|