taxi-app #20
@@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Console;
|
||||||
|
|
||||||
|
use Error;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
use App\Console\Commands\BaseScheduleCommand;
|
||||||
|
use App\Mail\BaseMailerObj;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
use App\Mail\Mailer;
|
||||||
|
use Modules\Taxi\App\Models\TaxiMain;
|
||||||
|
use DateTime;
|
||||||
|
|
||||||
|
class SendOrdersToTaxiCommand extends BaseScheduleCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*/
|
||||||
|
public $signature = 'taxi:send';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*/
|
||||||
|
public $description = 'Отправка заказов такси на сегодня агрегаторам';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new command instance.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$this->executeCommand(function () {
|
||||||
|
$todayOrders = TaxiMain::where('cancel_rqst', 0)
|
||||||
|
->where('taxi_date', (new DateTime())->format('Y-m-d'))
|
||||||
|
->get()
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
if (!$todayOrders) {
|
||||||
|
Mail::send(new Mailer(
|
||||||
|
new BaseMailerObj(
|
||||||
|
|
||||||
|
)
|
||||||
|
));
|
||||||
|
echo '<pre>'; var_dump('da'); echo'</pre>';
|
||||||
|
} else {
|
||||||
|
echo '<pre>'; var_dump('net'); echo'</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error('Ошипка!');
|
||||||
|
}, 'еще инва');
|
||||||
|
|
||||||
|
// try {
|
||||||
|
// throw new Error('Ошипка!');
|
||||||
|
// } catch (\Throwable $th) {
|
||||||
|
// \Log::channel('schedule_err')->error($th->getFile() . ": " . $th->getMessage() . " Line: " . $th->getLine());
|
||||||
|
// }
|
||||||
|
|
||||||
|
//$this->info('Daily report generated at ' . now());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the console command arguments.
|
||||||
|
*/
|
||||||
|
protected function getArguments(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['example', InputArgument::REQUIRED, 'An example argument.'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the console command options.
|
||||||
|
*/
|
||||||
|
protected function getOptions(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Jobs;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
use App\Mail\Mailer;
|
||||||
|
use App\Mail\BaseMailerObj;
|
||||||
|
use App\Job\BaseJob;
|
||||||
|
use Error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Джоба размещения задачи на отправку писем по такси
|
||||||
|
*/
|
||||||
|
class TaxiMailJob extends BaseJob
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new job instance.
|
||||||
|
*/
|
||||||
|
public function __construct(public BaseMailerObj $jobData)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the job.
|
||||||
|
*/
|
||||||
|
public function handle(): void
|
||||||
|
{
|
||||||
|
Mail::send(new Mailer(
|
||||||
|
$this->jobData
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Mail;
|
||||||
|
use App\Mail\BaseMailerObj;
|
||||||
|
use Modules\Taxi\App\DTO\TaxiOrderDTO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Базовый класс отправки письма по заказу такси. Объявляет обязательный к реализации метод формирования данных для отправки.
|
||||||
|
*/
|
||||||
|
abstract class BaseTaxiMail
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @param TaxiOrderDTO $orderData
|
||||||
|
* @param integer|null $orderId идентификатор заказа такси
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
public TaxiOrderDTO $orderData,
|
||||||
|
public ?int $orderId
|
||||||
|
){
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод формирует объект с данными письма для передачи в джобу
|
||||||
|
*
|
||||||
|
* @return BaseMailerObj базовый класс объекта параметров письма для мейлера
|
||||||
|
*/
|
||||||
|
abstract public function prepareDataForMail(): BaseMailerObj;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Mail;
|
||||||
|
|
||||||
|
use Modules\Taxi\App\DTO\TaxiOrderDTO;
|
||||||
|
use App\Mail\BaseMailerObj;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Класс формирования объекта с данными для передачи в джобу отправки письма. Наследует базовый класс отправки письма по такси, где объвляется обязательный метод
|
||||||
|
*/
|
||||||
|
class NewOrderMail extends BaseTaxiMail
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
public TaxiOrderDTO $orderData,
|
||||||
|
public ?int $orderId)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод подготавливает данные письма для передачи в джобу
|
||||||
|
*
|
||||||
|
* @return BaseMailerObj
|
||||||
|
*/
|
||||||
|
public function prepareDataForMail(): BaseMailerObj
|
||||||
|
{
|
||||||
|
return new BaseMailerObj(
|
||||||
|
[$this->orderData->emp_login],
|
||||||
|
"Создана заявка на такси",
|
||||||
|
"Для вас создана заявка на такси № {$this->orderId}:
|
||||||
|
<ul>
|
||||||
|
<li><b>Дата:</b> {$this->orderData->taxi_date}</li>
|
||||||
|
<li><b>Время:</b> {$this->orderData->taxi_time}</li>
|
||||||
|
<li><b>Откуда:</b> {$this->orderData->taxi_address_from}</li>
|
||||||
|
<li><b>Куда:</b> {$this->orderData->taxi_address_to}</li>
|
||||||
|
</ul>",
|
||||||
|
config('taxi.name_ru'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Modules\Taxi\App\Services\TaxiMailerService;
|
||||||
|
|
||||||
|
//Регистрация сервиса отправки писем по работе с Такси
|
||||||
|
class TaxiMailerProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Register the service provider.
|
||||||
|
*/
|
||||||
|
public function register(): void
|
||||||
|
{
|
||||||
|
$this->app->bind(TaxiMailerService::class, function ($app) {
|
||||||
|
return new TaxiMailerService();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the services provided by the provider.
|
||||||
|
*/
|
||||||
|
public function provides(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Providers;
|
||||||
|
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
use Modules\Taxi\App\Console\SendOrdersToTaxiCommand;
|
||||||
|
|
||||||
|
//Не вполне помню зачем этот провайдер, для какого сервиса. Судя по названию, для работы с расписанием операций с приложением. Например, отправка итогового письма с заявками на такси или чистка чего-то
|
||||||
|
class TaxiScheduleProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Register the service provider.
|
||||||
|
*/
|
||||||
|
public function register(): void
|
||||||
|
{
|
||||||
|
// Регистрируем команду в системе
|
||||||
|
if ($this->app->runningInConsole()) {
|
||||||
|
$this->commands([
|
||||||
|
SendOrdersToTaxiCommand::class, // ✅ Теперь Laravel знает о команде
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the services provided by the provider.
|
||||||
|
*/
|
||||||
|
public function provides(): array
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Taxi\App\Services;
|
||||||
|
|
||||||
|
use Modules\Taxi\App\Mail\BaseTaxiMail;
|
||||||
|
use Modules\Taxi\App\Jobs\TaxiMailJob;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Сервис отправки письма. Отвечает за формирование всех писем приложения Такси
|
||||||
|
*/
|
||||||
|
class TaxiMailerService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Единый метод отправки всех писем по такси
|
||||||
|
*
|
||||||
|
* @param BaseTaxiMail $taxiMailClass
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function sendMail(BaseTaxiMail $taxiMailClass)
|
||||||
|
{
|
||||||
|
#Гаврилов
|
||||||
|
//delay наверное не нужен?
|
||||||
|
//Вызов джобы для отправки письма
|
||||||
|
TaxiMailJob::dispatch($taxiMailClass->prepareDataForMail())->onQueue('emails')->delay(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console;
|
||||||
|
|
||||||
|
use Illuminate\Console\Scheduling\Schedule;
|
||||||
|
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||||
|
|
||||||
|
class Kernel extends ConsoleKernel
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Define the application's command schedule.
|
||||||
|
*/
|
||||||
|
protected function schedule(Schedule $schedule): void
|
||||||
|
{
|
||||||
|
// $schedule->command('inspire')->hourly();
|
||||||
|
//activity()->log('Look mum, I logged something');
|
||||||
|
#Гаврилов
|
||||||
|
//ПРОВЕРИТЬ, РАБОТАЕТ?
|
||||||
|
// $schedule->command('sanctum:prune-expired --hours=24')
|
||||||
|
// ->daily();
|
||||||
|
//->dailyAt('21:03');
|
||||||
|
// activity()
|
||||||
|
// ->byAnonymous()
|
||||||
|
// ->inLog('Shedule')
|
||||||
|
// ->event('clear_old_Sanctum_tokens');
|
||||||
|
|
||||||
|
//попытка поработать с командами по расписанию. Не успел протестить. В частности, в этом скрипте планируется в определенное время инициировать отправку всех заявок на такси
|
||||||
|
$schedule->command('taxi:send-today-orders-mail')->dailyAt('08:00');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the commands for the application.
|
||||||
|
*/
|
||||||
|
protected function commands(): void
|
||||||
|
{
|
||||||
|
$this->load(__DIR__ . '/Commands');
|
||||||
|
|
||||||
|
require base_path('routes/console.php');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user