model = new \app\common\model\TaxiOrder(); $this->taxiUserModel = new \app\api\model\taxi\User(); } /** * 接单大厅订单列表 * @return mixed|\think\response\Json * @throws \Lettered\Support\Exceptions\FailedException */ public function index() { // 1. 传入用户位置 $param = $this->request->param(); // 数据校验 $valid = $this->validate($param, [ 'lng' => ['require','regex|-?((0|1?[0-7]?[0-9]?)(([.][0-9]{1,4})?)|180(([.][0]{1,4})?))'], 'lat' => ['require','regex|-?((0|1?[0-7]?[0-9]?)(([.][0-9]{1,4})?)|180(([.][0]{1,4})?))'], 'page' => 'require', ],[ 'lng.require' => '缺少经度参数', 'lng.regex' => '经度参数有误', 'lat.require' => '缺少维度参数', 'lat.regex' => '维度参数有误' ]); // 错误 if (true !== $valid){ return IResponse::failure($valid); } $limit = isset($param['pageSize'])? $param['pageSize'] : 20; $taxiUser = $this->auth->guard('taxi_user')->user(); if(!$taxiUser){ return IResponse::failure('用户不存在,或已被冻结'); } $categoryIds = Taxi::where(['taxi_user_id'=> $taxiUser['id']])->column('category_id'); $categoryIds = array_unique($categoryIds); // 经纬度升序 $lists = $this->model ->fieldRaw("* , TRUNCATE(( 6371 * acos ( cos ( radians(".$param['lat'].") ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(".$param['lng'].") ) + sin ( radians(".$param['lat'].") ) * sin( radians( latitude ) ) ) ), 2) AS distance") ->having('distance < 10') ->where(['status' => 2]) ->where(function($query) use($categoryIds){ if($categoryIds){ $query->whereIn('category_id', $categoryIds); } }) ->order(['distance' => 'ASC']) ->limit((($param['page'] - 1) * $limit) . "," . $limit) ->select(); return IResponse::success($lists,'获取成功'); } /** * 我的订单 * @return mixed * @throws \Lettered\Support\Exceptions\FailedException */ public function myOrder() { // 1. 传入用户位置 $param = $this->request->param(); $limit = isset($param['pageSize'])? $param['pageSize'] : 20; $taxiUser = $this->auth->guard('taxi_user')->user(); if(!$taxiUser){ return IResponse::failure('用户不存在,或已被冻结'); } // 经纬度升序 $lists = $this->model->with(['paylog','user','taxi','taxiUser']) ->where(['taxi_uid' => $taxiUser['id']]) ->order(['created_at' => 'desc']) ->limit((($param['page'] - 1) * $limit) . "," . $limit) ->select(); return IResponse::success($lists,'获取成功'); } /** * 等待服务订单 * @return mixed|\think\response\Json * @throws \Lettered\Support\Exceptions\FailedException */ public function waitOrder() { $taxiUser = $this->auth->guard('taxi_user')->user(); if(!$taxiUser){ return IResponse::failure('用户不存在,或已被冻结'); } $info = model('common/TaxiOrder')->with(['paylog','user','taxi','taxiUser']) ->where(['taxi_uid' => $taxiUser['id']]) ->whereIn('status',[2,3]) ->order('created_at','desc') ->find(); if($info){ return IResponse::success(!is_null($info)? $info : [],'获取成功'); }else{ return IResponse::failure('获取失败'); } } /** * 接单 * @return mixed * @throws \Lettered\Support\Exceptions\FailedException */ public function receive() { $param = $this->request->param(); $id = isset($param['id'])? $param['id'] : 0; $taxiUser = $this->auth->guard('taxi_user')->user(); if(!$taxiUser){ return IResponse::failure('用户不存在,或已被冻结'); } $info = model('common/TaxiOrder') ->where(['taxi_uid' => $taxiUser['id'],'id'=> $id, 'status'=>3]) ->order('created_at','desc') ->find(); if(empty($info)){ return IResponse::failure('订单不存在,或已处理'); } } /** * 已送达 * @return mixed * @throws \Lettered\Support\Exceptions\FailedException */ public function delivered() { $param = $this->request->param(); $id = isset($param['id'])? $param['id'] : 0; $taxiUser = $this->auth->guard('taxi_user')->user(); if(!$taxiUser){ return IResponse::failure('用户不存在,或已被冻结'); } $info = model('common/TaxiOrder') ->where(['taxi_uid' => $taxiUser['id'],'id'=> $id, 'status'=>3]) ->order('created_at','desc') ->find(); if(empty($info)){ return IResponse::failure('订单不存在,或已处理'); } } }