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;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 管理端:获取所有优惠券配置(包含禁用的)
|
* 管理端:获取所有优惠券配置(包含禁用的)
|
||||||
*/
|
*/
|
||||||
|
@@ -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;
|
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);
|
||||||
}
|
}
|
@@ -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);
|
||||||
}
|
}
|
@@ -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 {
|
||||||
// 检查包含的商品
|
// 检查包含的商品
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user