Browse Source

2025-09-26

报价条目明细复制 人工和机器成本不对
master
fengyuan_yang 4 months ago
parent
commit
1749ebc238
  1. 61
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java

61
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java

@ -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) {
// 测试料号使用

Loading…
Cancel
Save