From: fomichev Date: Wed, 25 Dec 2024 10:59:36 +0000 (+0300) Subject: Тестирование контроллера и синхронизации X-Git-Tag: 1.7~94^2~44 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=d85ba4c9b599140198dea9cd170a96e906b8b0bb;p=erp24_rep%2Fyii-erp24%2F.git Тестирование контроллера и синхронизации --- 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