|
|
@ -60,6 +60,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
detail.setPartNo(part.getPartNo()); |
|
|
detail.setPartNo(part.getPartNo()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
// 获取BOM信息 |
|
|
QuoteDetailBomTree bom = baseMapper.queryPartBom(detail); |
|
|
QuoteDetailBomTree bom = baseMapper.queryPartBom(detail); |
|
|
if (Objects.isNull(bom)){ |
|
|
if (Objects.isNull(bom)){ |
|
|
return 0; |
|
|
return 0; |
|
|
@ -69,6 +70,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
// 2、通过Bom查询 Bom子物料 |
|
|
// 2、通过Bom查询 Bom子物料 |
|
|
log.info("BOM信息:{}",bom); |
|
|
log.info("BOM信息:{}",bom); |
|
|
save(bom); |
|
|
save(bom); |
|
|
|
|
|
// 查BOM对应Routing |
|
|
QuoteDetailRouting routing = baseMapper.queryPartBomRouting(detail); |
|
|
QuoteDetailRouting routing = baseMapper.queryPartBomRouting(detail); |
|
|
if (Objects.nonNull(routing)) { |
|
|
if (Objects.nonNull(routing)) { |
|
|
routing.setTreeId(bom.getId()); |
|
|
routing.setTreeId(bom.getId()); |
|
|
@ -76,7 +78,47 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
routing.setCreateDate(new Date()); |
|
|
routing.setCreateDate(new Date()); |
|
|
quoteDetailRoutingService.saveQuoteDetailRouting(routing); |
|
|
quoteDetailRoutingService.saveQuoteDetailRouting(routing); |
|
|
} |
|
|
} |
|
|
|
|
|
// 当为顶级BOM 需要插入对应Routing的工具信息 |
|
|
if (parentId.equals(0L)){ |
|
|
if (parentId.equals(0L)){ |
|
|
|
|
|
handleTool(detail, routing); |
|
|
|
|
|
} |
|
|
|
|
|
// 查询BOM的子物料 |
|
|
|
|
|
List<QuoteDetailBom> componentParts = baseMapper.queryBomComponentPart(bom); |
|
|
|
|
|
// 判断BOM Type是否是Purse Purse 需要将自己当成自己的子物料,用于计算成本 |
|
|
|
|
|
if ("Purchase".equals(bom.getBomType())) { |
|
|
|
|
|
QuoteDetailBom purchase = getPurchaseComponentPart(detail, bom, componentParts.size()+1); |
|
|
|
|
|
componentParts.add(purchase); |
|
|
|
|
|
} |
|
|
|
|
|
log.info("BOM子物料:{}",componentParts); |
|
|
|
|
|
// 3、查询子物料是否存在BOM信息 |
|
|
|
|
|
for (QuoteDetailBom component : componentParts) { |
|
|
|
|
|
component.setCreateBy(detail.getCreateBy()); |
|
|
|
|
|
component.setCreateDate(detail.getCreateDate()); |
|
|
|
|
|
QuoteDetail quoteDetail = createQuoteDetail(detail, component); |
|
|
|
|
|
// 物料是半成品 |
|
|
|
|
|
QuoteDetailBomTree bomTree = isComponentBom(quoteDetail); |
|
|
|
|
|
if (Objects.nonNull(bomTree) && "Y".equals(component.getBomFlag())) { |
|
|
|
|
|
long id = initQuoteDetailBomTree(quoteDetail ,bom.getId(),level+1); |
|
|
|
|
|
// 如果是BOM 为子料绑定是哪个Bom |
|
|
|
|
|
component.setBomId(id); |
|
|
|
|
|
// 半成品 价格为0 |
|
|
|
|
|
component.setUnitPrice(BigDecimal.ZERO); |
|
|
|
|
|
component.setActualPrice(BigDecimal.ZERO); |
|
|
|
|
|
component.setQuotePrice(BigDecimal.ZERO); |
|
|
|
|
|
}else{ |
|
|
|
|
|
component.setBomFlag("N"); |
|
|
|
|
|
} |
|
|
|
|
|
if ("Y".equals(component.getStatus())) { |
|
|
|
|
|
getFinalPartCost(component); |
|
|
|
|
|
} |
|
|
|
|
|
//新增子物料信息 |
|
|
|
|
|
component.setTreeId(bom.getId()); |
|
|
|
|
|
quoteDetailBomService.save(component); |
|
|
|
|
|
} |
|
|
|
|
|
return bom.getId(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void handleTool(QuoteDetail detail, QuoteDetailRouting routing) { |
|
|
// 1、清空工具信息 |
|
|
// 1、清空工具信息 |
|
|
quoteDetailToolService.lambdaUpdate() |
|
|
quoteDetailToolService.lambdaUpdate() |
|
|
.eq(QuoteDetailTool::getQuoteDetailId, detail.getId()) |
|
|
.eq(QuoteDetailTool::getQuoteDetailId, detail.getId()) |
|
|
@ -90,11 +132,9 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
}else { |
|
|
}else { |
|
|
quoteDetailToolService.saveQuoteDetailOtherTool(detail); |
|
|
quoteDetailToolService.saveQuoteDetailOtherTool(detail); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
List<QuoteDetailBom> componentParts = baseMapper.queryBomComponentPart(bom); |
|
|
|
|
|
// 判断BOM Type是否是Purse |
|
|
|
|
|
if ("Purchase".equals(bom.getBomType())) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private QuoteDetailBom getPurchaseComponentPart(QuoteDetail detail, QuoteDetailBomTree bom,Integer lineSequence ) { |
|
|
QuoteDetailBom purchase = new QuoteDetailBom(); |
|
|
QuoteDetailBom purchase = new QuoteDetailBom(); |
|
|
purchase.setQuoteDetailId(detail.getId()); |
|
|
purchase.setQuoteDetailId(detail.getId()); |
|
|
purchase.setQuoteId(detail.getQuoteId()); |
|
|
purchase.setQuoteId(detail.getQuoteId()); |
|
|
@ -117,38 +157,13 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
purchase.setUnitPrice(price); |
|
|
purchase.setUnitPrice(price); |
|
|
purchase.setActualPrice(price); |
|
|
purchase.setActualPrice(price); |
|
|
purchase.setQuotePrice(price); |
|
|
purchase.setQuotePrice(price); |
|
|
purchase.setLineSequence(componentParts.size()+1); |
|
|
|
|
|
|
|
|
purchase.setLineSequence(lineSequence); |
|
|
purchase.setBomFlag("N"); |
|
|
purchase.setBomFlag("N"); |
|
|
purchase.setStatus(bom.getStatus()); |
|
|
purchase.setStatus(bom.getStatus()); |
|
|
componentParts.add(purchase); |
|
|
|
|
|
|
|
|
return purchase; |
|
|
} |
|
|
} |
|
|
log.info("BOM子物料:{}",componentParts); |
|
|
|
|
|
// 3、查询子物料是否存在BOM信息 |
|
|
|
|
|
for (QuoteDetailBom component : componentParts) { |
|
|
|
|
|
component.setCreateBy(detail.getCreateBy()); |
|
|
|
|
|
component.setCreateDate(detail.getCreateDate()); |
|
|
|
|
|
QuoteDetail quoteDetail = createQuoteDetail(detail, component); |
|
|
|
|
|
// 如过存在表示是Purchase |
|
|
|
|
|
if (StringUtils.isEmpty(component.getBomFlag())){ |
|
|
|
|
|
component.setBomFlag("Y"); |
|
|
|
|
|
} |
|
|
|
|
|
// 物料是半成品 |
|
|
|
|
|
QuoteDetailBomTree bomTree = isComponentBom(quoteDetail); |
|
|
|
|
|
if (Objects.nonNull(bomTree) && "Y".equals(component.getBomFlag())) { |
|
|
|
|
|
long id = initQuoteDetailBomTree(quoteDetail ,bom.getId(),level+1); |
|
|
|
|
|
// 如果是BOM 为子料绑定是哪个Bom |
|
|
|
|
|
component.setBomId(id); |
|
|
|
|
|
// 半成品 价格为0 |
|
|
|
|
|
component.setUnitPrice(BigDecimal.ZERO); |
|
|
|
|
|
component.setActualPrice(BigDecimal.ZERO); |
|
|
|
|
|
component.setQuotePrice(BigDecimal.ZERO); |
|
|
|
|
|
}else{ |
|
|
|
|
|
component.setBomFlag("N"); |
|
|
|
|
|
} |
|
|
|
|
|
if ("Y".equals(component.getStatus())){ |
|
|
|
|
|
// SysUserEntity user = (SysUserEntity)SecurityUtils.getSubject().getPrincipal(); |
|
|
|
|
|
// 获取用户信息 |
|
|
|
|
|
// SysUserEntity sysUser = sysUserService.getById(user.getUserId()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void getFinalPartCost(QuoteDetailBom component) { |
|
|
PartInformationEntity part = new PartInformationEntity(); |
|
|
PartInformationEntity part = new PartInformationEntity(); |
|
|
part.setSite(component.getSite()); |
|
|
part.setSite(component.getSite()); |
|
|
part.setPartNo(component.getComponentPart()); |
|
|
part.setPartNo(component.getComponentPart()); |
|
|
@ -179,12 +194,6 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
//新增子物料信息 |
|
|
|
|
|
component.setTreeId(bom.getId()); |
|
|
|
|
|
quoteDetailBomService.save(component); |
|
|
|
|
|
} |
|
|
|
|
|
return bom.getId(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private QuoteDetailBomTree isComponentBom(QuoteDetail component) { |
|
|
private QuoteDetailBomTree isComponentBom(QuoteDetail component) { |
|
|
// 根据子物料信息检查是否有BOM信息 |
|
|
// 根据子物料信息检查是否有BOM信息 |
|
|
|