]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Добавление параметров в методы вотсам и звонок
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 24 Dec 2024 11:55:51 +0000 (14:55 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Tue, 24 Dec 2024 11:55:51 +0000 (14:55 +0300)
erp24/commands/CronController.php

index aec54f6d899f681a1eff78f7412ed6890d23df7d..aa66818c8d15aa3b64c7ed0744ee22b0c3723cbc 100644 (file)
@@ -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;
     }
 
 }