$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', [
$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();
} 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;
}