Order.php 10.7 KB
<?php

namespace app\api\controller;

use app\common\controller\Api;

/**
 * 订单
 */
class Order extends Api
{
    protected $noNeedLogin = [];
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();
        $this->model = model('app\common\model\Order');
        $this->user = $this->auth->getUser();
    }

    /**
     * 我的订单-列表
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="type", type="string", required=true, description="订单类型:all=全部,payment=待付款,delivery=待发货,receive=待收货,appraise=待评价")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function index($type)
    {
        $list = $this->model->getList($this->user['id'], $type);
        $this->success(__('成功'),compact('list'));
    }

    /**
     * 我的订单-修改地址
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiParams   (name="user_address_id", type="integer", required=true, description="用户地址")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function editAddress($order_id,$user_address_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if(!$address = \app\common\model\UserAddress::detail($user['id'],$address)){
            $this->error(__('地址不存在'));
        }
        $res = \app\common\model\OrderAddress::save([
            'name' => $order['address']['name'],
            'phone' => $order['address']['phone'],
            'province_id' => $order['address']['province_id'],
            'city_id' => $order['address']['city_id'],
            'district_id' => $order['address']['district_id'],
            'detail' => $order['address']['detail'],
        ],['order_id'=>$order['id']]);
        $this->success(__('成功'));
    }

    /**
     * 我的订单-详情
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function detail($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        $this->success(__('成功'),compact('order'));
    }

    /**
     * 我的订单-取消订单
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function cancel($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->cancel()) {
            $this->success(__('成功'));
        }
        $this->error($order->getError());
    }

    /**
     * 我的订单-去支付
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function pay($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order['pay_status'] == '1') {
            $this->error(__('该订单不合法'));
        }
        // 判断商品状态、库存
        if (!$order->checkGoodsStatusFromOrder($order['goods'])) {
            return $this->renderError($order->getError());
        }
        // 发起微信支付
        // $Wechat = new Wechat;
        // if(!$payment = $Wechat->wxPay($model['order_no'], $this->user['openid'], $order['order_price']);){
        //     $this->error($Wechat->getError());
        // }
        $this->notifyTest($model['order_no']);
        $this->success(__('成功'),[
            'payment' => '成功',
            'order_id' => $model['id']
        ]);
    }

    /**
     * 我的订单-提醒发货
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function remind($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->remind()) {
            $this->success(__('成功'));
        }
        $this->error($order->getError());
    }

    /**
     * 我的订单-确认收货
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function receive($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->receive()) {
            $this->success(__('成功'));
        }
        $this->error($order->getError());
    }

    /**
     * 我的订单-申请退款页面
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function refundView($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        $refund_reason = config('site.refundreason') ?: [];//退款理由
        $refund_reason = str_replace("\r\n", "\n", $refund_reason);//防止不兼容
        $refund_reason = explode("\n", $refund_reason);
        $this->success(__('成功'),compact('order,refund_reason'));
        $this->error($order->getError());
    }

    /**
     * 我的订单-申请退款
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function refund($order_id)
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        } 
        if ($order['refund_status'] == 2) return self::setErrorInfo('订单已退款!');
        if ($order['refund_status'] == 1) return self::setErrorInfo('正在申请退款中!');
        if ($order['status'] == 1) return self::setErrorInfo('订单当前无法退款!');
    }

    /**
     * 我的订单-评价
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function appraise()
    {
        $post = $this->request->post();
        if(!$order = $this->model->getUserOrderDetail($post['order_id'], $this->user['id'])){
            $this->error($this->model->getError());
        }
    }
}