From: fomichev Date: Mon, 20 Jan 2025 20:24:56 +0000 (+0300) Subject: Убираем повторную отправку по статусу X-Git-Tag: 1.7~60^2 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=5f9d477a9c14ab49af557856ba9b9f7a488d1756;p=erp24_rep%2Fyii-erp24%2F.git Убираем повторную отправку по статусу --- diff --git a/erp24/commands/CronController.php b/erp24/commands/CronController.php index 6a4dd642..1b9badbf 100644 --- a/erp24/commands/CronController.php +++ b/erp24/commands/CronController.php @@ -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