From f7614b30d3a8ee1266649149b1367fcdb7b2f194 Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Thu, 28 Sep 2023 04:59:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88=EF=BC=8C?= =?UTF-8?q?=E6=89=A3=E5=87=8FSPU/SKU=E9=94=80=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BBWYB.Server.Business/Order/OrderBusiness.cs | 37 +++++++++++++++---- .../Sync/OrderSyncBusiness.cs | 19 ++++++++++ 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index ab48ca4..6afaf58 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -555,6 +555,12 @@ namespace BBWYB.Server.Business public void CancelOrder(CancelOrderRequest request, string mdsToken) { + var order = fsql.Select(request.OrderId).ToOne(); + if (order == null) + throw new BusinessException("订单不存在"); + if (order.OrderState == Enums.OrderState.已取消) + return; + try { opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform).CancelOrder(new OP_CancelOrderRequest() @@ -573,10 +579,33 @@ namespace BBWYB.Server.Business throw new BusinessException(ex.Message); } + var orderSkus = fsql.Select().Where(osku => osku.OrderId == request.OrderId).ToList(); + + IList> updateSpuTotalSaleInfoList = new List>(); + IList> updateSkuTotalSaleInfoList = new List>(); + + var skuGroupsByProductId = orderSkus.GroupBy(osku => osku.ProductId); + foreach (var group in skuGroupsByProductId) + { + var totalItemCount = group.Sum(osku => osku.ItemTotal ?? 0); + foreach (var osku in group) + { + var updateSku = fsql.Update(osku.SkuId).Set(s => s.ItemCount - osku.ItemTotal); + updateSkuTotalSaleInfoList.Add(updateSku); + } + var updateSpu = fsql.Update(group.Key).Set(s => s.ItemCount - totalItemCount); + updateSpuTotalSaleInfoList.Add(updateSpu); + } + + fsql.Transaction(() => { fsql.Update(request.OrderId).Set(o => o.OrderState, Enums.OrderState.已取消).ExecuteAffrows(); fsql.Delete().Where(t => t.OrderId == request.OrderId).ExecuteAffrows(); + foreach (var update in updateSkuTotalSaleInfoList) + update.ExecuteAffrows(); + foreach (var update in updateSpuTotalSaleInfoList) + update.ExecuteAffrows(); }); try @@ -592,14 +621,6 @@ namespace BBWYB.Server.Business } - //var sql = $"update purchaseorderv2 set OrderState=6 where Id='{request.OrderId}'"; - ////取消C端采购单 - //restApiService.SendRequest("https://bbwy.qiyue666.com", - // "/Api/Sql/ExecuteNonQuery", - // new { sql = sql.AESEncrypt() }, - // new Dictionary() { { "Authorization", $"Bearer {mdsToken}" } }, - // HttpMethod.Post); - try { //取消齐库的任务 diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 3bf574c..6b095ac 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -138,6 +138,9 @@ namespace BBWYB.Server.Business.Sync //等待检查sku销量的订单集合 List waitToCheckSkuSaleOrderList = new List(); + IDictionary deductionSkuCountDictionary = new Dictionary(); + IDictionary deductionSpuCountDictionary = new Dictionary(); + #region 同步订单 foreach (var qtOrder in qtOrderList.Items) { @@ -263,6 +266,17 @@ namespace BBWYB.Server.Business.Sync updateOrderState = Enums.OrderState.已取消; if (dbPurchaseTimeLimitTaskList.Any(t => t.OrderId == qtOrder.OrderId)) deleteTimeLimitTaskOrderIdList.Add(qtOrder.OrderId); + + foreach (var qtOrderSku in qtOrder.OrderSkuList) + { + if (!deductionSkuCountDictionary.ContainsKey(qtOrderSku.SkuId)) + deductionSkuCountDictionary.Add(qtOrderSku.SkuId, 0); + deductionSkuCountDictionary[qtOrderSku.SkuId] += qtOrderSku.Quantity; + + if (!deductionSpuCountDictionary.ContainsKey(qtOrderSku.ProductId)) + deductionSpuCountDictionary.Add(qtOrderSku.ProductId, 0); + deductionSpuCountDictionary[qtOrderSku.ProductId] += qtOrderSku.Quantity; + } } #endregion @@ -460,6 +474,11 @@ namespace BBWYB.Server.Business.Sync if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) fsql.Update(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); + foreach (var key in deductionSkuCountDictionary.Keys) + fsql.Update(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); + foreach (var key in deductionSpuCountDictionary.Keys) + fsql.Update(key).Set(s => s.ItemCount - deductionSpuCountDictionary[key]).ExecuteAffrows(); + }); } catch (Exception ex)