Browse Source

Improved OrderCreatedEventHandler

pull/49/head
gdlcf88 6 years ago
parent
commit
a16c670b99
  1. 2
      modules/EasyAbp.EShop.Baskets/common.props
  2. 2
      modules/EasyAbp.EShop.Payments.WeChatPay/common.props
  3. 2
      modules/EasyAbp.EShop.Payments/common.props
  4. 2
      modules/EasyAbp.EShop.Products/common.props
  5. 48
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/OrderCreatedEventHandler.cs
  6. 2
      modules/EasyAbp.EShop.Stores/common.props

2
modules/EasyAbp.EShop.Baskets/common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.2</Version>
<Version>0.1.3</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>EasyAbp Team</Authors>

2
modules/EasyAbp.EShop.Payments.WeChatPay/common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.2</Version>
<Version>0.1.3</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
</PropertyGroup>

2
modules/EasyAbp.EShop.Payments/common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.2</Version>
<Version>0.1.3</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>EasyAbp Team</Authors>

2
modules/EasyAbp.EShop.Products/common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.2</Version>
<Version>0.1.3</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>EasyAbp Team</Authors>

48
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<OrderEto> eventData)
{
var uow = _unitOfWorkManager.Current;
using (_currentTenant.Change(eventData.Entity.TenantId))
{
var models = new List<ReduceInventoryModel>();
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; }
}
}

2
modules/EasyAbp.EShop.Stores/common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.2</Version>
<Version>0.1.3</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>EasyAbp Team</Authors>

Loading…
Cancel
Save