diff --git a/BBWY.Server.API/Controllers/OrderController.cs b/BBWY.Server.API/Controllers/OrderController.cs index d5590c07..5d9bdb61 100644 --- a/BBWY.Server.API/Controllers/OrderController.cs +++ b/BBWY.Server.API/Controllers/OrderController.cs @@ -144,5 +144,27 @@ namespace BBWY.Server.API.Controllers { return orderBusiness.SDGroupPullOrder(request); } + + /// + /// 查询订单SKU列表 + /// + /// + /// + [HttpPost] + public ExportOrderSkuListResponse QueryOrderSkuList([FromBody] QueryOrderSkuRequest request) + { + return orderBusiness.QueryOrderSkuList(request); + } + + /// + /// 导出订单SKU列表 + /// + /// + /// + [HttpPost] + public IList ExportOrderSkuList([FromBody] ExportOrderSkuRequest request) + { + return orderBusiness.ExportOrderSkuList(request); + } } } diff --git a/BBWY.Server.Business/Order/OrderBusiness.cs b/BBWY.Server.Business/Order/OrderBusiness.cs index 59f0c485..870349cf 100644 --- a/BBWY.Server.Business/Order/OrderBusiness.cs +++ b/BBWY.Server.Business/Order/OrderBusiness.cs @@ -33,6 +33,9 @@ namespace BBWY.Server.Business private Lazy freeSqlMultiDBManagerLazy; private FreeSqlMultiDBManager freeSqlMultiDBManager => freeSqlMultiDBManagerLazy.Value; + private Lazy venderBusinessLazy; + private VenderBusiness venderBusiness => venderBusinessLazy.Value; + private IMemoryCache memoryCache; private static TimeSpan sdGroupExpirationTimeSpan = TimeSpan.FromMinutes(20); @@ -48,6 +51,7 @@ namespace BBWY.Server.Business this.memoryCache = memoryCache; freeSqlMultiDBManagerLazy = new Lazy(() => serviceProvider.GetService()); productBusinessLazy = new Lazy(() => serviceProvider.GetService()); + venderBusinessLazy = new Lazy(() => serviceProvider.GetService()); } private ISelect GetOrderListQueryConditions(SearchOrderRequest searchOrderRequest) @@ -1102,5 +1106,81 @@ namespace BBWY.Server.Business } return orderResponse; } + + + private ISelect GetQueryOrderSkuListConditions(ExportOrderSkuRequest request) + { + var select = fsql.Select() + .InnerJoin((osku, o, ocd, po, p) => osku.OrderId == o.Id) + .InnerJoin((osku, o, ocd, po, p) => osku.OrderId == ocd.OrderId && osku.SkuId == ocd.SkuId) + .InnerJoin((osku, o, ocd, po, p) => ocd.PurchaseOrderPKId == po.Id) + .LeftJoin((osku, o, ocd, po, p) => osku.ProductId == p.Id) + .WhereIf(request.ShopIds != null && request.ShopIds.Count() > 0, (osku, o, ocd, po, p) => request.ShopIds.Contains(o.ShopId)) + .WhereIf(request.PurchasePlatform != null, (osku, o, ocd, po, p) => po.PurchasePlatform == request.PurchasePlatform) + .Where((osku, o, ocd, po, p) => o.StartTime >= request.StartTime && + o.StartTime <= request.EndTime && + o.OrderState != Enums.OrderState.已取消) + .OrderByDescending((osku, o, ocd, po, p) => o.StartTime); + return select; + } + + private Expression> GetQueryOrderSkuListField() + { + return (osku, o, ocd, po, p) => new ExportOrderSkuResponse() + { + ItemTotal = osku.ItemTotal, + OrderId = osku.OrderId, + PurchaseFreight = ocd.PurchaseFreight, + PurchaseSkuAmount = ocd.SkuAmount, + ShopId = o.ShopId, + Sku = osku.SkuId, + SkuPrice = osku.Price, + Spu = osku.ProductId, + SpuName = p.Title, + StartTime = o.StartTime, + StorageType = o.StorageType + }; + } + + public ExportOrderSkuListResponse QueryOrderSkuList(QueryOrderSkuRequest request) + { + request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1); + var select = GetQueryOrderSkuListConditions(request); + var list = select.Count(out long count).Page(request.PageIndex, request.PageSize).ToList(GetQueryOrderSkuListField()); + + if (list.Count() > 0) + { + var shops = venderBusiness.GetShopList(); + foreach (var item in list) + { + var shopId = item.ShopId.ToString(); + item.ShopName = shops.Where(s => s.ShopId == shopId).FirstOrDefault()?.ShopName; + } + } + + return new ExportOrderSkuListResponse() + { + Count = count, + ItemList = list + }; + } + + public IList ExportOrderSkuList(ExportOrderSkuRequest request) + { + request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1); + var select = GetQueryOrderSkuListConditions(request); + var list = select.ToList(GetQueryOrderSkuListField()); + + if (list.Count() > 0) + { + var shops = venderBusiness.GetShopList(); + foreach (var item in list) + { + var shopId = item.ShopId.ToString(); + item.ShopName = shops.Where(s => s.ShopId == shopId).FirstOrDefault()?.ShopName; + } + } + return list; + } } } diff --git a/BBWY.Server.Model/Dto/Request/Order/QueryOrderSkuRequest.cs b/BBWY.Server.Model/Dto/Request/Order/QueryOrderSkuRequest.cs new file mode 100644 index 00000000..b013c54f --- /dev/null +++ b/BBWY.Server.Model/Dto/Request/Order/QueryOrderSkuRequest.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace BBWY.Server.Model.Dto +{ + public class QueryOrderSkuRequest : ExportOrderSkuRequest + { + public int PageIndex { get; set; } + + public int PageSize { get; set; } + } + + public class ExportOrderSkuRequest + { + public List ShopIds { get; set; } + + public Enums.Platform? PurchasePlatform { get; set; } + + public DateTime StartTime { get; set; } + + public DateTime EndTime { get; set; } + } +} diff --git a/BBWY.Server.Model/Dto/Response/Order/ExportOrderSkuResponse.cs b/BBWY.Server.Model/Dto/Response/Order/ExportOrderSkuResponse.cs new file mode 100644 index 00000000..a0d779e6 --- /dev/null +++ b/BBWY.Server.Model/Dto/Response/Order/ExportOrderSkuResponse.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace BBWY.Server.Model.Dto +{ + public class ExportOrderSkuResponse + { + public string OrderId { get; set; } + + public DateTime? StartTime { get; set; } + + public long ShopId { get; set; } + + public string ShopName { get; set; } + + public string Spu { get; set; } + + public string Sku { get; set; } + + public Enums.StorageType? StorageType { get; set; } + + public decimal? PurchaseSkuAmount { get; set; } + + public decimal? PurchaseFreight { get; set; } + + public decimal? SkuPrice { get; set; } + + public int? ItemTotal { get; set; } + + public string SpuName { get; set; } + } + + public class ExportOrderSkuListResponse + { + public long Count { get; set; } + + public IList ItemList { get; set; } + } +}