|
@@ -20,7 +20,6 @@ use Illuminate\Auth\Access\AuthorizationException;
|
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Collection;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
-use Illuminate\Support\Facades\Log;
|
|
|
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
|
|
|
|
class DashboardService
|
|
class DashboardService
|
|
@@ -222,75 +221,6 @@ class DashboardService
|
|
|
) AS provider_address
|
|
) AS provider_address
|
|
|
");
|
|
");
|
|
|
|
|
|
|
|
- $providersCloseDebugQuery = Provider::leftJoin(
|
|
|
|
|
- 'users as provider_user',
|
|
|
|
|
- 'provider_user.id',
|
|
|
|
|
- '=',
|
|
|
|
|
- 'providers.user_id'
|
|
|
|
|
- )
|
|
|
|
|
- ->visibleToCustomers()
|
|
|
|
|
- ->leftJoin(
|
|
|
|
|
- $providerAddressLatestSubquery,
|
|
|
|
|
- 'provider_address.source_id',
|
|
|
|
|
- '=',
|
|
|
|
|
- 'providers.id'
|
|
|
|
|
- )
|
|
|
|
|
- ->whereNull('providers.deleted_at');
|
|
|
|
|
-
|
|
|
|
|
- Log::info('Contexto de prestadores próximos no dashboard', [
|
|
|
|
|
- 'client_id' => $cliente->id,
|
|
|
|
|
- 'user_id' => $user->id,
|
|
|
|
|
- 'client_primary_address_id' => $clientPrimaryAddress?->id,
|
|
|
|
|
- 'client_primary_address_city_id' => $clientPrimaryAddress?->city_id,
|
|
|
|
|
- 'client_primary_address_state_id' => $clientPrimaryAddress?->state_id,
|
|
|
|
|
- 'client_distance_address_id' => $clientDistanceAddress?->id,
|
|
|
|
|
- 'client_distance_zip_code' => $clientDistanceAddress?->zip_code,
|
|
|
|
|
- 'client_coordinates' => $clientCoordinates,
|
|
|
|
|
- 'blocked_provider_ids_count' => $blockedProviderIds->count(),
|
|
|
|
|
- 'providers_working_days_count' => $providersWithWorkingDays->count(),
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
- Log::info('Contagem dos filtros de prestadores próximos no dashboard', [
|
|
|
|
|
- 'visible_with_bank' => (clone $providersCloseDebugQuery)
|
|
|
|
|
- ->distinct('providers.id')
|
|
|
|
|
- ->count('providers.id'),
|
|
|
|
|
-
|
|
|
|
|
- 'with_provider_address' => (clone $providersCloseDebugQuery)
|
|
|
|
|
- ->whereNotNull('provider_address.id')
|
|
|
|
|
- ->distinct('providers.id')
|
|
|
|
|
- ->count('providers.id'),
|
|
|
|
|
-
|
|
|
|
|
- 'after_city_filter' => (clone $providersCloseDebugQuery)
|
|
|
|
|
- ->whereNotNull('provider_address.id')
|
|
|
|
|
- ->when(
|
|
|
|
|
- $clientPrimaryAddress?->city_id,
|
|
|
|
|
- fn ($query, int $cityId) => $query->where('provider_address.city_id', $cityId)
|
|
|
|
|
- )
|
|
|
|
|
- ->distinct('providers.id')
|
|
|
|
|
- ->count('providers.id'),
|
|
|
|
|
-
|
|
|
|
|
- 'after_block_filter' => (clone $providersCloseDebugQuery)
|
|
|
|
|
- ->whereNotNull('provider_address.id')
|
|
|
|
|
- ->when(
|
|
|
|
|
- $clientPrimaryAddress?->city_id,
|
|
|
|
|
- fn ($query, int $cityId) => $query->where('provider_address.city_id', $cityId)
|
|
|
|
|
- )
|
|
|
|
|
- ->whereNotIn('providers.id', $blockedProviderIds)
|
|
|
|
|
- ->distinct('providers.id')
|
|
|
|
|
- ->count('providers.id'),
|
|
|
|
|
-
|
|
|
|
|
- 'after_working_days_filter' => (clone $providersCloseDebugQuery)
|
|
|
|
|
- ->whereNotNull('provider_address.id')
|
|
|
|
|
- ->when(
|
|
|
|
|
- $clientPrimaryAddress?->city_id,
|
|
|
|
|
- fn ($query, int $cityId) => $query->where('provider_address.city_id', $cityId)
|
|
|
|
|
- )
|
|
|
|
|
- ->whereNotIn('providers.id', $blockedProviderIds)
|
|
|
|
|
- ->whereIn('providers.id', $providersWithWorkingDays)
|
|
|
|
|
- ->distinct('providers.id')
|
|
|
|
|
- ->count('providers.id'),
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
$providersClose = Provider::leftJoin(
|
|
$providersClose = Provider::leftJoin(
|
|
|
'users as provider_user',
|
|
'users as provider_user',
|
|
|
'provider_user.id',
|
|
'provider_user.id',
|
|
@@ -344,28 +274,6 @@ class DashboardService
|
|
|
->orderByRaw('distance_km ASC NULLS LAST')
|
|
->orderByRaw('distance_km ASC NULLS LAST')
|
|
|
->get();
|
|
->get();
|
|
|
|
|
|
|
|
- Log::info('Resultado da consulta de prestadores próximos no dashboard', [
|
|
|
|
|
- 'count' => $providersClose->count(),
|
|
|
|
|
- 'provider_ids_sample' => $providersClose->pluck('provider_id')->take(20)->values()->all(),
|
|
|
|
|
- 'null_distance_count' => $providersClose->whereNull('distance_km')->count(),
|
|
|
|
|
- 'provider_city_filter' => $clientPrimaryAddress?->city_id,
|
|
|
|
|
- 'items_sample' => $providersClose->take(5)->map(fn ($provider) => [
|
|
|
|
|
- 'provider_id' => $provider->provider_id,
|
|
|
|
|
- 'provider_name' => $provider->provider_name,
|
|
|
|
|
- 'provider_zip_code' => $provider->provider_zip_code,
|
|
|
|
|
- 'provider_latitude' => $provider->provider_latitude,
|
|
|
|
|
- 'provider_longitude' => $provider->provider_longitude,
|
|
|
|
|
- 'distance_km' => $provider->distance_km,
|
|
|
|
|
- ])->values()->all(),
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
- if ($providersClose->whereNull('distance_km')->isEmpty()) {
|
|
|
|
|
- Log::info('Fallback por CEP de prestadores próximos ignorado no dashboard', [
|
|
|
|
|
- 'reason' => 'all_distances_calculated_by_sql',
|
|
|
|
|
- 'count' => $providersClose->count(),
|
|
|
|
|
- ]);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
$this->zipCodeCoordinatesService->preload(
|
|
$this->zipCodeCoordinatesService->preload(
|
|
|
$providersClose->whereNull('distance_km')->pluck('provider_zip_code')
|
|
$providersClose->whereNull('distance_km')->pluck('provider_zip_code')
|
|
|
);
|
|
);
|
|
@@ -401,16 +309,6 @@ class DashboardService
|
|
|
->sortBy(fn ($provider) => $provider->distance_km ?? PHP_FLOAT_MAX)
|
|
->sortBy(fn ($provider) => $provider->distance_km ?? PHP_FLOAT_MAX)
|
|
|
->values();
|
|
->values();
|
|
|
|
|
|
|
|
- Log::info('Resultado final de prestadores próximos no dashboard', [
|
|
|
|
|
- 'count' => $providersClose->count(),
|
|
|
|
|
- 'items_sample' => $providersClose->take(5)->map(fn ($provider) => [
|
|
|
|
|
- 'provider_id' => $provider->provider_id,
|
|
|
|
|
- 'provider_name' => $provider->provider_name,
|
|
|
|
|
- 'district' => $provider->district,
|
|
|
|
|
- 'distance_km' => $provider->distance_km,
|
|
|
|
|
- ])->values()->all(),
|
|
|
|
|
- ]);
|
|
|
|
|
-
|
|
|
|
|
$pendingSchedules = Schedule::with([
|
|
$pendingSchedules = Schedule::with([
|
|
|
'address:district,address,number,source_id,source,id,address_type',
|
|
'address:district,address,number,source_id,source,id,address_type',
|
|
|
])
|
|
])
|