...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/agent/activity/synccountabledataagent.php
- Класс: Bitrix\Crm\Agent\Activity\SyncCountableDataAgent
- Вызов: SyncCountableDataAgent::getCountableActivityList
private function getCountableActivityList(int $lastId, int $limit): array { $data = EntityCountableActivityTable::query() ->setSelect([ 'ACTIVITY_ID', ]) ->where('ACTIVITY_ID', '>', $lastId) ->setLimit($limit) ->setOrder(['ACTIVITY_ID' => 'ASC']) ->setGroup(['ACTIVITY_ID']) ->fetchAll() ; $activityIds = array_column($data, 'ACTIVITY_ID'); if (empty($activityIds)) { return []; } $activityIds = array_unique($activityIds); sort($activityIds); $activitiesData = []; $activitiesDeadlinesIterator = ActivityTable::query() ->whereIn('ID', $activityIds) ->setSelect(['COMPLETED', 'ID', 'DEADLINE', 'RESPONSIBLE_ID']) ->exec(); while ($activity = $activitiesDeadlinesIterator->fetch()) { $activitiesData[$activity['ID']] = [ 'COMPLETED' => ($activity['COMPLETED'] === 'Y'), 'DEADLINE' => $activity['DEADLINE'], 'RESPONSIBLE_ID' => $activity['RESPONSIBLE_ID'], ]; } $incomingChannelActivityIds = array_column( IncomingChannelTable::query() ->setSelect([ 'ACTIVITY_ID', ]) ->whereIn('ACTIVITY_ID', $activityIds) ->fetchAll(), 'ACTIVITY_ID' ); $result = []; foreach ($activityIds as $activityId) { $result[] = [ 'ID' => $activityId, 'DELETED' => !array_key_exists($activityId, $activitiesData), 'COMPLETED' => (bool)$activitiesData[$activityId]['COMPLETED'], 'DEADLINE' => $activitiesData[$activityId]['DEADLINE'] ?? null, 'RESPONSIBLE_ID' => $activitiesData[$activityId]['RESPONSIBLE_ID'] ?? null, 'IS_INCOMING_CHANNEL' => in_array($activityId, $incomingChannelActivityIds, false) ? 'Y' : 'N' ]; } return $result; }