From de8cbd732adad3f2fd46027dda70fc87392e59cb Mon Sep 17 00:00:00 2001 From: wangxiaowei Date: Sat, 19 Oct 2024 10:56:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E7=94=9F=E6=B4=BB=E5=95=86?= =?UTF-8?q?=E5=93=81=E5=88=97=E8=A1=A8=E6=B7=BB=E5=8A=A0=E7=BB=8F=E7=BA=AC?= =?UTF-8?q?=E5=BA=A6=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/logic/LocalStoreLogic.php | 46 ++++++++++++------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/app/api/logic/LocalStoreLogic.php b/app/api/logic/LocalStoreLogic.php index 72233df8..0dde7dd9 100644 --- a/app/api/logic/LocalStoreLogic.php +++ b/app/api/logic/LocalStoreLogic.php @@ -135,7 +135,12 @@ class LocalStoreLogic extends Logic } // 经纬度排序 - $distance_sql = "6371 * acos(cos(radians(:user_latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians(:user_longitude)) + sin(radians(:user_latitude)) * sin(radians(latitude))) AS distance"; + if (isset($data['distance_sort'])) { + $order = ['distance' => $data['distance_sort']]; + } + + // 经纬度排序 + $distance_sql = "6371 * acos(cos(radians(" . $data['latitude'] . ")) * cos(radians(latitude)) * cos(radians(longitude) - radians(" . $data['longitude'] . ")) + sin(radians(" . $data['latitude'] . ")) * sin(radians(latitude))) AS distance"; // 数量统计 $count = LocalStore::alias('ls') @@ -146,38 +151,21 @@ class LocalStoreLogic extends Logic ->count(); // 列表 - if (isset($data['distance_sort'])) { - // 经纬度排序 - $lists = LocalStore::alias('ls') - ->join('local_store_goods lsg', 'ls.lstore_id = lsg.lstore_id') - ->where(['ls.is_delete' => 0, 'ls.store_state' => 1, 'lsg.state' => 1, 'lsg.audit_status' => 1, 'lsg.delete_time' => 0]) - ->where($where) - ->whereNotNull('ls.shopLogo') - ->order($order) - ->page($data['page_no'], $data['page_size']) - ->field('ls.shopName, ls.longitude, ls.latitude, lsg.id, lsg.lstore_id, lsg.title, lsg.price, ' . $distance_sql) - ->bind([ - 'user_latitude' => $data['latitude'], - 'user_longitude' => $data['longitude'], - ]) - ->order('distance', $data['distance_sort']) - ->select(); - } else { - $lists = LocalStore::alias('ls') - ->join('local_store_goods lsg', 'ls.lstore_id = lsg.lstore_id') - ->where(['ls.is_delete' => 0, 'ls.store_state' => 1, 'lsg.state' => 1, 'lsg.audit_status' => 1, 'lsg.delete_time' => 0]) - ->where($where) - ->whereNotNull('ls.shopLogo') - ->order($order) - ->page($data['page_no'], $data['page_size']) - ->field('ls.shopName, ls.longitude, ls.latitude, lsg.id, lsg.lstore_id, lsg.title, lsg.price') - ->select(); - } + $lists = LocalStore::alias('ls') + ->join('local_store_goods lsg', 'ls.lstore_id = lsg.lstore_id') + ->where(['ls.is_delete' => 0, 'ls.store_state' => 1, 'lsg.state' => 1, 'lsg.audit_status' => 1, 'lsg.delete_time' => 0]) + ->where($where) + ->whereNotNull('ls.shopLogo') + ->order($order) + ->page($data['page_no'], $data['page_size']) + ->field('ls.shopName, ls.longitude, ls.latitude, lsg.id, lsg.lstore_id, lsg.title, lsg.price, ' . $distance_sql) + ->select(); foreach ($lists as $key => &$value) { $pic = LocalStoreGoodsPic::where('lsg_id', $value['id'])->field('url')->find(); $lists[$key]['url'] = UrlServer::getFileUrl($pic['url']); - $lists[$key]['distance'] = round($this->distance($data['latitude'], $data['longitude'], $value['latitude'], $value['longitude']) / 1000, 2) . "km"; + $lists[$key]['distance'] = number_format($value['distance'], 2, '.', '') . "km"; +// $lists[$key]['distance'] = round($this->distance($data['latitude'], $data['longitude'], $value['latitude'], $value['longitude']) / 1000, 2) . "km"; $lists[$key]['store_nickname'] = $value["shopName"]; }