|
|
|
@ -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); |
|
|
|
} |
|
|
|
|