|
|
|
@ -374,7 +374,13 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
|
detail.setUpdateBy(quoteDetail.getUpdateBy()); |
|
|
|
detail.setUpdateDate(quoteDetail.getUpdateDate()); |
|
|
|
List<QuoteDetailBomTree> list = queryDetailBomTree(detail); |
|
|
|
loopTree(list,quoteDetail,0L); |
|
|
|
|
|
|
|
// 创建老ID到新ID的映射关系 |
|
|
|
Map<Long, Long> oldToNewIdMapping = new HashMap<>(); |
|
|
|
loopTree(list, quoteDetail, 0L, oldToNewIdMapping); |
|
|
|
|
|
|
|
// 复制完成后,更新BOM明细中的bomId引用 |
|
|
|
updateBomIdReferencesWithCorrectLogic(quoteDetail.getId(), oldToNewIdMapping); |
|
|
|
} |
|
|
|
|
|
|
|
private void loopTree (List<QuoteDetailBomTree> list,QuoteDetail quoteDetail,Long parentId){ |
|
|
|
@ -389,15 +395,64 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
|
long id = tree.getId(); |
|
|
|
tree.setId(null); |
|
|
|
save(tree); |
|
|
|
|
|
|
|
// 调用Bom的again方 |
|
|
|
quoteDetailBomService.againQuoteDetailBom(tree,id); |
|
|
|
quoteDetailBomService.againQuoteDetailBom(tree, id); |
|
|
|
// 调用Routing的again方法 |
|
|
|
quoteDetailRoutingService.againQuoteDetailRouting(tree,id); |
|
|
|
quoteDetailRoutingService.againQuoteDetailRouting(tree, id); |
|
|
|
loopTree(tree.getList(),quoteDetail,tree.getId()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void loopTree(List<QuoteDetailBomTree> list, QuoteDetail quoteDetail, Long parentId, Map<Long, Long> oldToNewIdMapping) { |
|
|
|
if (!list.isEmpty()) { |
|
|
|
for (QuoteDetailBomTree tree : list) { |
|
|
|
tree.setQuoteId(quoteDetail.getQuoteId()); |
|
|
|
tree.setQuoteDetailId(quoteDetail.getId()); |
|
|
|
tree.setQuoteNo(quoteDetail.getQuoteNo()); |
|
|
|
tree.setVersionNo(quoteDetail.getVersionNo()); |
|
|
|
tree.setParentId(parentId); |
|
|
|
|
|
|
|
long oldId = tree.getId(); |
|
|
|
tree.setId(null); |
|
|
|
save(tree); |
|
|
|
|
|
|
|
// 记录老ID到新ID的映射关系 |
|
|
|
oldToNewIdMapping.put(oldId, tree.getId()); |
|
|
|
|
|
|
|
// 调用Bom的again方 |
|
|
|
quoteDetailBomService.againQuoteDetailBom(tree, oldId); |
|
|
|
// 调用Routing的again方法 |
|
|
|
quoteDetailRoutingService.againQuoteDetailRouting(tree, oldId); |
|
|
|
loopTree(tree.getList(), quoteDetail, tree.getId(), oldToNewIdMapping); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据正确的业务逻辑更新BOM明细中的bomId引用 |
|
|
|
* bomId应该指向子BOM树节点的ID,而不是根节点ID |
|
|
|
*/ |
|
|
|
private void updateBomIdReferencesWithCorrectLogic(Long quoteDetailId, Map<Long, Long> oldToNewIdMapping) { |
|
|
|
// 查询新复制的所有BOM明细 |
|
|
|
List<QuoteDetailBom> bomList = quoteDetailBomService.lambdaQuery() |
|
|
|
.eq(QuoteDetailBom::getQuoteDetailId, quoteDetailId) |
|
|
|
.isNotNull(QuoteDetailBom::getBomId) // 只处理有bomId的记录 |
|
|
|
.list(); |
|
|
|
|
|
|
|
for (QuoteDetailBom bom : bomList) { |
|
|
|
// 获取原来的bomId |
|
|
|
Long oldBomId = bom.getBomId(); |
|
|
|
// 根据老ID找到新ID |
|
|
|
Long newBomId = oldToNewIdMapping.get(oldBomId); |
|
|
|
if (newBomId != null) { |
|
|
|
bom.setBomId(newBomId); |
|
|
|
quoteDetailBomService.updateById(bom); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public String queryPart(QuoteDetailBom bom) { |
|
|
|
// 测试料号使用 |
|
|
|
|