/// <inheritdoc cref="IBulkDeduplicationManager.GetDuplicateEntitiesGroups"/> public BulkDuplicatesGroupResponse GetDuplicateEntitiesGroups(string entityName, string[] columns, int clientOffset, int clientCount) { var response = new BulkDuplicatesGroupResponse { Groups = new Collection <BulkEntityClientDuplicatesGroup>() }; int totalCountFromBpm = 0; var offset = clientOffset; var esq = GetDuplicateEntitiesEsq(entityName); var serverToClientColumnNameMap = GetServerToClientColumnNameMap(columns, esq); for (int i = 0; i < MaxFetchPages; i++) { var duplicateRecordGroups = FetchDuplicatesFromService(entityName, offset, clientCount); if (duplicateRecordGroups == null) { break; } var duplicatesCount = duplicateRecordGroups.Sum(x => x.Count()); offset += duplicatesCount; foreach (var duplicateRecords in duplicateRecordGroups) { Guid groupId = duplicateRecords.Key; var duplicateEntities = GetDuplicateEntities(esq, serverToClientColumnNameMap, duplicateRecords.ToList()); var group = response.Groups.Find(x => x.GroupId == groupId); if (group == null) { group = new BulkEntityClientDuplicatesGroup { GroupId = groupId, Rows = new EntityCollection() }; response.Groups.Add(group); } int missingRecords = clientCount - totalCountFromBpm; int skippedRecords = duplicateEntities.Count - missingRecords; totalCountFromBpm += duplicateEntities.Count; response.NextOffset = offset - skippedRecords; group.Rows.AddRange(duplicateEntities.Take(missingRecords)); } if (duplicatesCount < clientCount || totalCountFromBpm >= clientCount) { break; } } if (response.Groups.IsEmpty()) { return(null); } AddIsUniqueColumn(esq); response.RowConfig = QueryExtension.GetColumnConfig(esq, serverToClientColumnNameMap); response.TotalCountRecords = response.Groups.Sum(x => x.Rows.Count); return(response); }
/// <inheritdoc cref="IBulkDeduplicationManager.GetGroupsOfDuplicates"/> public BulkDuplicatesGroupResponse GetGroupsOfDuplicates(string entityName, string[] columns, int offset, int count, int topDuplicatesPerGroup) { var response = new BulkDuplicatesGroupResponse { Groups = new Collection <BulkEntityClientDuplicatesGroup>() }; var esq = GetDuplicateEntitiesEsq(entityName); var serverToClientColumnNameMap = GetServerToClientColumnNameMap(columns, esq); var serviceGroupOffset = offset; var serviceGroupCount = count; for (int i = 0; i < MaxFetchPages; i++) { var duplicateGroupsInfo = FetchGroupOfDuplicatesFromService(entityName, serviceGroupOffset, serviceGroupCount, topDuplicatesPerGroup); foreach (var duplicateGroup in duplicateGroupsInfo) { var duplicateGroupResponse = GetDuplicatesGroupResponse(duplicateGroup, esq, serverToClientColumnNameMap); if (duplicateGroupResponse == null) { continue; } response.Groups.Add(duplicateGroupResponse); } var allRowsFetchedFromService = duplicateGroupsInfo.Count < serviceGroupCount; if (allRowsFetchedFromService) { serviceGroupOffset = -1; break; } serviceGroupOffset += serviceGroupCount; serviceGroupCount = count - response.Groups.Count; var requestedRowsCountFetched = response.Groups.Count >= count; if (requestedRowsCountFetched) { break; } } AddIsUniqueColumn(esq); response.RowConfig = QueryExtension.GetColumnConfig(esq, serverToClientColumnNameMap); response.NextOffset = serviceGroupOffset; return(response); }