From aa717d0c2a319c7b1ec5e0ae585d5478b88e487b Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 2 Sep 2025 19:23:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(pricing):=20=E5=90=8E=E7=AB=AF=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增了三个分页查询接口:商品配置、阶梯配置和一口价配置 - 实现了对应的筛选条件和排序功能 - 添加了新的请求DTO类:PricingFilterRequest、TierConfigFilterRequest和BundleConfigFilterRequest - 修改了服务接口和实现类,增加了分页查询相关的方法 --- .../controller/PricingConfigController.java | 34 +++++++++ .../dto/BundleConfigFilterRequest.java | 35 ++++++++++ .../pricing/dto/PricingFilterRequest.java | 36 ++++++++++ .../pricing/dto/TierConfigFilterRequest.java | 41 +++++++++++ .../pricing/service/IPriceBundleService.java | 10 +++ .../service/IProductConfigService.java | 19 +++++ .../service/impl/PriceBundleServiceImpl.java | 36 +++++++++- .../impl/ProductConfigServiceImpl.java | 70 ++++++++++++++++++- 8 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/pricing/dto/BundleConfigFilterRequest.java create mode 100644 src/main/java/com/ycwl/basic/pricing/dto/PricingFilterRequest.java create mode 100644 src/main/java/com/ycwl/basic/pricing/dto/TierConfigFilterRequest.java diff --git a/src/main/java/com/ycwl/basic/pricing/controller/PricingConfigController.java b/src/main/java/com/ycwl/basic/pricing/controller/PricingConfigController.java index 63002a1..13551e6 100644 --- a/src/main/java/com/ycwl/basic/pricing/controller/PricingConfigController.java +++ b/src/main/java/com/ycwl/basic/pricing/controller/PricingConfigController.java @@ -1,6 +1,10 @@ package com.ycwl.basic.pricing.controller; +import com.github.pagehelper.PageInfo; import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.pricing.dto.PricingFilterRequest; +import com.ycwl.basic.pricing.dto.TierConfigFilterRequest; +import com.ycwl.basic.pricing.dto.BundleConfigFilterRequest; import com.ycwl.basic.pricing.entity.PriceProductConfig; import com.ycwl.basic.pricing.entity.PriceTierConfig; import com.ycwl.basic.pricing.entity.PriceBundleConfig; @@ -237,6 +241,16 @@ public class PricingConfigController { return ApiResponse.success(configs); } + /** + * 管理端:分页查询商品配置(包含禁用的),支持筛选 + */ + @PostMapping("/admin/products/page") + public ApiResponse> pageProductConfigsForAdmin(@RequestBody PricingFilterRequest request) { + log.info("管理端分页查询商品配置: {}", request); + PageInfo pageInfo = productConfigService.pageProductConfigsForAdmin(request); + return ApiResponse.success(pageInfo); + } + /** * 管理端:获取所有阶梯配置(包含禁用的) */ @@ -247,6 +261,16 @@ public class PricingConfigController { return ApiResponse.success(configs); } + /** + * 管理端:分页查询阶梯配置(包含禁用的),支持筛选 + */ + @PostMapping("/admin/tiers/page") + public ApiResponse> pageTierConfigsForAdmin(@RequestBody TierConfigFilterRequest request) { + log.info("管理端分页查询阶梯配置: {}", request); + PageInfo pageInfo = productConfigService.pageTierConfigsForAdmin(request); + return ApiResponse.success(pageInfo); + } + /** * 管理端:根据商品类型获取阶梯配置(包含禁用的) */ @@ -278,6 +302,16 @@ public class PricingConfigController { return ApiResponse.success(configs); } + /** + * 管理端:分页查询一口价配置(包含禁用的),支持筛选 + */ + @PostMapping("/admin/bundles/page") + public ApiResponse> pageBundleConfigsForAdmin(@RequestBody BundleConfigFilterRequest request) { + log.info("管理端分页查询一口价配置: {}", request); + PageInfo pageInfo = bundleService.pageBundleConfigsForAdmin(request); + return ApiResponse.success(pageInfo); + } + /** * 管理端:获取所有优惠券配置(包含禁用的) */ diff --git a/src/main/java/com/ycwl/basic/pricing/dto/BundleConfigFilterRequest.java b/src/main/java/com/ycwl/basic/pricing/dto/BundleConfigFilterRequest.java new file mode 100644 index 0000000..bd3b485 --- /dev/null +++ b/src/main/java/com/ycwl/basic/pricing/dto/BundleConfigFilterRequest.java @@ -0,0 +1,35 @@ +package com.ycwl.basic.pricing.dto; + +import lombok.Data; + +/** + * 一口价配置筛选请求DTO + */ +@Data +public class BundleConfigFilterRequest { + + /** + * 页码(从1开始) + */ + private Integer pageNum = 1; + + /** + * 每页大小 + */ + private Integer pageSize = 10; + + /** + * 景区ID + */ + private String scenicId; + + /** + * 套餐名称(支持模糊查询) + */ + private String bundleName; + + /** + * 状态(true=启用,false=禁用,null=全部) + */ + private Boolean isActive; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/pricing/dto/PricingFilterRequest.java b/src/main/java/com/ycwl/basic/pricing/dto/PricingFilterRequest.java new file mode 100644 index 0000000..ac2130f --- /dev/null +++ b/src/main/java/com/ycwl/basic/pricing/dto/PricingFilterRequest.java @@ -0,0 +1,36 @@ +package com.ycwl.basic.pricing.dto; + +import com.ycwl.basic.pricing.enums.ProductType; +import lombok.Data; + +/** + * 价格配置筛选请求DTO + */ +@Data +public class PricingFilterRequest { + + /** + * 页码(从1开始) + */ + private Integer pageNum = 1; + + /** + * 每页大小 + */ + private Integer pageSize = 10; + + /** + * 景区ID + */ + private String scenicId; + + /** + * 商品类型 + */ + private ProductType productType; + + /** + * 状态(true=启用,false=禁用,null=全部) + */ + private Boolean isActive; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/pricing/dto/TierConfigFilterRequest.java b/src/main/java/com/ycwl/basic/pricing/dto/TierConfigFilterRequest.java new file mode 100644 index 0000000..00df06a --- /dev/null +++ b/src/main/java/com/ycwl/basic/pricing/dto/TierConfigFilterRequest.java @@ -0,0 +1,41 @@ +package com.ycwl.basic.pricing.dto; + +import com.ycwl.basic.pricing.enums.ProductType; +import lombok.Data; + +/** + * 阶梯配置筛选请求DTO + */ +@Data +public class TierConfigFilterRequest { + + /** + * 页码(从1开始) + */ + private Integer pageNum = 1; + + /** + * 每页大小 + */ + private Integer pageSize = 10; + + /** + * 景区ID + */ + private String scenicId; + + /** + * 商品类型 + */ + private ProductType productType; + + /** + * 具体商品ID + */ + private String productId; + + /** + * 状态(true=启用,false=禁用,null=全部) + */ + private Boolean isActive; +} \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/pricing/service/IPriceBundleService.java b/src/main/java/com/ycwl/basic/pricing/service/IPriceBundleService.java index 7ff94e7..03a33c0 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/IPriceBundleService.java +++ b/src/main/java/com/ycwl/basic/pricing/service/IPriceBundleService.java @@ -1,5 +1,7 @@ package com.ycwl.basic.pricing.service; +import com.github.pagehelper.PageInfo; +import com.ycwl.basic.pricing.dto.BundleConfigFilterRequest; import com.ycwl.basic.pricing.dto.ProductItem; import com.ycwl.basic.pricing.entity.PriceBundleConfig; @@ -49,4 +51,12 @@ public interface IPriceBundleService { * @return 一口价配置列表 */ List getAllBundlesForAdmin(); + + /** + * 分页查询一口价配置(包含禁用的)- 管理端使用 + * + * @param request 筛选请求参数 + * @return 分页结果 + */ + PageInfo pageBundleConfigsForAdmin(BundleConfigFilterRequest request); } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/pricing/service/IProductConfigService.java b/src/main/java/com/ycwl/basic/pricing/service/IProductConfigService.java index c1d27cb..c58bd93 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/IProductConfigService.java +++ b/src/main/java/com/ycwl/basic/pricing/service/IProductConfigService.java @@ -1,5 +1,8 @@ package com.ycwl.basic.pricing.service; +import com.github.pagehelper.PageInfo; +import com.ycwl.basic.pricing.dto.PricingFilterRequest; +import com.ycwl.basic.pricing.dto.TierConfigFilterRequest; import com.ycwl.basic.pricing.entity.PriceProductConfig; import com.ycwl.basic.pricing.entity.PriceTierConfig; @@ -107,4 +110,20 @@ public interface IProductConfigService { * @return 阶梯配置列表 */ List getTierConfigsForAdmin(String productType, String productId); + + /** + * 分页查询商品配置(包含禁用的)- 管理端使用 + * + * @param request 筛选请求参数 + * @return 分页结果 + */ + PageInfo pageProductConfigsForAdmin(PricingFilterRequest request); + + /** + * 分页查询阶梯配置(包含禁用的)- 管理端使用 + * + * @param request 筛选请求参数 + * @return 分页结果 + */ + PageInfo pageTierConfigsForAdmin(TierConfigFilterRequest request); } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/PriceBundleServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/PriceBundleServiceImpl.java index 5101323..6448874 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/PriceBundleServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/PriceBundleServiceImpl.java @@ -2,6 +2,10 @@ package com.ycwl.basic.pricing.service.impl; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ycwl.basic.pricing.dto.BundleConfigFilterRequest; import com.ycwl.basic.pricing.dto.BundleProductItem; import com.ycwl.basic.pricing.dto.ProductItem; import com.ycwl.basic.pricing.entity.PriceBundleConfig; @@ -10,8 +14,8 @@ import com.ycwl.basic.pricing.mapper.PriceBundleConfigMapper; import com.ycwl.basic.pricing.service.IPriceBundleService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -//import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.HashSet; @@ -90,6 +94,36 @@ public class PriceBundleServiceImpl implements IPriceBundleService { return bundleConfigMapper.selectAllBundlesForAdmin(); } + @Override + public PageInfo pageBundleConfigsForAdmin(BundleConfigFilterRequest request) { + // 开启分页 + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + + // 构建查询条件 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("deleted", 0); // 未删除的记录 + + // 添加筛选条件 + if (StringUtils.hasText(request.getScenicId())) { + queryWrapper.eq("scenic_id", request.getScenicId()); + } + if (StringUtils.hasText(request.getBundleName())) { + queryWrapper.like("bundle_name", request.getBundleName()); // 模糊查询 + } + if (request.getIsActive() != null) { + queryWrapper.eq("is_active", request.getIsActive()); + } + + // 按创建时间降序排列 + queryWrapper.orderByDesc("create_time"); + + // 执行查询 + List list = bundleConfigMapper.selectList(queryWrapper); + + // 返回分页结果 + return new PageInfo<>(list); + } + private boolean isProductsMatchBundle(Set productTypes, PriceBundleConfig bundle) { try { // 检查包含的商品 diff --git a/src/main/java/com/ycwl/basic/pricing/service/impl/ProductConfigServiceImpl.java b/src/main/java/com/ycwl/basic/pricing/service/impl/ProductConfigServiceImpl.java index fe1aa1f..0435d05 100644 --- a/src/main/java/com/ycwl/basic/pricing/service/impl/ProductConfigServiceImpl.java +++ b/src/main/java/com/ycwl/basic/pricing/service/impl/ProductConfigServiceImpl.java @@ -1,5 +1,10 @@ package com.ycwl.basic.pricing.service.impl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ycwl.basic.pricing.dto.PricingFilterRequest; +import com.ycwl.basic.pricing.dto.TierConfigFilterRequest; import com.ycwl.basic.pricing.entity.PriceProductConfig; import com.ycwl.basic.pricing.entity.PriceTierConfig; import com.ycwl.basic.pricing.exception.ProductConfigNotFoundException; @@ -8,8 +13,8 @@ import com.ycwl.basic.pricing.mapper.PriceTierConfigMapper; import com.ycwl.basic.pricing.service.IProductConfigService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -//import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.List; @@ -118,4 +123,67 @@ public class ProductConfigServiceImpl implements IProductConfigService { public List getTierConfigsForAdmin(String productType, String productId) { return tierConfigMapper.selectByProductTypeAndIdForAdmin(productType, productId); } + + @Override + public PageInfo pageProductConfigsForAdmin(PricingFilterRequest request) { + // 开启分页 + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + + // 构建查询条件 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("deleted", 0); // 未删除的记录 + + // 添加筛选条件 + if (StringUtils.hasText(request.getScenicId())) { + queryWrapper.eq("scenic_id", request.getScenicId()); + } + if (request.getProductType() != null) { + queryWrapper.eq("product_type", request.getProductType().getCode()); + } + if (request.getIsActive() != null) { + queryWrapper.eq("is_active", request.getIsActive()); + } + + // 按创建时间降序排列 + queryWrapper.orderByDesc("create_time"); + + // 执行查询 + List list = productConfigMapper.selectList(queryWrapper); + + // 返回分页结果 + return new PageInfo<>(list); + } + + @Override + public PageInfo pageTierConfigsForAdmin(TierConfigFilterRequest request) { + // 开启分页 + PageHelper.startPage(request.getPageNum(), request.getPageSize()); + + // 构建查询条件 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("deleted", 0); // 未删除的记录 + + // 添加筛选条件 + if (StringUtils.hasText(request.getScenicId())) { + queryWrapper.eq("scenic_id", request.getScenicId()); + } + if (request.getProductType() != null) { + queryWrapper.eq("product_type", request.getProductType().getCode()); + } + if (StringUtils.hasText(request.getProductId())) { + queryWrapper.eq("product_id", request.getProductId()); + } + if (request.getIsActive() != null) { + queryWrapper.eq("is_active", request.getIsActive()); + } + + // 按排序字段升序,再按创建时间降序排列 + queryWrapper.orderByAsc("sort_order").orderByDesc("create_time"); + + // 执行查询 + List list = tierConfigMapper.selectList(queryWrapper); + + // 返回分页结果 + return new PageInfo<>(list); + } } \ No newline at end of file