Ejemplo n.º 1
0
        /// <summary>
        /// 获取数据列表
        /// </summary>
        /// <returns></returns>
        public async Task <ActionResult> List(BigProdNumStateEnum?state)
        {
            GridRequest request = new GridRequest(Request);
            Expression <Func <Product, bool> > predicate = FilterHelper.GetExpression <Product>(request.FilterGroup);
            var count = 0;

            var data = await Task.Run(() =>
            {
                var strWeb  = ConfigurationHelper.GetAppSetting("WebUrl");
                var config  = _oppContract.GetConfig();
                var current = DateTime.Now;

                var bigProdNumStatDic = _oppContract.GetOnlinePurchaseBigProdNumState();
                // 有效期采购单下的款号
                var query = _oppContract.OnlinePurchaseProducts
                            .Where(w => w.IsEnabled && !w.IsDeleted)
                            .Where(x => x.StartDate <= current && x.EndDate >= current)
                            .SelectMany(x => x.OnlinePurchaseProductItems.Where(i => !i.IsDeleted && i.IsEnabled));
                // 款号过滤
                if (state.HasValue)
                {
                    var bigNums = bigProdNumStatDic.Where(i => i.Value == state.Value).Select(i => i.Key);
                    query       = query.Where(i => bigNums.Contains(i.BigProdNum));
                }

                var bigProdNums = query.Select(i => i.BigProdNum).ToArray();


                // 根据款号查询货号信息
                var list = _productContract.Products.Where(p => !p.IsDeleted && p.IsEnabled)
                           .Where(p => bigProdNums.Contains(p.BigProdNum))
                           .GroupBy(p => p.BigProdNum)
                           .Select(g => g.FirstOrDefault())
                           .Where <Product, int>(predicate, request.PageCondition, out count)
                           .Select(m => new
                {
                    m.Id,
                    ProductName = m.ProductOriginNumber.ProductName,
                    m.BigProdNum,
                    ThumbnailPath = m.ThumbnailPath ?? m.ProductOriginNumber.ThumbnailPath
                })
                           .ToList()
                           .Select(m => new
                {
                    m.Id,
                    ThumbnailPath = string.IsNullOrEmpty(m.ThumbnailPath) ? string.Empty : strWeb + m.ThumbnailPath,
                    ProductName   = m.ProductName,
                    m.BigProdNum,
                    State = bigProdNumStatDic[m.BigProdNum].ToString()
                }).ToList();
                return(new GridData <object>(list, count, request.RequestInfo));
            });

            return(Json(data, JsonRequestBehavior.AllowGet));
        }