where('category_id', $category_id)->pluck('project_id'); // 获取项目 $project_ids = Project::query()->whereIn('id', $project_ids)->where('status', Status::ENABLE)->pluck('id'); // 获取开通项目技师 $coach_ids = DB::table('service_project_has_coach')->whereIn('project_id', $project_ids)->pluck('coach_id'); // 获取定位区域技师 $coach_ids = Site::query()->where('city_code', $cityCode)->pluck('coach_id'); $userWhere = ['status' => 1, 'auth_status' => 2]; $coachQuery = User::query()->whereIn('id', $coach_ids)->where($userWhere); // 获取技师距离 $coachQuery->withWhereHas('site', function ($query) use ($latitude, $longitude, $sort, $distance) { $r = 6370.996; // 地球半径 // 距离,单位为公里或英里,这里以公里为单位 $distanceRaw = "($r * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude))))"; $query->selectRaw("coach_id,round($distanceRaw,1) as distance"); $sort === 'distance' && $query->having('distance', '<=', $distance); }); // 订单排序 $sort === 'order' && $coachQuery->orderByDesc('total_order_num'); $coachQuery->select($this->select_column); $userPage = $coachQuery->paginate(); return ['list' => $userPage->items(), 'total' => $userPage->total()]; } public function getUser(array $params, int $id) { $category_id = $params['categoryId'] ?? 0; $latitude = $params['lat']; $longitude = $params['lng']; $coachQuery = User::query()->select([...$this->select_column, ...$this->show_column]); // 获取技师距离 $coachQuery->withWhereHas('site', function ($query) use ($latitude, $longitude) { $r = 6370.996; // 地球半径 // 距离,单位为公里或英里,这里以公里为单位 $distanceRaw = "($r * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude))))"; $query->selectRaw("coach_id,round($distanceRaw,1) as distance"); }); $user = $coachQuery->find($id); $category_id && ($user['project'] = $user->getProject($category_id)); return $user; } /** * Notes : * Method : 申请技师 * @param array $params * @param int $user_id * @throws ApiException */ public function apply(array $params) { $user_id = Auth::id(); // 判断技师资格是否已申请 $isExists = User::query()->where('user_id', $user_id)->exists(); if ($isExists) self::error('用户已经申请'); $params['user_id'] = $user_id; // 判断邀请人$input['partner_id'] $user = self::toModel($params, User::class); return User::query()->create($user->getAttributes())->id; } }