...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/agent/duplicate/volatile/cleaner.php
- Класс: Bitrix\Crm\Agent\Duplicate\Volatile\Cleaner
- Вызов: Cleaner::processStep
protected function processStep(): bool { $result = false; // Prefpare filter $entityTypeIds = DuplicateVolatileCriterion::getSupportedEntityTypes(); $volatileTypeIds = DuplicateVolatileCriterion::getAllSupportedDedupeTypes(); $activeTypeIds = []; $activeEntityTypeIds = []; foreach (TypeInfo::getInstance()->get() as $typeInfo) { if ($typeInfo['ACTIVE'] === 'Y') { $activeTypeIds[] = $typeInfo['ID']; $activeEntityTypeIds[] = $typeInfo['ENTITY_TYPE_ID']; } } $inactiveTypeIds = array_diff($volatileTypeIds, $activeTypeIds); $filter = [ 'LOGIC' => 'OR', ]; foreach ($inactiveTypeIds as $volatileTypeId) { $filter[] = [ '=TYPE_ID' => $volatileTypeId, '@ENTITY_TYPE_ID' => $entityTypeIds, ]; } foreach ($activeTypeIds as $index => $volatileTypeId) { if (in_array($activeEntityTypeIds[$index], $entityTypeIds, true)) { $entityTypeIdsToDelete = array_diff($entityTypeIds, [$activeEntityTypeIds[$index]]); } else { $entityTypeIdsToDelete = $entityTypeIds; } if (!empty($entityTypeIdsToDelete)) { $filter[] = [ '=TYPE_ID' => $volatileTypeId, '@ENTITY_TYPE_ID' => $entityTypeIdsToDelete, ]; } } $limit = static::ITEM_LIMIT; if (count($filter) > 1) { // Cleaning hashes $res = DuplicateEntityMatchHashTable::getList( [ 'select' => [ 'ENTITY_ID', 'ENTITY_TYPE_ID', 'TYPE_ID', 'MATCH_HASH', 'SCOPE', ], 'filter' => $filter, 'limit' => $limit, ] ); if (is_object($res)) { while ($row = $res->fetch()) { $result = true; DuplicateEntityMatchHashTable::delete( [ 'ENTITY_ID' => (int)$row['ENTITY_ID'], 'ENTITY_TYPE_ID' => (int)$row['ENTITY_TYPE_ID'], 'TYPE_ID' => (int)$row['TYPE_ID'], 'MATCH_HASH' => $row['MATCH_HASH'], 'SCOPE' => $row['SCOPE'], ] ); } } // Cleaning match codes $res = DuplicateVolatileMatchCodeTable::getList( [ 'select' => ['ID'], 'filter' => $filter, 'limit' => $limit, ] ); if (is_object($res)) { while ($row = $res->fetch()) { $result = true; DuplicateVolatileMatchCodeTable::delete((int)$row['ID']); } } } return $result; }