Browse Source

2025-04-10

master
qiezi 9 months ago
parent
commit
f50b2af215
  1. 89
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java
  2. 3
      src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml

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

@ -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);
}
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");
return purchase;
} }
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());
@ -165,7 +180,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
component.setUnitPrice(BigDecimal.ZERO); component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO); component.setActualPrice(BigDecimal.ZERO);
component.setQuotePrice(BigDecimal.ZERO); component.setQuotePrice(BigDecimal.ZERO);
log.error("PartNo:{},Site:{},成本信息异常:{}",component.getPartNo(),component.getSite(),e.getMessage());
log.error("PartNo:{},Site:{},成本信息异常:{}", component.getPartNo(), component.getSite(),e.getMessage());
} }
}else { }else {
// 接口返回异常,处理成本数据为0 // 接口返回异常,处理成本数据为0
@ -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信息

3
src/main/resources/mapper/quote/QuoteDetailBomTreeMapper.xml

@ -96,7 +96,8 @@
#{quoteDetailId} as quote_detail_id, #{quoteDetailId} as quote_detail_id,
#{quoteDetailItemNo} as quote_detail_item_no, #{quoteDetailItemNo} as quote_detail_item_no,
#{versionNo} as version_no, #{versionNo} as version_no,
p.status
p.status,
'N' as bomFlag
from plm_bom_component pbc from plm_bom_component pbc
left join part p on p.site = pbc.site and p.part_no = pbc.component_part left join part p on p.site = pbc.site and p.part_no = pbc.component_part
where pbc.site = #{site} where pbc.site = #{site}

Loading…
Cancel
Save