예제 #1
0
        public async Task <IActionResult> GetPagedStocks([FromQuery] StockDtoParameters parameters)
        {
            var stocks = await _stockRepository.GetPagedStocksAsync(parameters);

            var previousPageLink = stocks.HasPrevious
                                ? CreateStockResourceUri(parameters, ResourceUnType.PreviousPage)
                                : null;

            var nextPageLink = stocks.HasNext
                                ? CreateStockResourceUri(parameters, ResourceUnType.NextPage)
                                : null;

            var paginationMetdata = new
            {
                totalCount  = stocks.TotalCount,
                pageSize    = stocks.PageSize,
                currentPage = stocks.CurrentPage,
                totalPage   = stocks.TotalPages,
                previousPageLink,
                nextPageLink
            };

            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(
                                     paginationMetdata, new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            }));
            var stockDto = _mapper.Map <IEnumerable <StockDto> >(stocks);

            return(Ok(stockDto));
        }
예제 #2
0
        //[HttpPost]
        //public async Task<IActionResult> CreateStock([FromBody] StockAddOrUpdateDto stock)
        //{
        //    //这里是否只转换成了Stock,而对其StorageProducts属性包含的属性没有做映射?
        //    var entity = _mapper.Map<Stock>(stock);
        //    _stockRepository.AddStock(entity);

        //    //入库时同时对库存进行操作
        //    foreach (var storageProductAddOrUpdateDto in stock.StorageProducts)
        //    {
        //        _stockRepository.StockIn(storageProductAddOrUpdateDto);
        //    }

        //    var save = _stockRepository.SaveAsync();
        //    var returnDto = _mapper.Map<StockDto>(entity);
        //    return CreatedAtRoute(nameof(GetStock), new { stockId = returnDto.Id }, returnDto);
        //}

        private string CreateStockResourceUri(StockDtoParameters parameters,
                                              ResourceUnType type)
        {
            switch (type)
            {
            case ResourceUnType.PreviousPage:     //上一页
                return(Url.Link(
                           nameof(GetPagedStocks),
                           new
                {
                    pageNumber = parameters.PageNumber - 1,
                    pageSize = parameters.PageSize,
                    stockNum = parameters.ProductName,
                    searchTerm = parameters.SearchTerm
                }));

            case ResourceUnType.NextPage:     //下一页
                return(Url.Link(
                           nameof(GetPagedStocks),
                           new
                {
                    pageNumber = parameters.PageNumber + 1,
                    pageSize = parameters.PageSize,
                    stockNum = parameters.ProductName,
                    searchTerm = parameters.SearchTerm
                }));

            default:     //当前页
                return(Url.Link(
                           nameof(GetPagedStocks),
                           new
                {
                    pageNumber = parameters.PageNumber,
                    pageSize = parameters.PageSize,
                    stockNum = parameters.ProductName,
                    searchTerm = parameters.SearchTerm
                }));
            }
        }
예제 #3
0
        public async Task <PagedList <Stock> > GetPagedStocksAsync(StockDtoParameters parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }
            var querryExpression = _context.Stocks as IQueryable <Stock>;

            //StorageListDtoParameters中的StorageListNum查询参数
            if (!String.IsNullOrWhiteSpace(parameters.ProductName))
            {
                parameters.ProductName = parameters.ProductName.Trim();
                querryExpression       = querryExpression.Where(x => x.ProductName.Contains(parameters.ProductName));
            }
            //StorageListDtoParameters中的SearchTerm查询参数
            if (!String.IsNullOrWhiteSpace(parameters.SearchTerm))
            {
                parameters.SearchTerm = parameters.SearchTerm.Trim();
                querryExpression      = querryExpression.Where(x =>
                                                               x.ProductSpecification.Contains(parameters.SearchTerm));
            }
            return(await PagedList <Stock> .CreateAsync(querryExpression, parameters.PageNumber, parameters.PageSize));
        }