Browse Source

Fix the bug of `GetInventoryDataAsync` returns null

pull/253/head
gdlcf88 3 years ago
parent
commit
2378425df0
  1. 2
      common.props
  2. 18
      modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/DefaultProductInventoryProvider.cs

2
common.props

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

18
modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/DefaultProductInventoryProvider.cs

@ -56,7 +56,8 @@ namespace EasyAbp.EShop.Products.Products
[UnitOfWork] [UnitOfWork]
public virtual async Task<InventoryDataModel> GetInventoryDataAsync(InventoryQueryModel model) public virtual async Task<InventoryDataModel> GetInventoryDataAsync(InventoryQueryModel model)
{ {
return await _productInventoryRepository.GetInventoryDataAsync(model.ProductSkuId); return await _productInventoryRepository.GetInventoryDataAsync(model.ProductSkuId) ??
new InventoryDataModel();
} }
[UnitOfWork] [UnitOfWork]
@ -78,11 +79,13 @@ namespace EasyAbp.EShop.Products.Products
public virtual async Task<bool> TryIncreaseInventoryAsync(InventoryQueryModel model, int quantity, public virtual async Task<bool> TryIncreaseInventoryAsync(InventoryQueryModel model, int quantity,
bool decreaseSold, bool isFlashSale = false) bool decreaseSold, bool isFlashSale = false)
{ {
await using var handle = await _distributedLock.TryAcquireAsync(await GetLockKeyAsync(model), TimeSpan.FromSeconds(30)); await using var handle =
await _distributedLock.TryAcquireAsync(await GetLockKeyAsync(model), TimeSpan.FromSeconds(30));
if (handle == null) if (handle == null)
{ {
_logger.LogWarning("TryIncreaseInventory failed to acquire lock for product inventory: {TenantId},{ProductId},{ProductSkuId}", _logger.LogWarning(
"TryIncreaseInventory failed to acquire lock for product inventory: {TenantId},{ProductId},{ProductSkuId}",
model.TenantId, model.ProductId, model.ProductSkuId); model.TenantId, model.ProductId, model.ProductSkuId);
return false; return false;
} }
@ -96,11 +99,13 @@ namespace EasyAbp.EShop.Products.Products
public virtual async Task<bool> TryReduceInventoryAsync(InventoryQueryModel model, int quantity, public virtual async Task<bool> TryReduceInventoryAsync(InventoryQueryModel model, int quantity,
bool increaseSold, bool isFlashSale = false) bool increaseSold, bool isFlashSale = false)
{ {
await using var handle = await _distributedLock.TryAcquireAsync(await GetLockKeyAsync(model), TimeSpan.FromSeconds(30)); await using var handle =
await _distributedLock.TryAcquireAsync(await GetLockKeyAsync(model), TimeSpan.FromSeconds(30));
if (handle == null) if (handle == null)
{ {
_logger.LogWarning("TryReduceInventory failed to acquire lock for product inventory: {TenantId},{ProductId},{ProductSkuId}", _logger.LogWarning(
"TryReduceInventory failed to acquire lock for product inventory: {TenantId},{ProductId},{ProductSkuId}",
model.TenantId, model.ProductId, model.ProductSkuId); model.TenantId, model.ProductId, model.ProductSkuId);
return false; return false;
} }
@ -195,7 +200,8 @@ namespace EasyAbp.EShop.Products.Products
protected virtual Task<string> GetLockKeyAsync(InventoryQueryModel model) protected virtual Task<string> GetLockKeyAsync(InventoryQueryModel model)
{ {
return Task.FromResult(string.Format(DefaultProductInventoryLockKeyFormat, model.TenantId, model.ProductId, model.ProductSkuId)); return Task.FromResult(string.Format(DefaultProductInventoryLockKeyFormat, model.TenantId, model.ProductId,
model.ProductSkuId));
} }
} }
} }
Loading…
Cancel
Save