Browse Source

2026-03-17

销售报价材料查询,当损耗率为100时,跳过计算,设置良率为0
master
fengyuan_yang 4 weeks ago
parent
commit
6f440759d5
  1. 40
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomServiceImpl.java

40
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomServiceImpl.java

@ -148,16 +148,21 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor(); BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor();
// 5报价数量 // 5报价数量
BigDecimal qty = detail.getQty(); BigDecimal qty = detail.getQty();
if (unitPrice == null || componentScrap == null || qtyPerAssembly == null || shrinkageFactor == null || qty == null) {
return BigDecimal.ZERO;
}
// 6 计算所需数量 // 6 计算所需数量
// 调机单位用量 // 调机单位用量
if (qty.compareTo(BigDecimal.ZERO) == 0) { if (qty.compareTo(BigDecimal.ZERO) == 0) {
return BigDecimal.ZERO; 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 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-损耗率)*单位成本 // (调机用量/数量+单位用量/1-损耗率)*单位成本
return needQty.multiply(unitPrice).setScale(6, RoundingMode.HALF_UP); return needQty.multiply(unitPrice).setScale(6, RoundingMode.HALF_UP);
} }
@ -174,17 +179,21 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor(); BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor();
// 5报价数量 // 5报价数量
BigDecimal qty = detail.getQty(); BigDecimal qty = detail.getQty();
if (actualPrice == null || componentScrap == null || qtyPerAssembly == null || shrinkageFactor == null || qty == null) {
return BigDecimal.ZERO;
}
// 6 计算所需数量 // 6 计算所需数量
// 调机单位用量 // 调机单位用量
if (qty.compareTo(BigDecimal.ZERO) == 0) { if (qty.compareTo(BigDecimal.ZERO) == 0) {
return BigDecimal.ZERO; 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 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); return needQty.multiply(actualPrice).setScale(6, RoundingMode.HALF_UP);
} }
@ -200,16 +209,21 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor(); BigDecimal shrinkageFactor = quoteDetailBom.getShrinkageFactor();
// 5报价数量 // 5报价数量
BigDecimal qty = detail.getQty(); BigDecimal qty = detail.getQty();
if (quotePrice == null || componentScrap == null || qtyPerAssembly == null || shrinkageFactor == null || qty == null) {
return BigDecimal.ZERO;
}
// 6 计算所需数量 // 6 计算所需数量
// 调机单位用量 // 调机单位用量
if (qty.compareTo(BigDecimal.ZERO) == 0) { if (qty.compareTo(BigDecimal.ZERO) == 0) {
return BigDecimal.ZERO; 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 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); return needQty.multiply(quotePrice).setScale(6, RoundingMode.HALF_UP);
} }

Loading…
Cancel
Save