From cc062006fa9daa30a61330e4c1c69c9bdfc15ae7 Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Sun, 12 Jun 2022 23:20:45 +0800 Subject: [PATCH 1/3] Make DisplayOrder effective and items sorted by ASC --- .../ProductCategories/ProductCategoryAppService.cs | 2 ++ .../EasyAbp/EShop/Products/Products/ProductAppService.cs | 7 ++++--- .../EShop/Products/Products/ProductViewAppService.cs | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs index 9b8dd950..a16be254 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs @@ -34,6 +34,8 @@ namespace EasyAbp.EShop.Products.ProductCategories queryable = queryable.Where(x => x.ProductId == input.ProductId); } + queryable = queryable.OrderBy(x => x.DisplayOrder); + return queryable; } diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs index 0f1f3bc6..e6bd3796 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs @@ -61,7 +61,8 @@ namespace EasyAbp.EShop.Products.Products return query .Where(x => x.StoreId == input.StoreId) .WhereIf(!input.ShowHidden, x => !x.IsHidden) - .WhereIf(!input.ShowUnpublished, x => x.IsPublished); + .WhereIf(!input.ShowUnpublished, x => x.IsPublished) + .OrderBy(x => x.DisplayOrder); } protected override Product MapToEntity(CreateUpdateProductDto createInput) @@ -481,12 +482,12 @@ namespace EasyAbp.EShop.Products.Products protected virtual ProductDto SortAttributesAndOptions(ProductDto productDto) { - productDto.ProductAttributes = productDto.ProductAttributes.OrderByDescending(x => x.DisplayOrder).ToList(); + productDto.ProductAttributes = productDto.ProductAttributes.OrderBy(x => x.DisplayOrder).ToList(); foreach (var productAttributeDto in productDto.ProductAttributes) { productAttributeDto.ProductAttributeOptions = productAttributeDto.ProductAttributeOptions - .OrderByDescending(x => x.DisplayOrder).ToList(); + .OrderBy(x => x.DisplayOrder).ToList(); } return productDto; diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs index efd24881..7eb6fde2 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs @@ -51,7 +51,8 @@ namespace EasyAbp.EShop.Products.Products return query .Where(x => x.StoreId == input.StoreId) .WhereIf(!input.ShowHidden, x => !x.IsHidden) - .WhereIf(!input.ShowUnpublished, x => x.IsPublished); + .WhereIf(!input.ShowUnpublished, x => x.IsPublished) + .OrderBy(x => x.DisplayOrder); } public override async Task> GetListAsync(GetProductListInput input) From ffb017973f0332c81ea9cc53791782ce2339082c Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Mon, 13 Jun 2022 12:33:49 +0800 Subject: [PATCH 2/3] Overriding `ApplySorting` methods --- .../ProductCategoryAppService.cs | 19 ++++++++---- .../Products/Products/ProductAppService.cs | 7 ++++- .../Products/ProductViewAppService.cs | 29 ++++++++++++------- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs index a16be254..96431de5 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs @@ -8,11 +8,12 @@ using Volo.Abp.Application.Services; namespace EasyAbp.EShop.Products.ProductCategories { - public class ProductCategoryAppService : ReadOnlyAppService, + public class ProductCategoryAppService : + ReadOnlyAppService, IProductCategoryAppService { protected override string GetListPolicyName { get; set; } = ProductsPermissions.Products.Manage; - + private readonly IProductCategoryRepository _repository; public ProductCategoryAppService(IProductCategoryRepository repository) : base(repository) @@ -20,10 +21,11 @@ namespace EasyAbp.EShop.Products.ProductCategories _repository = repository; } - protected override async Task> CreateFilteredQueryAsync(GetProductCategoryListDto input) + protected override async Task> CreateFilteredQueryAsync( + GetProductCategoryListDto input) { var queryable = await Repository.GetQueryableAsync(); - + if (input.CategoryId.HasValue) { queryable = queryable.Where(x => x.CategoryId == input.CategoryId); @@ -34,11 +36,16 @@ namespace EasyAbp.EShop.Products.ProductCategories queryable = queryable.Where(x => x.ProductId == input.ProductId); } - queryable = queryable.OrderBy(x => x.DisplayOrder); - return queryable; } + protected override IQueryable ApplySorting(IQueryable query, + GetProductCategoryListDto input) + { + return base.ApplySorting(query, input) + .OrderBy(x => x.DisplayOrder); + } + [RemoteService(false)] public override Task GetAsync(Guid id) { diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs index e6bd3796..f5c46c35 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs @@ -61,7 +61,12 @@ namespace EasyAbp.EShop.Products.Products return query .Where(x => x.StoreId == input.StoreId) .WhereIf(!input.ShowHidden, x => !x.IsHidden) - .WhereIf(!input.ShowUnpublished, x => x.IsPublished) + .WhereIf(!input.ShowUnpublished, x => x.IsPublished); + } + + protected override IQueryable ApplySorting(IQueryable query, GetProductListInput input) + { + return base.ApplySorting(query, input) .OrderBy(x => x.DisplayOrder); } diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs index 7eb6fde2..6405d78a 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs @@ -15,7 +15,8 @@ using Volo.Abp.Uow; namespace EasyAbp.EShop.Products.Products { - public class ProductViewAppService : MultiStoreReadOnlyAppService, + public class ProductViewAppService : + MultiStoreReadOnlyAppService, IProductViewAppService { protected override string GetPolicyName { get; set; } = null; @@ -27,7 +28,7 @@ namespace EasyAbp.EShop.Products.Products private readonly IProductManager _productManager; private readonly IProductRepository _productRepository; private readonly IProductViewRepository _repository; - + public ProductViewAppService( IProductViewCacheKeyProvider productViewCacheKeyProvider, IDistributedCache cache, @@ -41,7 +42,7 @@ namespace EasyAbp.EShop.Products.Products _productRepository = productRepository; _repository = repository; } - + protected override async Task> CreateFilteredQueryAsync(GetProductListInput input) { var query = input.CategoryId.HasValue @@ -51,14 +52,20 @@ namespace EasyAbp.EShop.Products.Products return query .Where(x => x.StoreId == input.StoreId) .WhereIf(!input.ShowHidden, x => !x.IsHidden) - .WhereIf(!input.ShowUnpublished, x => x.IsPublished) + .WhereIf(!input.ShowUnpublished, x => x.IsPublished); + } + + protected override IQueryable ApplySorting(IQueryable query, + GetProductListInput input) + { + return base.ApplySorting(query, input) .OrderBy(x => x.DisplayOrder); } public override async Task> GetListAsync(GetProductListInput input) { await CheckGetListPolicyAsync(); - + if (input.ShowHidden || input.ShowUnpublished) { await CheckMultiStorePolicyAsync(input.StoreId, ProductsPermissions.Products.Manage); @@ -68,7 +75,7 @@ namespace EasyAbp.EShop.Products.Products { await BuildStoreProductViewsAsync(input.StoreId); } - + var query = await CreateFilteredQueryAsync(input); var totalCount = await AsyncExecuter.CountAsync(query); @@ -104,7 +111,7 @@ namespace EasyAbp.EShop.Products.Products await BuildStoreProductViewsAsync(productView.StoreId); productView = await GetEntityByIdAsync(id); - + return await MapToGetOutputDtoAsync(productView); } @@ -121,7 +128,7 @@ namespace EasyAbp.EShop.Products.Products var productView = ObjectMapper.Map(product); await FillPriceInfoWithRealPriceAsync(product, productView); - + await _repository.InsertAsync(productView); } @@ -135,7 +142,7 @@ namespace EasyAbp.EShop.Products.Products await SettingProvider.GetOrNullAsync(ProductsSettings.ProductView.CacheDurationSeconds))) }); } - + protected virtual async Task FillPriceInfoWithRealPriceAsync(Product product, ProductView productView) { if (product.ProductSkus.IsNullOrEmpty()) @@ -144,7 +151,7 @@ namespace EasyAbp.EShop.Products.Products } decimal? min = null, max = null; - + foreach (var productSku in product.ProductSkus) { var priceDataModel = await _productManager.GetRealPriceAsync(product, productSku); @@ -163,4 +170,4 @@ namespace EasyAbp.EShop.Products.Products productView.SetPrices(min, max); } } -} +} \ No newline at end of file From 4b927cf68c3466b501bdf6112c04fbca82561c0b Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Mon, 13 Jun 2022 13:48:09 +0800 Subject: [PATCH 3/3] Override `ApplyDefaultSorting` instead of `ApplySorting` --- .../ProductCategories/ProductCategoryAppService.cs | 7 +++---- .../EasyAbp/EShop/Products/Products/ProductAppService.cs | 6 +++--- .../EShop/Products/Products/ProductViewAppService.cs | 7 +++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs index 96431de5..991d7fd3 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductCategories/ProductCategoryAppService.cs @@ -39,11 +39,10 @@ namespace EasyAbp.EShop.Products.ProductCategories return queryable; } - protected override IQueryable ApplySorting(IQueryable query, - GetProductCategoryListDto input) + protected override IQueryable ApplyDefaultSorting(IQueryable query) { - return base.ApplySorting(query, input) - .OrderBy(x => x.DisplayOrder); + return query.OrderBy(x => x.DisplayOrder) + .ThenBy(x => x.Id); } [RemoteService(false)] diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs index f5c46c35..9cc63dd6 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs @@ -64,10 +64,10 @@ namespace EasyAbp.EShop.Products.Products .WhereIf(!input.ShowUnpublished, x => x.IsPublished); } - protected override IQueryable ApplySorting(IQueryable query, GetProductListInput input) + protected override IQueryable ApplyDefaultSorting(IQueryable query) { - return base.ApplySorting(query, input) - .OrderBy(x => x.DisplayOrder); + return query.OrderBy(x => x.DisplayOrder) + .ThenBy(x => x.Id); } protected override Product MapToEntity(CreateUpdateProductDto createInput) diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs index 6405d78a..69a83754 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductViewAppService.cs @@ -55,11 +55,10 @@ namespace EasyAbp.EShop.Products.Products .WhereIf(!input.ShowUnpublished, x => x.IsPublished); } - protected override IQueryable ApplySorting(IQueryable query, - GetProductListInput input) + protected override IQueryable ApplyDefaultSorting(IQueryable query) { - return base.ApplySorting(query, input) - .OrderBy(x => x.DisplayOrder); + return query.OrderBy(x => x.DisplayOrder) + .ThenBy(x => x.Id); } public override async Task> GetListAsync(GetProductListInput input)