From: fomichev Date: Tue, 24 Dec 2024 11:55:51 +0000 (+0300) Subject: Добавление параметров в методы вотсам и звонок X-Git-Tag: 1.7~94^2~50 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=73f08c58077b36e6604e4073f1fb39ace715a030;p=erp24_rep%2Fyii-erp24%2F.git Добавление параметров в методы вотсам и звонок --- 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; } }