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)