From ae851536831ceb607715b9d8b0ad50f8f9df201e Mon Sep 17 00:00:00 2001 From: Lemon <15040771@qq.com> Date: Thu, 29 Oct 2020 17:49:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E9=A1=B5=E9=9D=A2=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=94=B6=E8=B4=A7=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Controller/v3/OrderOnlineController.php | 37 ++++++++++++++++--- .../v3/Implementations/LocationService.php | 7 +--- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/app/Controller/v3/OrderOnlineController.php b/app/Controller/v3/OrderOnlineController.php index 2839970..bb2e8d5 100644 --- a/app/Controller/v3/OrderOnlineController.php +++ b/app/Controller/v3/OrderOnlineController.php @@ -19,6 +19,7 @@ use App\Service\v3\Interfaces\DistributionPriceServiceInterface; use App\Service\v3\Interfaces\LocationServiceInterface; use App\Service\v3\Interfaces\SeparateAccountsServiceInterface; use App\Service\v3\Interfaces\ShopCartServiceInterface; +use GuzzleHttp\Client; use Hyperf\DbConnection\Db; use Hyperf\Di\Annotation\Inject; use App\Service\v3\Interfaces\OrderOnlineServiceInterface; @@ -101,19 +102,43 @@ class OrderOnlineController extends BaseController //->where('is_default',1) ->orderByDesc('is_default') ->orderByDesc('updated_at') - ->first(); + ->get()->toArray(); $market = Market::find($marketId); - $distance = 0; - if(!empty($address->lng) && !empty($address->lat)){ - $distance = $this->locationService->getDistanceByTencent($market->lng,$market->lat,$address->lng,$address->lat); + $type = 'bicycling'; + $key = config('map.tencent'); + $url = 'https://apis.map.qq.com/ws/distance/v1/matrix?mode='.$type.'&from='.$market->lat.','.$market->lng.'&to='; + $client = new Client(); + foreach ($address as $item) { + $url .= $item['lat'] . ','; + $url .= $item['lng'] . ';'; } + $url = rtrim($url, ";"); + $response = $client->request('GET', $url.'&output=json&key='.$key); + $response = $response->getBody()->getContents(); + $resultArr = json_decode($response,true); + $resultArr = $resultArr['result']['rows'][0]['elements']; $deliveryDistance = config('distance.delivery_distance'); - if(isset($distance) && $distance < $deliveryDistance){ + foreach ($address as $key => &$item) { + if($resultArr[$key]['distance'] <= $deliveryDistance){ + $item['distance'] = $resultArr[$key]['distance']; + $addressNew[] = $item; + } + } + $collection = collect($addressNew); + $sorted = $collection->sortBy('distance')->sortByDesc('is_default'); + $address = $sorted->values()->first(); + if($address){ + $distance = $address['distance']; if($distance >= 1000){ $distance_text = '距您收货地址 ' . bcdiv($distance,1000,2) . 'km'; }else{ $distance_text = '距您收货地址 ' . $distance . 'm'; } + if($address['is_default'] == 1){ + $address['tags'] = ['id' => 5,'name' => '默认']; + }else{ + $address['tags'] = ['id' => 6,'name' => '距离最近']; + } $distributionPrice = $this->distributionPriceService->do($distance); $originalPrice = $this->distributionPriceService->original($distance); $res['location'] = [ @@ -133,7 +158,7 @@ class OrderOnlineController extends BaseController 'address' => '', 'distribution_price' => 0, 'original_price' => 0, - 'distance' => $distance, + 'distance' => 0, 'within' => false, 'style' => 'strike', 'distribution_text' => '', diff --git a/app/Service/v3/Implementations/LocationService.php b/app/Service/v3/Implementations/LocationService.php index 01aed8a..f7e2775 100644 --- a/app/Service/v3/Implementations/LocationService.php +++ b/app/Service/v3/Implementations/LocationService.php @@ -155,12 +155,7 @@ class LocationService implements LocationServiceInterface */ $type = 'bicycling'; $key = config('map.tencent'); - $client = new Client([ - // Base URI is used with relative requests - 'base_uri' => 'https://apis.map.qq.com/', - // You can set any number of default request options. - 'timeout' => 2.0, - ]); + $client = new Client(); $response = $client->request('GET', $url.$type.'&from='.$lat1.','.$lng1.'&to='.$lat2.','.$lng2.'&output=json&key='.$key); $response = $response->getBody()->getContents(); $resultArr = json_decode($response,true);