<?php namespace app\api\controller; use app\api\model\GoodsComment; use app\api\model\RiderOrder; use app\api\model\UserMoneyLog; use app\common\controller\Api; use think\Config; use think\Db; /** * 骑手 */ class Rider extends Api { protected $noNeedRight = ['*']; protected $noNeedLogin = ['service']; /** * @ApiTitle (骑手订单页) * @ApiMethod (POST) * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") * @ApiParams (name=type, type=integer, required=true, description="1配送中2=已完成") * @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() { $type = $this->request->post('type'); $page = $this->request->post('page',1); $lat = $this->request->post('lat'); $lng = $this->request->post('lng'); if (!in_array($type,[1,2])) $this->error('type参数不合法'); if (!is_numeric($page)) $this->error('页数不合法'); if (!is_numeric($lat)) $this->error('纬度不合法'); if (!is_numeric($lng)) $this->error('经度不合法'); $model = new RiderOrder(); if ($type == 1){ $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']); }); }else{ $list = $model ->with(['address','orderdetail']) ->where('fa_rider_order.user_id',$this->auth->id) ->where('fa_rider_order.status','2') ->order('fa_rider_order.id','desc') ->paginate(5,false,['page'=>$page]) ->each(function ($item,$key){ $item->getRelation('orderdetail')->visible(['order_no']); $item->getRelation('address')->visible(['name','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':'订单详情' '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", "total_num": "1", 购买数量 "image_text": "http://temporaryfood.qiniu.broing.cn123132" }, { "goods_name": "MacBook Pro 13寸", "goods_attr": "天空灰", "total_num": "1", "image_text": "http://temporaryfood.qiniu.broing.cn123132" } ], "createtime_text": "" }) */ public function orderOverDetail() { $id = $this->request->post('id'); $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','comment']); foreach ($order->getRelation('goods') as $key => $value){ $value->visible(['goods_name','goods_attr','total_num']); } $comment = new GoodsComment(); $content = $comment->where('order_id',$order->id)->select(); $order['comment'] = $content; $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(); $user = $this->auth->getUser(); $data = [ 'user_id' => $this->auth->id, 'money' => $order->express_price, 'before' => $user->money, 'after' => $order->express_price+$user->money, 'memo' => '订单运费', ]; $user->setInc('money',$order->express_price); $moneymodel = new UserMoneyLog(); $moneymodel->isUpdate(false)->save($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 withdrawDetail() { $data = [ 'money' => $this->auth->money, 'content' => Config::get('site.withdraw_content') ]; $this->success('提现成功',$data); } /** * @ApiTitle (联系客服) * @ApiMethod (POST) * @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); } /** * @ApiTitle (余额明细) * @ApiMethod (POST) * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") * @ApiParams (name=page, type=integer, required=true, description="页数") * @ApiReturn ({ 'code':'1', 'msg':'余额明细' }) */ public function moneyList() { $page = $this->request->post('page',1); $model = new UserMoneyLog(); $list = $model ->where('user_id',$this->auth->id) ->order('id','desc') ->paginate(10,false,['page'=>$page]); $this->success('余额明细',$list); } }