feat(product-model): 支持报价产品模型的分页查询

- 将搜索方法searchForQuotation的返回类型由List改为分页类型IPage
- 修改Mapper接口和XML,实现基于分页的查询逻辑
- Controller层响应数据类型调整为PageData以支持分页展示
- 在请求对象QuotationProductModelSearchRequest中继承分页请求参数,规范分页请求
- 优化SQL查询条件,修正部分拼写错误和缩进格式
- 统一分页参数传递,提升查询性能与用户体验
This commit is contained in:
曹鹏飞 2026-05-18 17:47:11 +08:00
parent e8935e3619
commit 73c0431076
6 changed files with 15 additions and 11 deletions

View File

@ -6,7 +6,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@Data @Data
public class QuotationProductModelSearchRequest { public class QuotationProductModelSearchRequest extends PageRequest{
/** /**
* 模块id * 模块id

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.quotation.controller.app; package com.nflg.mobilebroken.quotation.controller.app;
import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.QuotationProductModelSearchRequest; import com.nflg.mobilebroken.common.pojo.request.QuotationProductModelSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.ProductModelInfoVO; import com.nflg.mobilebroken.common.pojo.vo.ProductModelInfoVO;
import com.nflg.mobilebroken.common.pojo.vo.QuotationProductModelInfoVO; import com.nflg.mobilebroken.common.pojo.vo.QuotationProductModelInfoVO;
@ -29,7 +30,7 @@ public class ProductModelController extends ControllerBase {
* 搜索 * 搜索
*/ */
@PostMapping("/search") @PostMapping("/search")
public ApiResult<List<QuotationProductModelSearchVO>> search(@Valid @RequestBody QuotationProductModelSearchRequest request){ public ApiResult<PageData<QuotationProductModelSearchVO>> search(@Valid @RequestBody QuotationProductModelSearchRequest request){
return ApiResult.success(productModelService.searchForQuotation(request, MultilingualUtil.getLanguage())); return ApiResult.success(productModelService.searchForQuotation(request, MultilingualUtil.getLanguage()));
} }

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.repository.mapper; package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.mobilebroken.common.pojo.request.ModelConfigSearchRequest; import com.nflg.mobilebroken.common.pojo.request.ModelConfigSearchRequest;
import com.nflg.mobilebroken.common.pojo.request.ProductModelSearchRequest; import com.nflg.mobilebroken.common.pojo.request.ProductModelSearchRequest;
@ -34,7 +35,7 @@ public interface ProductModelMapper extends BaseMapper<ProductModel> {
Page<ProductModel> searchForQuotation(ModelConfigSearchRequest request, Page<?> page); Page<ProductModel> searchForQuotation(ModelConfigSearchRequest request, Page<?> page);
List<QuotationProductModelSearchVO> searchForQuotation1(QuotationProductModelSearchRequest request, String language); IPage<QuotationProductModelSearchVO> searchForQuotation1(QuotationProductModelSearchRequest request, String language, Page<?> page);
QuotationProductModelInfoVO getInfoForQuotation(Long id, String language); QuotationProductModelInfoVO getInfoForQuotation(Long id, String language);
} }

View File

@ -1,5 +1,6 @@
package com.nflg.mobilebroken.repository.service; package com.nflg.mobilebroken.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.request.*;
@ -54,7 +55,7 @@ public interface IProductModelService extends IService<ProductModel> {
List<ProductModel> getEffectives(); List<ProductModel> getEffectives();
List<QuotationProductModelSearchVO> searchForQuotation(QuotationProductModelSearchRequest request, String language); IPage<QuotationProductModelSearchVO> searchForQuotation(QuotationProductModelSearchRequest request, String language);
QuotationProductModelInfoVO getInfoForQuotation(Long id, String language); QuotationProductModelInfoVO getInfoForQuotation(Long id, String language);
} }

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.PublishState; import com.nflg.mobilebroken.common.constant.PublishState;
@ -410,8 +411,8 @@ public class ProductModelServiceImpl extends ServiceImpl<ProductModelMapper, Pro
} }
@Override @Override
public List<QuotationProductModelSearchVO> searchForQuotation(QuotationProductModelSearchRequest request, String language) { public IPage<QuotationProductModelSearchVO> searchForQuotation(QuotationProductModelSearchRequest request, String language) {
return baseMapper.searchForQuotation1(request,language); return baseMapper.searchForQuotation1(request,language,new Page<>(request.getPage(), request.getPageSize()));
} }
@Override @Override

View File

@ -66,8 +66,8 @@
SELECT pm.*, pmii.`desc`, pmii.feature SELECT pm.*, pmii.`desc`, pmii.feature
,(SELECT `name` FROM product_type WHERE batch_number=pm.type_number AND state!=2 ORDER BY state DESC LIMIT 1) as 'typeName' ,(SELECT `name` FROM product_type WHERE batch_number=pm.type_number AND state!=2 ORDER BY state DESC LIMIT 1) as 'typeName'
FROM product_model pm FROM product_model pm
INNER JOIN product_model_intro pmi ON pm.id = pmi.model_id INNER JOIN product_model_intro pmi ON pm.id = pmi.model_id
INNER JOIN product_model_intro_item pmii ON pmi.id = pmii.model_intro_id INNER JOIN product_model_intro_item pmii ON pmi.id = pmii.model_intro_id
WHERE pm.state = 1 WHERE pm.state = 1
AND pm.`enable` = 1 AND pm.`enable` = 1
AND pmi.state = 1 AND pmi.state = 1
@ -137,9 +137,9 @@
<if test="request.hasDiscount==true"> <if test="request.hasDiscount==true">
AND dis.model_id is not null AND dis.model_id is not null
</if> </if>
<!-- <if test="request.no!=null and request.no!=''">--> <if test="request.name!=null and request.name!=''">
<!-- AND pm.`no` like concat('%', #{request.no}, '%')--> AND pm.`no` like concat('%', #{request.name}, '%')
<!-- </if>--> </if>
ORDER BY pm.sort,pm.id DESC ORDER BY pm.sort,pm.id DESC
</select> </select>