- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/agent/activity/lightcounter/filllightcounterpart1.php
- Класс: Bitrix\Crm\Agent\Activity\LightCounter\FillLightCounterPart1
- Вызов: FillLightCounterPart1::queryUncompletedActivitiesToProcess
private function queryUncompletedActivitiesToProcess(int $lastId): array
{
$activitiesIds = ActivityTable::query()
->setSelect(['ID'])
->where('ID', '>', $lastId)
->where('COMPLETED', '=', 'N')
->setOrder(['ID' => 'ASC'])
->setLimit(self::BATCH_SIZE)
->fetchAll();
if (empty($activitiesIds))
{
return [];
}
$activitiesIds = array_column($activitiesIds, 'ID');
$activities = ActivityTable::query()
->setSelect(['ID', 'NOTIFY_TYPE', 'NOTIFY_VALUE', 'DEADLINE'])
->whereIn('ID', $activitiesIds)
->fetchAll();
$offsets = ActivityPingOffsetsTable::query()
->addSelect('ACTIVITY_ID')
->addSelect('MAX_OFFSET')
->registerRuntimeField('', new ExpressionField('MAX_OFFSET', 'MAX(OFFSET)'))
->whereIn('ACTIVITY_ID', $activitiesIds)
->setGroup('ACTIVITY_ID')
->fetchAll();
$offsetKeyVal = [];
foreach ($offsets as $offset)
{
$offsetKeyVal[$offset['ACTIVITY_ID']] = $offset['MAX_OFFSET'];
}
foreach ($activities as &$activity)
{
$activity['MAX_OFFSET'] = $offsetKeyVal[$activity['ID']] ?? null;
}
return $activities;
}