Files
shipping-portal/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php
T

198 lines
7.2 KiB
PHP

<?php
namespace App\Console\Commands\V2;
use App\Classes\Jobs\Commands\V2\YD\FetchPackingListsFromYdPortalV2CommandJob;
use App\Classes\Jobs\Commands\V2\YD\FetchContainersFromYdPortalV2CommandJob;
use App\Classes\Jobs\Commands\V2\YD\FetchContainersUpdatesFromYdPortalV2CommandJob;
use App\Classes\Jobs\Commands\V2\YD\FetchDeliveryUpdatesFromYdPortalV2CommandJob;
use App\Classes\Jobs\Commands\V2\YD\FetchOrderListsFromYdPortalV2CommandJob;
use App\Models\PackingList;
use App\Models\Container;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Facades\Log;
class ProcessYDPortalDataV2Command extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'process-yd-portal-data-command {start_date?} {end_date?}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process data from YD Portal for the given date range';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$jobs = [];
$jobs = array_merge($jobs, $this->fetchPackingListsFromYdPortalV2CommandJobs());
$jobs = array_merge($jobs, $this->fetchContainersFromYdPortalV2CommandJobs());
$jobs = array_merge($jobs, $this->fetchContainersUpdatesFromYdPortalV2CommandJob());
$jobsWithDelay = array_merge($jobs, $this->fetchDeliveryUpdatesFromYdPortalV2CommandJobs());
// The following job is intentionally excluded
////$jobs = array_merge($jobs, $this->fetchOrderListsFromYdPortalV2CommandJob());
// Bus::chain($jobs)->dispatch();
foreach ($jobs as $job) {
dispatch($job);
}
foreach ($jobsWithDelay as $index => $job) {
// Delay each job by 2 seconds multiplied by its index
dispatch($job)->delay(now()->addSeconds($index * 1));
}
}
private function fetchPackingListsFromYdPortalV2CommandJobs(){
$jobs = [];
$start = $this->argument('start_date') ? Carbon::parse($this->argument('start_date')) : null;
$end = $this->argument('end_date') ? Carbon::parse($this->argument('end_date')) : null;
// $start = $this->startDate ? Carbon::parse($this->startDate) : null;
// $end = $this->endDate ? Carbon::parse($this->endDate) : null;
$from = $end ? Carbon::today()->diffInDays($end) : 0;
$to = $start ? Carbon::today()->diffInDays($start) : 10;
$count = 0;
for ($x = $from; $x <= $to; $x++) {
// if ($count >= 2) {
// break;
// }
$startDate = Carbon::today()->subDays($x);
$startLimit = Carbon::parse('01-12-2021');
if($startDate->isBefore($startLimit)){
$startDate = $startLimit;
}
$endDate = Carbon::today()->subDays($x - 1);
$jobs[] = new FetchPackingListsFromYdPortalV2CommandJob($startDate, $endDate);
//FetchPackingListsFromYdPortalV2CommandJob::dispatch($startDate, $endDate);
Log::info('Dispatched FetchPackingListsFromYdPortalV2CommandJob for start date: ' . $startDate . ', end date: ' . $endDate);
$count++;
}
Log::info('Total FetchPackingListsFromYdPortalV2CommandJob dispatched: ' . $count);
return $jobs;
}
private function fetchContainersFromYdPortalV2CommandJobs(){
$jobs = [];
$maxFetchTime = Carbon::now()->subMonths(4);
$packingLists = PackingList::where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDate('created_at', '>=', $maxFetchTime)->doesntHave('containers')->get();
$count = 0;
foreach ($packingLists as $packingList) {
$jobs[] = new FetchContainersFromYdPortalV2CommandJob($packingList);
Log::info('Dispatched FetchContainersFromYdPortalV2CommandJob for packingList with id ' . $packingList->id);
$count++;
}
Log::info('Total FetchContainersFromYdPortalV2CommandJob dispatched: ' . $count);
return $jobs;
}
private function fetchContainersUpdatesFromYdPortalV2CommandJob(){
$jobs = [];
$containers = Container::where('status', ApprovalStatus::PENDING_VERIFICATION)->get();
$count = 0;
foreach ($containers as $container) {
$jobs[] = new FetchContainersUpdatesFromYdPortalV2CommandJob($container);
Log::info('Dispatched FetchContainersUpdatesFromYdPortalV2CommandJob for container with id ' . $container->id);
$count++;
}
Log::info('Total FetchContainersUpdatesFromYdPortalV2CommandJob dispatched: ' . $count);
return $jobs;
}
private function fetchDeliveryUpdatesFromYdPortalV2CommandJobs(){
$jobs = [];
$packingLists = PackingList::where('type', PackingListType::SHIPPING_PACKING_LIST)->whereRaw('LENGTH(reference) > 12')->whereHas('containers', function ($container){
return $container->where('status', 3);
})->doesntHave('transports')->get()->reverse();
$count = 0;
foreach ($packingLists as $packingList) {
if ($count >= 500) {
break;
}
// foreach ($packingLists->chunk(50) as $chunk) {
// foreach ($chunk as $packingList){
// $processor = app(FetchDeliveryUpdatesFromYdPortalV2Processor::class);
// $processor->execute($packingList);
$jobs[] = new FetchDeliveryUpdatesFromYdPortalV2CommandJob($packingList->id);
Log::info('Dispatched FetchDeliveryUpdatesFromYdPortalV2CommandJob for packingList with id ' . $packingList->id);
$count++;
// }
// }
}
Log::info('Total FetchDeliveryUpdatesFromYdPortalV2CommandJob count($packingLists): ' . count($packingLists));
Log::info('Total FetchDeliveryUpdatesFromYdPortalV2CommandJob dispatched: ' . $count);
return $jobs;
}
private function fetchOrderListsFromYdPortalV2CommandJob(){
$jobs = [];
$start = $this->argument('start_date') ? Carbon::parse($this->argument('start_date')) : null;
$end = $this->argument('end_date') ? Carbon::parse($this->argument('end_date')) : null;
$from = $end ? Carbon::today()->diffInDays($end) : 0;
$to = $start ? Carbon::today()->diffInDays($start) : 10;
$count = 0;
for ($x = $from; $x <= $to; $x++) {
$startDate = Carbon::today()->subDays($x);
$startLimit = Carbon::parse('01-12-2021');
if($startDate->isBefore($startLimit)){
$startDate = $startLimit;
}
$endDate = Carbon::today()->subDays($x - 1);
$jobs[] = new FetchOrderListsFromYdPortalV2CommandJob($startDate, $endDate);
Log::info('Dispatched FetchOrderListsFromYdPortalV2CommandJob for start date: ' . $startDate . ', end date: ' . $endDate);
$count++;
}
Log::info('Total FetchOrderListsFromYdPortalV2CommandJob dispatched: ' . $count);
return $jobs;
}
}