diff --git a/modules/EasyAbp.EShop.Baskets/common.props b/modules/EasyAbp.EShop.Baskets/common.props index 0237d014..5a056c65 100644 --- a/modules/EasyAbp.EShop.Baskets/common.props +++ b/modules/EasyAbp.EShop.Baskets/common.props @@ -1,7 +1,7 @@ latest - 0.1.2 + 0.1.3 $(NoWarn);CS1591 true EasyAbp Team diff --git a/modules/EasyAbp.EShop.Payments.WeChatPay/common.props b/modules/EasyAbp.EShop.Payments.WeChatPay/common.props index e69083db..850b730b 100644 --- a/modules/EasyAbp.EShop.Payments.WeChatPay/common.props +++ b/modules/EasyAbp.EShop.Payments.WeChatPay/common.props @@ -1,7 +1,7 @@ latest - 0.1.2 + 0.1.3 $(NoWarn);CS1591 diff --git a/modules/EasyAbp.EShop.Payments/common.props b/modules/EasyAbp.EShop.Payments/common.props index 0237d014..5a056c65 100644 --- a/modules/EasyAbp.EShop.Payments/common.props +++ b/modules/EasyAbp.EShop.Payments/common.props @@ -1,7 +1,7 @@ latest - 0.1.2 + 0.1.3 $(NoWarn);CS1591 true EasyAbp Team diff --git a/modules/EasyAbp.EShop.Products/common.props b/modules/EasyAbp.EShop.Products/common.props index 0237d014..5a056c65 100644 --- a/modules/EasyAbp.EShop.Products/common.props +++ b/modules/EasyAbp.EShop.Products/common.props @@ -1,7 +1,7 @@ latest - 0.1.2 + 0.1.3 $(NoWarn);CS1591 true EasyAbp Team diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/OrderCreatedEventHandler.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/OrderCreatedEventHandler.cs index 9af51b8a..b7dd0462 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/OrderCreatedEventHandler.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/OrderCreatedEventHandler.cs @@ -1,4 +1,6 @@ -using System.Linq; +using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using EasyAbp.EShop.Orders.Orders; using Volo.Abp.DependencyInjection; @@ -34,39 +36,42 @@ namespace EasyAbp.EShop.Products.Products [UnitOfWork(true)] public virtual async Task HandleEventAsync(EntityCreatedEto eventData) { - var uow = _unitOfWorkManager.Current; using (_currentTenant.Change(eventData.Entity.TenantId)) { + var models = new List(); + foreach (var orderLine in eventData.Entity.OrderLines) { var product = await _productRepository.FindAsync(orderLine.ProductId); var productSku = product?.ProductSkus.FirstOrDefault(sku => sku.Id == orderLine.ProductSkuId); - if (productSku == null) + if (productSku == null || product.InventoryStrategy != InventoryStrategy.ReduceAfterPlacing) { - await uow.RollbackAsync(); - await _distributedEventBus.PublishAsync(new ProductInventoryReductionAfterOrderPlacedResultEto - {OrderId = eventData.Entity.Id, IsSuccess = false}); - return; + continue; } - if (product.InventoryStrategy != InventoryStrategy.ReduceAfterPlacing) + if (!await _productManager.IsInventorySufficientAsync(product, productSku, eventData.Entity.StoreId, + orderLine.Quantity)) { - await uow.RollbackAsync(); await _distributedEventBus.PublishAsync(new ProductInventoryReductionAfterOrderPlacedResultEto {OrderId = eventData.Entity.Id, IsSuccess = false}); return; } - if (!await _productManager.TryReduceInventoryAsync(product, productSku, eventData.Entity.StoreId, - orderLine.Quantity)) + models.Add(new ReduceInventoryModel { - await uow.RollbackAsync(); - await _distributedEventBus.PublishAsync(new ProductInventoryReductionAfterOrderPlacedResultEto - {OrderId = eventData.Entity.Id, IsSuccess = false}); - return; - } + Product = product, + ProductSku = productSku, + StoreId = eventData.Entity.StoreId, + Quantity = orderLine.Quantity + }); + } + + foreach (var model in models) + { + await _productManager.TryReduceInventoryAsync(model.Product, model.ProductSku, model.StoreId, + model.Quantity); } await _distributedEventBus.PublishAsync(new ProductInventoryReductionAfterOrderPlacedResultEto @@ -74,4 +79,15 @@ namespace EasyAbp.EShop.Products.Products } } } + + internal class ReduceInventoryModel + { + public Product Product { get; set; } + + public ProductSku ProductSku { get; set; } + + public Guid StoreId { get; set; } + + public int Quantity { get; set; } + } } \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Stores/common.props b/modules/EasyAbp.EShop.Stores/common.props index 0237d014..5a056c65 100644 --- a/modules/EasyAbp.EShop.Stores/common.props +++ b/modules/EasyAbp.EShop.Stores/common.props @@ -1,7 +1,7 @@ latest - 0.1.2 + 0.1.3 $(NoWarn);CS1591 true EasyAbp Team