diff --git a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs index f6bf4a49..2309d966 100644 --- a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs @@ -163,11 +163,55 @@ namespace BBWY.Server.Business private void SyncJDOrder(JArray orderTokenJArray, long shopId, string relayAPIHost, string appKey, string appSecret, string appToken, decimal platformCommissionRatio) { - var orderTokenList = orderTokenJArray.Where(o => o.Value("orderTotalPrice") != 0); + #region 数据库操作 + List insertOrderList = new List(); + List insertOrderConsigneeList = new List(); + List insertOrderCostList = new List(); + List insertOrderCostDetailList = new List(); + List insertOrderSkuList = new List(); + List insertOrderCouponList = new List(); + List insertSkuDailySaleDetailList = new List(); + + IList> updateOrderList = new List>(); + IList> updatePurchaseOrderList = new List>(); + IList> updateSkuDailySalesDetailList = new List>(); + + IDictionary> skuDailySalesDetailDictionary = new Dictionary>(); + #endregion + + #region 赠品 + var giftOrderJArray = orderTokenJArray.Where(o => o.Value("orderTotalPrice") == 0M); + if (giftOrderJArray.Count() > 0) + { + var giftOrderIds = giftOrderJArray.Select(orderJToken => orderJToken.Value("orderId")).ToArray(); + var dbGiftOrderIds = fsql.Select(giftOrderIds).ToList(o => o.Id); + var exceptIds = giftOrderIds.Except(dbGiftOrderIds); + if (exceptIds.Count() > 0) + { + var newGiftOrderJArray = giftOrderJArray.Where(o => exceptIds.Contains(o.Value("orderId"))); + foreach(var orderJToken in newGiftOrderJArray) + { + var orderStartTime = orderJToken.Value("orderStartTime"); + var itemInfoList = orderJToken["itemInfoList"] as JArray; + foreach (var orderSkuJToken in itemInfoList) + { + var itemTotal = orderSkuJToken.Value("itemTotal"); + var jdPrice = orderSkuJToken.Value("jdPrice"); + var wareId = orderSkuJToken.Value("wareId"); + var skuId = orderSkuJToken.Value("skuId"); + + CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, orderStartTime, shopId, skuId, wareId, jdPrice, itemTotal); + } + } + } + } + #endregion - var interfaceOrderIdList = orderTokenList.Select(orderJToken => orderJToken.Value("orderId")); - var interfaceCanceledOrderIdList = orderTokenList.Where(orderJToken => orderJToken.Value("orderState").Equals("TRADE_CANCELED")) - .Select(orderJToken => orderJToken.Value("orderId")); //接口查询结果中取消状态的订单Id + var noGiftOrderList = orderTokenJArray.Where(o => o.Value("orderTotalPrice") != 0M); + + var interfaceOrderIdList = noGiftOrderList.Select(orderJToken => orderJToken.Value("orderId")); + var interfaceCanceledOrderIdList = noGiftOrderList.Where(orderJToken => orderJToken.Value("orderState").Equals("TRADE_CANCELED")) + .Select(orderJToken => orderJToken.Value("orderId")); //接口查询结果中取消状态的订单Id var dbOrderList = fsql.Select().Where(o => interfaceOrderIdList.Contains(o.Id)).ToList(o => new Order() { @@ -187,7 +231,7 @@ namespace BBWY.Server.Business } var orderSkuIds = new List(); - foreach (var orderJToken in orderTokenList) + foreach (var orderJToken in noGiftOrderList) { var itemInfoList = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value("jdPrice") != 0M); foreach (var josku in itemInfoList) @@ -200,23 +244,7 @@ namespace BBWY.Server.Business var dbPurchaseOrderList = fsql.Select().Where(po => po.RemainingQuantity != 0 && orderSkuIds.Contains(po.SkuId)).ToList(); //数据库采购单 orderSkuIds.Clear(); - #region 数据库操作 - List insertOrderList = new List(); - List insertOrderConsigneeList = new List(); - List insertOrderCostList = new List(); - List insertOrderCostDetailList = new List(); - List insertOrderSkuList = new List(); - List insertOrderCouponList = new List(); - List insertSkuDailySaleDetailList = new List(); - - IList> updateOrderList = new List>(); - IList> updatePurchaseOrderList = new List>(); - IList> updateSkuDailySalesDetailList = new List>(); - - IDictionary> skuDailySalesDetailDictionary = new Dictionary>(); - #endregion - - foreach (var orderJToken in orderTokenList) + foreach (var orderJToken in noGiftOrderList) { var orderId = orderJToken.Value("orderId"); var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId); @@ -278,45 +306,33 @@ namespace BBWY.Server.Business insertOrderList.Add(dbOrder); #region OrderSku - var itemInfoList = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value("jdPrice") != 0M); + var itemInfoList = orderJToken["itemInfoList"] as JArray; foreach (var orderSkuJToken in itemInfoList) { - var osku = new OrderSku() - { - Id = idGenerator.NewLong(), - ItemTotal = orderSkuJToken.Value("itemTotal"), - Price = orderSkuJToken.Value("jdPrice"), - ProductId = orderSkuJToken.Value("wareId"), - Title = orderSkuJToken.Value("skuName").SimplifySkuName(), - ProductNo = orderSkuJToken.Value("productNo"), - CreateTime = DateTime.Now, - OrderId = orderId, - SkuId = orderSkuJToken.Value("skuId") - }; - insertOrderSkuList.Add(osku); - - if (!skuDailySalesDetailDictionary.TryGetValue(dbOrder.StartTime.Value, out List skuDailySalesDetailList)) - { - skuDailySalesDetailList = new List(); - skuDailySalesDetailDictionary.Add(dbOrder.StartTime.Value, skuDailySalesDetailList); - } - var skuDailySalesDetail = skuDailySalesDetailList.FirstOrDefault(s => s.Sku == osku.SkuId); - if (skuDailySalesDetail == null) + var itemTotal = orderSkuJToken.Value("itemTotal"); + var jdPrice = orderSkuJToken.Value("jdPrice"); + var wareId = orderSkuJToken.Value("wareId"); + var skuId = orderSkuJToken.Value("skuId"); + + if (orderSkuJToken.Value("jdPrice") != 0M) { - skuDailySalesDetail = new SkuDailySalesDetail() + var osku = new OrderSku() { - ShopId = shopId, - Spu = osku.ProductId, - Sku = osku.SkuId, - Platform = Enums.Platform.京东, - Price = osku.Price, - Date = dbOrder.StartTime.Value + Id = idGenerator.NewLong(), + ItemTotal = itemTotal, + Price = jdPrice, + ProductId = wareId, + Title = orderSkuJToken.Value("skuName").SimplifySkuName(), + ProductNo = orderSkuJToken.Value("productNo"), + CreateTime = DateTime.Now, + OrderId = orderId, + SkuId = skuId }; - skuDailySalesDetailList.Add(skuDailySalesDetail); + insertOrderSkuList.Add(osku); } - skuDailySalesDetail.Amount += osku.Price.Value * osku.ItemTotal.Value; - skuDailySalesDetail.ItemTotal += osku.ItemTotal.Value; - skuDailySalesDetail.OrderCount++; + + CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, dbOrder.StartTime.Value, shopId, skuId, wareId, jdPrice, itemTotal); + } #endregion } @@ -731,5 +747,49 @@ namespace BBWY.Server.Business Task.Factory.StartNew(() => SyncOrder(shop, string.Empty, isAuto: true), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler); } } + + /// + /// 累计 + /// + /// + /// + /// + /// + /// + /// + /// + private void CumulativeSkuDailySalesDetail(IDictionary> skuDailySalesDetailDictionary, + DateTime orderStartTime, + long shopId, + string skuId, + string spuId, + decimal price, + int itemTotal) + { + var startDate = orderStartTime.Date; + if (!skuDailySalesDetailDictionary.TryGetValue(startDate, out List skuDailySalesDetailList)) + { + skuDailySalesDetailList = new List(); + skuDailySalesDetailDictionary.Add(orderStartTime, skuDailySalesDetailList); + } + var skuDailySalesDetail = skuDailySalesDetailList.FirstOrDefault(s => s.Sku == skuId); + if (skuDailySalesDetail == null) + { + skuDailySalesDetail = new SkuDailySalesDetail() + { + ShopId = shopId, + Spu = spuId, + Sku = skuId, + Platform = Enums.Platform.京东, + Price = price, + Date = startDate, + IsGift = price == 0M + }; + skuDailySalesDetailList.Add(skuDailySalesDetail); + } + skuDailySalesDetail.Amount += price * itemTotal; + skuDailySalesDetail.ItemTotal += itemTotal; + skuDailySalesDetail.OrderCount++; + } } } diff --git a/BBWY.Server.Model/Db/Order/GiftOrder.cs b/BBWY.Server.Model/Db/Order/GiftOrder.cs new file mode 100644 index 00000000..34354519 --- /dev/null +++ b/BBWY.Server.Model/Db/Order/GiftOrder.cs @@ -0,0 +1,27 @@ +using FreeSql.DataAnnotations; +using System; + +namespace BBWY.Server.Model.Db +{ + + [Table(Name = "giftorder", DisableSyncStructure = true)] + public partial class Giftorder { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + + public int? Platform { get; set; } + + + public long ShopId { get; set; } + + [Column(DbType = "datetime")] + public DateTime? StartTime { get; set; } + + } + +} diff --git a/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs b/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs index 8c1df88f..45e98eb7 100644 --- a/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs +++ b/BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs @@ -56,6 +56,9 @@ namespace BBWY.Server.Model.Db [Column(StringLength = 50)] public string Spu { get; set; } + [Column(DbType = "bit")] + public bool IsGift { get; set; } + } }