From 07a4dba152ee17bf0bb9fb37d7cbd92b08b813eb Mon Sep 17 00:00:00 2001 From: luofei <604446095@qq.com> Date: Mon, 22 Jan 2024 15:18:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=95=86=E5=93=81=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dao/system/merchant/MerchantDao.php | 19 ++++++++++++------- .../api/store/product/CloudWarehouse.php | 4 ++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/common/dao/system/merchant/MerchantDao.php b/app/common/dao/system/merchant/MerchantDao.php index 1195fd73..49de4657 100644 --- a/app/common/dao/system/merchant/MerchantDao.php +++ b/app/common/dao/system/merchant/MerchantDao.php @@ -319,20 +319,25 @@ class MerchantDao extends BaseDao * 按距离获取有效的商户 * @param $lat * @param $lng + * @param $sort 是否按距离排序 * @param $distance 距离,单位米 * @return mixed */ - public function getValidMerchantByDistance($lat, $lng, $distance = 2000) + public function getValidMerchantByDistance($lat, $lng, $sort = false, $distance = 2000) { - $merchant = Merchant::where('type_id', 'IN', ["10", "17"]) + $query = Merchant::where('type_id', 'IN', ["10", "17"]) ->where(['is_del' => 0, 'mer_state' => 1]) ->whereNotNull('lat') ->whereNotNull('long') - ->field("mer_id,st_distance_sphere(point(`long`,`lat`), point({$lng}, {$lat})) as distance") - ->having("distance <= {$distance}") - ->limit(50)->select()->toArray(); - if (empty($merchant) && $distance < 5000) { - $merchant = $this->getValidMerchantByDistance($lat, $lng, 5000); + ->field("mer_id,st_distance_sphere(point(`long`,`lat`), point({$lng}, {$lat})) as distance"); + if ($sort) { + $query->order('distance')->limit(20); + } else { + $query->having("distance <= {$distance}")->limit(50); + } + $merchant = $query->select()->toArray(); + if (empty($merchant) && $distance < 5000 && !$sort) { + $merchant = $this->getValidMerchantByDistance($lat, $lng, $sort, 5000); } if (!empty($merchant)) { return array_column($merchant, 'mer_id'); diff --git a/app/controller/api/store/product/CloudWarehouse.php b/app/controller/api/store/product/CloudWarehouse.php index c0f4d3f1..2c779e82 100644 --- a/app/controller/api/store/product/CloudWarehouse.php +++ b/app/controller/api/store/product/CloudWarehouse.php @@ -56,6 +56,10 @@ class CloudWarehouse extends BaseController } } } + if (empty($merIds)) { + $merIds = (new MerchantDao())->getValidMerchantByDistance($location['lat'], $location['lng'], true); + $query->whereIn('mer_id', $merIds); + } if($cate_pid!=0){ $cate_id=Db::name('store_category')->where('pid',$cate_pid)->where('is_show',1)->column('store_category_id'); }