From 73f08c58077b36e6604e4073f1fb39ace715a030 Mon Sep 17 00:00:00 2001 From: fomichev Date: Tue, 24 Dec 2024 14:55:51 +0300 Subject: [PATCH] =?utf8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?utf8?q?=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?utf8?q?=D0=BE=D0=B2=20=D0=B2=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20?= =?utf8?q?=D0=B2=D0=BE=D1=82=D1=81=D0=B0=D0=BC=20=D0=B8=20=D0=B7=D0=B2?= =?utf8?q?=D0=BE=D0=BD=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/commands/CronController.php | 129 ++++++++++++++++++------------ 1 file changed, 79 insertions(+), 50 deletions(-) diff --git a/erp24/commands/CronController.php b/erp24/commands/CronController.php index aec54f6d..aa66818c 100644 --- a/erp24/commands/CronController.php +++ b/erp24/commands/CronController.php @@ -23,6 +23,7 @@ class CronController extends Controller * @var int|null Таймштамп текущего времени (принимается через параметр команды --time) */ public $time; + public $stepsBack; public function actions() { @@ -235,11 +236,22 @@ class CronController extends Controller return ExitCode::OK; } + /** + * Формирование когорты WhatsApp. + * @param int|null $stepsBack Количество дней назад для формирования когорт. + * @return int + */ public function actionGenerateWhatsappKogorts() { date_default_timezone_set('Europe/Moscow'); - $currentDate = date('Y-m-d'); + if ($this->time && !is_numeric($this->time)) { + $this->stdout("Некорректный формат времени\n", BaseConsole::FG_RED); + return ExitCode::DATAERR; + } + + $currentDate = $this->time ? date('Y-m-d', (int)$this->time) : date('Y-m-d'); + $stepsBack = $this->stepsBack ?? 0; $messagesSettings = UsersMessageManagement::find() ->where(['active' => 1]) @@ -247,80 +259,97 @@ class CronController extends Controller $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4; - $startDate = date('Y-m-d', strtotime("+$step2 days", strtotime($currentDate))); + for ($i = $stepsBack; $i >= 0; $i--) { + $dateToProcess = date('Y-m-d', strtotime("-$i days", strtotime($currentDate))); + $startDate = date('Y-m-d', strtotime("+$step2 days", strtotime($dateToProcess))); - if ( - SentKogort::find() - ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp']]) - ->exists() - ) { - $this->stdout( - "Когорта для Вотсапа на данную дату {$startDate} уже существует. Пропустить...\n", - BaseConsole::FG_YELLOW - ); - return; - } + if ( + SentKogort::find() + ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp']]) + ->exists() + ) { + $this->stdout( + "Когорта для Вотсапа на дату {$startDate} уже существует. Пропустить...\n", + BaseConsole::FG_YELLOW + ); + continue; + } - $kogortPhones = Users::formKogortByDateAndType($startDate, 'whatsapp'); + $kogortPhones = Users::formKogortByDateAndType($startDate, 'whatsapp'); - if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['whatsapp']); - $this->stdout("Когорта для Вотсапа на данную дату {$startDate} успешно создана.\n", BaseConsole::FG_GREEN); - } else { - $this->stdout( - "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n", - BaseConsole::FG_RED - ); + if (!empty($kogortPhones)) { + Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['whatsapp']); + $this->stdout( + "Когорта для Вотсапа на дату {$startDate} успешно создана.\n", + BaseConsole::FG_GREEN + ); + } else { + $this->stdout( + "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n", + BaseConsole::FG_RED + ); + } } + + return ExitCode::OK; } public function actionGenerateCallKogorts() { date_default_timezone_set('Europe/Moscow'); - $currentDate = date('Y-m-d'); - + if ($this->time && !is_numeric($this->time)) { + $this->stdout("Некорректный формат времени\n", BaseConsole::FG_RED); + return ExitCode::DATAERR; + } + $currentDate = $this->time ? date('Y-m-d', (int)$this->time) : date('Y-m-d'); + $stepsBack = $this->stepsBack ?? 0; $messagesSettings = UsersMessageManagement::find() ->where(['active' => 1]) ->one(); $step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2; - $startDate = date('Y-m-d', strtotime("+$step3 days", strtotime($currentDate))); + for ($i = $stepsBack; $i >= 0; $i--) { + $dateToProcess = date('Y-m-d', strtotime("-$i days", strtotime($currentDate))); + $startDate = date('Y-m-d', strtotime("+$step3 days", strtotime($dateToProcess))); - if ( - SentKogort::find() - ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['call']]) - ->exists() - ) { - $this->stdout( - "Когорта для Звонка на данную дату {$startDate} уже существует. Пропустить...\n", - BaseConsole::FG_YELLOW - ); - return; - } + if ( + SentKogort::find() + ->where(['kogort_date' => $startDate, 'kogort_number' => SentKogort::KOGORT_NUMBERS['call']]) + ->exists() + ) { + $this->stdout( + "Когорта для Звонка на данную дату {$startDate} уже существует. Пропустить...\n", + BaseConsole::FG_YELLOW + ); + continue; + } - $kogortPhones = Users::formKogortByDateAndType($startDate, 'call'); + $kogortPhones = Users::formKogortByDateAndType($startDate, 'call'); - if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['call']); - $this->stdout("Когорта для Звонка на данную дату {$startDate} успешно создана.\n", BaseConsole::FG_GREEN); - } else { - $this->stdout( - "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n", - BaseConsole::FG_RED - ); + if (!empty($kogortPhones)) { + Users::saveKogort($kogortPhones, $startDate, SentKogort::KOGORT_NUMBERS['call']); + $this->stdout( + "Когорта для Звонка на данную дату {$startDate} успешно создана.\n", + BaseConsole::FG_GREEN + ); + } else { + $this->stdout( + "Нет данных для формирования когорты для Ватсапа на дату {$startDate}.\n", + BaseConsole::FG_RED + ); + } } } - public function options($actionID) { $options = parent::options($actionID); - if ($actionID === 'generate-target-kogorts') { - $options[] = 'time'; - } - return array_unique($options); + $options[] = 'time'; + $options[] = 'stepsBack'; + + return $options; } } -- 2.39.5