/// <summary>
        /// 获取操作功能分页
        /// </summary>
        /// <param name="query">查询对象</param>
        /// <returns></returns>
        IPaging <Operation> GetPaging(IQuery query)
        {
            var operationPaging = operationRepository.GetPaging(query);
            var operationList   = LoadOtherData(operationPaging, query);

            return(Pager.Create <Operation>(operationPaging.Page, operationPaging.PageSize, operationPaging.TotalCount, operationList));
        }
示例#2
0
        /// <summary>
        /// 获取权限分页
        /// </summary>
        /// <param name="query">查询对象</param>
        /// <returns></returns>
        public IPaging <Authority> GetAuthorityPaging(IQuery query)
        {
            var authorityPaging = authRepository.GetPaging(query);
            var authorityList   = LoadOtherObjectData(authorityPaging, query);

            return(Pager.Create <Authority>(authorityPaging.Page, authorityPaging.PageSize, authorityPaging.TotalCount, authorityList));
        }
示例#3
0
        /// <summary>
        /// Query data paging
        /// </summary>
        /// <typeparam name="T">Data type</typeparam>
        /// <param name="command">Command</param>
        /// <returns>Return data paging</returns>
        public async Task <PagingInfo <T> > QueryPagingAsync <T>(ICommand command) where T : BaseEntity <T>, new()
        {
            var servers = GetServers(command);

            VerifyServerProvider(servers.Select(c => c.ServerType));

            #region Single server

            if (servers.Count == 1)
            {
                return(await SingleServerPagingAsync <T>(servers[0], command).ConfigureAwait(false));
            }

            #endregion

            #region Multiple server

            int pageSize = command.Query.PagingInfo.PageSize;
            int page     = command.Query.PagingInfo.Page;
            command.Query.PagingInfo.PageSize = page * pageSize;
            command.Query.PagingInfo.Page     = 1;

            Task <PagingInfo <T> >[] pagingTasks = new Task <PagingInfo <T> > [servers.Count];
            int serverIndex = 0;
            foreach (var server in servers)
            {
                pagingTasks[serverIndex] = SingleServerPagingAsync <T>(server, command);
                serverIndex++;
            }
            var allPagings = await Task.WhenAll(pagingTasks).ConfigureAwait(false);

            IEnumerable <T> datas      = Array.Empty <T>();
            long            totalCount = 0;
            foreach (var paging in allPagings)
            {
                if (paging == null)
                {
                    continue;
                }
                totalCount += paging.TotalCount;
                if (!paging.Items.IsNullOrEmpty())
                {
                    datas = datas.Union(paging.Items);
                }
            }
            if (command.Query != null)
            {
                datas = command.Query.Sort(datas);
            }
            if (datas.Count() > pageSize)
            {
                datas = datas.Skip((page - 1) * pageSize).Take(pageSize);
            }
            command.Query.PagingInfo.PageSize = pageSize;
            command.Query.PagingInfo.Page     = page;
            return(Pager.Create(page, pageSize, totalCount, datas));

            #endregion
        }
示例#4
0
        public void Pager__PageSizeLargerThanItems_Expect1Page_Success()
        {
            var pager = Pager <string> .Create(10, new List <string> {
                "", "", "", ""
            });

            Assert.True(pager.TotalPages == 1);
        }
示例#5
0
        public void Pager_ItemsMatchPageSize_TotalPages1_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", ""
            });

            Assert.True(pager.TotalPages == 1);
        }
示例#6
0
        public void Pager_Create_PagesRemaining_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", "", ""
            });

            Assert.True(pager.PagesRemaining == 2);
        }
示例#7
0
        public void Pager_CurrentPageIsNull_AfterCreate_Success()
        {
            var pager = Pager <string> .Create(pageSize : 3, collection : new List <string> {
                "", "", "", ""
            });

            Assert.Null(pager.CurrentPage);
        }
示例#8
0
        public void Pager__TotalPages2_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", "", ""
            });

            Assert.True(pager.TotalPages == 2);
        }
示例#9
0
        public void Pager__CreatesPartialPage_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", "", ""
            });

            var nextPage = pager.NextPage;

            Assert.True(nextPage.Items.Count == 1);
        }
示例#10
0
        /// <summary>
        /// Query paging with single server
        /// </summary>
        /// <typeparam name="T">Data type</typeparam>
        /// <param name="command">Command</param>
        /// <returns>Return data paging</returns>
        async Task <PagingInfo <T> > SingleServerPagingAsync <T>(DatabaseServer server, ICommand command) where T : BaseEntity <T>, new()
        {
            var             provider = DataManager.GetDatabaseProvider(server.ServerType);
            IEnumerable <T> datas    = await provider.QueryPagingAsync <T>(server, command).ConfigureAwait(false);

            if (datas.IsNullOrEmpty())
            {
                return(Pager.Empty <T>());
            }
            return(Pager.Create(command.Query.PagingInfo.Page, command.Query.PagingInfo.PageSize, datas.ElementAt(0).GetTotalCount(), datas));
        }
示例#11
0
        public void Pager__GetNext_GetNextPageEqualsNextPage_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", "", ""
            });

            var nextPage    = pager.NextPage;
            var getNextPage = pager.GetNextPage();

            Assert.True(nextPage == getNextPage);
        }
