скрипты, отвечающие за отправку писем - либо напрямую, либо через создание различных джоб или запуска отправки по расписанию (тестировал)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user