]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Убираем создание пользователя сохраняем в файл
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 25 Dec 2024 07:51:45 +0000 (10:51 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 25 Dec 2024 07:51:45 +0000 (10:51 +0300)
erp24/commands/CronController.php

index 50f141d26a55c4ecba36bf017e8b42c53ae32ba4..db6e1f0ee6976b73d4a136e5db461cfc0390c8bf 100644 (file)
@@ -360,6 +360,10 @@ class CronController extends Controller
         $batchSize = 500;
         $offset = 0;
 
+        $csvFilePath = Yii::getAlias('@runtime/missing_users.csv');
+        $fileHandle = fopen($csvFilePath, 'w');
+        fputcsv($fileHandle, ['phone', 'username', 'chat_id', 'is-blocked', 'is_registered', 'reason'], ';');
+
         while (true) {
             $chatbotUsers = $remoteDb
                 ->createCommand('SELECT * FROM chatbot_telegram_users LIMIT :limit OFFSET :offset', [
@@ -377,33 +381,11 @@ class CronController extends Controller
                 $username = $remoteUser['username'];
                 $isBlocked = (int)$remoteUser['is_blocked'];
                 $isRegistered = (int)$remoteUser['is_registered'];
-
-                $user = Users::findOne(['phone' => $phone]);
-
-                if (!$user) {
-                    $user = new Users([
-                        'phone' => $phone,
-                        'name' => $username ?: 'Клиент из чатбота',
-                        'date' => date('Y-m-d H:i:s'),
-                        'password' => '00000',
-                        'keycode' => '00000',
-                    ]);
-                    $user->save(false);
+                if (empty($phone)) {
+                    fputcsv($fileHandle, [$phone, $username, $chatId, $isBlocked, $isRegistered, 'Отсутствует телефон'], ';');
+                    continue;
                 }
 
-                if (empty($user->telegram_chat_id)) {
-                    $user->telegram_chat_id = $chatId;
-                }
-
-                if ($isRegistered && $user->telegram_is_subscribed == 0) {
-                    $user->telegram_is_subscribed = 1;
-                } elseif (!$isRegistered && $user->telegram_is_subscribed == 1) {
-                    $user->telegram_is_subscribed = 0;
-                    $user->telegram_unsubscribed_at = date('Y-m-d H:i:s');
-                }
-
-                $user->save(false);
-
                 $existingLog = UsersTelegramLog::find()
                     ->where(['phone' => $phone, 'date_end' => null])
                     ->one();
@@ -421,14 +403,46 @@ class CronController extends Controller
                 } else {
                     $this->createTelegramLog($phone, $isBlocked, $isRegistered);
                 }
+
+                $user = Users::findOne(['phone' => $phone]);
+
+                if (!$user) {
+                    fputcsv($fileHandle, [$phone, $username, $chatId, $isBlocked, $isRegistered, 'Пользователь не найден'], ';');
+                    continue;
+                    /* $user = new Users([
+                         'phone' => $phone,
+                         'name' => $username ?: 'Клиент из чатбота',
+                         'date' => date('Y-m-d H:i:s'),
+                         'password' => '00000',
+                         'keycode' => '00000',
+                     ]);
+                     $user->save(false);*/
+                }
+
+                if (empty($user->telegram_chat_id)) {
+                    $user->telegram_chat_id = $chatId;
+                }
+
+                if ($isRegistered && $user->telegram_is_subscribed == 0) {
+                    $user->telegram_is_subscribed = 1;
+                } elseif (!$isRegistered && $user->telegram_is_subscribed == 1) {
+                    $user->telegram_is_subscribed = 0;
+                    $user->telegram_unsubscribed_at = date('Y-m-d H:i:s');
+                }
+
+                $user->save(false);
             }
 
             $offset += $batchSize;
 
-            $this->stdout("Обработано записей: {$offset}\n", Console::FG_GREEN);
+            $this->stdout("Обработано записей: {$offset}\n", BaseConsole::FG_GREEN);
         }
 
-        $this->stdout("Синхронизация завершена успешно.\n", Console::FG_GREEN);
+        fclose($fileHandle);
+        $this->stdout(
+            "Синхронизация завершена успешно. Записи без пользователей сохранены в {$csvFilePath}\n",
+            BaseConsole::FG_GREEN
+        );
         return ExitCode::OK;
     }