审查视图

application/api/controller/Order.php 17.8 KB
何书鹏 authored
1 2 3 4 5
<?php

namespace app\api\controller;

use app\common\controller\Api;
1  
何书鹏 authored
6
use app\common\controller\Wechat;
何书鹏 authored
7
use think\Db;
何书鹏 authored
8
何书鹏 authored
9 10 11
/**
 * 订单
 */
何书鹏 authored
12 13
class Order extends Api
{
何书鹏 authored
14 15 16 17 18 19 20
    protected $noNeedLogin = [];
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();
        $this->model = model('app\common\model\Order');
何书鹏 authored
21
        $this->user = $this->auth->getUser();
何书鹏 authored
22 23
    }
何书鹏 authored
24
    /**
何书鹏 authored
25 26 27 28 29 30 31 32 33 34 35
     * 我的订单-列表
     * @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':'返回成功'
        })
何书鹏 authored
36
     */
1  
何书鹏 authored
37
    public function index($type)
何书鹏 authored
38
    {
何书鹏 authored
39 40 41
        // 检测待支付订单
        $this->model->checkPaymentOrder($this->user['id']);
        // 获取订单列表
何书鹏 authored
42 43
        $list = $this->model->getList($this->user['id'], $type);
        $this->success(__('成功'),compact('list'));
何书鹏 authored
44 45 46
    }

    /**
何书鹏 authored
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
     * 我的订单-订单数量
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @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 getOrderNum()
    {
        $this->success(__('成功'),[
            'payment_num' => count($this->model->getList($this->user['id'], 'payment')),
            'delivery_num' => count($this->model->getList($this->user['id'], 'delivery')),
            'receive_num' => count($this->model->getList($this->user['id'], 'receive')),
            'appraise_num' => count($this->model->getList($this->user['id'], 'appraise')),
        ]);
    }

    /**
何书鹏 authored
69 70 71 72 73 74 75 76 77 78 79 80 81
     * 我的订单-修改地址
     * @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':'返回成功'
        })
     */
1  
何书鹏 authored
82
    public function editAddress($order_id,$user_address_id)
何书鹏 authored
83 84 85 86
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
87
        if(!$address = \app\common\model\UserAddress::detail($this->user['id'],$user_address_id)){
何书鹏 authored
88 89
            $this->error(__('地址不存在'));
        }
90 91 92 93 94 95 96 97 98
        $res = $order['address']->allowField(true)->save([
            'user_address_id' => $user_address_id,
            'name' => $address['name'],
            'phone' => $address['phone'],
            'province_id' => $address['province_id'],
            'city_id' => $address['city_id'],
            'district_id' => $address['district_id'],
            'detail' => $address['detail'],
        ]);
1  
何书鹏 authored
99
        $this->success(__('地址修改成功'));
何书鹏 authored
100 101 102
    }

    /**
何书鹏 authored
103 104 105 106 107 108 109 110 111
     * 我的订单-详情
     * @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',
1  
何书鹏 authored
112 113
         'msg':'返回成功',
         'data':'订单状态:payment=待支付,delivery=待发货,receive:待收货,appraise=待评价,completed=已完成,refund_1=退款申请中,refund_2=已退款,refund_3=已拒绝,return_goods_1=退货申请中,return_goods_2=已退款,return_goods_3=已拒绝'
何书鹏 authored
114
        })
何书鹏 authored
115
     */
1  
何书鹏 authored
116
    public function detail($order_id)
何书鹏 authored
117
    {
何书鹏 authored
118 119 120 121
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        $this->success(__('成功'),compact('order'));
何书鹏 authored
122 123 124
    }

    /**
何书鹏 authored
125 126 127 128 129 130 131 132 133 134 135
     * 我的订单-取消订单
     * @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':'返回成功'
        })
何书鹏 authored
136
     */
1  
何书鹏 authored
137
    public function cancel($order_id)
何书鹏 authored
138
    {
何书鹏 authored
139 140 141 142
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->cancel()) {
1  
何书鹏 authored
143
            $this->success(__('订单取消成功'));
何书鹏 authored
144
        }
何书鹏 authored
145
        $this->error($order->getError());
