diff --git a/BBWY.Server.Business/Statistics/StatisticsBusiness.cs b/BBWY.Server.Business/Statistics/StatisticsBusiness.cs index 2ff5f4c2..37169752 100644 --- a/BBWY.Server.Business/Statistics/StatisticsBusiness.cs +++ b/BBWY.Server.Business/Statistics/StatisticsBusiness.cs @@ -47,10 +47,26 @@ namespace BBWY.Server.Business IList detailList = null; //查询订单 - var orderList = fsql.Select().Where(o => o.ShopId == xingXiangSearchOrderRequest.ShopId) - .Where(o => o.StartTime >= beginTime && o.StartTime <= endTime) - .Where(o => !invalidOrderStateList.Contains(o.OrderState.Value)) - .ToList(); + var orderList = fsql.Select().InnerJoin((o, oc) => o.Id == oc.OrderId) + .Where((o, oc) => o.ShopId == xingXiangSearchOrderRequest.ShopId) + .Where((o, oc) => o.StartTime >= beginTime && o.StartTime <= endTime) + .Where((o, oc) => !invalidOrderStateList.Contains(o.OrderState.Value)) + .WhereIf(xingXiangSearchOrderRequest.SpuList != null && xingXiangSearchOrderRequest.SpuList.Count() > 0, + (o, oc) => fsql.Select().As("osku").Where(osku => xingXiangSearchOrderRequest.SpuList.Contains(osku.ProductId) && osku.OrderId == o.Id).Any()) + .ToList((o, oc) => new Order() + { + Id = o.Id, + FreightPrice = o.FreightPrice, + OrderState = o.OrderState, + OrderTotalPrice = o.OrderTotalPrice, + StartTime = o.StartTime, + StorageType = o.StorageType, + ShopId = o.ShopId, + SDCommissionAmount = oc.SDCommissionAmount, + DeliveryExpressFreight = oc.DeliveryExpressFreight, + PreferentialAmount = oc.PreferentialAmount, + OrderSellerPrice = o.OrderSellerPrice + }); if (orderList.Count() == 0) return null; @@ -73,22 +89,28 @@ namespace BBWY.Server.Business foreach (var group in currentOrderSkuGroups) { var spuId = group.Key; + + var profit = 0M; + var sdCost = 0M; var prodcutAmount = group.Sum(osku => osku.Price * osku.ItemTotal) ?? 0; //货款 + var preferentialAmount = order.PreferentialAmount / skuCount * group.Count(); //该SPU分摊的商家优惠金额 + prodcutAmount -= preferentialAmount; var commissionAmount = prodcutAmount * 0.05M; //该SPU的平台扣点金额 - var freightPriceByUser = order.FreightPrice == 0 ? 0 : order.FreightPrice / skuCount * group.Count(); //该SPU分配的用户承担运费 - + var freightPriceByUser = order.FreightPrice == 0 ? 0 : order.FreightPrice / skuCount * group.Count(); //该SPU分摊的用户承担运费 var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == spuId).ToList(); var purchaseAmount = currentOrderCostDetailList.Count() > 0 ? currentOrderCostDetailList.Sum(ocd => ocd.TotalCost) : 0; var deliveryFreight = currentOrderCostDetailList.Count() > 0 ? currentOrderCostDetailList.Sum(ocd => ocd.DeliveryExpressFreight) : 0; - var profit = 0M; if (order.StorageType != Enums.StorageType.SD) + { profit = prodcutAmount + freightPriceByUser - purchaseAmount - deliveryFreight - commissionAmount; + } else { var sdCommissionAmount = order.SDCommissionAmount.Value / skuCount * group.Count(); - profit = 0 - sdCommissionAmount - commissionAmount - deliveryFreight; - totalSDOrderCost += Math.Abs(profit); + profit = 0; + sdCost = sdCommissionAmount + commissionAmount + order.DeliveryExpressFreight ?? 0M; + totalSDOrderCost += sdCost; } var xxRespose = detailList.FirstOrDefault(xx => xx.Spu == spuId); if (xxRespose == null) @@ -101,7 +123,7 @@ namespace BBWY.Server.Business { xxRespose.SDOrderCount++; xxRespose.SDOrderAmount += prodcutAmount; - xxRespose.SDOrderCost += Math.Abs(profit); + xxRespose.SDOrderCost += sdCost; } } }