Rider.php 9.6 KB
<?php


namespace app\api\controller;


use app\api\model\RiderOrder;
use app\common\controller\Api;
use think\Config;
use think\Db;

/**
 * 骑手
 */
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);
    }


    /**
     * @ApiTitle    (骑手个人页面)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    'data':
        "avatar": 头像,
        "nickname": 昵称,
        "money": 余额,
        "today_price": 今日所得,
        "seven_price": 七日所得,
        "all_price": 历史所得,
        "today_order": 今日订单数,
        "seven_order": 七日订单数,
        "all_order": 历史订单数,
    })
     */
    public function userIndex()
    {
        $data = [
            'avatar' => cdnurl($this->auth->avatar,true),
            'nickname' => $this->auth->nickname,
            'money' => $this->auth->money
        ];
        $model = new RiderOrder();
        $todaytime = strtotime(date('Y-m-d',time()));
        $seventime = $todaytime-86400*7;
        $today = $model
            ->where('user_id',$this->auth->id)
            ->where('status','2')
            ->where('sendtime','>',$todaytime)
            ->sum('price');
        $todaycount = $model
            ->where('user_id',$this->auth->id)
            ->where('status','2')
            ->where('sendtime','>',$todaytime)
            ->count();
        $seven = $model
            ->where('fa_rider_order.user_id',$this->auth->id)
            ->where('status','2')
            ->where('fa_rider_order.status','>',$seventime)
            ->sum('price');
        $sevencount = $model
            ->where('fa_rider_order.user_id',$this->auth->id)
            ->where('status','2')
            ->where('fa_rider_order.status','>',$seventime)
            ->count();
        $all = $model
            ->where('fa_rider_order.user_id',$this->auth->id)
            ->where('fa_rider_order.status','2')
            ->sum('price');
        $allcount = $model
            ->where('fa_rider_order.user_id',$this->auth->id)
            ->where('fa_rider_order.status','2')
            ->count();
        $data['today_price'] = $today;
        $data['seven_price'] = $seven;
        $data['all_price'] = $all;
        $data['today_order'] = $todaycount;
        $data['seven_order'] = $sevencount;
        $data['all_order'] = $allcount;
        $this->success('骑手个人页',$data);
    }


    /**
     * @ApiTitle    (骑手订单详情)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiHeaders  (name=id, type=integer, required=true, description="骑手订单id")
     * @ApiHeaders  (name=lat, type=float, required=true, description="纬度")
     * @ApiHeaders  (name=lng, type=float, required=true, description="经度")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    'data':
    "id": 7,
    "order_no": "LQ-16420622494781", 订单编号
    "distance": 111.3195, 距离
    "address": {
        "id": 1,
        "name": "1", 姓名
        "phone": "13549059988",
        "detail": "阿松大1", 门牌号
        "address": "阿松大", 地址
        "order_id": 7,
        "user_id": 1,
        "lat": "116.397128",
        "lng": "39.916527",
        "createtime": 0,
        "province_id": 1,
        "city_id": 2,
        "region_id": 3,
        "mobile_hide": "135****9988"  电话号码
    },
    "goods": [
        {
        "goods_name": "Mate 20 华为 HUAWEI ",
        "goods_attr": "极光色 8GB+128GB",
        "image_text": "http://temporaryfood.qiniu.broing.cn123132"
        },
        {
        "goods_name": "MacBook Pro 13寸",
        "goods_attr": "天空灰",
        "image_text": "http://temporaryfood.qiniu.broing.cn123132"
        }
    ],
    "createtime_text": ""
    })
     */
    public function orderDetail()
    {
        $id = $this->request->post('id');
        $lat = $this->request->post('lat');
        $lng = $this->request->post('lng');
        $rider_order = RiderOrder::get($id);
        $ordermodel = new \app\api\model\Order();
        $order = $ordermodel
            ->with(['address','goods'])
            ->where('fa_litestore_order.id',$rider_order['order_id'])
            ->find();
        $order->visible(['order_no','address','goods','id','distance']);
        foreach ($order->getRelation('goods') as $key => $value){
            $value->visible(['goods_name','goods_attr']);
        }
        $lat1 = $order['address']['lat'];
        $lng1 = $order['address']['lng'];
        $lat2 = $lat;
        $lng2 = $lng;
        $order['distance'] = getDistance($lat1,$lng1,$lat2,$lng2);
        $this->success('骑手个人页',$order);
    }


    /**
     * @ApiTitle    (骑手已送达)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiHeaders  (name=id, type=integer, required=true, description="骑手订单id")
     * @ApiReturn   ({
    'code':'1',
    'msg':'送达成功'
    })
     */
    public function orderService()
    {
        $id = $this->request->post('id');
        $rider_order = RiderOrder::get($id);
        $ordermodel = new \app\api\model\Order();
        $order = $ordermodel
            ->where('id',$rider_order['order_id'])
            ->find();
        if ($order['rider_status'] == 20) $this->error('该订单已送达');
        $order->rider_status = '20';
        $order->isUpdate()->save();
        $rider_order->status = '2';
        $rider_order->sendtime = time();
        $rider_order->isUpdate()->save();
        $data = [
            'user_id' => $this->auth->id,
            'money' => $order->express_price,
            'memo' => '订单运费',
            'createtime' => time()
        ];
        Db::name('user_money_log')->insert($data);
        $this->success('送达成功',$order);
    }


    /**
     * @ApiTitle    (骑手提现)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiHeaders  (name=money, type=integer, required=true, description="提现金额")
     * @ApiReturn   ({
    'code':'1',
    'msg':'送达成功'
    })
     */
    public function withdraw()
    {
        $money = $this->request->post('money');
        $user = $this->auth->getUser();
        if ($user['money'] < $money) $this->error('可提现金额不足');
        $user->setDec('money',$money);
        $data = [
            'user_id' => $this->auth->id,
            'money' => $money,
            'memo' => '提现',
            'createtime' => time()
        ];
        Db::name('user_money_log')->insert($data);
        $this->success('提现成功');
    }


    /**
     * @ApiTitle    (联系客服)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturn   ({
    'code':'1',
    'msg':'送达成功'
    })
     */
    public function service()
    {
        $data = [
            'qrcode' => cdnurl(Config::get('site.work_qrcode'),true),
            'time' => Config::get('site.work_time'),
            'mobile' => Config::get('site.work_mobile')
        ];
        $this->success('客服信息',$data);
    }
}