Exemple #1
0
        /// <inheritdoc cref="IBulkDeduplicationManager.GetDuplicateEntitiesByGroup"/>
        public BulkEntityClientDuplicatesGroup GetDuplicateEntitiesByGroup(string entityName, string[] columns, Guid groupId, int offset, int count)
        {
            var response = new BulkEntityClientDuplicatesGroup();
            var esq      = GetDuplicateEntitiesEsq(entityName);
            var serverToClientColumnNameMap = GetServerToClientColumnNameMap(columns, esq);
            var duplicates        = FetchDuplicatesByGroupFromService(entityName, groupId, offset, count);
            var duplicateEntities = GetDuplicateEntities(esq, serverToClientColumnNameMap, duplicates);

            response.GroupId = groupId;
            response.Rows    = duplicateEntities;
            return(response);
        }
Exemple #2
0
        /// <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);
        }