mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
238 lines
8.9 KiB
PHP
238 lines
8.9 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\Classes\Jobs\Commands\V3\YD\FetchContainersYdPortalV3CommandJob;
|
|
use App\Classes\Jobs\Commands\V3\YD\FetchContainersUpdatesYdPortalV3CommandJob;
|
|
|
|
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 = [];
|
|
$jobs1 = $this->fetchPackingListsFromYdPortalV2CommandJobs();
|
|
$jobs2 = $this->fetchContainersYdPortalV3CommandJobs();
|
|
$jobs3 = $this->fetchContainersUpdatesYdPortalV3CommandJob();
|
|
// $jobs4 = $this->fetchDeliveryUpdatesFromYdPortalV2CommandJobs();
|
|
|
|
// The following job is intentionally excluded
|
|
////$jobs5 = array_merge($jobs, $this->fetchOrderListsFromYdPortalV2CommandJob());
|
|
|
|
// Bus::chain($jobs)->dispatch();
|
|
|
|
foreach ($jobs1 as $index => $job) {
|
|
dispatch($job)->delay(now()->addSeconds($index * 2));
|
|
}
|
|
|
|
foreach ($jobs2 as $index => $job) {
|
|
dispatch($job)->delay(now()->addSeconds($index * 2));
|
|
}
|
|
|
|
foreach ($jobs3 as $index => $job) {
|
|
dispatch($job);
|
|
}
|
|
|
|
// foreach ($jobs4 as $index => $job) {
|
|
// $delayInSeconds = intdiv($index, 2);
|
|
// dispatch($job)->delay(now()->addSeconds($delayInSeconds));
|
|
// }
|
|
}
|
|
|
|
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 fetchContainersYdPortalV3CommandJobs(){
|
|
$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 FetchContainersYdPortalV3CommandJob($packingList);
|
|
Log::info('Dispatched FetchContainersYdPortalV3CommandJob for packingList with id ' . $packingList->id . ' created_at ' . $packingList->created_at);
|
|
$count++;
|
|
}
|
|
Log::info('Total fetchContainersYdPortalV3CommandJobs dispatched: ' . $count);
|
|
|
|
return $jobs;
|
|
}
|
|
|
|
private function fetchContainersUpdatesYdPortalV3CommandJob(){
|
|
$jobs = [];
|
|
$containers = Container::where('status', ApprovalStatus::PENDING_VERIFICATION)->get();
|
|
|
|
$count = 0;
|
|
foreach ($containers as $container) {
|
|
$jobs[] = new FetchContainersUpdatesYdPortalV3CommandJob($container);
|
|
Log::info('Dispatched fetchContainersUpdatesYdPortalV3CommandJob for container with id ' . $container->id);
|
|
$count++;
|
|
}
|
|
Log::info('Total fetchContainersUpdatesYdPortalV3CommandJob 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 >= 1000) {
|
|
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;
|
|
}
|
|
}
|