*/
public $time;
public $stepsBack;
+ public $test;
public function actions()
{
);
return ExitCode::UNAVAILABLE;
}
-
+ $test = $this->test ? (bool)$this->test : false;
if (!$messagesSettings->active) {
$this->stdout(
"Рассылка неактивна (поле active = 0). Отправка сообщений прервана.\n",
$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)) {
"Всего телефонов в когорте {$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(
$options = parent::options($actionID);
$options[] = 'time';
$options[] = 'stepsBack';
+ $options[] = 'test';
return $options;
}
])
->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));
return $targetKogortData;
}
+ $whatsappResult = self::processWhatsappKogort($targetKogortData, $targetDate);
return $type === 'whatsapp'
- ? self::processWhatsappKogort($kogortData, $targetDate)
- : self::processCallKogort($kogortData, $targetDate);
+ ? $whatsappResult
+ : self::processCallKogort($whatsappResult['whatsapp'], $targetDate);
}
/**
$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();
}
$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];
}
/**