何书鹏 authored
146 147 148
    }

    /**
何书鹏 authored
149 150 151 152 153 154 155 156 157 158 159
     * 我的订单-去支付
     * @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':'返回成功'
        })
何书鹏 authored
160
     */
1  
何书鹏 authored
161
    public function pay($order_id)
何书鹏 authored
162
    {
何书鹏 authored
163 164 165 166 167 168 169 170 171 172 173
        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());
        }
        // 发起微信支付
何书鹏 authored
174 175
        $Wechat = new Wechat;
        $order['order_price'] = 0.01;//测试金额
1  
何书鹏 authored
176
        if(!$payment = $Wechat->wxPay($order['order_no'], $this->user['openid'], $order['order_price'])){
何书鹏 authored
177 178 179 180
            $this->error($Wechat->getError());
        }
        $this->success(__('订单支付成功'),[
            'payment' => $payment,
1  
何书鹏 authored
181
            'order_id' => $order['id']
何书鹏 authored
182 183
        ]);
        // (new Cart)->notifyTest($order['order_no']);
1  
何书鹏 authored
184
        $this->success(__('订单支付成功'));
何书鹏 authored
185 186 187
    }

    /**
何书鹏 authored
188 189 190 191 192 193 194 195 196 197 198 199
     * 我的订单-提醒发货
     * @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':'返回成功'
        })
     */
1  
何书鹏 authored
200
    public function remind($order_id)
何书鹏 authored
201 202 203 204 205
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->remind()) {
1  
何书鹏 authored
206
            $this->success(__('提醒发货成功'));
何书鹏 authored
207 208 209 210 211
        }
        $this->error($order->getError());
    }

    /**
1  
何书鹏 authored
212 213 214
     * 我的订单-查询物流
     * @ApiMethod   (GET)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
1  
何书鹏 authored
215
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
1  
何书鹏 authored
216 217 218 219 220 221 222 223
     * @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':'返回成功'
        })
     */
1  
何书鹏 authored
224
    public function orderTraces($order_id)
1  
何书鹏 authored
225
    {
1  
何书鹏 authored
226 227 228 229
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($data = $order->orderTraces()) {
何书鹏 authored
230 231 232 233 234
            $this->success(__('查询物流成功'),[
                'express_company' => $order['express_company'],
                'express_no' => $order['express_no'],
                'list' => $data
            ]);
1  
何书鹏 authored
235 236
        }
        $this->error($order->getError());
1  
何书鹏 authored
237 238 239
    }

    /**
何书鹏 authored
240 241 242 243 244 245 246 247 248 249 250 251
     * 我的订单-确认收货
     * @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':'返回成功'
        })
     */
1  
何书鹏 authored
252
    public function receive($order_id)
何书鹏 authored
253 254 255 256 257
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->receive()) {
1  
何书鹏 authored
258
            $this->success(__('确认收货成功'));
何书鹏 authored
259
        }
何书鹏 authored
260
        $this->error($order->getError());
何书鹏 authored
261
    }
何书鹏 authored
262 263

    /**
何书鹏 authored
264
     * 我的订单-申请退款页面
何书鹏 authored
265 266 267 268 269 270 271 272 273 274 275
     * @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':'返回成功'
        })
     */
1  
何书鹏 authored
276
    public function refundView($order_id)
何书鹏 authored
277 278 279 280
    {
        if(!$order = $this->model->getUserOrderDetail($order_id, $this->user['id'])){
            $this->error($this->model->getError());
        }
何书鹏 authored
281 282 283
        $refund_reason = config('site.refundreason') ?: [];//退款理由
        $refund_reason = str_replace("\r\n", "\n", $refund_reason);//防止不兼容
        $refund_reason = explode("\n", $refund_reason);
1  
何书鹏 authored
284
        $this->success(__('成功'),compact('order','refund_reason'));
何书鹏 authored
285
    }
何书鹏 authored
286 287 288

    /**
     * 我的订单-申请退款
何书鹏 authored
289
     * @ApiMethod   (POST)
何书鹏 authored
290 291
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
何书鹏 authored
292 293 294
     * @ApiParams   (name="reason", type="string", required=true, description="退款原因")
     * @ApiParams   (name="explain", type="string", required=true, description="退款说明")
     * @ApiParams   (name="images", type="string", required=true, description="退款凭证,多个图片用英文逗号分隔")
何书鹏 authored
295 296 297 298 299 300 301 302
     * @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':'返回成功'
        })
     */
