update packinglists from vt portal jobs and schedule

This commit is contained in:
omair saleh
2021-08-23 09:35:37 +08:00
parent 276e12679d
commit a3cdae6815
8 changed files with 255 additions and 95 deletions
-94
View File
@@ -1,94 +0,0 @@
<?php
namespace App\Classes\Jobs;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class CurlWarehouseListJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
private $page;
public function __construct($page = -2)
{
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
$cookies = $this->getCookie();
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $cookies,
];
$yesterday = Carbon::now()->subDays(1)->format('Y-m-d');
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":100,"PageOffset":0,"SortExpression":"ParcelDate DESC,FullMarking DESC","GroupExpression":"","Filter":["ParcelDate:=%js%\"' . $yesterday . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
$data = json_decode($res->getBody()->getContents());
if (!empty($data->d->Row)) {
// insert data here
// next page
$this->page = $this->page > 0 ? $this->page + 1 : 1;
CurlWarehouseListJob::dispatch($this->page + 1)
->delay(Carbon::now()->addSeconds(10));
}
}
public function getCookie()
{
// get latest cookies
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'https://portalvt.azurewebsites.net');
$call_cookie = $client->getConfig('cookies');
$call_cookie = $call_cookie->toArray();
$latest_cookie = [];
foreach ($call_cookie as $key => $row) {
$latest_cookie[] = $row['Name'] . '=' . $row['Value'];
}
$latest_cookie = implode(';', $latest_cookie);
// get access token
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $latest_cookie,
];
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
]]);
$token = json_decode($res->getBody()->getContents());
$token = $token->d->AccessToken;
$latest_cookie = $latest_cookie . ';AppVTCC=' . $token;
return $latest_cookie;
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchContainersStatusUpdateFromVTPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchContainersStatusUpdateFromVTPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/** @var FetchContainersStatusUpdateFromVTPortalProcessor */
private $fetchContainersStatusUpdateFromVTPortalProcessor;
/**
* FetchContainersStatusUpdateFromVTPortalJob constructor.
* @param FetchContainersStatusUpdateFromVTPortalProcessor $fetchContainersStatusUpdateFromVTPortalProcessor
*/
public function __construct(FetchContainersStatusUpdateFromVTPortalProcessor $fetchContainersStatusUpdateFromVTPortalProcessor)
{
$this->fetchContainersStatusUpdateFromVTPortalProcessor = $fetchContainersStatusUpdateFromVTPortalProcessor;
}
/**
* Execute the job.
*
* @return void
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function handle()
{
$this->fetchContainersStatusUpdateFromVTPortalProcessor->execute();
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchDeliveryListFromVTPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchDeliveryListFromVTPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/** @var FetchDeliveryListFromVTPortalProcessor */
private $fetchDeliveryListFromVTPortalProcessor;
/**
* FetchDeliveryListFromVTPortalJob constructor.
* @param FetchDeliveryListFromVTPortalProcessor $fetchDeliveryListFromVTPortalProcessor
*/
public function __construct(FetchDeliveryListFromVTPortalProcessor $fetchDeliveryListFromVTPortalProcessor)
{
$this->fetchDeliveryListFromVTPortalProcessor = $fetchDeliveryListFromVTPortalProcessor;
}
/**
* Execute the job.
*
* @return void
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function handle()
{
$this->fetchDeliveryListFromVTPortalProcessor->execute();
}
}
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchLoadedContainersFromVTPortalProcessor;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchLoadedContainersFromVTPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/** @var FetchLoadedContainersFromVTPortalProcessor */
private $fetchLoadedContainersFromVTPortalProcessor;
/**
* FetchLoadedContainersFromVTPortalJob constructor.
* @param FetchLoadedContainersFromVTPortalProcessor $fetchLoadedContainersFromVTPortalProcessor
*/
public function __construct(FetchLoadedContainersFromVTPortalProcessor $fetchLoadedContainersFromVTPortalProcessor)
{
$this->fetchLoadedContainersFromVTPortalProcessor = $fetchLoadedContainersFromVTPortalProcessor;
}
/**
* Execute the job.
*
* @param Carbon|null $start
* @param Carbon|null $end
* @return void
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle(?Carbon $start = null, ?Carbon $end = null)
{
$this->fetchLoadedContainersFromVTPortalProcessor->execute($start, $end);
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchPackingListFromVTPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchPackingListFromVTPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/** @var FetchPackingListFromVTPortalProcessor */
private $fetchPackingListFromVTPortalProcessor;
/**
* FetchPackingListFromVTPortalJob constructor.
* @param FetchPackingListFromVTPortalProcessor $fetchPackingListFromVTPortalProcessor
*/
public function __construct(FetchPackingListFromVTPortalProcessor $fetchPackingListFromVTPortalProcessor)
{
$this->fetchPackingListFromVTPortalProcessor = $fetchPackingListFromVTPortalProcessor;
}
/**
* Execute the job.
*
* @return void
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function handle()
{
$this->fetchPackingListFromVTPortalProcessor->execute();
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchWarehouseReceiveListFromVTPortalProcessor;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchWarehouseReceiveListFromVTPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/** @var FetchWarehouseReceiveListFromVTPortalProcessor */
private $fetchWarehouseReceiveListFromVTPortalProcessor;
/**
* FetchWarehouseReceiveListFromVTPortalJob constructor.
* @param FetchWarehouseReceiveListFromVTPortalProcessor $fetchWarehouseReceiveListFromVTPortalProcessor
*/
public function __construct(FetchWarehouseReceiveListFromVTPortalProcessor $fetchWarehouseReceiveListFromVTPortalProcessor)
{
$this->fetchWarehouseReceiveListFromVTPortalProcessor = $fetchWarehouseReceiveListFromVTPortalProcessor;
}
/**
* Execute the job.
*
* @param Carbon|null $start
* @param Carbon|null $end
* @return void
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle(?Carbon $start = null, ?Carbon $end = null)
{
$this->fetchWarehouseReceiveListFromVTPortalProcessor->execute($start, $end);
}
}
+10 -1
View File
@@ -2,6 +2,11 @@
namespace App\Console;
use App\Classes\Jobs\FetchContainersStatusUpdateFromVTPortalJob;
use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob;
use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob;
use App\Classes\Jobs\FetchPackingListFromVTPortalJob;
use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
@@ -24,7 +29,11 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
$schedule->job(FetchWarehouseReceiveListFromVTPortalJob::class)->dailyAt('21:00');
$schedule->job(FetchLoadedContainersFromVTPortalJob::class)->dailyAt('21:15');
$schedule->job(FetchPackingListFromVTPortalJob::class)->dailyAt('21:30');
$schedule->job(FetchContainersStatusUpdateFromVTPortalJob::class)->dailyAt('21:45');
$schedule->job(FetchDeliveryListFromVTPortalJob::class)->dailyAt('22:00');
}
/**
+34
View File
@@ -0,0 +1,34 @@
<?php
namespace Database\Seeders;
use App\Classes\Jobs\FetchDeliveryListFromVTPortalJob;
use App\Classes\Jobs\FetchLoadedContainersFromVTPortalJob;
use App\Classes\Jobs\FetchPackingListFromVTPortalJob;
use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob;
use App\Classes\Modules\PackingLists\Processors\FetchContainersStatusUpdateFromVTPortalProcessor;
use Illuminate\Database\Seeder;
class OrdersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
FetchWarehouseReceiveListFromVTPortalJob::dispatch()->chain([
FetchLoadedContainersFromVTPortalJob::class,
FetchPackingListFromVTPortalJob::class,
FetchContainersStatusUpdateFromVTPortalProcessor::class,
FetchDeliveryListFromVTPortalJob::class,
]);
}
}