OrderItemStatus.php 3.0 KB
<?php

namespace addons\groupon\library\traits\model\order;

use addons\groupon\library\Wechat;
use addons\groupon\model\Order;
use addons\groupon\model\OrderItem;
use think\Cache;

trait OrderItemStatus
{

    public function getStatusNameAttr($value, $data)
    {
        return $this->getStatus($data, 'status_name');
    }

    public function getStatusDescAttr($value, $data)
    {
        return $this->getStatus($data, 'status_desc');
    }

    public function getBtnsAttr($value, $data)
    {
        return $this->getStatus($data, 'btns');
    }


    // 获取订单 item status_code 状态,不进行订单是否支付判断,在这里查询数据库特别慢,
    // 需要处理情况,订单列表:要正确显示item 状态,直接获取 item 的状态
    public function getStatusCodeAttr($value, $data)
    {
        $status_code = 'null';

        // $order = Order::withTrashed()->where('id', $data['order_id'])->find();
        // if (!$order) {
        //     return $status_code;
        // }

        // // 判断是否支付
        // if (!in_array($order->status, [Order::STATUS_PAYED, Order::STATUS_FINISH])) {
        //     return $order->status_code;
        // }

        // 获取 item status_code
        return $this->getBaseStatusCode($data);
    }


    /**
     * $data 当前 item 数据
     * $from 当前 model 调用,还是 order 调用
     */
    public function getBaseStatusCode($data, $from = 'item')
    {
        $status_code = 'null';

        if (in_array($data['refund_status'], [OrderItem::REFUND_STATUS_OK, OrderItem::REFUND_STATUS_FINISH])) {
            // 退款完成
            return 'refund_finish';
        }

        if ($data['refund_status'] == OrderItem::REFUND_STATUS_ING) {
            $status_code = 'refund_ing';
        } else {
            // 未退款
            $status_code = $this->getNormalStatusCode($data);
        }

        return $status_code;
    }



    public function getNormalStatusCode($data)
    {
        // 获取未申请售后和退款时候的 status_code
        $status_code = 'null';

        switch ($data['dispatch_status']) {
            case OrderItem::DISPATCH_STATUS_NOSEND:
                $status_code = 'nosend';
                break;
            case OrderItem::DISPATCH_STATUS_READY:
                $status_code = 'noarrive';
                break;
            case OrderItem::DISPATCH_STATUS_ARRIVE:
                $status_code = 'noget';
                break;
            case OrderItem::DISPATCH_STATUS_GETED:
                if ($data['comment_status'] == OrderItem::COMMENT_STATUS_NO) {
                    $status_code = 'nocomment';
                } else {
                    $status_code = 'commented';
                }
                break;
        }

        return $status_code;        // status_code
    }


    public function setExt($item, $field, $origin = [])
    {
        $newExt = array_merge($origin, $field);

        $itemExt = $item['ext_arr'];

        return array_merge($itemExt, $newExt);
    }
}