- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/posting/segmentdatabuilder.php
- Класс: BitrixSenderPostingSegmentDataBuilder
- Вызов: SegmentDataBuilder::updateCounters
private function updateCounters(array $rowsDataCounter)
{
if (!Locker::lock(self::SEGMENT_LOCK_KEY, $this->groupId))
{
return;
}
$counter = GroupCounterTable::getList([
'select' => [
'GROUP_ID', 'TYPE_ID', 'CNT'
],
'filter' => [
'=GROUP_ID' => $this->groupId
],
]);
while ($item = $counter->fetch())
{
if (!isset($rowsDataCounter[$item['GROUP_ID']][$item['TYPE_ID']]))
{
$rowsDataCounter[$item['GROUP_ID']][$item['TYPE_ID']] = $item['CNT'];
}
$rowsDataCounter[$item['GROUP_ID']][$item['TYPE_ID']] += $item['CNT'];
}
GroupCounterTable::deleteByGroupId($this->groupId);
foreach ($rowsDataCounter as $groupId => $dataCounter)
{
foreach ($dataCounter as $typeId => $count)
{
GroupCounterTable::add(array(
'GROUP_ID' => $groupId,
'TYPE_ID' => $typeId,
'CNT' => $count,
));
}
}
Locker::unlock(self::SEGMENT_LOCK_KEY, $this->groupId);
$groupState = $this->getCurrentGroupState();
if (!$groupState)
{
return;
}
$counter = new ConnectorDataCounter($rowsDataCounter);
if (CModule::IncludeModule('pull'))
{
CPullWatch::AddToStack(
self::FILTER_COUNTER_TAG,
[
'module_id' => 'sender',
'command' => 'updateFilterCounter',
'params' => [
'groupId' => $this->groupId,
'filterId' => $this->filterId,
'count' => $counter->getArray(),
'state' => $groupState['STATE'],
'completed' => (int)$groupState['STATE'] === GroupStateTable::STATES['COMPLETED']
],
]
);
}
}