111 lines
3.9 KiB
PHP
111 lines
3.9 KiB
PHP
<?php
|
|
|
|
|
|
namespace addons\xilufitness\services;
|
|
|
|
|
|
use addons\xilufitness\services\user\UserService;
|
|
|
|
class ShopService extends BaseService
|
|
{
|
|
|
|
protected $model = null;
|
|
|
|
protected function __initialize()
|
|
{
|
|
$this->model = new \addons\xilufitness\model\Shop;
|
|
}
|
|
|
|
/**
|
|
* 获取门店列表
|
|
* @param int $page 分页码
|
|
* @param string $lat 纬度
|
|
* @param string $lng 经度
|
|
* @param int $city_id 城市id
|
|
* @param string $keyword 关键词
|
|
*/
|
|
public function getShopList(string $lat, string $lng, int $city_id = 0, string $keyword=''){
|
|
$where['brand_id'] = $this->brand_id;
|
|
if(!empty($city_id)){
|
|
$where['city_id'] = $city_id;
|
|
}
|
|
if(!empty($keyword)){
|
|
$where['shop_name'] = ['like','%'.$keyword.'%'];
|
|
}
|
|
$rows = $this->model
|
|
->normal()
|
|
->where($where)
|
|
->field(['id','shop_name','shop_image','address','lat','lng',
|
|
"(6378.138 * 2 * asin(sqrt(pow(sin((lat * pi() / 180 - ".$lat." * pi() / 180) / 2),2) + cos(lat * pi() / 180) * cos(".$lat." * pi() / 180) * pow(sin((lng * pi() / 180 - ".$lng." * pi() / 180) / 2),2))) * 1000) as distance"])
|
|
->order("distance asc")
|
|
->paginate();
|
|
return ['list' => $rows->items(), 'total_count' => $rows->total() ];
|
|
}
|
|
|
|
/**
|
|
* 获取门店详情
|
|
* @param int $id 门店id
|
|
*/
|
|
public function getDetail(int $id){
|
|
$info = $this->model
|
|
->where(['id' => $id, 'brand_id' => $this->brand_id])
|
|
->field(['id','shop_name','shop_image','address','lat','lng','shop_images','star'])
|
|
->find();
|
|
$isCollect = UserService::getInstance()->getCollectExists($id,1);
|
|
$info['is_collect'] = !empty($isCollect) ? 1 : 0;
|
|
return ['info' => $info];
|
|
}
|
|
|
|
/**
|
|
* 获取门店课程数据
|
|
* @param int $id 门店id
|
|
* @param int $course_type 课程类型 1 团课 2 私教
|
|
*/
|
|
public function getCourse(int $id,int $course_type = 1){
|
|
$workCourseModel = new \addons\xilufitness\model\WorkCourse;
|
|
$list = $workCourseModel
|
|
->field(['id','course_id','start_at','end_at','course_price','market_price','sign_count','wait_count','course_type'])
|
|
->with(['course' => function($query){
|
|
return $query->withField(['id','title','thumb_image','lable_ids']);
|
|
},'coach' => function($query){
|
|
return $query->withField(['id','coach_name','coach_avatar','coach_group_id','lable_ids']);
|
|
}])
|
|
->where(['work_course.brand_id' => $this->brand_id,'end_at' => ['gt',time()], 'shop_id' => $id, 'work_course.course_type' => $course_type ])
|
|
->select();
|
|
return ['list' => $list];
|
|
}
|
|
|
|
/**
|
|
* 获取门店教练数据
|
|
* @param int $id 门店id
|
|
*/
|
|
public function getCoach(int $id){
|
|
$model = new \addons\xilufitness\model\Coach;
|
|
$list = $model
|
|
->normal()
|
|
->where(['brand_id' => $this->brand_id])
|
|
->whereRaw("FIND_IN_SET({$id},`shop_ids`)")
|
|
->field(['id','coach_group_id','coach_name','coach_avatar', 'lable_ids'])
|
|
->select();
|
|
return ['list' => $list];
|
|
}
|
|
|
|
/**
|
|
* 获取门店活动数据
|
|
* @param int $id 门店id
|
|
*/
|
|
public function getCamp(int $id){
|
|
$model = new \addons\xilufitness\model\WorkCamp;
|
|
$list = $model
|
|
->field(['id','camp_id','start_at','end_at','camp_price','market_price','class_count','class_duration','camp_count','total_count'])
|
|
->with(['camp' => function($query){
|
|
return $query->withField(['id','title','thumb_image','lable_ids']);
|
|
}])
|
|
->where(['work_camp.brand_id' => $this->brand_id,'end_at' => ['gt',time()], 'shop_id' => $id, 'work_camp.status' => 'normal' ])
|
|
->select();
|
|
return ['list' => $list];
|
|
}
|
|
|
|
|
|
|
|
} |