|
|
|
@ -148,16 +148,21 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper, |
|
|
|
BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor(); |
|
|
|
// 5、报价数量 |
|
|
|
BigDecimal qty = detail.getQty(); |
|
|
|
if (unitPrice == null || componentScrap == null || qtyPerAssembly == null || shrinkageFactor == null || qty == null) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 6 计算所需数量 |
|
|
|
// 调机单位用量 |
|
|
|
if (qty.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 损耗率为100%时良率为0,无法计算,直接返回0 |
|
|
|
BigDecimal yieldRate = BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)); |
|
|
|
if (yieldRate.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
BigDecimal componentUnitScrap = componentScrap.divide(qty, 16, RoundingMode.HALF_UP); |
|
|
|
BigDecimal needQty = |
|
|
|
qtyPerAssembly |
|
|
|
.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP) |
|
|
|
.add(componentUnitScrap); |
|
|
|
BigDecimal needQty = qtyPerAssembly.divide(yieldRate, 16, RoundingMode.HALF_UP).add(componentUnitScrap); |
|
|
|
// (调机用量/数量+单位用量/1-损耗率)*单位成本 |
|
|
|
return needQty.multiply(unitPrice).setScale(6, RoundingMode.HALF_UP); |
|
|
|
} |
|
|
|
@ -174,17 +179,21 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper, |
|
|
|
BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor(); |
|
|
|
// 5、报价数量 |
|
|
|
BigDecimal qty = detail.getQty(); |
|
|
|
if (actualPrice == null || componentScrap == null || qtyPerAssembly == null || shrinkageFactor == null || qty == null) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 6 计算所需数量 |
|
|
|
// 调机单位用量 |
|
|
|
if (qty.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 损耗率为100%时良率为0,无法计算,直接返回0 |
|
|
|
BigDecimal yieldRate = BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP)); |
|
|
|
if (yieldRate.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
BigDecimal componentUnitScrap = componentScrap.divide(qty, 16, RoundingMode.HALF_UP); |
|
|
|
BigDecimal needQty = |
|
|
|
qtyPerAssembly |
|
|
|
.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP)), 4, RoundingMode.HALF_UP) |
|
|
|
.add(componentUnitScrap); |
|
|
|
|
|
|
|
BigDecimal needQty = qtyPerAssembly.divide(yieldRate, 4, RoundingMode.HALF_UP).add(componentUnitScrap); |
|
|
|
return needQty.multiply(actualPrice).setScale(6, RoundingMode.HALF_UP); |
|
|
|
} |
|
|
|
|
|
|
|
@ -200,16 +209,21 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper, |
|
|
|
BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor(); |
|
|
|
// 5、报价数量 |
|
|
|
BigDecimal qty = detail.getQty(); |
|
|
|
if (quotePrice == null || componentScrap == null || qtyPerAssembly == null || shrinkageFactor == null || qty == null) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 6 计算所需数量 |
|
|
|
// 调机单位用量 |
|
|
|
if (qty.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
// 损耗率为100%时良率为0,无法计算,直接返回0 |
|
|
|
BigDecimal yieldRate = BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP)); |
|
|
|
if (yieldRate.compareTo(BigDecimal.ZERO) == 0) { |
|
|
|
return BigDecimal.ZERO; |
|
|
|
} |
|
|
|
BigDecimal componentUnitScrap = componentScrap.divide(qty, 16, RoundingMode.HALF_UP); |
|
|
|
BigDecimal needQty = |
|
|
|
qtyPerAssembly |
|
|
|
.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP)), 4, RoundingMode.HALF_UP) |
|
|
|
.add(componentUnitScrap); |
|
|
|
BigDecimal needQty = qtyPerAssembly.divide(yieldRate, 4, RoundingMode.HALF_UP).add(componentUnitScrap); |
|
|
|
return needQty.multiply(quotePrice).setScale(6, RoundingMode.HALF_UP); |
|
|
|
} |
|
|
|
|
|
|
|
|