<?php

namespace addons\shopro\job\trade;

use addons\shopro\job\BaseJob;
use think\queue\Job;
use think\Db;
use think\exception\HttpResponseException;
use addons\shopro\exception\ShoproException;
use app\admin\model\shopro\trade\Order;

/**
 * 订单自动操作
 */
class OrderAutoOper extends BaseJob
{

    /**
     * 订单自动关闭
     */
    public function autoClose(Job $job, $data)
    {
        try {
            $order = $data['order'];

            // 重新查询订单
            $order = Order::unpaid()->where('id', $order['id'])->find();

            if ($order) {
                Db::transaction(function () use ($order, $data) {
                    // 执行关闭
                    $order->status = Order::STATUS_CLOSED;
                    $order->ext = array_merge($order->ext, ['closed_time' => time()]);      // 取消时间
                    $order->save();
                });
            }

            // 删除 job
            $job->delete();
        } catch (ShoproException $e) {
            // 自定义异常时删除 队列
            $job->delete();
            format_log_error($e, 'TradeOrderAutoOper.autoClose.ShoproException');
        } catch (HttpResponseException $e) {
            $data = $e->getResponse()->getData();
            $message = $data ? ($data['msg'] ?? '') : $e->getMessage();
            format_log_error($e, 'TradeOrderAutoOper.autoClose.HttpResponseException', $message);
        } catch (\Exception $e) {
            // 队列执行失败
            format_log_error($e, 'TradeOrderAutoOper.autoClose');
        }
    }
}