From f8158865fae502367a1c9fcda690a344e998020e Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Fri, 27 Feb 2026 10:25:46 +0800 Subject: [PATCH] =?UTF-8?q?2026-02-27=20=E9=94=80=E5=94=AE=E6=8A=A5?= =?UTF-8?q?=E4=BB=B7=E6=9F=A5=E8=AF=A2=E6=A0=B9=E6=8D=AE=E6=8A=A5=E4=BB=B7?= =?UTF-8?q?=E5=8D=95=E5=80=92=E6=8E=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/quote/mapper/QuoteMapper.java | 5 + .../quote/service/impl/QuoteServiceImpl.java | 11 +- .../mapper/quote/QuoteDetailMapper.xml | 1 + .../resources/mapper/quote/QuoteMapper.xml | 160 ++++++++++++++++++ 4 files changed, 174 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/spring/modules/quote/mapper/QuoteMapper.java b/src/main/java/com/spring/modules/quote/mapper/QuoteMapper.java index 8baf2ab2..6edbc53d 100644 --- a/src/main/java/com/spring/modules/quote/mapper/QuoteMapper.java +++ b/src/main/java/com/spring/modules/quote/mapper/QuoteMapper.java @@ -19,6 +19,11 @@ import java.util.Map; public interface QuoteMapper extends BaseMapper { IPage queryQuotePage(@Param("page") Page page,@Param("params") Quote quote); + + long queryQuotePageCount(@Param("params") Quote quote); + + List queryQuotePageData(@Param("offset") long offset, @Param("size") long size, @Param("params") Quote quote); + List queryQuoteList(Quote quote); int batchSaveQuote(List quotes); diff --git a/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java b/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java index b5fd9064..7e4cc205 100644 --- a/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java +++ b/src/main/java/com/spring/modules/quote/service/impl/QuoteServiceImpl.java @@ -71,10 +71,15 @@ public class QuoteServiceImpl extends ServiceImpl implements @Override public IPage queryQuotePage(Integer no, Integer size, Quote quote) { + // PaginationInterceptor 用 JSqlParser 注入排序,但 JSqlParser 3.x 无法解析 OUTER APPLY, + // 导致 ORDER BY 注入失效。改用原生 COUNT + OFFSET/FETCH NEXT 两步查询彻底绕过该问题。 + long total = baseMapper.queryQuotePageCount(quote); + long offset = (long) (no - 1) * size; + List records = baseMapper.queryQuotePageData(offset, size, quote); Page page = new Page<>(no, size); - // 在Page对象中设置排序,避免在SQL中使用ORDER BY(SQL Server子查询限制) - page.addOrder(com.baomidou.mybatisplus.core.metadata.OrderItem.desc("q.id")); - return baseMapper.queryQuotePage(page, quote); + page.setTotal(total); + page.setRecords(records); + return page; } @Override diff --git a/src/main/resources/mapper/quote/QuoteDetailMapper.xml b/src/main/resources/mapper/quote/QuoteDetailMapper.xml index 301203b7..1ae2da45 100644 --- a/src/main/resources/mapper/quote/QuoteDetailMapper.xml +++ b/src/main/resources/mapper/quote/QuoteDetailMapper.xml @@ -81,6 +81,7 @@ qd.adjust_test_cost, qd.else_cost, qd.adjust_else_cost, + qd.quote_group_detail_id, pp.plm_part_no, pp.ifs_part_no, convert(decimal(20,6),(case when exchange_rate2 = 0 or exchange_rate2 is null then 0 else unit_price/exchange_rate2 end)) as unitPriceRate diff --git a/src/main/resources/mapper/quote/QuoteMapper.xml b/src/main/resources/mapper/quote/QuoteMapper.xml index 8a215e16..1a16b7c3 100644 --- a/src/main/resources/mapper/quote/QuoteMapper.xml +++ b/src/main/resources/mapper/quote/QuoteMapper.xml @@ -137,6 +137,166 @@ + + + + and q.id = #{params.id} + + + and q.site = #{params.site} + + + and q.quote_no = #{params.quoteNo} + + + and q.bu_no = #{params.buNo} + + + and q.customer_no = #{params.customerNo} + + + and q.project_no = #{params.projectNo} + + + and q.status = #{params.status} + + + and q.quote_version_no like #{params.quoteVersionNo} + + + and c.customer_desc like #{params.customerDesc} + + + and p.project_name like #{params.projectDesc} + + + and dbo.plm_get_user_display(q.site, q.purchase) like #{params.purchase} + + + and dbo.plm_get_user_display(q.site, q.quoter) like #{params.quoter} + + + and q.customer_inquiry_no like #{params.customerInquiryNo} + + + and q.inside_inquiry_no like #{params.insideInquiryNo} + + + and q.quote_date >= #{params.startDate} + + + and q.quote_date <= #{params.endDate} + + + and q.id in ( + + #{id} + + ) + + + AND EXISTS ( + SELECT 1 + FROM plm_quote_detail b + left join part pp on b.part_no = pp.part_no and b.site = pp.site + left join plm_customer_part_info as pc on b.part_no = pc.part_no and b.site = pc.site + WHERE b.quote_id = q.id + AND (pp.plm_part_no like #{params.searchPartNo} or pp.ifs_part_no like #{params.searchPartNo} or pc.customer_part_no like #{params.searchPartNo}) + ) + + + and prn.node_id = #{params.nodeId} + + + AND dbo.get_plm_Approval_username(q.site, prh.workflow_id, prn.node_id, q.quote_version_no) like #{params.approvalUsername} + + + + + + + + +