Cron job işləmini daha asan başa düşmək üçün,elektronik məhsulların kreditlə satışını təşkil edən bir şirkət üçün yazdığım gündəlik dəbbənin hesablanması üzərində bir blog yazmağı düşünürəm.İlk öncə qeyd edim ki,proyekti laravel frameworki ilə yazmışam.
1)İlki öncə php artisan make : command GundelikDebbeniHesabla əmrini terminalda çalışdırırıq.
App \ Console \ Commands \ GundelikDebbeniHesabla.php açırıq və üzərində aşağıdakı kimi dəyişikliklər edirik.
<?php
namespace App\Console\Commands;
use App\Models\Action;
use App\Models\Bmk;
use App\Models\KreditCedvelleri;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
class GundelikDebbeniHesabla extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'debbe:hesabla';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Gündəlik dəbbənin hesablanması';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
/**
* Burada gecikən müqavilə id ləri yığdım
*/
$gecikmesi_olan_butun_bmklar = Bmk::where('satis_usulu_id','=',1)
->join('kredit_cedvelleris', function ($query) {
$query->on('bmks.id', '=', 'kredit_cedvelleris.bmk_id')
->where(DB::raw('kredit_cedvelleris.edilen_odenisler'), '<', DB::raw('bmks.orta_ayliq'))
->where(DB::raw('kredit_cedvelleris.odenis_tarixleri'), '<', Carbon::now());
})->pluck('bmk_id')->toArray();
$gecikmesi_olan_butun_bmklar = array_unique($gecikmesi_olan_butun_bmklar);
$butun_krediti_olanlar = Bmk::whereIn('id',$gecikmesi_olan_butun_bmklar)
->orderBy('id','desc')
->pluck('id')
->toArray();
/**
* Burada dəbbəsi yaranan müştərilərin dəbbəsi db -yə yazılır
*/
if (count($butun_krediti_olanlar) > 0)
{
foreach ($butun_krediti_olanlar as $bmk_id)
{
$checkBmk = Bmk::whereId($bmk_id)->first();
$checkKreditCedveli = KreditCedvelleri::where('bmk_id','=',$checkBmk->id)->get();
if ($checkKreditCedveli->count() > 0)
{
$total = 0;
foreach ($checkBmk->getBmkDetails as $mehsul)
{
$total += ($mehsul->satis_miqdari * $mehsul->bir_vahidinin_qiymeti);
}
for ($i = 0;$i<$checkKreditCedveli->count();$i++)
{
$startDate = Carbon::parse($checkKreditCedveli[$i]->odenis_tarixleri);
if ($i+1 < $checkKreditCedveli->count())
{
$endDate = Carbon::parse($checkKreditCedveli[$i+1]->odenis_tarixleri);
if ($checkKreditCedveli[$i]->edilen_odenisler < $checkBmk->orta_ayliq && Carbon::now()->between($startDate,$endDate))
{
KreditCedvelleri::whereId($checkKreditCedveli[$i]->id)->update([
'yaranan_debbeler'=>ceil($startDate->diffInDays(Carbon::now()) * $checkBmk->debbe * $total/100)
]);
}
}
else
{
if (Carbon::now()->gt(Carbon::parse($startDate)))
{
KreditCedvelleri::whereId($checkKreditCedveli[$i]->id)->update([
'yaranan_debbeler'=>ceil($startDate->diffInDays(Carbon::now()) * $checkBmk->debbe * $total/100)
]);
}
}
}
}
}
}
$description = 'Sistem cari gün üçün dəbbə hesablanması əməliyyatını tamamladı.<br/><b>Diqqət:</b>Bu əmrin hər gün sistem tərəfində icra edildiyinə nəzarət edin.Əgər əmr icra olunmazsa,sistem gəliştiricisinə xəbər verin.';
Action::create([
'action_list_id'=>14,
'satici_id'=>1,
'description'=>$description
]);
}
}
2)Daha sonra App\Console\Kernel.php -i aşağıdakı kimi dəyişirik.
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
Commands\GundelikDebbeniHesabla::class
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('debbe:hesabla')
->dailyAt('02:00')
->timezone('Asia/Baku');
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}
3)Bu mərhələdə hostingdə Cron jobs > Custom seçib Command to run* inputuna php / home / uxxxxxxxx / domains / example.com / Projects / project_1 / artisan schedule:run və sizə lazım olan zaman intervalını seçmək bu işləmin çalışması üçün kifayət edəcək