Browse Source

2025-1-14

master
qiezi 1 year ago
parent
commit
03d21a0a6f
  1. 6
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailBomServiceImpl.java
  2. 20
      src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java

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

@ -72,12 +72,12 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl<QuoteDetailBomMapper,
if (qty.compareTo(BigDecimal.ZERO) == 0) {
return BigDecimal.ZERO;
}
BigDecimal componentUnitScrap = componentScrap.divide(qty, 4, 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)
.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP)
.add(componentUnitScrap);
// (调机用量/数量+单位用量/1-损耗率)*单位成本
return needQty.multiply(unitPrice).setScale(4, RoundingMode.HALF_UP);
}

20
src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java

@ -71,7 +71,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
}else if ("小时/单位".equals(routing.getRunTimeDesc())){
processingTime = qty;
}else if ("单位/小时".equals(routing.getRunTimeDesc())){
processingTime = BigDecimal.ONE.divide(qty,4,RoundingMode.HALF_UP);
processingTime = BigDecimal.ONE.divide(qty,16,RoundingMode.HALF_UP);
}
if (BigDecimal.ZERO.compareTo(qty)==0){
return BigDecimal.ZERO;
@ -79,7 +79,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
if (BigDecimal.ZERO.compareTo(processingTime) == 0){
return processingTime;
}
return processingTime.divide(qty,4,RoundingMode.HALF_UP);
return processingTime.divide(qty,16,RoundingMode.HALF_UP);
}
private BigDecimal laborCost(QuoteDetailRouting quoteDetailRouting,BigDecimal qty){
@ -94,7 +94,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
if (Objects.nonNull(setupLaborClassCost) && Objects.nonNull(setupCrewSize) && Objects.nonNull(laborSetupTime)){
if (BigDecimal.ZERO.compareTo(setupLaborClassCost) != 0 && BigDecimal.ZERO.compareTo(setupCrewSize) != 0 && BigDecimal.ZERO.compareTo(laborSetupTime) != 0){
// 调机人员等级成本*调机人员数量*人员调机时间/moq
setupCost = setupLaborClassCost.multiply(setupCrewSize).multiply(laborSetupTime).divide(qty,4, RoundingMode.HALF_UP);
setupCost = setupLaborClassCost.multiply(setupCrewSize).multiply(laborSetupTime).divide(qty,16, RoundingMode.HALF_UP);
}
}
BigDecimal laborCost = BigDecimal.ZERO;
@ -114,18 +114,18 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
//人员等级成本/单位产出/效率/1-损耗率*人数
// 单位产出/效率/100
BigDecimal num1 = laborCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP), 4, RoundingMode.HALF_UP);
BigDecimal num1 = laborCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP);
// 单位产出/效率/100/1-损耗率/100
BigDecimal num2 = BigDecimal.ZERO;
if (Objects.nonNull(shrinkageFactor)){
num2= num1.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP)), 6, RoundingMode.HALF_UP);
num2= num1.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP);
}
// 单位产出/效率/100/1-损耗率*人数
if (num2.compareTo(BigDecimal.ZERO)!=0){
BigDecimal num3 = num2.multiply(crewSize);
// 人员等级成本/单位产出/效率/100/1-损耗率*人数
laborCost = laborClassCost.divide(num3, 4, RoundingMode.HALF_UP);
laborCost = laborClassCost.divide(num3, 16, RoundingMode.HALF_UP);
}
return setupCost.add(laborCost).setScale(4, RoundingMode.HALF_UP);
@ -160,7 +160,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
// 调机时间
BigDecimal setupTime = quoteDetailRouting.getMachSetupTime();
// 加工中心成本*调机时间/moq
setupCost = workCenterCost.multiply(setupTime.divide(qty,6, RoundingMode.HALF_UP));
setupCost = workCenterCost.multiply(setupTime.divide(qty,16, RoundingMode.HALF_UP));
BigDecimal manufactureCost = BigDecimal.ZERO;
// 单位产出
@ -172,11 +172,11 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin
// 加工中心成本/效率/单位产出/1-损耗率
// 加工中心成本/效率/100
BigDecimal num1 = workCenterCost.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP), 4, RoundingMode.HALF_UP);
BigDecimal num1 = workCenterCost.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP);
// 加工中心成本/效率/100/单位产出
BigDecimal num2 = num1.divide(machCycleTime, 6, RoundingMode.HALF_UP);
BigDecimal num2 = num1.divide(machCycleTime, 16, RoundingMode.HALF_UP);
// 加工中心成本/效率/100/单位产出/1-损耗率/100
manufactureCost = num2.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 6, RoundingMode.HALF_UP)), 6, RoundingMode.HALF_UP);
manufactureCost = num2.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP);
setupCost = setupCost.add(manufactureCost);
}

Loading…
Cancel
Save