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];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |