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;
+
///
/// 订单数
///