116 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			116 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace addons\xilufitness\services\index;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use addons\xilufitness\services\BaseService;
							 | 
						||
| 
								 | 
							
								use think\Db;
							 | 
						||
| 
								 | 
							
								use think\db\exception\DataNotFoundException;
							 | 
						||
| 
								 | 
							
								use think\db\exception\ModelNotFoundException;
							 | 
						||
| 
								 | 
							
								use think\exception\DbException;
							 | 
						||
| 
								 | 
							
								use think\Log;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IndexService extends BaseService
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取首页数据
							 | 
						||
| 
								 | 
							
								     * @param string $lat 纬度
							 | 
						||
| 
								 | 
							
								     * @param string $lng 经度
							 | 
						||
| 
								 | 
							
								     * @param int $brand_id 品牌id
							 | 
						||
| 
								 | 
							
								     * @param int $city_id 城市id
							 | 
						||
| 
								 | 
							
								     * @param int $province_id 省分id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getHomeData(string $lat, string $lng,int $city_id=0,int $province_id=0){
							 | 
						||
| 
								 | 
							
								        $bannerModel        = new \addons\xilufitness\model\Banner;
							 | 
						||
| 
								 | 
							
								        $shopModel          = new \addons\xilufitness\model\Shop;
							 | 
						||
| 
								 | 
							
								        $workCourseModel    = new \addons\xilufitness\model\WorkCourse;
							 | 
						||
| 
								 | 
							
								        $areaModel          = new \addons\xilufitness\model\Area;
							 | 
						||
| 
								 | 
							
								        $brand_id           = $this->brand_id ?? 0;
							 | 
						||
| 
								 | 
							
								        //定位的城市 信息
							 | 
						||
| 
								 | 
							
								        $locationInfo = xilufitnessGetCityByLatLng($lat ?? '31.231859',$lng ?? '121.486561');
							 | 
						||
| 
								 | 
							
								        Log::log($locationInfo);
							 | 
						||
| 
								 | 
							
								        $city_info = $areaModel->where(['name' => $locationInfo['city'] ?? '上海市' ])->field(['id','name'])->find();
							 | 
						||
| 
								 | 
							
								        Log::log($city_info);
							 | 
						||
| 
								 | 
							
								        //banner数据
							 | 
						||
| 
								 | 
							
								        $bannerList = $bannerModel->getBannerList($brand_id,1);
							 | 
						||
| 
								 | 
							
								        Log::log($bannerList);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //门店数据
							 | 
						||
| 
								 | 
							
								        $s_where['brand_id'] = $brand_id;
							 | 
						||
| 
								 | 
							
								        if(!empty($province_id)){
							 | 
						||
| 
								 | 
							
								            $s_where['province_id'] = $province_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($city_id)){
							 | 
						||
| 
								 | 
							
								            $s_where['city_id'] = $city_id;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $s_where['city_id'] = xilufitness_get_id_value($city_info['id'] ?? 0);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $shopList = $shopModel::normal()
							 | 
						||
| 
								 | 
							
								            ->where($s_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")
							 | 
						||
| 
								 | 
							
								            ->limit(20)
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								        Log::log($shopList);
							 | 
						||
| 
								 | 
							
								        //课程数据
							 | 
						||
| 
								 | 
							
								        $c_where['work_course.brand_id'] = $brand_id;
							 | 
						||
| 
								 | 
							
								        $c_where['end_at'] = ['gt',time()];
							 | 
						||
| 
								 | 
							
								        if(!empty($province_id)){
							 | 
						||
| 
								 | 
							
								            $c_where['shop.province_id'] = $province_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($city_id)){
							 | 
						||
| 
								 | 
							
								            $c_where['shop.city_id'] = $city_id;
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $c_where['shop.city_id'] = xilufitness_get_id_value($city_info['id'] ?? 0);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $courseList = $workCourseModel
							 | 
						||
| 
								 | 
							
								            ->normal()
							 | 
						||
| 
								 | 
							
								            ->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']);
							 | 
						||
| 
								 | 
							
								            }, 'shop' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','shop_name','shop_image']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where($c_where)
							 | 
						||
| 
								 | 
							
								            ->limit(20)
							 | 
						||
| 
								 | 
							
								            ->group('course_id')
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								        Log::log($courseList);
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            'bannerList' => $bannerList,
							 | 
						||
| 
								 | 
							
								            'shopList' => $shopList,
							 | 
						||
| 
								 | 
							
								            'courseList' => $courseList,
							 | 
						||
| 
								 | 
							
								            'cityInfo' => ['id' => $city_info['id'], 'name' => $city_info['name'] ]
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取城市数据
							 | 
						||
| 
								 | 
							
								     * @param int $pid 父级id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws DbException
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getCityList(int $pid){
							 | 
						||
| 
								 | 
							
								        $model = new \addons\xilufitness\model\Area;
							 | 
						||
| 
								 | 
							
								        $list = $model
							 | 
						||
| 
								 | 
							
								            ->where(['pid' => $pid])
							 | 
						||
| 
								 | 
							
								            ->field(['id','name','pid'])
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								        if($pid == 0 && !empty($list)){
							 | 
						||
| 
								 | 
							
								            foreach ($list as $key => $val){
							 | 
						||
| 
								 | 
							
								                $city_province = ['北京','天津','上海','重庆','深圳'];
							 | 
						||
| 
								 | 
							
								                if(in_array($val['name'],$city_province)){
							 | 
						||
| 
								 | 
							
								                    $cityInfo = $model->where(['pid' => xilufitness_get_id_value($val['id'])])->field(['id','name','pid'])->find();
							 | 
						||
| 
								 | 
							
								                    $cityInfo['province_id'] = $val['id'];
							 | 
						||
| 
								 | 
							
								                    $list[$key] = $cityInfo;
							 | 
						||
| 
								 | 
							
								                    unset($cityInfo);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['list' => $list ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |