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