return $type === 'whatsapp'
? self::processWhatsappKogort($kogortData, $startDate)
- : self::processCallKogort($kogortData, $startDate);
+ : self::processCallKogort(self::processWhatsappKogort($kogortData, $startDate), $startDate);
}
/**
* Обработка выборки для WhatsApp когорты
*/
- private static function processWhatsappKogort(array $phones, string $startDate): array
+ private static function processWhatsappKogort(array $targetPhones, string $startDate): array
{
$messagesSettings = UsersMessageManagement::find()
->where(['active' => 1])
$step1 = $messagesSettings ? $messagesSettings->day_before_step1 : 10;
$step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
- $usersQuery = UsersTelegram::find()->andWhere(['phone' => $phones]);
- $usersQuery->andWhere(['is_blocked' => 0]);
- $usersQuery->andWhere(['is_registered' => 1]);
+ $excludeRegistered = UsersTelegram::find()
+ ->where(['is_blocked' => 0, 'is_registered' => 1])
+ ->distinct('phone')
+ ->select('phone')
+ ->column();
+
$excludeSalesPhone = Sales::find()
->where(['>=', 'date', date('Y-m-d', strtotime("$startDate -$step1 days"))])
->andWhere(['<=', 'date', date('Y-m-d', strtotime("$startDate -$step2 days"))])
->select('phone')
->column();
- $usersQuery->andWhere(['not in', 'phone', $excludeSalesPhone])
- ->distinct('phone')
- ->select('phone');
- return $usersQuery->column();
+ $whatsappPhones = array_diff($targetPhones, $excludeRegistered);
+
+ return array_diff($whatsappPhones, $excludeSalesPhone);
}
/**
* Обработка выборки для Call когорты
*/
- private static function processCallKogort(array $phones, string $startDate): array
+ private static function processCallKogort(array $whatsappPhones, string $startDate): array
{
$messagesSettings = UsersMessageManagement::find()
->where(['active' => 1])
$step2 = $messagesSettings ? $messagesSettings->day_before_step2 : 4;
$step3 = $messagesSettings ? $messagesSettings->day_before_step3 : 2;
- // Подзапрос базы пользователей с учетом подписки на телеграм
- $usersQuery = UsersTelegram::find()->andWhere(['phone' => $phones]);
- $usersQuery->andWhere(['is_blocked' => 0]);
- $usersQuery->andWhere(['is_registered' => 1]);
-
// Исключаем телефоны с продажами в период от 4 до 2 дней до даты
$excludeSalesPhone = Sales::find()
->where(['>=', 'date', date('Y-m-d', strtotime("$startDate -$step2 days"))])
->select('phone')
->column();
- $usersQuery->andWhere(['not in', 'phone', $excludeSalesPhone]);
- return $usersQuery->column();
+ return array_diff($whatsappPhones, $excludeSalesPhone);
}
public static function saveKogort(array $phones, string $startDate, int $kogort_number): array