Browse Source

2025-03-12

master
qiezi 1 year ago
parent
commit
032de9c8c0
  1. 2
      src/main/java/com/spring/modules/quote/entity/QuoteDetailBom.java
  2. 2
      src/main/java/com/spring/modules/quote/service/QuoteDetailBomTreeService.java
  3. 15
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomTreeServiceImpl.java
  4. 2
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java
  5. 6
      src/main/resources/mapper/quote/QuoteDetailBomMapper.xml

2
src/main/java/com/spring/modules/quote/entity/QuoteDetailBom.java

@ -83,6 +83,8 @@ public class QuoteDetailBom {
// 是否是BOM // 是否是BOM
private String bomFlag; private String bomFlag;
private Long bomId;
@TableField(exist = false) @TableField(exist = false)
private String partDesc; private String partDesc;
@TableField(exist = false) @TableField(exist = false)

2
src/main/java/com/spring/modules/quote/service/QuoteDetailBomTreeService.java

@ -11,7 +11,7 @@ import java.util.List;
public interface QuoteDetailBomTreeService extends IService<QuoteDetailBomTree> { public interface QuoteDetailBomTreeService extends IService<QuoteDetailBomTree> {
void initQuoteDetailBomTree(QuoteDetail detail, Long parentId, Integer level);
long initQuoteDetailBomTree(QuoteDetail detail, Long parentId, Integer level);
List<QuoteDetailBomTree> queryDetailBomTree(QuoteDetail detail); List<QuoteDetailBomTree> queryDetailBomTree(QuoteDetail detail);

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

@ -42,14 +42,14 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
private BaseSearchBean baseSearchBean; private BaseSearchBean baseSearchBean;
@Override @Override
@Transactional @Transactional
public void initQuoteDetailBomTree(QuoteDetail detail, Long parentId, Integer level) {
public long initQuoteDetailBomTree(QuoteDetail detail, Long parentId, Integer level) {
// 1通过PartNoSite和BuNo 查询BOM信息 失效日期日期为空 替代为* 和Routing (存在BOM的物料) // 1通过PartNoSite和BuNo 查询BOM信息 失效日期日期为空 替代为* 和Routing (存在BOM的物料)
if (parentId.equals(0L)){ if (parentId.equals(0L)){
detail.setBomType("Manufacturing"); detail.setBomType("Manufacturing");
} }
QuoteDetailBomTree bom = baseMapper.queryPartBom(detail); QuoteDetailBomTree bom = baseMapper.queryPartBom(detail);
if (Objects.isNull(bom)){ if (Objects.isNull(bom)){
return;
return 0;
} }
bom.setParentId(parentId); bom.setParentId(parentId);
bom.setLevel(level); bom.setLevel(level);
@ -121,7 +121,9 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
// 物料是半成品 // 物料是半成品
QuoteDetailBomTree bomTree = isComponentBom(quoteDetail); QuoteDetailBomTree bomTree = isComponentBom(quoteDetail);
if (Objects.nonNull(bomTree) && "Y".equals(component.getBomFlag())) { if (Objects.nonNull(bomTree) && "Y".equals(component.getBomFlag())) {
initQuoteDetailBomTree(quoteDetail ,bom.getId(),level+1);
long id = initQuoteDetailBomTree(quoteDetail ,bom.getId(),level+1);
// 如果是BOM 为子料绑定是哪个Bom
component.setBomId(id);
// 半成品 价格为0 // 半成品 价格为0
component.setUnitPrice(BigDecimal.ZERO); component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO); component.setActualPrice(BigDecimal.ZERO);
@ -167,6 +169,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
component.setTreeId(bom.getId()); component.setTreeId(bom.getId());
quoteDetailBomService.save(component); quoteDetailBomService.save(component);
} }
return bom.getId();
} }
private QuoteDetailBomTree isComponentBom(QuoteDetail component) { private QuoteDetailBomTree isComponentBom(QuoteDetail component) {
@ -250,7 +253,11 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
detail.setBomType(tree.getBomType()); detail.setBomType(tree.getBomType());
detail.setEngChgLevel(tree.getEngChgLevel()); detail.setEngChgLevel(tree.getEngChgLevel());
detail.setAlternativeNo(tree.getAlternativeNo()); detail.setAlternativeNo(tree.getAlternativeNo());
initQuoteDetailBomTree(detail, bomTree.getParentId(), Optional.ofNullable(tree.getLevel()).orElse(0));
long bomId = initQuoteDetailBomTree(detail, bomTree.getParentId(), Optional.ofNullable(tree.getLevel()).orElse(0));
quoteDetailBomService.lambdaUpdate()
.set(QuoteDetailBom::getBomId,bomId)
.eq(QuoteDetailBom::getBomId,bomTree.getId())
.update();
}else { }else {
QuoteDetail detail = new QuoteDetail(); QuoteDetail detail = new QuoteDetail();
detail.setQuoteId(tree.getQuoteId()); detail.setQuoteId(tree.getQuoteId());

2
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailServiceImpl.java

@ -291,10 +291,12 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
BigDecimal qtyPerAssembly = BigDecimal.ONE; BigDecimal qtyPerAssembly = BigDecimal.ONE;
for (QuoteDetailBom bom : parentBomList) { for (QuoteDetailBom bom : parentBomList) {
if (bomTree.getId().equals(bom.getBomId())) {
BigDecimal yield = BigDecimal.ONE.subtract(bom.getShrinkageFactor().divide( BigDecimal.valueOf(100),16,RoundingMode.HALF_UP)); BigDecimal yield = BigDecimal.ONE.subtract(bom.getShrinkageFactor().divide( BigDecimal.valueOf(100),16,RoundingMode.HALF_UP));
BigDecimal decimal = bom.getQtyPerAssembly().divide(yield, 16, RoundingMode.HALF_UP); BigDecimal decimal = bom.getQtyPerAssembly().divide(yield, 16, RoundingMode.HALF_UP);
qtyPerAssembly = qtyPerAssembly.multiply(decimal); qtyPerAssembly = qtyPerAssembly.multiply(decimal);
} }
}
// 计算 损耗和用量得到的差异 // 计算 损耗和用量得到的差异
bomLabourCost = bomLabourCost.multiply(qtyPerAssembly); bomLabourCost = bomLabourCost.multiply(qtyPerAssembly);
bomMachineCost = bomMachineCost.multiply(qtyPerAssembly); bomMachineCost = bomMachineCost.multiply(qtyPerAssembly);

6
src/main/resources/mapper/quote/QuoteDetailBomMapper.xml

@ -36,7 +36,8 @@
qdb.unit_price, qdb.unit_price,
qdb.actual_price, qdb.actual_price,
qdb.quote_price, qdb.quote_price,
qdb.bom_flag
qdb.bom_flag,
qdb.bom_id
from plm_quote_detail_bom qdb from plm_quote_detail_bom qdb
left join part p on qdb.site = p.site and qdb.component_part = p.part_no left join part p on qdb.site = p.site and qdb.component_part = p.part_no
where quote_detail_id = #{quoteDetailId} where quote_detail_id = #{quoteDetailId}
@ -79,7 +80,8 @@
qdb.unit_price, qdb.unit_price,
qdb.actual_price, qdb.actual_price,
qdb.quote_price, qdb.quote_price,
qdb.bom_flag
qdb.bom_flag,
qdb.bom_id
from plm_quote_detail_bom qdb from plm_quote_detail_bom qdb
left join part p on qdb.site = p.site and qdb.component_part = p.part_no left join part p on qdb.site = p.site and qdb.component_part = p.part_no
<where> <where>

Loading…
Cancel
Save