|
|
|
@ -344,10 +344,14 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
|
BomNodeData nodeData = null; |
|
|
|
Long newParentId = 0L; |
|
|
|
QuoteDetailBomTree bomTree = null; |
|
|
|
List<Long> 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<QuoteDetailBomTre |
|
|
|
final BomNodeData finalNodeData = nodeData; |
|
|
|
final Long finalNewParentId = newParentId; |
|
|
|
final QuoteDetailBomTree finalBomTree = bomTree; |
|
|
|
final List<Long> finalDeleteTreeIds = deleteTreeIds; |
|
|
|
|
|
|
|
long transactionStartTime = System.currentTimeMillis(); |
|
|
|
transactionTemplate.execute(status -> { |
|
|
|
// 1. 执行 BOM 结构切换的 DB 写入 |
|
|
|
if (Objects.nonNull(tree.getId())) { |
|
|
|
List<Long> 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) { |
|
|
|
|