Rider.php 2.6 KB
<?php


namespace app\api\controller;


use app\api\model\RiderOrder;
use app\common\controller\Api;

/**
 * 骑手
 */
class Rider extends Api
{
    protected $noNeedRight = ['*'];
//    protected $noNeedLogin = ['*'];

    /**
     * @ApiTitle    (骑手订单页)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name=page, type=integer, required=true, description="页数")
     * @ApiParams   (name=lat, type=integer, required=true, description="骑手纬度")
     * @ApiParams   (name=lng, type=integer, required=true, description="骑手经度")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    'data':
        "total": 2,
        "per_page": 5,
        "current_page": 1,
        "last_page": 1,
        "data": [
            {
            "id": 1,
            "distance": 111.263, 距离
            "address": {
                "name": "1", 收件人
                "phone": "13549059988", 电话号码
                "detail": "阿松大", 地址
                "address": "阿松大", 门牌号
            },
            "orderdetail": {
                "order_no": "LQ-16420622494781", 订单编号
                "createtime_text": ""
            }
            }
        ]
    })
     */
    public function index()
    {
        $page = $this->request->post('page',1);
        $lat = $this->request->post('lat');
        $lng = $this->request->post('lng');
        if (!is_numeric($page)) $this->error('页数不合法');
        if (!is_numeric($lat)) $this->error('纬度不合法');
        if (!is_numeric($lng)) $this->error('经度不合法');
        $model = new RiderOrder();
        $EARTH=6378.137; //地球半径
        $PI=3.14; //PI值 圆周率
        $list = $model
            ->with(['address','orderdetail'])
            ->where('fa_rider_order.user_id',$this->auth->id)
            ->where('fa_rider_order.status','1')
            ->field('Round((2 * '.$EARTH.'* ASIN(SQRT(POW(SIN('.$PI.'*('.$lat.'-lat)/360),2)
            +COS('.$PI.'*'.$lat.'/180)* COS(lat * '.$PI.'/180)
            *POW(SIN('.$PI.'*('.$lng.'-lng)/360),2)))),3) as distance')
            ->order('distance')
            ->paginate(5,false,['page'=>$page])
            ->each(function ($item,$key){
                $item->getRelation('orderdetail')->visible(['order_no']);
                $item->getRelation('address')->visible(['name','phone','address','detail']);
                $item->visible(['orderdetail','address','distance','id']);
            });
        $this->success('订单列表',$list);
    }
}