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; }
+ }
+}