示例#12
0
        public void Pager__GetNextOnLastPage_NextPageNull_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", "", ""
            });

            var page1 = pager.GetNextPage();
            var page2 = pager.GetNextPage();

            Assert.Null(pager.NextPage);
        }
        /// <summary>
        /// Get relation data paging
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return relation data paging</returns>
        public virtual async Task <IPaging <Tuple <TFirstModel, TSecondModel> > > ExecuteGetPagingAsync(IQuery query)
        {
            var entityPaging = await repositoryWarehouse.GetPagingAsync(query).ConfigureAwait(false);

            if (entityPaging.IsNullOrEmpty())
            {
                return(Pager.Empty <Tuple <TFirstModel, TSecondModel> >());
            }
            var datas = entityPaging.Select(c => CreateRelationDataByEntity(c));

            return(Pager.Create(entityPaging.Page, entityPaging.PageSize, entityPaging.TotalCount, datas));
        }
示例#14
0
        public void Pager_PreviousPage_Success()
        {
            var pager = Pager <string> .Create(3, new List <string> {
                "", "", "", ""
            });

            var page1    = pager.GetNextPage();
            var page2    = pager.GetNextPage();
            var prevPage = pager.PreviousPage;

            Assert.True(page1 == prevPage);
        }
示例#15
0
        /// <summary>
        /// Get data paging
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data paging</returns>
        public sealed override async Task <IPaging <TModel> > GetPagingAsync(IQuery query)
        {
            var newQuery = RepositoryManager.HandleQueryObjectBeforeExecute(query, QueryUsageScene.Query, AppendQueryCondition);
            var paging   = await GetDataPagingAsync(newQuery).ConfigureAwait(false);

            IEnumerable <TModel> datas = paging;

            QueryCallback(newQuery, true, datas);
            RepositoryEventBus.PublishQuery(GetType(), datas, newQuery, result =>
            {
                QueryEventResult <TModel> queryResult = result as QueryEventResult <TModel>;
                if (queryResult != null)
                {
                    datas = queryResult.Datas;
                }
            });
            RepositoryManager.HandleQueryObjectAfterExecute(query, newQuery, QueryUsageScene.Query);
            return(Pager.Create(paging.Page, paging.PageSize, paging.TotalCount, datas));
        }
示例#16
0
        /// <summary>
        /// Merge paging
        /// </summary>
        /// <typeparam name="TEntity">Entity type</typeparam>
        /// <param name="originalPaging">Original paging</param>
        /// <param name="query">Query object</param>
        /// <returns>Return the newest data paging</returns>
        public static IPaging <TEntity> MergePaging <TEntity>(IPaging <TEntity> originalPaging, IQuery query) where TEntity : BaseEntity <TEntity>, new()
        {
            if (originalPaging == null)
            {
                originalPaging = Pager.Empty <TEntity>();
            }
            var totalCount   = originalPaging.TotalCount;
            var dataCount    = originalPaging.Count();
            var datas        = Merge(originalPaging, query, true);
            var newDataCount = datas.Count;
            var diffCount    = newDataCount - dataCount;

            totalCount += diffCount;
            if (newDataCount > originalPaging.PageSize)
            {
                datas = datas.Take(originalPaging.PageSize).ToList();
            }
            return(Pager.Create <TEntity>(originalPaging.Page, originalPaging.PageSize, totalCount, datas));
        }
示例#17
0
        public void Pager_Create_NullList_PagesRemaining0_Success()
        {
            var pager = Pager <string> .Create(3, null);

            Assert.True(pager.PagesRemaining == 0);
        }
示例#18
0
        public void Pager_Create_NullList_TotalPages0_Success()
        {
            var pager = Pager <string> .Create(3, null);

            Assert.True(pager.TotalPages == 0);
        }
示例#19
0
        /// <summary>
        /// Query data paging
        /// </summary>
        /// <typeparam name="T">Data type</typeparam>
        /// <param name="command">Command</param>
        /// <returns>Return datas</returns>
        internal static async Task <IPaging <T> > QueryPagingAsync <T>(ICommand command) where T : BaseEntity <T>, new()
        {
            if (command.Query?.PagingInfo == null)
            {
                throw new EZNEWException($"Paging information is not set");
            }
            var groupExecutors = GroupCommandByExecutor(new List <ICommand>(1)
            {
                command
            });

            if (groupExecutors == null || groupExecutors.Count <= 0)
            {
                return(Pager.Empty <T>());
            }

            #region Single executor

            if (groupExecutors.Count == 1)
            {
                return(await groupExecutors.First().Value.Item1.QueryPagingAsync <T>(command).ConfigureAwait(false));
            }

            #endregion

            #region Multiple executors

            int pageSize = command.Query.PagingInfo.PageSize;
            int page     = command.Query.PagingInfo.Page;
            command.Query.PagingInfo.PageSize = page * pageSize;
            command.Query.PagingInfo.Page     = 1;

            //Paging task
            Task <IPaging <T> >[] pagingTasks = new Task <IPaging <T> > [groupExecutors.Count];
            var groupIndex = 0;
            foreach (var groupExecutor in groupExecutors)
            {
                pagingTasks[groupIndex] = groupExecutor.Value.Item1.QueryPagingAsync <T>(command);
                groupIndex++;
            }
            var allPagings = await Task.WhenAll(pagingTasks).ConfigureAwait(false);

            IEnumerable <T> datas      = Array.Empty <T>();
            long            totalCount = 0;
            foreach (var paging in allPagings)
            {
                totalCount += paging.TotalCount;
                datas       = datas.Union(paging);
            }
            if (command.Query != null)
            {
                datas = command.Query.Sort(datas);
            }
            if (datas.Count() > pageSize)
            {
                datas = datas.Skip((page - 1) * pageSize).Take(pageSize);
            }
            command.Query.PagingInfo.PageSize = pageSize;
            command.Query.PagingInfo.Page     = page;
            return(Pager.Create(page, pageSize, totalCount, datas));

            #endregion
        }