From cf7e9247b595df4eba55904d91b53a5d6e3e12e1 Mon Sep 17 00:00:00 2001 From: fomichev Date: Thu, 9 Jan 2025 19:17:24 +0300 Subject: [PATCH] =?utf8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?utf8?q?=D0=B5=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=D0=BE=D0=B2=20?= =?utf8?q?=D0=B8=20=D0=BD=D0=B0=D1=87=D0=B8=D1=81=D0=BB=D0=B5=D0=BD=D0=B8?= =?utf8?q?=D0=B5=20=D0=B1=D0=BE=D0=BD=D1=83=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/commands/CronController.php | 96 ++++++++++++++++++++++++++++++- erp24/records/SentKogort.php | 6 ++ erp24/records/Users.php | 5 +- 3 files changed, 103 insertions(+), 4 deletions(-) diff --git a/erp24/commands/CronController.php b/erp24/commands/CronController.php index 5d40ea8b..25f84824 100644 --- a/erp24/commands/CronController.php +++ b/erp24/commands/CronController.php @@ -15,6 +15,7 @@ use yii_app\records\ReplacementInvoice; use yii_app\records\ReplacementInvoiceProducts; use yii_app\records\SentKogort; use yii_app\records\Users; +use yii_app\records\UsersBonus; use yii_app\records\UsersMessageManagement; use yii_app\records\UsersTelegram; use yii_app\records\UsersTelegramLog; @@ -256,6 +257,61 @@ class CronController extends Controller "Когорта таргета на {$kogortDate} для целевой даты {$targetDate} успешно сохранена.\n", BaseConsole::FG_GREEN ); + // Выбираем номера для отправки через бота + $telegramUsers = UsersTelegram::find() + ->where(['is_blocked' => 0, 'is_registered' => 1]) + ->andWhere(['phone' => $kogortPhones]) + ->distinct('phone') + ->select('phone') + ->column(); + + if (!empty($telegramUsers)) { + $updatedCount = SentKogort::updateAll( + ['status' => SentKogort::STATUSES['first']], // Устанавливаем статус "первая рассылка" + [ + 'kogort_date' => $kogortDate, + 'target_date' => $targetDate, + 'kogort_number' => SentKogort::KOGORT_NUMBERS['target'], + 'phone' => $telegramUsers, + ] + ); + + if ($updatedCount) { + $this->stdout( + "Статус записей для когорты {$kogortDate} обновлён на 'first' для {$updatedCount} записей.\n", + BaseConsole::FG_GREEN + ); + } else { + $this->stdout("Не найдено записей для обновления статуса на 'first'.\n", BaseConsole::FG_RED); + } + } + + //Начисляем бонусы + $tip = "plus"; + $bonus = 200; + $ip = "tst"; + $tip_sale = "date"; + $name = "Начисление бонусов на дату {$kogortDate}"; + $daysToEnd = $step1 + 1; + foreach ($kogortPhones as $phone) { + $userBonus4 = new UsersBonus(); + $userBonus4->phone = '' . $phone; + $userBonus4->name = $name; + $userBonus4->tip = $tip; + $userBonus4->tip_sale = $tip_sale; + $userBonus4->bonus = $bonus; + $userBonus4->date = date('Y-m-d H:i:s'); + $userBonus4->date_start = $kogortDate; + $userBonus4->date_end = date('Y-m-d', strtotime("+$daysToEnd days", strtotime($kogortDate))); + $userBonus4->ip = $ip; + $userBonus4->save(); + if ($userBonus4->getErrors()) { + $this->stdout( + json_encode($userBonus4->getErrors(), JSON_UNESCAPED_UNICODE) . "\n", + BaseConsole::FG_RED + ); + } + } } else { $this->stdout( "Нет данных для формирования когорты для целевой даты {$targetDate}.\n", @@ -332,11 +388,47 @@ class CronController extends Controller $kogortPhones = Users::formKogortByDateAndType($targetDate, 'whatsapp'); if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $kogortDate, $targetDate, SentKogort::KOGORT_NUMBERS['whatsapp']); + Users::saveKogort( + $kogortPhones['whatsapp'], + $kogortDate, + $targetDate, + SentKogort::KOGORT_NUMBERS['whatsapp'] + ); $this->stdout( "Когорта для Вотсапа на {$kogortDate} для целевой даты {$targetDate} успешно создана.\n", BaseConsole::FG_GREEN ); + + if ($i == 0) { + // Выбираем номера для отправки через бота + $telegramUsers = $kogortPhones['secondTarget']; + /*$this->stdout( + count($telegramUsers) . "\n", + BaseConsole::FG_RED + );*/ + if (!empty($telegramUsers)) { + $updatedCount = SentKogort::updateAll( + ['status' => SentKogort::STATUSES['second']], // Устанавливаем статус "вторая рассылка" + [ + 'target_date' => $targetDate, + 'kogort_number' => SentKogort::KOGORT_NUMBERS['target'], + 'phone' => $telegramUsers, + ] + ); + + if ($updatedCount) { + $this->stdout( + "Статус записей для когорты {$kogortDate} обновлён на 'second' для {$updatedCount} записей.\n", + BaseConsole::FG_GREEN + ); + } else { + $this->stdout( + "Не найдено записей для обновления статуса на 'second'.\n", + BaseConsole::FG_RED + ); + } + } + } } else { $this->stdout( "Нет данных для формирования когорты для Ватсапа на {$kogortDate} для целевой даты {$targetDate}.\n", @@ -353,7 +445,7 @@ class CronController extends Controller $kogortPhones = Users::formKogortByDateAndType($targetDate, 'whatsapp'); if (!empty($kogortPhones)) { - Users::saveKogort($kogortPhones, $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 diff --git a/erp24/records/SentKogort.php b/erp24/records/SentKogort.php index 0acd9f37..6f2a9258 100644 --- a/erp24/records/SentKogort.php +++ b/erp24/records/SentKogort.php @@ -25,6 +25,12 @@ class SentKogort extends \yii\db\ActiveRecord 'whatsapp' => 2, 'call' => 3, ]; + + public const STATUSES = [ + 'created' => 1, + 'first' => 2, + 'second' => 3, + ]; /** * {@inheritdoc} */ diff --git a/erp24/records/Users.php b/erp24/records/Users.php index 9fb1d708..c68c1ae9 100755 --- a/erp24/records/Users.php +++ b/erp24/records/Users.php @@ -529,9 +529,10 @@ class Users extends \yii\db\ActiveRecord ->select('phone') ->column(); - $whatsappPhones = array_diff($targetPhones, $excludeRegistered); + $whatsappPhones = array_diff(array_diff($targetPhones, $excludeRegistered), $excludeSalesPhone); + $secondTarget = array_diff($excludeRegistered, $excludeSalesPhone); - return array_diff($whatsappPhones, $excludeSalesPhone); + return ['whatsapp' => $whatsappPhones, 'secondTarget' => $secondTarget]; } /** -- 2.39.5