feat(pricing): 后端新增分页查询接口

- 新增了三个分页查询接口:商品配置、阶梯配置和一口价配置
- 实现了对应的筛选条件和排序功能
- 添加了新的请求DTO类:PricingFilterRequest、TierConfigFilterRequest和BundleConfigFilterRequest
- 修改了服务接口和实现类,增加了分页查询相关的方法
This commit is contained in:
2025-09-02 19:23:22 +08:00
parent e4da509964
commit aa717d0c2a
8 changed files with 279 additions and 2 deletions

View File

@@ -1,6 +1,10 @@
package com.ycwl.basic.pricing.controller; package com.ycwl.basic.pricing.controller;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.utils.ApiResponse; 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.PriceProductConfig;
import com.ycwl.basic.pricing.entity.PriceTierConfig; import com.ycwl.basic.pricing.entity.PriceTierConfig;
import com.ycwl.basic.pricing.entity.PriceBundleConfig; import com.ycwl.basic.pricing.entity.PriceBundleConfig;
@@ -237,6 +241,16 @@ public class PricingConfigController {
return ApiResponse.success(configs); return ApiResponse.success(configs);
} }
/**
* 管理端:分页查询商品配置(包含禁用的),支持筛选
*/
@PostMapping("/admin/products/page")
public ApiResponse<PageInfo<PriceProductConfig>> pageProductConfigsForAdmin(@RequestBody PricingFilterRequest request) {
log.info("管理端分页查询商品配置: {}", request);
PageInfo<PriceProductConfig> pageInfo = productConfigService.pageProductConfigsForAdmin(request);
return ApiResponse.success(pageInfo);
}
/** /**
* 管理端:获取所有阶梯配置(包含禁用的) * 管理端:获取所有阶梯配置(包含禁用的)
*/ */
@@ -247,6 +261,16 @@ public class PricingConfigController {
return ApiResponse.success(configs); return ApiResponse.success(configs);
} }
/**
* 管理端:分页查询阶梯配置(包含禁用的),支持筛选
*/
@PostMapping("/admin/tiers/page")
public ApiResponse<PageInfo<PriceTierConfig>> pageTierConfigsForAdmin(@RequestBody TierConfigFilterRequest request) {
log.info("管理端分页查询阶梯配置: {}", request);
PageInfo<PriceTierConfig> pageInfo = productConfigService.pageTierConfigsForAdmin(request);
return ApiResponse.success(pageInfo);
}
/** /**
* 管理端:根据商品类型获取阶梯配置(包含禁用的) * 管理端:根据商品类型获取阶梯配置(包含禁用的)
*/ */
@@ -278,6 +302,16 @@ public class PricingConfigController {
return ApiResponse.success(configs); return ApiResponse.success(configs);
} }
/**
* 管理端:分页查询一口价配置(包含禁用的),支持筛选
*/
@PostMapping("/admin/bundles/page")
public ApiResponse<PageInfo<PriceBundleConfig>> pageBundleConfigsForAdmin(@RequestBody BundleConfigFilterRequest request) {
log.info("管理端分页查询一口价配置: {}", request);
PageInfo<PriceBundleConfig> pageInfo = bundleService.pageBundleConfigsForAdmin(request);
return ApiResponse.success(pageInfo);
}
/** /**
* 管理端:获取所有优惠券配置(包含禁用的) * 管理端:获取所有优惠券配置(包含禁用的)
*/ */

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -1,5 +1,7 @@
package com.ycwl.basic.pricing.service; 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.dto.ProductItem;
import com.ycwl.basic.pricing.entity.PriceBundleConfig; import com.ycwl.basic.pricing.entity.PriceBundleConfig;
@@ -49,4 +51,12 @@ public interface IPriceBundleService {
* @return 一口价配置列表 * @return 一口价配置列表
*/ */
List<PriceBundleConfig> getAllBundlesForAdmin(); List<PriceBundleConfig> getAllBundlesForAdmin();
/**
* 分页查询一口价配置(包含禁用的)- 管理端使用
*
* @param request 筛选请求参数
* @return 分页结果
*/
PageInfo<PriceBundleConfig> pageBundleConfigsForAdmin(BundleConfigFilterRequest request);
} }

View File