何书鹏 authored
303
    public function refund()
何书鹏 authored
304
    {
何书鹏 authored
305 306
        $post = $this->request->post();
        if(!$order = $this->model->getUserOrderDetail($post['order_id'], $this->user['id'])){
何书鹏 authored
307
            $this->error($this->model->getError());
何书鹏 authored
308
        }
何书鹏 authored
309
        if ($order->toRefund($post)) {
何书鹏 authored
310
            $this->success(__('申请退款成功,请耐心等待'));
何书鹏 authored
311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
        }
        $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':'返回成功'
        })
     */
1  
何书鹏 authored
328
    public function returnGoodsView($order_id)
何书鹏 authored
329 330 331 332 333 334 335 336 337 338 339 340
    {
        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);
        // 退货理由
        $return_goods_reason = config('site.return_goods_reason') ?: [];
        $return_goods_reason = str_replace("\r\n", "\n", $return_goods_reason);//防止不兼容
        $return_goods_reason = explode("\n", $return_goods_reason);
1  
何书鹏 authored
341
        $this->success(__('成功'),compact('order','refund_reason','return_goods_reason'));
何书鹏 authored
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367
    }

    /**
     * 我的订单-申请退货
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
     * @ApiParams   (name="goods_status", type="string", required=true, description="商品状态")
     * @ApiParams   (name="reason", type="string", required=true, description="退货原因")
     * @ApiParams   (name="explain", type="string", required=true, description="退货说明")
     * @ApiParams   (name="images", type="string", 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 returnGoods()
    {
        $post = $this->request->post();
        if(!$order = $this->model->getUserOrderDetail($post['order_id'], $this->user['id'])){
            $this->error($this->model->getError());
        }
        if ($order->returnGoods($post)) {
何书鹏 authored
368
            $this->success(__('申请退货成功,请耐心等待'));
何书鹏 authored
369 370
        }
        $this->error($order->getError());
何书鹏 authored
371
    }
何书鹏 authored
372 373 374 375 376 377

    /**
     * 我的订单-评价
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="order_id", type="integer", required=true, description="订单ID")
1  
何书鹏 authored
378
     * @ApiParams   (name="goods_appraise", type="object", required=true, description="[{'goods_id':'商品一ID','star':'评价星级','content':'评价内容','images':'评价图片,多图用英文逗号分隔'},{'goods_id':'商品二ID','star':'评价星级','content':'评价内容','images':'评价图片,多图用英文逗号分隔'}]")
何书鹏 authored
379 380 381 382 383 384 385 386 387 388 389 390 391 392
     * @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());
        }
何书鹏 authored
393
        empty($post['goods_appraise']) && $this->error(__('请填写评价'));
何书鹏 authored
394 395 396 397 398 399
        if(is_string($post['goods_appraise'])){
            $post['goods_appraise'] = htmlspecialchars_decode($post['goods_appraise']);
            $post['goods_appraise'] = json_decode($post['goods_appraise'],true);
        }elseif(is_object($post['goods_appraise'])){
            $post['goods_appraise'] = json_decode($post['goods_appraise'],true);
        }
何书鹏 authored
400
        $appraiseList = [];
何书鹏 authored
401
        foreach ($post['goods_appraise'] as $appraise) {
何书鹏 authored
402 403 404 405 406 407 408 409 410
            $appraiseList[] = [
                'user_id' => $this->user['id'],
                'order_id' => $post['order_id'],
                'goods_id' => $appraise['goods_id'],
                'star' => $appraise['star'],
                'content' => $appraise['content'],
                'images' => $appraise['images']
            ];
        }
何书鹏 authored
411 412
        Db::startTrans();
        // 保存评价信息
何书鹏 authored
413
        (new \app\common\model\GoodsAppraise)->saveAll($appraiseList);
何书鹏 authored
414 415 416 417 418
        $order->save([
            'appraise_status' => '1',
            'appraise_time' => time(),
        ]);
        Db::commit();
何书鹏 authored
419
        $this->success(__('评价成功'));
何书鹏 authored
420
    }
何书鹏 authored
421
}