diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 3dad87f..5dda27e 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -90,21 +90,33 @@ namespace BBWYB.Server.Business.Sync var qtOrderIdList = qtOrderList.Items.Select(qto => qto.OrderId).ToList(); var dbOrderList = fsql.Select(qtOrderIdList).ToList(); - //采购限时任务列表 + var payedQTOrderIdList = qtOrderList.Items.Where(qto => qto.IsPay).Select(qto => qto.OrderId).ToList(); + var payedQTSpuIdList = qtOrderList.Items.Where(qto => qto.IsPay).SelectMany(qto => qto.OrderSkuList).Select(qtos => qtos.ProductId).Distinct().ToList(); + + //限时任务列表 var dbPurchaseTimeLimitTaskList = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务 && payedQTOrderIdList.Contains(t.OrderId)).ToList(); + //现有sku销量 + var dbSkuTotalSakeInfoList = fsql.Select().Where(s => s.ShopId == shopId && s.IsEnabled == true && payedQTSpuIdList.Contains(s.ProductId)).ToList(); + + #region DB Operation List insertOrderList = new List(); List insertOrderSkuList = new List(); List insertOrderConsigneeList = new List(); List insertTimeLimitTaskList = new List(); List deleteTimeLimitTaskOrderIdList = new List(); - List> updateOrderList = new List>(); + List insertSkuTotalSaleInfoList = new List(); + IList updateSkuTotalSaleInfoList = new List(); + #endregion + //等待检查sku销量的订单集合 + List waitToCheckSkuSaleOrderList = new List(); + #region 同步订单 foreach (var qtOrder in qtOrderList.Items) { var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == qtOrder.OrderId); @@ -184,10 +196,10 @@ namespace BBWYB.Server.Business.Sync ProductId = qtOrderSku.ProductId, BelongSkuId = belongSkus?.FirstOrDefault(j => j.Value("SkuId") == qtOrderSku.SkuId)?.Value("BelongSkuId") ?? string.Empty, InPackAmount = qtOrderSku.PackAmount, - BuyerPayFreight = qtOrderSku.FreightAmount + BuyerPayFreight = qtOrderSku.FreightAmount, + IsNeedOptimization = 0 }); } - //收货人 insertOrderConsigneeList.Add(new OrderConsignee() { @@ -202,19 +214,26 @@ namespace BBWYB.Server.Business.Sync TelePhone = qtOrder.Consignee.Mobile, Town = qtOrder.Consignee.Town }); + + if (qtOrder.IsPay && !waitToCheckSkuSaleOrderList.Any(x => x.OrderId == qtOrder.OrderId)) + waitToCheckSkuSaleOrderList.Add(qtOrder); } else { #region 订单状态脱离拳探 只处理付款和取消 Enums.OrderState? updateOrderState = null; - if (orderState == Enums.OrderState.待付款 && dbOrder.OrderState!=Enums.OrderState.待付款) + if (orderState == Enums.OrderState.待付款 && dbOrder.OrderState != Enums.OrderState.待付款) { //dbOrder.OrderState = Enums.OrderState.待付款; updateOrderState = Enums.OrderState.待付款; } - if (dbOrder.OrderState == Enums.OrderState.待付款 && orderState != Enums.OrderState.待付款) + if (dbOrder.OrderState == Enums.OrderState.待付款 && orderState != Enums.OrderState.待付款 && orderState != Enums.OrderState.已取消) + { updateOrderState = Enums.OrderState.等待采购; + if (!waitToCheckSkuSaleOrderList.Any(x => x.OrderId == qtOrder.OrderId)) + waitToCheckSkuSaleOrderList.Add(qtOrder); + } if (dbOrder.OrderState != Enums.OrderState.已取消 && orderState == Enums.OrderState.已取消) { @@ -244,7 +263,46 @@ namespace BBWYB.Server.Business.Sync updateOrderList.Add(update); } } + + if (!qtOrder.IsPay) + continue; + } + #endregion + + #region 统计sku销量 + foreach (var qtOrder in waitToCheckSkuSaleOrderList) + { + foreach (var qtOrderSku in qtOrder.OrderSkuList) + { + var skuTotalSaleInfo = dbSkuTotalSakeInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); + if (skuTotalSaleInfo == null) + { + skuTotalSaleInfo = insertSkuTotalSaleInfoList.FirstOrDefault(s => s.SkuId == qtOrderSku.SkuId); + if (skuTotalSaleInfo == null) + { + skuTotalSaleInfo = new SkuTotalSaleInfo() + { + SkuId = qtOrderSku.SkuId, + CreateTime = DateTime.Now, + IsEnabled = true, + ItemCount = 0, + LastOptimizationItemCount = 0, + LastOptimizationTime = null, + ProductId = qtOrderSku.ProductId, + ShopId = shopId, + UpdateTime = DateTime.Now + }; + insertSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + } + } + else if (!updateSkuTotalSaleInfoList.Any(s => s.SkuId == qtOrderSku.SkuId)) + { + updateSkuTotalSaleInfoList.Add(skuTotalSaleInfo); + } + skuTotalSaleInfo.ItemCount += qtOrderSku.Quantity; + } } + #endregion CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); @@ -268,6 +326,8 @@ namespace BBWYB.Server.Business.Sync if (deleteTimeLimitTaskOrderIdList.Count() > 0) fsql.Delete().Where(t => deleteTimeLimitTaskOrderIdList.Contains(t.OrderId)).ExecuteAffrows(); + + }); } catch (Exception ex) diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs index 95b13d2..f526230 100644 --- a/BBWYB.Server.Model/Db/Order/OrderSku.cs +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -102,6 +102,12 @@ namespace BBWYB.Server.Model.Db /// [Column(DbType = "bit", IsNullable = true)] public bool? IsCheck { get; set; } + + /// + /// 是否需要议价 是=1 否=0 + /// + [Column(DbType = "int(1)", IsNullable = true)] + public int? IsNeedOptimization { get; set; } = 0; } } diff --git a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs index 09f8db9..4358d0d 100644 --- a/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs +++ b/BBWYB.Server.Model/Db/Product/Skutotalsaleinfo.cs @@ -33,12 +33,6 @@ namespace BBWYB.Server.Model.Db public bool? IsEnabled { get; set; } = false; - /// - /// 是否需要议价 - /// - - public bool? IsNeedOptimization { get; set; } = false; - /// /// 销量,销售件数 ///