Exemplo n.º 1
0
        /// <summary>
        /// 收款统计
        /// </summary>
        /// <returns></returns>
        public BuyStatisticsResult GetBuyStatisticsResults(BuyStatisticsRequest request)
        {
            var list = Da.GetBuyStatisticsResults(request);

            var total  = new BuyStatisticsModel();
            var result = new BuyStatisticsResult()
            {
                Rows  = list,
                Total = total,
            };

            if (list.Count == 0)
            {
                return(result);
            }

            total.ShipFeight = list.Sum(p => p.ShipFeight);
            total.ShipFee    = list.Sum(p => p.ShipFee);
            total.Discount   = list.Sum(p => p.Discount);
            total.Amount     = list.Sum(p => p.Amount);
            total.Product    = list.Sum(p => p.Product);
            total.PayTotal   = list.Sum(p => p.PayTotal);

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 收款统计
        /// </summary>
        /// <returns></returns>
        public List <BuyStatisticsModel> GetBuyStatisticsResults(BuyStatisticsRequest request)
        {
            var param = new
            {
            };
            var paramUser = request.UserId.HasValue
                    ? (object)new
            {
                UserId = request.UserId.Value,
            }
                    : param;

            //订单
            var orderAsynic = Task.Run(() =>
            {
                var list = GetList <BuyOrder>(paramUser);
                return(list.Where(p => p.Status == (int)BuyOrderStatusEnum.StockInPay && p.PayFinishDate >= request.BeginDatetime.Date && p.PayFinishDate < request.EndDatetime.Date.AddDays(1)).Select(p => new BuyStatisticsTemp()
                {
                    BuyOrderId = p.BuyOrderId,
                    CurrencyRate = p.CurrencyRate,
                    BuyOrderNumber = p.BuyOrderNumber,
                    UserId = p.UserId,
                    ShipFeight = p.ShipFeight,
                    ShipFee = p.ShipFee,
                    Discount = p.Discount,
                    DateTime = p.PayFinishDate,
                }).ToList());
            });
            //产品
            var productAsynic = Task.Run(() =>
            {
                var list = GetList <BuyOrderProduct>(paramUser);
                return(list.GroupBy(p => new { p.BuyOrderId }, (p, q) => new BuyStatisticsCount()
                {
                    BuyOrderId = p.BuyOrderId,
                    Amount = q.Sum(g => g.Price * g.Qty),
                }).ToList());
            });
            //付款
            var payAsynic = Task.Run(() =>
            {
                var list = GetList <BuyPay>(param);
                return(list.GroupBy(p => new { p.BuyOrderId }, (p, q) => new BuyStatisticsCount()
                {
                    BuyOrderId = p.BuyOrderId,
                    Amount = q.Sum(g => g.CurrencyRate * g.Amount),
                }).ToList());
            });

            Task.WaitAll(orderAsynic, productAsynic, payAsynic);
            var orders = orderAsynic.Result;

            if (orders.Count == 0)
            {
                return(new List <BuyStatisticsModel>());
            }

            var products = productAsynic.Result;
            var pays     = payAsynic.Result;

            var userAsynic = GetListByBulkAsync <User>(new
            {
                UserId = orders.Select(p => p.UserId).ToList()
            });

            //产品
            orders.Join(products, p => p.BuyOrderId, p => p.BuyOrderId, (p, q) =>
            {
                p.Product = q.Amount;
                return(p);
            })
            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            .ToList();
            //付款
            orders.Join(pays, p => p.BuyOrderId, p => p.BuyOrderId, (p, q) =>
            {
                p.PayTotal = q.Amount;
                return(p);
            })
            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            .ToList();

            Task.WaitAll(userAsynic);
            var users = userAsynic.Result;

            var result = new List <BuyStatisticsModel>();

            foreach (var item in orders)
            {
                var m = new BuyStatisticsModel()
                {
                    UserId         = item.UserId,
                    BuyOrderId     = item.BuyOrderId,
                    BuyOrderNumber = item.BuyOrderNumber,
                    UserName       = users.Find(p => p.UserId == item.UserId)?.UserNickName,

                    ShipFeight = item.CurrencyRate * item.ShipFeight,
                    ShipFee    = item.CurrencyRate * item.ShipFee,
                    Discount   = item.CurrencyRate * item.Discount,
                    DateTime   = item.DateTime,
                    Product    = item.CurrencyRate * item.Product,

                    PayTotal = item.PayTotal,
                };

                //预估费用
                m.Amount = m.Product + m.ShipFeight + m.ShipFee - m.Discount;

                result.Add(m);
            }

            return(result.OrderBy(p => p.DateTime).ToList());
        }