From a0cd583b9e2cd0c2f060f41f7f4bc9fca84d585e Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Wed, 16 Nov 2022 02:19:58 +0800 Subject: [PATCH] 1 --- .../OrderSkuSaleDetailSyncController.cs | 51 +++++ .../Sync/OrderSkuSaleDetailSyncBusiness.cs | 180 +++++++++++++++++- .../Sync/OrderSyncBusiness.cs | 5 +- .../Db/Statistics/SkuDailySalesDetails.cs | 5 + 4 files changed, 234 insertions(+), 7 deletions(-) create mode 100644 BBWY.Server.API/Controllers/OrderSkuSaleDetailSyncController.cs diff --git a/BBWY.Server.API/Controllers/OrderSkuSaleDetailSyncController.cs b/BBWY.Server.API/Controllers/OrderSkuSaleDetailSyncController.cs new file mode 100644 index 00000000..efba99bc --- /dev/null +++ b/BBWY.Server.API/Controllers/OrderSkuSaleDetailSyncController.cs @@ -0,0 +1,51 @@ +using BBWY.Server.Business; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; + +namespace BBWY.Server.API.Controllers +{ + + public class OrderSkuSaleDetailSyncController : BaseApiController + { + private OrderSkuSaleDetailSyncBusiness orderSkuSaleDetailSyncBusiness; + + public OrderSkuSaleDetailSyncController(IHttpContextAccessor httpContextAccessor, OrderSkuSaleDetailSyncBusiness orderSkuSaleDetailSyncBusiness) : base(httpContextAccessor) + { + this.orderSkuSaleDetailSyncBusiness = orderSkuSaleDetailSyncBusiness; + } + + /// + /// 同步指定店铺指定日期的sku销量 + /// + /// + /// + /// + [HttpGet] + public void SyncOrderSkuSaleDetail([FromQuery] long shopId, [FromQuery] DateTime startDate, [FromQuery] DateTime endDate) + { + orderSkuSaleDetailSyncBusiness.SyncOrderSkuSaleDetail(shopId, startDate, endDate); + } + + /// + /// 同步全店指定日期的sku销量 + /// + /// + /// + [HttpGet] + public void SyncAllShopOrderSkuSaleDetail(DateTime startDate, DateTime endDate) + { + orderSkuSaleDetailSyncBusiness.SyncAllShopOrderSkuSaleDetail(startDate, endDate); + } + + /// + /// 同步全店昨日的sku销量 + /// + [HttpGet] + public void SyncAllShopOrderSkuSaleDetailYesterDay() + { + var yesterDate = DateTime.Now.Date.AddDays(-1); + orderSkuSaleDetailSyncBusiness.SyncAllShopOrderSkuSaleDetail(yesterDate, yesterDate); + } + } +} diff --git a/BBWY.Server.Business/Sync/OrderSkuSaleDetailSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSkuSaleDetailSyncBusiness.cs index d90dadd8..5503b1c3 100644 --- a/BBWY.Server.Business/Sync/OrderSkuSaleDetailSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/OrderSkuSaleDetailSyncBusiness.cs @@ -1,11 +1,14 @@ -using System; +using BBWY.Common.Models; +using BBWY.Server.Model.Db; +using System; using System.Collections.Generic; +using System.Linq; using System.Text; using Yitter.IdGenerator; namespace BBWY.Server.Business { - public class OrderSkuSaleDetailSyncBusiness : BaseBusiness + public class OrderSkuSaleDetailSyncBusiness : BaseBusiness, IDenpendency { public OrderSkuSaleDetailSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) { @@ -13,17 +16,182 @@ namespace BBWY.Server.Business public void SyncOrderSkuSaleDetail(long shopId, DateTime startDate, DateTime endDate) { - StatisticsOrderSkuSaleDaily(shopId, startDate, endDate); + StatisticsOrderSkuSaleDetail(shopId, startDate, endDate); } public void SyncAllShopOrderSkuSaleDetail(DateTime startDate, DateTime endDate) { - StatisticsOrderSkuSaleDaily(null, startDate, endDate); + StatisticsOrderSkuSaleDetail(null, startDate, endDate); } - private void StatisticsOrderSkuSaleDaily(long? shopId, DateTime startDate, DateTime endDate) + private void StatisticsOrderSkuSaleDetail(long? shopId, DateTime startDate, DateTime endDate) { - + var endTime = endDate.Date.AddDays(1).AddSeconds(-1); + fsql.Delete().WhereIf(shopId != null, s => s.ShopId == shopId) + .Where(s => s.Date >= startDate && s.Date <= endDate) + .ExecuteAffrows(); + + List insertSkuDailySalesDetailList = new List(); + + var oskuGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .WhereIf(shopId != null, (osku, o) => o.ShopId == shopId) + .Where((osku, o) => o.StartTime >= startDate && o.StartTime <= endTime) + .Where((osku, o) => o.StorageType != Model.Enums.StorageType.SD) + .Where((osku, o) => o.OrderState != Model.Enums.OrderState.已取消) + .GroupBy((osku, o) => new + { + o.Platform, + o.ShopId, + osku.ProductId, + osku.SkuId, + osku.Price, + o.StartTime.Value.Date + }) + .ToList(g => new SkuDailySalesDetail + { + Platform = g.Key.Platform, + ShopId = g.Key.ShopId, + Spu = g.Key.ProductId, + Sku = g.Key.SkuId, + Date = g.Key.Date, + Price = g.Key.Price, + Amount = g.Sum(g.Value.Item1.Price * g.Value.Item1.ItemTotal), + ItemTotal = (int)g.Sum(g.Value.Item1.ItemTotal) + }); + + var cancelOskuGroups = fsql.Select() + .InnerJoin((osku, o) => osku.OrderId == o.Id) + .WhereIf(shopId != null, (osku, o) => o.ShopId == shopId) + .Where((osku, o) => o.ModifyTime >= startDate && o.ModifyTime <= endTime) + .Where((osku, o) => o.StorageType != Model.Enums.StorageType.SD) + .Where((osku, o) => o.OrderState == Model.Enums.OrderState.已取消) + .GroupBy((osku, o) => new + { + o.Platform, + o.ShopId, + osku.ProductId, + osku.SkuId, + osku.Price, + o.ModifyTime.Value.Date + }) + .ToList(g => new SkuDailySalesDetail + { + Platform = g.Key.Platform, + ShopId = g.Key.ShopId, + Spu = g.Key.ProductId, + Sku = g.Key.SkuId, + Date = g.Key.Date, + Price = g.Key.Price, + Amount = 0, + ItemTotal = 0, + CancelItemTotal = (int)g.Sum(g.Value.Item1.ItemTotal) + }); + + var giftOskuGroups = fsql.Select() + .InnerJoin((gos, go) => gos.GiftOrderId == go.Id) + .WhereIf(shopId != null, (gos, go) => go.ShopId == shopId) + .Where((gos, go) => go.StartTime >= startDate && go.StartTime <= endTime) + .Where((gos, go) => go.OrderState != Model.Enums.OrderState.已取消) + .GroupBy((gos, go) => new + { + go.Platform, + go.ShopId, + gos.ProductId, + gos.SkuId, + gos.Price, + go.StartTime.Value.Date + }) + .ToList(g => new SkuDailySalesDetail + { + Platform = g.Key.Platform, + ShopId = g.Key.ShopId, + Spu = g.Key.ProductId, + Sku = g.Key.SkuId, + Date = g.Key.Date, + Price = g.Key.Price, + Amount = g.Sum(g.Value.Item1.Price * g.Value.Item1.ItemTotal), + ItemTotal = (int)g.Sum(g.Value.Item1.ItemTotal) + }); + + var cancelGiftOskuGroups = fsql.Select() + .InnerJoin((gos, go) => gos.GiftOrderId == go.Id) + .WhereIf(shopId != null, (gos, go) => go.ShopId == shopId) + .Where((gos, go) => go.ModifyTime >= startDate && go.ModifyTime <= endTime) + .Where((gos, go) => go.OrderState == Model.Enums.OrderState.已取消) + .GroupBy((gos, go) => new + { + go.Platform, + go.ShopId, + gos.ProductId, + gos.SkuId, + gos.Price, + go.ModifyTime.Value.Date + }) + .ToList(g => new SkuDailySalesDetail + { + Platform = g.Key.Platform, + ShopId = g.Key.ShopId, + Spu = g.Key.ProductId, + Sku = g.Key.SkuId, + Date = g.Key.Date, + Price = g.Key.Price, + Amount = 0, + ItemTotal = 0, + CancelItemTotal = (int)g.Sum(g.Value.Item1.ItemTotal) + }); + + insertSkuDailySalesDetailList.AddRange(oskuGroups); + + + foreach (var canceloSkuGroup in cancelOskuGroups) + { + var skuDaily = insertSkuDailySalesDetailList.FirstOrDefault(s => s.ShopId == canceloSkuGroup.ShopId && + s.Date == canceloSkuGroup.Date && + s.Sku == canceloSkuGroup.Sku); + if (skuDaily != null) + skuDaily.CancelItemTotal = canceloSkuGroup.CancelItemTotal; + else + insertSkuDailySalesDetailList.Add(canceloSkuGroup); + } + + foreach (var giftOskuGroup in giftOskuGroups) + { + var skuDaily = insertSkuDailySalesDetailList.FirstOrDefault(s => s.ShopId == giftOskuGroup.ShopId && + s.Date == giftOskuGroup.Date && + s.Sku == giftOskuGroup.Sku); + if (skuDaily != null) + { + skuDaily.ItemTotal += giftOskuGroup.ItemTotal; + skuDaily.Amount += giftOskuGroup.Amount; + } + else + insertSkuDailySalesDetailList.Add(giftOskuGroup); + } + + + foreach (var cancelGiftOskuGroup in cancelGiftOskuGroups) + { + var skuDaily = insertSkuDailySalesDetailList.FirstOrDefault(s => s.ShopId == cancelGiftOskuGroup.ShopId && + s.Date == cancelGiftOskuGroup.Date && + s.Sku == cancelGiftOskuGroup.Sku); + if (skuDaily != null) + skuDaily.CancelItemTotal = cancelGiftOskuGroup.CancelItemTotal; + else + insertSkuDailySalesDetailList.Add(cancelGiftOskuGroup); + } + + + if (insertSkuDailySalesDetailList.Count() > 0) + { + foreach (var skuDaily in insertSkuDailySalesDetailList) + { + skuDaily.Id = idGenerator.NewLong(); + skuDaily.IsGift = skuDaily.Price == 0M; + skuDaily.CreateTime = DateTime.Now; + } + fsql.Insert(insertSkuDailySalesDetailList).ExecuteAffrows(); + } } } } diff --git a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs index cbecd338..f583cffd 100644 --- a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs @@ -199,6 +199,9 @@ namespace BBWY.Server.Business var newGiftOrderJArray = giftOrderJArray.Where(o => exceptIds.Contains(o.Value("orderId"))); foreach (var orderJToken in newGiftOrderJArray) { + var orderState = ConvertOrderState(orderJToken); + if (orderState == Enums.OrderState.待付款) + continue; var orderStartTime = orderJToken.Value("orderStartTime"); var modifyTime = orderJToken.Value("modified"); insertGiftOrderList.Add(new GiftOrder() @@ -209,7 +212,7 @@ namespace BBWY.Server.Business ShopId = shopId, StartTime = orderStartTime, ModifyTime = modifyTime, - OrderState = ConvertOrderState(orderJToken) + OrderState = orderState }); var itemInfoList = orderJToken["itemInfoList"] as JArray; diff --git a/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs b/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs index 45e98eb7..37d3b707 100644 --- a/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs +++ b/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs @@ -32,6 +32,11 @@ namespace BBWY.Server.Model.Db public int ItemTotal { get; set; } = 0; + /// + /// 取消件数 + /// + public int CancelItemTotal { get; set; } = 0; + /// /// 订单数 ///