From d85ba4c9b599140198dea9cd170a96e906b8b0bb Mon Sep 17 00:00:00 2001 From: fomichev Date: Wed, 25 Dec 2024 13:59:36 +0300 Subject: [PATCH] =?utf8?q?=D0=A2=D0=B5=D1=81=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?utf8?q?=D0=BB=D0=BB=D0=B5=D1=80=D0=B0=20=D0=B8=20=D1=81=D0=B8=D0=BD?= =?utf8?q?=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../UsersMessageManagementController.php | 101 ++++++++++++++++++ .../export-kogort.php | 11 +- 2 files changed, 102 insertions(+), 10 deletions(-) diff --git a/erp24/controllers/UsersMessageManagementController.php b/erp24/controllers/UsersMessageManagementController.php index 2db02053..bbb984b0 100644 --- a/erp24/controllers/UsersMessageManagementController.php +++ b/erp24/controllers/UsersMessageManagementController.php @@ -7,10 +7,12 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use Yii; use yii\base\DynamicModel; +use yii\console\ExitCode; use yii\data\ActiveDataProvider; use yii\data\ArrayDataProvider; use yii\db\Exception; use yii\helpers\ArrayHelper; +use yii\helpers\BaseConsole; use yii\helpers\Json; use yii\web\Controller; use yii_app\records\Sales; @@ -19,6 +21,7 @@ use yii_app\records\Users; use yii_app\records\UsersEvents; use yii_app\records\UsersMessageManagement; use yii_app\records\UsersMessageManagementLogs; +use yii_app\records\UsersTelegramLog; class UsersMessageManagementController extends Controller { @@ -382,4 +385,102 @@ class UsersMessageManagementController extends Controller return ['success' => false, 'message' => 'Invalid request']; } + + + public function actionSyncTelegramUsers() + { + $remoteDb = Yii::$app->dbRemote; + $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', [ + ':limit' => $batchSize, + ':offset' => $offset, + ])->queryAll(); + + if (empty($chatbotUsers)) { + break; + } + + foreach ($chatbotUsers as $remoteUser) { + $phone = $remoteUser['phone']; + $chatId = $remoteUser['chat_id']; + $username = $remoteUser['username']; + $isBlocked = (int)$remoteUser['is_blocked']; + $isRegistered = (int)$remoteUser['is_registered']; + if (empty($phone)) { + fputcsv($fileHandle, [$phone, $username, $chatId, $isBlocked, $isRegistered, 'Отсутствует телефон'], ';'); + continue; + } + + $existingLog = UsersTelegramLog::find() + ->where(['phone' => $phone, 'date_end' => null]) + ->one(); + + if ($existingLog) { + if ( + $existingLog->is_blocked != $isBlocked || + $existingLog->is_registered != $isRegistered + ) { + $existingLog->date_end = date('Y-m-d H:i:s'); + $existingLog->save(false); + + $this->createTelegramLog($phone, $isBlocked, $isRegistered); + } + } else { + $this->createTelegramLog($phone, $isBlocked, $isRegistered); + } + + $user = Users::findOne(['phone' => $phone]); + + if (!$user) { + 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); + } + + $offset += $batchSize; + + } + + fclose($fileHandle); + return 'ok'; + } + + /** + * Создает новую запись в таблице users_telegram_log. + * + * @param string $phone + * @param int $isBlocked + * @param int $isRegistered + */ + protected function createTelegramLog($phone, $isBlocked, $isRegistered) + { + $log = new UsersTelegramLog([ + 'phone' => $phone, + 'is_blocked' => $isBlocked, + 'is_registered' => $isRegistered, + 'active' => ($isBlocked == 0 && $isRegistered == 1) ? 1 : 0, + ]); + $log->save(false); + } } diff --git a/erp24/views/users-message-management/export-kogort.php b/erp24/views/users-message-management/export-kogort.php index 77916ac2..7ebae89c 100644 --- a/erp24/views/users-message-management/export-kogort.php +++ b/erp24/views/users-message-management/export-kogort.php @@ -98,15 +98,6 @@ $this->title = 'Рассылка по когортам'; + 'btn btn-primary']) ?> - dbRemote->createCommand("SELECT * FROM chatbot_telegram_users LIMIT 10") - ->queryAll(); - - foreach ($rows as $row) { - print_r($row); - } - -?> \ No newline at end of file -- 2.39.5