]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Подготовка к тестированию
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 7 Mar 2025 11:19:52 +0000 (14:19 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Fri, 7 Mar 2025 11:19:52 +0000 (14:19 +0300)
erp24/commands/CronController.php
erp24/jobs/SendWhatsappMessageJob.php
erp24/records/Users.php
erp24/services/WhatsAppService.php

index f277ea902c9af215f3d99f0c574a25c47005f9b7..f2d6d53bd9f1025f288fced25d19732e039211a7 100644 (file)
@@ -32,6 +32,7 @@ class CronController extends Controller
      */
     public $time;
     public $stepsBack;
+    public $test;
 
     public function actions()
     {
@@ -714,7 +715,7 @@ class CronController extends Controller
             );
             return ExitCode::UNAVAILABLE;
         }
-
+        $test = $this->test ? (bool)$this->test : false;
         if (!$messagesSettings->active) {
             $this->stdout(
                 "Рассылка неактивна (поле active = 0). Отправка сообщений прервана.\n",
@@ -726,17 +727,19 @@ class CronController extends Controller
         $this->stdout("Рассылка активна. Начинаем отправку второго сообщения...\n", BaseConsole::FG_GREEN);
         date_default_timezone_set('Europe/Moscow');
 
-        $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
         $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
-        $currentDate = date('Y-m-d');
-        $targetDate = date('Y-m-d', strtotime("+$step2 days", strtotime($currentDate)));
-        $kogortDate = date('Y-m-d', strtotime("-$step1 days", strtotime($targetDate)));
+        $limit =  $messagesSettings ? $messagesSettings->channel_limit : 250;
+        $cascadeId = $messagesSettings ? $messagesSettings->cascade_id : 5686;
+
+        $kogortDate = date('Y-m-d');
+        $targetDate = date('Y-m-d', strtotime("+$step2 days", strtotime($kogortDate)));
 
         $kogortPhones = SentKogort::find()
             ->select('phone')
-            ->andWhere(['kogort_number' => 2])
+            ->andWhere(['kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp']])
             ->andWhere(['target_date' => $targetDate])
             ->andWhere(['purchase' => 0])
+            ->andWhere(['status' => SentKogort::STATUSES['created']])
             ->column();
 
         if (!empty($kogortPhones)) {
@@ -745,93 +748,49 @@ class CronController extends Controller
                 "Всего телефонов в когорте {$countPhones} записей.\n",
                 BaseConsole::FG_GREEN
             );
-
-            $sentStatusKogort = SentKogort::find()
-                ->select('phone')
-                ->andWhere(['kogort_number' => 2])
-                ->andWhere(['target_date' => $targetDate])
-                ->andWhere(['status' => 3])
-                ->column();
-
-            $phonesArray = array_diff($kogortPhones, $sentStatusKogort);
-            $countWhatsappPhones = count($phonesArray);
-            $this->stdout(
-                "Всего телефонов в рассылке телеграма {$countWhatsappPhones} записей.\n",
-                BaseConsole::FG_GREEN
-            );
-
-            $limit =  $messagesSettings ? $messagesSettings->channel_limit : 250;
-            $cascadeId = $messagesSettings ? $messagesSettings->cascade_id : 5686;
-            $salesData = Sales::find()
-                ->select([
-                    'phone',
-                    'dealsCount' => 'COUNT(*)'
-                ])
-                ->where(['phone' => $phonesArray])
-                ->groupBy('phone')
-                ->asArray()
-                ->indexBy('phone')
-                ->all();
-
-            $phoneSales = [];
-            foreach ($phonesArray as $phone) {
-                $phoneSales[$phone] = $salesData[$phone]['dealsCount'] ?? 0;
+            $messageText = $messagesSettings
+                ->replaceShortcodes($messagesSettings->offer_whatsapp, $targetDate);
+            $phonesSentArray = [];
+            foreach ($kogortPhones as $index => $phone) {
+                if ($index >= $limit) {
+                    break;
+                }
+                $messageData = [];
+                $messageData['phone'] = $phone;
+                $messageData['kogort_date'] = $kogortDate;
+                $messageData['target_date'] = $targetDate;
+                $messageData['message'] = $messageText;
+                $messageData['cascade_id'] = $cascadeId;
+
+                Yii::$app->queue->push(new SendWhatsappMessageJob([
+                    'messageData' => $messageData,
+                    'isTest' => $test
+                ]));
+                $phonesSentArray[] = $phone;
             }
-            arsort($phoneSales);
-            $sortedPhones = array_keys($phoneSales);
+            //TODO - перенос в отправку
+            $updatedCount = SentKogort::updateAll(
+                [
+                    'status' => SentKogort::STATUSES['second'], // Устанавливаем статус "вторая рассылка"
+                    'updated_at' => date('Y-m-d H:i:s'),
+                ],
+                [
+                    'target_date' => $targetDate,
+                    'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp'],
+                    'phone' => $phonesSentArray,
+                ]
+            );
 
-            $phonesToSend = null;
-            if ($countWhatsappPhones > $limit) {
-                $phonesToSend = $sortedPhones;
+            if ($updatedCount) {
+                $this->stdout(
+                    "Статус записей для когорты {$kogortDate} обновлён на 'second' для {$updatedCount} записей.\n",
+                    BaseConsole::FG_GREEN
+                );
             } else {
-                $phonesToSend = $phonesArray;
-            }
-
-            if (!empty($phonesToSend)) {
-                $messageText = $messagesSettings
-                    ->replaceShortcodes($messagesSettings->offer_whatsapp, $targetDate);
-                $phonesSentArray = [];
-                foreach ($phonesToSend as $index => $phone) {
-                    if ($index >= $limit) {
-                        break;
-                    }
-                    $messageData = [];
-                    $messageData['phone'] = $phone;
-                    $messageData['kogort_date'] = $kogortDate;
-                    $messageData['target_date'] = $targetDate;
-                    $messageData['message'] = $messageText;
-                    $messageData['cascade_id'] = $cascadeId;
-
-                    Yii::$app->queue->push(new SendWhatsappMessageJob([
-                        'messageData' => $messageData,
-                        'isTest' => false
-                    ]));
-                    $phonesSentArray[] = $phone;
-                }
-                //TODO - перенос в отправку
-                $updatedCount = SentKogort::updateAll(
-                    [
-                        'status' => SentKogort::STATUSES['second'], // Устанавливаем статус "вторая рассылка"
-                        'updated_at' => date('Y-m-d H:i:s'),
-                    ],
-                    [
-                        'target_date' => $targetDate,
-                        'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp'],
-                        'phone' => $phonesSentArray,
-                    ]
+                $this->stdout(
+                    "Не найдено записей для обновления статуса на 'second'.\n",
+                    BaseConsole::FG_RED
                 );
-
-                if ($updatedCount) {
-                    $this->stdout(
-                        "Статус записей для когорты {$kogortDate} обновлён на 'second' для {$updatedCount} записей.\n",
-                        BaseConsole::FG_GREEN
-                    );
-                } else {
-                    $this->stdout(
-                        "Не найдено записей для обновления статуса на 'second'.\n",
-                        BaseConsole::FG_RED
-                    );
-                }
             }
         } else {
             $this->stdout(
@@ -978,6 +937,7 @@ class CronController extends Controller
         $options = parent::options($actionID);
         $options[] = 'time';
         $options[] = 'stepsBack';
+        $options[] = 'test';
 
         return $options;
     }
index 65cce5b8eb984cb2ddd5c53c7718b610c99ba94a..f446b3ecacc982e74a7bcd371f63eb3fd8ea54da 100644 (file)
@@ -55,7 +55,7 @@ class SendWhatsappMessageJob extends BaseObject implements JobInterface
         $cascadeId = ($this->messageData)['cascade_id'];
         $requestId = DataHelper::uuid();
         $whatsappService = new WhatsAppService($apiKey, $cascadeId);
-
+        $response = null;
         try {
             if (!$this->isTest) {
                // $message   = "Здравствуйте\nУзнать подробности вы можете на нашем сайте https://bazacvetov24.ru.";
index 00b8faf8a6f5f73de11a434fb2b330315c7f06b7..5a9b175d4b09493403ae1402fb8c83cf72e35068 100755 (executable)
@@ -447,13 +447,20 @@ class Users extends \yii\db\ActiveRecord
             ])
             ->column();
 
+        $existingWhatsappKogort = SentKogort::find()
+            ->select('phone')
+            ->where([
+                'target_date' => $targetDate,
+                'kogort_number' => SentKogort::KOGORT_NUMBERS['whatsapp']
+            ])
+            ->column();
 
         if ($type === 'whatsapp' && !empty($existingTargetKogort)) {
                 return self::processWhatsappKogort($existingTargetKogort, $targetDate);
         }
 
-        if ($type === 'call' && !empty($existingTargetKogort)) {
-                return self::processCallKogort($existingTargetKogort, $targetDate);
+        if ($type === 'call' && !empty($existingWhatsappKogort)) {
+                return self::processCallKogort($existingWhatsappKogort, $targetDate);
         }
 
         $monthDay = date('m-d', strtotime($targetDate));
@@ -518,9 +525,10 @@ class Users extends \yii\db\ActiveRecord
             return $targetKogortData;
         }
 
+        $whatsappResult = self::processWhatsappKogort($targetKogortData, $targetDate);
         return $type === 'whatsapp'
-            ? self::processWhatsappKogort($kogortData, $targetDate)
-            : self::processCallKogort($kogortData, $targetDate);
+            ? $whatsappResult
+            : self::processCallKogort($whatsappResult['whatsapp'], $targetDate);
     }
 
     /**
@@ -532,10 +540,13 @@ class Users extends \yii\db\ActiveRecord
 
         $step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
         $step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
+        $testList = $messagesSettings ? $messagesSettings->test_phones_list : '';
+        $testPhones = array_map('trim', explode(',', $testList));
 
         $excludeRegistered = UsersTelegram::find()
             ->where(['is_blocked' => 0, 'is_registered' => 1])
             ->andWhere(['phone' => $targetPhones])
+            ->andWhere(['not in', 'phone', $testPhones])
             ->distinct('phone')
             ->select('phone')
             ->column();
@@ -561,27 +572,10 @@ class Users extends \yii\db\ActiveRecord
         }
 
         $whatsappPhones = array_diff(array_diff($targetPhones, $excludeRegistered), $excludeSalesPhone);
-        if (!empty($messagesSettings->test_phones_list)) {
-            if (
-                isset($messagesSettings->test_phones_active)
-                &&
-                $messagesSettings->test_phones_active == 0
-            ) {
-                $testPhones = array_map('trim', explode(',', $messagesSettings->test_phones_list));
-                $whatsappKogortData = array_merge($whatsappPhones, $testPhones);
-            } else {
-                $testPhones = array_map('trim', explode(',', $messagesSettings->test_phones_list));
-                $whatsappKogortData = $testPhones;
-            }
-        } else {
-            if ($messagesSettings->test_phones_active == 1) {
-                $whatsappKogortData = [];
-            }
-        }
 
         $secondTarget = array_diff($excludeRegistered, $excludeSalesPhone);
 
-        return ['whatsapp' => $whatsappKogortData, 'secondTarget' => $secondTarget];
+        return ['whatsapp' => $whatsappPhones, 'secondTarget' => $secondTarget];
     }
 
     /**
index 357cfd4cbf1c13a5e050f48509cd202f061730e0..3cb2053b63350d2586a86f69108c99546ae22fb5 100644 (file)
@@ -170,15 +170,17 @@ class WhatsAppService
             'text'        => $this->escapeText($message),
         ];
 
-        if (!$isTest) {
+        $whatsappContent['messageMatcherId'] = $messagesSettings ? $messagesSettings->template_id : 121254;
+       /* if (!$isTest) {
             $whatsappContent['messageMatcherId'] = $messagesSettings ? $messagesSettings->template_id : 121254;
         } else {
+            $whatsappContent['messageMatcherId'] = $messagesSettings ? $messagesSettings->template_id : 121254;
             $whatsappContent['keyboard'] = $buttons;
             $whatsappContent['messageMatcherId'] = self::getMessageMatcherIdBySubjectId(
                 $subjectId,
                 'kogort_message'
             ) ?? 120669;
-        }
+        }*/
 
         $payload = [
             'requestId'        => $requestId,