From f73ec896174782bfb7e6b547b0d0e63fb18687f6 Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Mon, 18 Apr 2022 17:58:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/OrderController.cs | 12 +++ BBWY.Server.Business/Order/OrderBusiness.cs | 78 +++++++++++++++++++ .../Statistics/StatisticsBusiness.cs | 3 +- .../Dto/Response/Order/ExportOrderResponse.cs | 70 +++++++++++++++++ 4 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs diff --git a/BBWY.Server.API/Controllers/OrderController.cs b/BBWY.Server.API/Controllers/OrderController.cs index e9a875a2..e9043da4 100644 --- a/BBWY.Server.API/Controllers/OrderController.cs +++ b/BBWY.Server.API/Controllers/OrderController.cs @@ -2,6 +2,7 @@ using BBWY.Server.Model.Dto; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; using System.Threading.Tasks; namespace BBWY.Server.API.Controllers @@ -27,6 +28,17 @@ namespace BBWY.Server.API.Controllers return orderBusiness.GetOrderList(searchOrderRequest); } + /// + /// 订单导出 + /// + /// + /// + [HttpPost] + public IList ExportOrderList([FromBody] SearchOrderRequest searchOrderRequest) + { + return orderBusiness.ExportOrderList(searchOrderRequest); + } + /// /// 获取单个订单详情 /// diff --git a/BBWY.Server.Business/Order/OrderBusiness.cs b/BBWY.Server.Business/Order/OrderBusiness.cs index 1a3a7cd4..fb15ef70 100644 --- a/BBWY.Server.Business/Order/OrderBusiness.cs +++ b/BBWY.Server.Business/Order/OrderBusiness.cs @@ -168,6 +168,84 @@ namespace BBWY.Server.Business return response; } + public IList ExportOrderList(SearchOrderRequest searchOrderRequest) + { + if (searchOrderRequest.OrderState == Enums.OrderState.已取消) + searchOrderRequest.ExcludeCanceled = false; + if (searchOrderRequest.EndDate != null) + searchOrderRequest.EndDate = searchOrderRequest.EndDate.Value.Date.AddDays(1).AddSeconds(-1); + + var select = fsql.Select().LeftJoin((o, ocs, oct, ods) => o.Id == ocs.OrderId) + .LeftJoin((o, ocs, oct, ods) => o.Id == oct.OrderId) + .LeftJoin((o, ocs, oct, ods) => o.Id == ods.OrderId); + + if (!string.IsNullOrEmpty(searchOrderRequest.OrderId)) + { + select = select.Where((o, ocs, oct, ods) => o.Id == searchOrderRequest.OrderId); + } + else + { + if (!string.IsNullOrEmpty(searchOrderRequest.Sku) || !string.IsNullOrEmpty(searchOrderRequest.ProductNo)) + { + var childSelect = fsql.Select().As("osku") + .WhereIf(string.IsNullOrEmpty(searchOrderRequest.Sku) == false, osku => osku.SkuId == searchOrderRequest.Sku) + .WhereIf(string.IsNullOrEmpty(searchOrderRequest.ProductNo) == false, osku => osku.ProductNo == searchOrderRequest.ProductNo); + select = select.Where((o, ocs, oct, ods) => childSelect.Where(osku => osku.OrderId == o.Id).Any()); + } + + select = select.WhereIf(searchOrderRequest.OrderState != null, (o, ocs, oct, ods) => o.OrderState == searchOrderRequest.OrderState) + .WhereIf(searchOrderRequest.StartDate != null, (o, ocs, oct, ods) => o.StartTime >= searchOrderRequest.StartDate) + .WhereIf(searchOrderRequest.EndDate != null, (o, ocs, oct, ods) => o.StartTime <= searchOrderRequest.EndDate) + .WhereIf(searchOrderRequest.OnlyDF, (o, ocs, oct, ods) => o.StorageType == Enums.StorageType.代发) + .WhereIf(searchOrderRequest.ExcludeCanceled, (o, ocs, oct, ods) => o.OrderState != Enums.OrderState.已取消) + .WhereIf(searchOrderRequest.ExcludeSD && !searchOrderRequest.OnlyDF, (o, ocs, oct, ods) => o.StorageType == null || o.StorageType != Enums.StorageType.SD) + .WhereIf(string.IsNullOrEmpty(searchOrderRequest.ContactName) == false, (o, ocs, oct, ods) => ocs.ContactName == searchOrderRequest.ContactName) + .WhereIf(string.IsNullOrEmpty(searchOrderRequest.Waybill) == false, (o, ocs, oct, ods) => o.WaybillNo == searchOrderRequest.Waybill); + } + + select = select.Where((o, ocs, oct, ods) => o.ShopId == searchOrderRequest.ShopId) + .OrderByDescending((o, ocs, oct, ods) => o.StartTime); + + var orderSourceList = select.ToList((o, ocs, oct, ods) => new ExportOrderResponse() + { + OrderId = o.Id, + FreightPrice = o.FreightPrice, + OrderTotalPrice = o.OrderTotalPrice, + OrderStartTime = o.StartTime.Value, + StorageType = o.StorageType, + ConsigneeStr = ocs.ContactName + "|" + ocs.Mobile + "|" + ocs.Province + ocs.City + ocs.County + ocs.Address, + DeliveryExpressFreight = oct.DeliveryExpressFreight, + PlatformCommissionAmount = oct.PlatformCommissionAmount, + Profit = oct.Profit, + TotalCost = oct.SDCommissionAmount + oct.PlatformCommissionAmount + oct.PurchaseAmount + oct.DeliveryExpressFreight, + PurchaseOrderIds = ods.PurchaseOrderId, + OrderState = o.OrderState.Value + }); + + var orderIdList = orderSourceList.Select(o => o.OrderId).ToList(); + var orderSkuList = fsql.Select().Where(osku => orderIdList.Contains(osku.OrderId)).ToList(); + var orderCostDetailGroup = fsql.Select().Where(ocd => orderIdList.Contains(ocd.OrderId)).GroupBy(ocd => ocd.OrderId).ToList(g => new + { + OrderId = g.Key, + SkuAmount = g.Sum(g.Value.SkuAmount), + FirstFreight = g.Sum(g.Value.FirstFreight), + StorageAmount = g.Sum(g.Value.StorageAmount) + }); + + foreach (var order in orderSourceList) + { + var statistics = orderCostDetailGroup.FirstOrDefault(g => g.OrderId == order.OrderId); + order.FirstFreight = statistics?.FirstFreight ?? 0M; + order.PurchaseSkuAmount = statistics?.SkuAmount ?? 0M; + order.StorageAmount = statistics?.StorageAmount ?? 0M; + order.SkuIds = string.Join("|", orderSkuList.Where(osku => osku.OrderId == order.OrderId)); + order.ProfitRatio = order.TotalCost == 0 ? 0 : Math.Round(order.Profit / order.TotalCost * 100, 2); + } + + return orderSourceList; + + } + public OrderResponse GetOrderById(string orderId) { var order = fsql.Select().LeftJoin((o, ocs, oct, ods) => o.Id == ocs.OrderId) diff --git a/BBWY.Server.Business/Statistics/StatisticsBusiness.cs b/BBWY.Server.Business/Statistics/StatisticsBusiness.cs index a4d27314..9549e86b 100644 --- a/BBWY.Server.Business/Statistics/StatisticsBusiness.cs +++ b/BBWY.Server.Business/Statistics/StatisticsBusiness.cs @@ -91,9 +91,10 @@ namespace BBWY.Server.Business xxRespose.Profit += profit; if (order.StorageType == Enums.StorageType.SD) { + var sdCommissionAmount = order.SDCommissionAmount.Value / skuCount * group.Count(); xxRespose.SDOrderCount++; xxRespose.SDOrderAmount += procutAmount; - xxRespose.SDOrderCost += purchaseAmount + deliveryFreight + commissionAmount; + xxRespose.SDOrderCost += purchaseAmount + deliveryFreight + commissionAmount + sdCommissionAmount; } } } diff --git a/BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs b/BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs new file mode 100644 index 00000000..398d00e1 --- /dev/null +++ b/BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWY.Server.Model.Dto +{ + public class ExportOrderResponse + { + public string OrderId { get; set; } + + public DateTime OrderStartTime { get; set; } + + public string SkuIds { get; set; } + + /// + /// 代发订单号 + /// + public string PurchaseOrderIds { get; set; } + + /// + /// 订单总额 + /// + public decimal OrderTotalPrice { get; set; } + + /// + /// 采购金额 + /// + public decimal PurchaseSkuAmount { get; set; } + + /// + /// 头程费用 + /// + public decimal FirstFreight { get; set; } + + /// + /// 仓储费 + /// + public decimal StorageAmount { get; set; } + + /// + /// 发货快递费 + /// + public decimal DeliveryExpressFreight { get; set; } + + /// + /// 平台扣点金额 + /// + public decimal PlatformCommissionAmount { get; set; } + + /// + /// 补差金额(用户支付) + /// + public decimal FreightPrice { get; set; } + + /// + /// 总成本 + /// + public decimal TotalCost { get; set; } + + public decimal Profit { get; set; } + + public decimal ProfitRatio { get; set; } + + public string ConsigneeStr { get; set; } + + public Enums.StorageType? StorageType { get; set; } + + public Enums.OrderState OrderState { get; set; } + } +}