You've already forked FrameTour-BE
feat(pricing): 后端新增分页查询接口
- 新增了三个分页查询接口:商品配置、阶梯配置和一口价配置 - 实现了对应的筛选条件和排序功能 - 添加了新的请求DTO类:PricingFilterRequest、TierConfigFilterRequest和BundleConfigFilterRequest - 修改了服务接口和实现类,增加了分页查询相关的方法
This commit is contained in:
@@ -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<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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理端:分页查询阶梯配置(包含禁用的),支持筛选
|
||||
*/
|
||||
@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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理端:分页查询一口价配置(包含禁用的),支持筛选
|
||||
*/
|
||||
@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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 管理端:获取所有优惠券配置(包含禁用的)
|
||||
*/
|
||||
|
@@ -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;
|
||||
}
|
@@ -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;
|
||||
}
|
@@ -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;
|
||||
}
|
@@ -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<PriceBundleConfig> getAllBundlesForAdmin();
|
||||
|
||||
/**
|
||||
* 分页查询一口价配置(包含禁用的)- 管理端使用
|
||||
*
|
||||
* @param request 筛选请求参数
|
||||
* @return 分页结果
|
||||
*/
|
||||
PageInfo<PriceBundleConfig> pageBundleConfigsForAdmin(BundleConfigFilterRequest request);
|
||||
}
|
@@ -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<PriceTierConfig> getTierConfigsForAdmin(String productType, String productId);
|
||||
|
||||
/**
|
||||
* 分页查询商品配置(包含禁用的)- 管理端使用
|
||||
*
|
||||
* @param request 筛选请求参数
|
||||
* @return 分页结果
|
||||
*/
|
||||
PageInfo<PriceProductConfig> pageProductConfigsForAdmin(PricingFilterRequest request);
|
||||
|
||||
/**
|
||||
* 分页查询阶梯配置(包含禁用的)- 管理端使用
|
||||
*
|
||||
* @param request 筛选请求参数
|
||||
* @return 分页结果
|
||||
*/
|
||||
PageInfo<PriceTierConfig> pageTierConfigsForAdmin(TierConfigFilterRequest request);
|
||||
}
|
@@ -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<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) {
|
||||
try {
|
||||
// 检查包含的商品
|
||||
|
@@ -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<PriceTierConfig> getTierConfigsForAdmin(String productType, String 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user