]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Изменение статусов и начисление бонусов
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 9 Jan 2025 16:17:24 +0000 (19:17 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 9 Jan 2025 16:17:24 +0000 (19:17 +0300)
erp24/commands/CronController.php
erp24/records/SentKogort.php
erp24/records/Users.php

index 5d40ea8be32496a66f8b92e0d7395f6ee4bece81..25f84824c83d31ef4b3e41d7cbd74acfa66060c7 100644 (file)
@@ -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
index 0acd9f37533f027d6468b40ba7df5e070c575177..6f2a925807ae27ca52da33bc91c5ffaba01572d5 100644 (file)
@@ -25,6 +25,12 @@ class SentKogort extends \yii\db\ActiveRecord
         'whatsapp' => 2,
         'call' => 3,
     ];
+
+    public const STATUSES = [
+      'created' => 1,
+        'first' => 2,
+        'second' => 3,
+    ];
     /**
      * {@inheritdoc}
      */
index 9fb1d70848d488e1eb4a3e61ca5f2f77829957e8..c68c1ae93a9c804f35e1a5db8e9857612286f497 100755 (executable)
@@ -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];
     }
 
     /**