diff --git a/src/main/java/com/xujie/sys/modules/quote/entity/QuoteDetailRouting.java b/src/main/java/com/xujie/sys/modules/quote/entity/QuoteDetailRouting.java index b016e7b6..6c7f3377 100644 --- a/src/main/java/com/xujie/sys/modules/quote/entity/QuoteDetailRouting.java +++ b/src/main/java/com/xujie/sys/modules/quote/entity/QuoteDetailRouting.java @@ -92,6 +92,12 @@ public class QuoteDetailRouting { private Integer resourceNum; + private BigDecimal laborClassCost; + + private BigDecimal setupLaborClassCost; + + private BigDecimal workCenterCost; + @TableField(exist = false) private String partDesc; @@ -103,4 +109,18 @@ public class QuoteDetailRouting { @TableField(exist = false) private Boolean isAllRouting; + @TableField(exist = false) + private Date quoteDate; + + @TableField(exist = false) + private BigDecimal totalLaborCost; + + @TableField(exist = false) + private BigDecimal totalManCost; + + @TableField(exist = false) + private BigDecimal totalMachCost; + + @TableField(exist = false) + private BigDecimal totalCost; } diff --git a/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java b/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java index c606d5b9..e0b1f06a 100644 --- a/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailBomServiceImpl.java @@ -77,7 +77,7 @@ public class QuoteDetailBomServiceImpl extends ServiceImpl ids = quoteDetailBomTreeService.getAllChildIds(detail, quoteDetailRouting.getTreeId()); ids.add(quoteDetailRouting.getTreeId()); - return baseMapper.queryQuoteDetailRoutingByTreeIds(ids); + return baseMapper.queryQuoteDetailRoutingByTreeIds(ids).stream().map(o->{ + o.setTotalLaborCost(laborCost(o,detail.getQty())); + o.setTotalManCost(manufactureCost(o,detail.getQty())); + o.setTotalMachCost(machineCost(o,detail.getQty())); + + o.setTotalCost(o.getTotalLaborCost().add(o.getTotalManCost()).add(o.getTotalMachCost())); + return o; + }).collect(Collectors.toList()); + } + return baseMapper.queryQuoteDetailRouting(quoteDetailRouting).stream().map(o->{ + o.setTotalLaborCost(laborCost(o,detail.getQty())); + o.setTotalManCost(manufactureCost(o,detail.getQty())); + o.setTotalMachCost(machineCost(o,detail.getQty())); + + o.setTotalCost(o.getTotalLaborCost().add(o.getTotalManCost()).add(o.getTotalMachCost())); + return o; + }).collect(Collectors.toList()); + } + + private BigDecimal laborCost(QuoteDetailRouting quoteDetailRouting,BigDecimal qty){ + + BigDecimal setupCost = BigDecimal.ZERO; + if (Objects.nonNull(quoteDetailRouting.getSetupLaborClassCost()) && quoteDetailRouting.getSetupLaborClassCost().compareTo(BigDecimal.ZERO) > 0){ + BigDecimal setupLaborClassCost = quoteDetailRouting.getSetupLaborClassCost(); + BigDecimal setupCrewSize = quoteDetailRouting.getSetupCrewSize(); + BigDecimal laborSetupTime = quoteDetailRouting.getLaborSetupTime(); + setupCost = setupLaborClassCost.multiply(setupCrewSize).multiply(laborSetupTime).divide(qty,4, RoundingMode.HALF_UP); + } + BigDecimal laborCost = BigDecimal.ZERO; + if (Objects.nonNull(quoteDetailRouting.getLaborClassCost()) && quoteDetailRouting.getLaborClassCost().compareTo(BigDecimal.ZERO) > 0){ + BigDecimal laborClassCost = quoteDetailRouting.getLaborClassCost(); + BigDecimal laborCycleTime = quoteDetailRouting.getLaborCycleTime(); + BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); + BigDecimal crewSize = quoteDetailRouting.getCrewSize(); + // 人工生产时间/(效率*100) + BigDecimal needTime = laborCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP), 6, RoundingMode.HALF_UP); + laborCost = needTime.multiply(laborClassCost).multiply(crewSize); + } + return setupCost.add(laborCost).setScale(4, RoundingMode.HALF_UP); + } + + private BigDecimal manufactureCost(QuoteDetailRouting quoteDetailRouting,BigDecimal qty){ + BigDecimal setupCost = BigDecimal.ZERO; + if (Objects.nonNull(quoteDetailRouting.getWorkCenterCost()) && quoteDetailRouting.getWorkCenterCost().compareTo(BigDecimal.ZERO) > 0){ + BigDecimal workCenterCost = quoteDetailRouting.getWorkCenterCost(); + BigDecimal setupTime = quoteDetailRouting.getMachSetupTime(); + setupCost = workCenterCost.multiply(setupTime.divide(qty,6, RoundingMode.HALF_UP)); + + BigDecimal manufactureCost = BigDecimal.ZERO; + BigDecimal machCycleTime = quoteDetailRouting.getMachCycleTime(); + BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); + manufactureCost = workCenterCost.multiply(machCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP),6, RoundingMode.HALF_UP).divide(qty,6, RoundingMode.HALF_UP)); + setupCost = setupCost.add(manufactureCost); + } + return setupCost.setScale(4, RoundingMode.HALF_UP); + } + + private BigDecimal machineCost(QuoteDetailRouting quoteDetailRouting,BigDecimal qty){ + BigDecimal setupCost = BigDecimal.ZERO; + if (Objects.nonNull(quoteDetailRouting.getWorkCenterCost()) && quoteDetailRouting.getWorkCenterCost().compareTo(BigDecimal.ZERO) > 0){ + BigDecimal workCenterCost = quoteDetailRouting.getWorkCenterCost(); + BigDecimal setupTime = quoteDetailRouting.getMachSetupTime(); + setupCost = workCenterCost.multiply(setupTime.divide(qty,6, RoundingMode.HALF_UP)); + + BigDecimal manufactureCost = BigDecimal.ZERO; + BigDecimal machCycleTime = quoteDetailRouting.getMachCycleTime(); + BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); + manufactureCost = workCenterCost.multiply(machCycleTime.divide(efficiencyFactor.divide(BigDecimal.valueOf(100),6, RoundingMode.HALF_UP),6, RoundingMode.HALF_UP).divide(qty,6, RoundingMode.HALF_UP)); + setupCost = setupCost.add(manufactureCost); } - return baseMapper.queryQuoteDetailRouting(quoteDetailRouting); + return setupCost.setScale(4, RoundingMode.HALF_UP); } @Override diff --git a/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailServiceImpl.java b/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailServiceImpl.java index c62f7206..8af89366 100644 --- a/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/quote/service/impl/QuoteDetailServiceImpl.java @@ -182,7 +182,14 @@ public class QuoteDetailServiceImpl extends ServiceImpl routingList = quoteDetailRoutingService.queryQuoteDetailRouting(routing); + for (QuoteDetailRouting quoteDetailRouting : routingList) { + labourCost = labourCost.add(quoteDetailRouting.getTotalLaborCost()); + machineCost = machineCost.add(quoteDetailRouting.getTotalMachCost()); + manufactureCost = manufactureCost.add(quoteDetailRouting.getTotalManCost()); + } } // 传入map map.put("toolCost", toolCost); @@ -200,6 +218,9 @@ public class QuoteDetailServiceImpl extends ServiceImpl