]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Убираем повторную отправку по статусу
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 20 Jan 2025 20:24:56 +0000 (23:24 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 20 Jan 2025 20:24:56 +0000 (23:24 +0300)
erp24/commands/CronController.php

index 6a4dd642e4d2d6526a157bd975741cfe9089ea2c..1b9badbf418e2de7ff17f0114d3fe9d431dd7ac1 100644 (file)
@@ -269,6 +269,13 @@ class CronController extends Controller
                 "Всего телефонов в когорте {$countPhones} записей.\n",
                 BaseConsole::FG_GREEN
             );
+            $sentStatusKogort = SentKogort::find()
+                ->select('phones')
+                ->where(['kogort_date' => $kogortDate])
+                ->andWhere(['target' => $targetDate])
+                ->andWhere(['status' => 2])
+                ->column();
+
             // Выбираем номера для отправки через бота
             $telegramUsers = UsersTelegram::find()
                 ->where(['is_blocked' => 0, 'is_registered' => 1])
@@ -276,30 +283,34 @@ class CronController extends Controller
                 ->select(['phone', 'chat_id'])
                 ->asArray()
                 ->all();
-            $phonesArray = array_column($telegramUsers, 'phone');
+
+            $phonesArray = array_diff(array_column($telegramUsers, 'phone'), $sentStatusKogort);
+
             $chatIdsArray = array_column($telegramUsers, 'chat_id');
-            $countTelegramPhones = count($telegramUsers);
+            $countTelegramPhones = count($phonesArray);
             $this->stdout(
                 "Всего телефонов в рассылке телеграма {$countTelegramPhones} записей.\n",
                 BaseConsole::FG_GREEN
             );
             if (!empty($telegramUsers)) {
                 foreach ($telegramUsers as $telegramUser) {
-                    $messageData = [];
-                    $messageData['chat_id'] = $telegramUser['chat_id'];
-                    $messageData['phone'] = $telegramUser['phone'];
-                    $messageData['kogort_date'] = $kogortDate;
-                    $messageData['target_date'] = $targetDate;
-                    $messageData['type'] = 1;
-                    $messageData['message'] = $messagesSettings->replaceShortcodes($messagesSettings->offer_1);
+                    if (!in_array($telegramUser['phone'], $sentStatusKogort)) {
+                        $messageData = [];
+                        $messageData['chat_id'] = $telegramUser['chat_id'];
+                        $messageData['phone'] = $telegramUser['phone'];
+                        $messageData['kogort_date'] = $kogortDate;
+                        $messageData['target_date'] = $targetDate;
+                        $messageData['type'] = 1;
+                        $messageData['message'] = $messagesSettings->replaceShortcodes($messagesSettings->offer_1);
 
                         Yii::$app->queue->push(new SendTelegramMessageDBJob([
                             'messageData' =>  $messageData,
                         ]));
                         Yii::$app->queue->push(new SendTelegramMessageJob([
-                        'chatId' =>  $telegramUser['chat_id'],
-                        'message' =>  $messageData['message'],
+                            'chatId' =>  $telegramUser['chat_id'],
+                            'message' =>  $messageData['message'],
                         ]));
+                    }
                 }
 
                 $updatedCount = SentKogort::updateAll(
@@ -453,6 +464,12 @@ class CronController extends Controller
                 );
 
                 if ($i == 0) {
+                    $sentStatusKogort = SentKogort::find()
+                        ->select('phones')
+                        ->where(['kogort_date' => $kogortDate])
+                        ->andWhere(['target' => $targetDate])
+                        ->andWhere(['status' => 3])
+                        ->column();
                     // Выбираем номера для отправки через бота
                     $telegramUsers = UsersTelegram::find()
                         ->where(['is_blocked' => 0, 'is_registered' => 1])
@@ -460,9 +477,9 @@ class CronController extends Controller
                         ->select(['phone', 'chat_id'])
                         ->asArray()
                         ->all();
-                    $phonesArray = array_column($telegramUsers, 'phone');
+                    $phonesArray = array_diff(array_column($telegramUsers, 'phone'), $sentStatusKogort);
                     $chatIdsArray = array_column($telegramUsers, 'chat_id');
-                    $countTelegramPhones = count($telegramUsers);
+                    $countTelegramPhones = count($phonesArray);
                     $this->stdout(
                         "Всего телефонов в рассылке телеграма {$countTelegramPhones} записей.\n",
                         BaseConsole::FG_GREEN
@@ -470,21 +487,24 @@ class CronController extends Controller
 
                     if (!empty($telegramUsers)) {
                         foreach ($telegramUsers as $telegramUser) {
-                            $messageData = [];
-                            $messageData['chat_id'] = $telegramUser['chat_id'];
-                            $messageData['phone'] = $telegramUser['phone'];
-                            $messageData['kogort_date'] = $kogortDate;
-                            $messageData['target_date'] = $targetDate;
-                            $messageData['type'] = 2;
-                            $messageData['message'] = $messagesSettings->replaceShortcodes($messagesSettings->offer_2);
-
-                            Yii::$app->queue->push(new SendTelegramMessageDBJob([
-                                'messageData' =>  $messageData,
-                            ]));
-                            Yii::$app->queue->push(new SendTelegramMessageJob([
-                            'chatId' =>  $telegramUser['chat_id'],
-                            'message' =>  $messageData['message'],
-                            ]));
+                            if (!in_array($telegramUser['phone'], $sentStatusKogort)) {
+                                $messageData = [];
+                                $messageData['chat_id'] = $telegramUser['chat_id'];
+                                $messageData['phone'] = $telegramUser['phone'];
+                                $messageData['kogort_date'] = $kogortDate;
+                                $messageData['target_date'] = $targetDate;
+                                $messageData['type'] = 2;
+                                $messageData['message'] = $messagesSettings
+                                    ->replaceShortcodes($messagesSettings->offer_2);
+
+                                Yii::$app->queue->push(new SendTelegramMessageDBJob([
+                                    'messageData' =>  $messageData,
+                                ]));
+                                Yii::$app->queue->push(new SendTelegramMessageJob([
+                                    'chatId' =>  $telegramUser['chat_id'],
+                                    'message' =>  $messageData['message'],
+                                ]));
+                            }
                         }
                         $updatedCount = SentKogort::updateAll(
                             ['status' => SentKogort::STATUSES['second']], // Устанавливаем статус "вторая рассылка"
@@ -524,7 +544,13 @@ class CronController extends Controller
             $kogortPhones = Users::formKogortByDateAndType($targetDate, 'whatsapp');
 
             if (!empty($kogortPhones)) {
-                Users::saveKogort($kogortPhones['whatsapp'], $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['whatsapp'], true);
+                Users::saveKogort(
+                    $kogortPhones['whatsapp'],
+                    $kogortDate,
+                    $targetDate,
+                    SentKogort::KOGORT_NUMBERS['whatsapp'],
+                    true
+                );
                 $this->stdout(
                     "Когорта для Вотсапа на {$kogortDate} для целевой даты {$targetDate} успешно сохранена.\n",
                     BaseConsole::FG_GREEN