|
|
@ -64,18 +64,18 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private BigDecimal unitProcessingTime(QuoteDetailRouting routing,BigDecimal qty){ |
|
|
|
|
|
|
|
|
private BigDecimal unitProcessingTime(QuoteDetailRouting routing,BigDecimal produceQty,BigDecimal moq){ |
|
|
BigDecimal processingTime = BigDecimal.ZERO; |
|
|
BigDecimal processingTime = BigDecimal.ZERO; |
|
|
if ("小时".equals(routing.getRunTimeDesc())){ |
|
|
if ("小时".equals(routing.getRunTimeDesc())){ |
|
|
processingTime = qty; |
|
|
|
|
|
}else if ("单位/小时".equals(routing.getRunTimeDesc())){ |
|
|
|
|
|
processingTime = qty; |
|
|
|
|
|
|
|
|
processingTime = produceQty.multiply(moq); |
|
|
}else if ("小时/单位".equals(routing.getRunTimeDesc())){ |
|
|
}else if ("小时/单位".equals(routing.getRunTimeDesc())){ |
|
|
processingTime = BigDecimal.ONE.divide(qty,16,RoundingMode.HALF_UP); |
|
|
|
|
|
|
|
|
processingTime = produceQty; |
|
|
|
|
|
}else if ("单位/小时".equals(routing.getRunTimeDesc())){ |
|
|
|
|
|
processingTime = BigDecimal.ONE.divide(produceQty,16,RoundingMode.HALF_UP); |
|
|
}else { |
|
|
}else { |
|
|
processingTime = BigDecimal.ONE; |
|
|
processingTime = BigDecimal.ONE; |
|
|
} |
|
|
} |
|
|
if (BigDecimal.ZERO.compareTo(qty)==0){ |
|
|
|
|
|
|
|
|
if (BigDecimal.ZERO.compareTo(produceQty)==0){ |
|
|
return BigDecimal.ZERO; |
|
|
return BigDecimal.ZERO; |
|
|
} |
|
|
} |
|
|
return processingTime; |
|
|
return processingTime; |
|
|
@ -102,7 +102,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin |
|
|
// 单位产出 |
|
|
// 单位产出 |
|
|
BigDecimal laborCycleTime = BigDecimal.ZERO; |
|
|
BigDecimal laborCycleTime = BigDecimal.ZERO; |
|
|
if (!(Objects.isNull(quoteDetailRouting.getLaborRunFactor()) || BigDecimal.ZERO.compareTo(quoteDetailRouting.getLaborRunFactor())== 0) ){ |
|
|
if (!(Objects.isNull(quoteDetailRouting.getLaborRunFactor()) || BigDecimal.ZERO.compareTo(quoteDetailRouting.getLaborRunFactor())== 0) ){ |
|
|
laborCycleTime = unitProcessingTime(quoteDetailRouting,quoteDetailRouting.getLaborRunFactor()); |
|
|
|
|
|
|
|
|
laborCycleTime = unitProcessingTime(quoteDetailRouting,quoteDetailRouting.getLaborRunFactor(),qty); |
|
|
} |
|
|
} |
|
|
// 效率 |
|
|
// 效率 |
|
|
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); |
|
|
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); |
|
|
@ -110,7 +110,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin |
|
|
BigDecimal crewSize = quoteDetailRouting.getCrewSize(); |
|
|
BigDecimal crewSize = quoteDetailRouting.getCrewSize(); |
|
|
// 损耗 |
|
|
// 损耗 |
|
|
BigDecimal shrinkageFactor = quoteDetailRouting.getShrinkageFactor(); |
|
|
BigDecimal shrinkageFactor = quoteDetailRouting.getShrinkageFactor(); |
|
|
//人员等级成本/单位产出/效率/(1-损耗率)*人数 |
|
|
|
|
|
|
|
|
//人员等级成本*单位产出/效率/(1-损耗率)*人数 |
|
|
// 调机人员等级成本*调机人员数量*人员调机时间/moq+人员等级成本/单位产出/效率/(1-损耗率)*人数 |
|
|
// 调机人员等级成本*调机人员数量*人员调机时间/moq+人员等级成本/单位产出/效率/(1-损耗率)*人数 |
|
|
// 单位产出/效率/100 |
|
|
// 单位产出/效率/100 |
|
|
BigDecimal num1 = laborCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP); |
|
|
BigDecimal num1 = laborCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP); |
|
|
@ -122,9 +122,9 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin |
|
|
// 单位产出/效率/100/(1-损耗率)*人数 |
|
|
// 单位产出/效率/100/(1-损耗率)*人数 |
|
|
if (num2.compareTo(BigDecimal.ZERO)!=0){ |
|
|
if (num2.compareTo(BigDecimal.ZERO)!=0){ |
|
|
|
|
|
|
|
|
BigDecimal num3 = num2.multiply(crewSize); |
|
|
|
|
|
|
|
|
// BigDecimal num3 = num2; |
|
|
// 人员等级成本/单位产出/效率/100/(1-损耗率)*人数 |
|
|
// 人员等级成本/单位产出/效率/100/(1-损耗率)*人数 |
|
|
laborCost = laborClassCost.divide(num3, 16, RoundingMode.HALF_UP); |
|
|
|
|
|
|
|
|
laborCost = laborClassCost.multiply(num2).multiply(crewSize); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return setupCost.add(laborCost).setScale(4, RoundingMode.HALF_UP); |
|
|
return setupCost.add(laborCost).setScale(4, RoundingMode.HALF_UP); |
|
|
@ -163,7 +163,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin |
|
|
|
|
|
|
|
|
BigDecimal manufactureCost = BigDecimal.ZERO; |
|
|
BigDecimal manufactureCost = BigDecimal.ZERO; |
|
|
// 单位产出 |
|
|
// 单位产出 |
|
|
BigDecimal machCycleTime = unitProcessingTime(quoteDetailRouting,quoteDetailRouting.getMachRunFactor()); |
|
|
|
|
|
|
|
|
BigDecimal machCycleTime = unitProcessingTime(quoteDetailRouting,quoteDetailRouting.getMachRunFactor(),qty); |
|
|
// 效率 |
|
|
// 效率 |
|
|
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); |
|
|
BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); |
|
|
// 损耗率 |
|
|
// 损耗率 |
|
|
@ -173,7 +173,7 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl<QuoteDetailRoutin |
|
|
// 加工中心成本/效率/100 |
|
|
// 加工中心成本/效率/100 |
|
|
BigDecimal num1 = workCenterCost.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP); |
|
|
BigDecimal num1 = workCenterCost.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP); |
|
|
// 加工中心成本/效率/100/单位产出 |
|
|
// 加工中心成本/效率/100/单位产出 |
|
|
BigDecimal num2 = num1.divide(machCycleTime, 16, RoundingMode.HALF_UP); |
|
|
|
|
|
|
|
|
BigDecimal num2 = num1.multiply(machCycleTime); |
|
|
// 加工中心成本/效率/100/单位产出/(1-损耗率/100) |
|
|
// 加工中心成本/效率/100/单位产出/(1-损耗率/100) |
|
|
manufactureCost = num2.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP); |
|
|
manufactureCost = num2.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP); |
|
|
|
|
|
|
|
|
|