Browse Source

2025-03-12

master
qiezi 12 months 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. 8
      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
private String bomFlag;
private Long bomId;
@TableField(exist = false)
private String partDesc;
@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> {
void initQuoteDetailBomTree(QuoteDetail detail, Long parentId, Integer level);
long initQuoteDetailBomTree(QuoteDetail detail, Long parentId, Integer level);
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;
@Override
@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的物料)
if (parentId.equals(0L)){
detail.setBomType("Manufacturing");
}
QuoteDetailBomTree bom = baseMapper.queryPartBom(detail);
if (Objects.isNull(bom)){
return;
return 0;
}
bom.setParentId(parentId);
bom.setLevel(level);
@ -121,7 +121,9 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
// 物料是半成品
QuoteDetailBomTree bomTree = isComponentBom(quoteDetail);
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
component.setUnitPrice(BigDecimal.ZERO);
component.setActualPrice(BigDecimal.ZERO);
@ -167,6 +169,7 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
component.setTreeId(bom.getId());
quoteDetailBomService.save(component);
}
return bom.getId();
}
private QuoteDetailBomTree isComponentBom(QuoteDetail component) {
@ -250,7 +253,11 @@ public class QuoteDetailBomTreeServiceImpl extends ServiceImpl<QuoteDetailBomTre
detail.setBomType(tree.getBomType());
detail.setEngChgLevel(tree.getEngChgLevel());
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 {
QuoteDetail detail = new QuoteDetail();
detail.setQuoteId(tree.getQuoteId());

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

@ -291,9 +291,11 @@ public class QuoteDetailServiceImpl extends ServiceImpl<QuoteDetailMapper, Quote
BigDecimal qtyPerAssembly = BigDecimal.ONE;
for (QuoteDetailBom bom : parentBomList) {
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);
qtyPerAssembly = qtyPerAssembly.multiply(decimal);
if (bomTree.getId().equals(bom.getBomId())) {
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);
qtyPerAssembly = qtyPerAssembly.multiply(decimal);
}
}
// 计算 损耗和用量得到的差异
bomLabourCost = bomLabourCost.multiply(qtyPerAssembly);

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

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

Loading…
Cancel
Save