From c60616c9371e8f05a5429c48eb949352b1f886f3 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Wed, 13 May 2026 14:13:24 +0800 Subject: [PATCH] =?UTF-8?q?2026-05-12=20=E9=94=80=E5=94=AE=E6=8A=A5?= =?UTF-8?q?=E4=BB=B7=E3=80=90=E5=88=87=E6=8D=A2=E7=89=88=E6=9C=AC=E3=80=91?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/QuoteDetailBomTreeServiceImpl.java | 13 ++++++++----- .../service/impl/QuoteDetailRoutingServiceImpl.java | 7 +------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java index bf10d15b..485f9515 100644 --- a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java +++ b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java @@ -344,10 +344,14 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl deleteTreeIds = new ArrayList<>(); if (Objects.nonNull(tree.getId())) { bomTree = getById(tree.getId()); detail = quoteDetailService.getById(bomTree.getQuoteDetailId()); + // 提前在事务外计算待删除节点,缩短事务时间,减少锁持有窗口 + deleteTreeIds = getAllChildIds(detail, bomTree.getId()); + deleteTreeIds.add(bomTree.getId()); detail.setPartNo(tree.getPartNo()); detail.setSite(tree.getSite()); @@ -390,16 +394,15 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl finalDeleteTreeIds = deleteTreeIds; long transactionStartTime = System.currentTimeMillis(); transactionTemplate.execute(status -> { // 1. 执行 BOM 结构切换的 DB 写入 if (Objects.nonNull(tree.getId())) { - List ids = getAllChildIds(finalDetail, finalBomTree.getId()); - ids.add(finalBomTree.getId()); - lambdaUpdate().in(QuoteDetailBomTree::getId, ids).remove(); - quoteDetailBomService.lambdaUpdate().in(QuoteDetailBom::getTreeId, ids).remove(); - quoteDetailRoutingService.lambdaUpdate().in(QuoteDetailRouting::getTreeId, ids).remove(); + lambdaUpdate().in(QuoteDetailBomTree::getId, finalDeleteTreeIds).remove(); + quoteDetailBomService.lambdaUpdate().in(QuoteDetailBom::getTreeId, finalDeleteTreeIds).remove(); + quoteDetailRoutingService.lambdaUpdate().in(QuoteDetailRouting::getTreeId, finalDeleteTreeIds).remove(); long bomId = 0; if (finalNodeData != null) { diff --git a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java index d88d9565..da6f4ed0 100644 --- a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java +++ b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java @@ -24,16 +24,11 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl