135 lines
5.3 KiB
PHP
135 lines
5.3 KiB
PHP
<?php
|
|
|
|
namespace app\api\logic;
|
|
|
|
use app\common\basics\Logic;
|
|
use app\common\model\LocalStore;
|
|
use app\common\model\LocalStoreOrder;
|
|
use think\facade\Db;
|
|
|
|
class LocalStoreLogic extends Logic
|
|
{
|
|
public function getLocalList($data){
|
|
$model = new LocalStore;
|
|
$distance = "";
|
|
$s =$s1= "";
|
|
if(isset($data['c_name'])){
|
|
if($data['c_name']!=""){
|
|
$s1 = "address like '%".$data['c_name']."%'";
|
|
$s = "and address like '%".$data['c_name']."%'";
|
|
}
|
|
}
|
|
|
|
$count = $model->where('is_delete',0)
|
|
->where($s1)
|
|
->where("store_state",1)
|
|
->where("shopLogo is not null")
|
|
->count();
|
|
// $lists = $model->where('is_delete',0)
|
|
// ->where($s)
|
|
// ->page($data['page'], $data['size'])
|
|
// ->order('lstore_id desc')
|
|
// ->select();
|
|
$size = $data['page_size'];
|
|
$page = ($data['page_no']-1)*$data['page_size'];
|
|
// $sql = "SELECT *, ST_Distance_Sphere(POINT(".$data['longitude'].",".$data['latitude']."),POINT(longitude, latitude)) AS distance
|
|
// FROM ls_local_store where is_delete = 0 $s
|
|
// ORDER BY distance limit $page,$size";
|
|
$sql = "SELECT * FROM ls_local_store where is_delete = 0 and store_state = 1 and shopLogo is not null $s ORDER BY lstore_id asc limit ".$page.",".$size;
|
|
// var_dump($sql);
|
|
$lists = Db::query($sql);
|
|
foreach($lists as $key=>$value){
|
|
$lists[$key]['distance'] = round($this->distance($data['latitude'], $data['longitude'], $value['latitude'], $value['longitude'])/1000,2)."公里";
|
|
$lists[$key]['store_nickname'] = $value["shopName"];
|
|
}
|
|
$data = [
|
|
'list' => $lists,
|
|
'page' => $data['page_no'],
|
|
'size' => $data['page_size'],
|
|
'count' => $count,
|
|
'more' => is_more($count, $data['page_no'], $data['page_size'])
|
|
];
|
|
// var_dump($data);
|
|
return $data;
|
|
}
|
|
|
|
public function getLocalOrderList($data){
|
|
$count = LocalStoreOrder::where(['lstore_id' => $data['lstore_id'], 'pay_shop_type' => 1, 'state' => 1])->count();
|
|
// $count = Db::name("local_store_order")
|
|
// ->where("lstore_id",$data['lstore_id'])
|
|
// ->where("pay_shop_type",1)
|
|
// ->where('state',1)
|
|
// ->count();
|
|
// $lists = $model->where('is_delete',0)
|
|
// ->where($s)
|
|
// ->page($data['page'], $data['size'])
|
|
// ->order('lstore_id desc')
|
|
// ->select();
|
|
// $size = $data['page_size'];
|
|
// $page = ($data['page_no']-1)*$data['page_size'];
|
|
// $sql = "SELECT *, ST_Distance_Sphere(POINT(".$data['longitude'].",".$data['latitude']."),POINT(longitude, latitude)) AS distance
|
|
// FROM ls_local_store where is_delete = 0 $s
|
|
// ORDER BY distance limit $page,$size";
|
|
// $sql = "SELECT * FROM ls_local_store_order where state = 1 and
|
|
// pay_shop_type = 1 and lstore_id = ".$data['lstore_id']."
|
|
// ORDER BY create_time desc limit ".$page.",".$size;
|
|
|
|
// $lists = Db::query($sql);
|
|
$lists = LocalStoreOrder::alias('lso')
|
|
->field('lso.*, u.id, u.nickname')
|
|
->join('user u', 'lso.user_id = u.id')
|
|
->where(['lso.state' => 1, 'lso.pay_shop_type' => 1, 'lso.lstore_id' => $data['lstore_id']])
|
|
->order('lso.create_time desc')
|
|
->page($data['page_no'], $data['page_size'])
|
|
->select();
|
|
$data = [
|
|
'list' => $lists,
|
|
'page' => $data['page_no'],
|
|
'size' => $data['page_size'],
|
|
'count' => $count,
|
|
'more' => is_more($count, $data['page_no'], $data['page_size'])
|
|
];
|
|
// var_dump($data);
|
|
return $data;
|
|
}
|
|
|
|
public function getLocalUserOrderList($data){
|
|
$count = Db::name("local_store_order")
|
|
->where("user_id",$data['user_id'])
|
|
->where("pay_shop_type",1)
|
|
->where('state',1)
|
|
->count();
|
|
$size = $data['page_size'];
|
|
$page = ($data['page_no']-1)*$data['page_size'];
|
|
$sql = "SELECT * FROM ls_local_store_order where state = 1 and
|
|
pay_shop_type = 1 and user_id = ".$data['user_id']."
|
|
ORDER BY lstore_id desc limit ".$page.",".$size;
|
|
$lists = Db::query($sql);
|
|
$data = [
|
|
'list' => $lists,
|
|
'page' => $data['page_no'],
|
|
'size' => $data['page_size'],
|
|
'count' => $count,
|
|
'more' => is_more($count, $data['page_no'], $data['page_size'])
|
|
];
|
|
return $data;
|
|
}
|
|
function distance($lat1, $lon1, $lat2, $lon2) {
|
|
$earthRadius = 6371000; // 地球平均半径,单位为米
|
|
|
|
// 将经纬度转换为弧度
|
|
$lat1 = deg2rad($lat1);
|
|
$lon1 = deg2rad($lon1);
|
|
$lat2 = deg2rad($lat2);
|
|
$lon2 = deg2rad($lon2);
|
|
|
|
// 使用haversine公式计算距离
|
|
$diffLat = $lat2-$lat1;
|
|
$diffLon = $lon2-$lon1;
|
|
$a = sin($diffLat / 2) * sin($diffLat / 2) + cos($lat1) * cos($lat2) * sin($diffLon / 2) * sin($diffLon / 2);
|
|
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
|
|
$distance = $earthRadius * $c;
|
|
|
|
return $distance;
|
|
}
|
|
} |