<?php

namespace App\Jobs;

use App\Command\Log;
use App\Models\OrderDivideRecord;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;

class AutoCompleteOrder implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $order;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($order, $delay)
    {
        $this->order = $order;
        // 设置延迟的时间,delay() 方法的参数代表多少秒之后执行
        $this->delay($delay);
    }

    /**
     * * 定义这个任务类具体的执行逻辑
     * 当队列处理器从队列中取出任务时,会调用 handle() 方法
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        if ($this->order->order_status != 3) { //待评价
            return;
        }
        // 通过事务执行 sql
        DB::beginTransaction();
        try {
            $this->order->order_status = 4; //已完成
            $this->order->save();

            //佣金分配
            OrderDivideRecord::divide($this->order->id);

            DB::commit();
            Log::add('订单自动完成', $this->order->toArray());
        } catch (\Exception $exception) {
            DB::rollBack();
            Log::add('自动完成订单失败', $exception);
        }
    }
}