From f13d2ddd63761f17ed9563a8a53d8f99a80f569c Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Mon, 23 May 2022 02:29:56 +0800 Subject: [PATCH] Fix the bug with creating the wrong ProductInventory entity at SKU creation --- .../ProductInventoryAppService.cs | 13 +++++++++++++ .../Products/ProductSku/CreateModal.cshtml.cs | 8 +++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductInventories/ProductInventoryAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductInventories/ProductInventoryAppService.cs index 3b63397f..3d595c87 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductInventories/ProductInventoryAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductInventories/ProductInventoryAppService.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Authorization; using System; using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Entities; namespace EasyAbp.EShop.Products.ProductInventories { @@ -32,6 +33,13 @@ namespace EasyAbp.EShop.Products.ProductInventories if (productInventory == null) { + var product = await _productRepository.GetAsync(productId); + + if (!product.ProductSkus.Exists(x => x.Id == productSkuId)) + { + throw new EntityNotFoundException(typeof(ProductSku), productSkuId); + } + productInventory = new ProductInventory(GuidGenerator.Create(), CurrentTenant.Id, productId, productSkuId, 0, 0); @@ -45,6 +53,11 @@ namespace EasyAbp.EShop.Products.ProductInventories { var product = await _productRepository.GetAsync(input.ProductId); + if (!product.ProductSkus.Exists(x => x.Id == input.ProductSkuId)) + { + throw new EntityNotFoundException(typeof(ProductSku), input.ProductSkuId); + } + await AuthorizationService.CheckMultiStorePolicyAsync(product.StoreId, ProductsPermissions.ProductInventory.Update, ProductsPermissions.ProductInventory.CrossStore); diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml.cs index 27131c88..55fae06e 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/ProductSku/CreateModal.cshtml.cs @@ -71,12 +71,14 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.ProductSku createDto.ProductDetailId = detail.Id; } - var skuDto = await _productAppService.CreateSkuAsync(ProductId, createDto); + var product = await _productAppService.CreateSkuAsync(ProductId, createDto); + var productSku = product.ProductSkus + .Single(x => !x.AttributeOptionIds.Except(createDto.AttributeOptionIds).Any()); await _productInventoryAppService.UpdateAsync(new UpdateProductInventoryDto { - ProductId = ProductId, - ProductSkuId = skuDto.Id, + ProductId = product.Id, + ProductSkuId = productSku.Id, ChangedInventory = ProductSku.Inventory });