@@ -1,5 +1,8 @@
package com.ycwl.basic.pricing.service; 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.PriceProductConfig;
import com.ycwl.basic.pricing.entity.PriceTierConfig; import com.ycwl.basic.pricing.entity.PriceTierConfig;
@@ -107,4 +110,20 @@ public interface IProductConfigService {
* @return 阶梯配置列表 * @return 阶梯配置列表
*/ */
List<PriceTierConfig> getTierConfigsForAdmin(String productType, String productId); List<PriceTierConfig> getTierConfigsForAdmin(String productType, String productId);
/**
* 分页查询商品配置(包含禁用的)- 管理端使用
*
* @param request 筛选请求参数
* @return 分页结果
*/
PageInfo<PriceProductConfig> pageProductConfigsForAdmin(PricingFilterRequest request);
/**
* 分页查询阶梯配置(包含禁用的)- 管理端使用
*
* @param request 筛选请求参数
* @return 分页结果
*/
PageInfo<PriceTierConfig> pageTierConfigsForAdmin(TierConfigFilterRequest request);
} }

View File

@@ -2,6 +2,10 @@ package com.ycwl.basic.pricing.service.impl;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; 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.BundleProductItem;
import com.ycwl.basic.pricing.dto.ProductItem; import com.ycwl.basic.pricing.dto.ProductItem;
import com.ycwl.basic.pricing.entity.PriceBundleConfig; 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 com.ycwl.basic.pricing.service.IPriceBundleService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashSet; import java.util.HashSet;
@@ -90,6 +94,36 @@ public class PriceBundleServiceImpl implements IPriceBundleService {
return bundleConfigMapper.selectAllBundlesForAdmin(); return bundleConfigMapper.selectAllBundlesForAdmin();
} }
@Override
public PageInfo<PriceBundleConfig> pageBundleConfigsForAdmin(BundleConfigFilterRequest request) {
// 开启分页
PageHelper.startPage(request.getPageNum(), request.getPageSize());
// 构建查询条件
QueryWrapper<PriceBundleConfig> 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<PriceBundleConfig> list = bundleConfigMapper.selectList(queryWrapper);
// 返回分页结果
return new PageInfo<>(list);
}
private boolean isProductsMatchBundle(Set<String> productTypes, PriceBundleConfig bundle) { private boolean isProductsMatchBundle(Set<String> productTypes, PriceBundleConfig bundle) {
try { try {
// 检查包含的商品 // 检查包含的商品

View File

@@ -1,5 +1,10 @@
package com.ycwl.basic.pricing.service.impl; 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.PriceProductConfig;
import com.ycwl.basic.pricing.entity.PriceTierConfig; import com.ycwl.basic.pricing.entity.PriceTierConfig;
import com.ycwl.basic.pricing.exception.ProductConfigNotFoundException; 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 com.ycwl.basic.pricing.service.IProductConfigService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
//import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List; import java.util.List;
@@ -118,4 +123,67 @@ public class ProductConfigServiceImpl implements IProductConfigService {
public List<PriceTierConfig> getTierConfigsForAdmin(String productType, String productId) { public List<PriceTierConfig> getTierConfigsForAdmin(String productType, String productId) {
return tierConfigMapper.selectByProductTypeAndIdForAdmin(productType, productId); return tierConfigMapper.selectByProductTypeAndIdForAdmin(productType, productId);
} }
@Override
public PageInfo<PriceProductConfig> pageProductConfigsForAdmin(PricingFilterRequest request) {
// 开启分页
PageHelper.startPage(request.getPageNum(), request.getPageSize());
// 构建查询条件
QueryWrapper<PriceProductConfig> 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<PriceProductConfig> list = productConfigMapper.selectList(queryWrapper);
// 返回分页结果
return new PageInfo<>(list);
}
@Override
public PageInfo<PriceTierConfig> pageTierConfigsForAdmin(TierConfigFilterRequest request) {
// 开启分页
PageHelper.startPage(request.getPageNum(), request.getPageSize());
// 构建查询条件
QueryWrapper<PriceTierConfig> 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<PriceTierConfig> list = tierConfigMapper.selectList(queryWrapper);
// 返回分页结果
return new PageInfo<>(list);
}
} }