From b10c892d91f540c1ce7e70a4b6fb1b79d18f1770 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Fri, 13 Mar 2026 17:11:35 +0800 Subject: [PATCH] =?UTF-8?q?2026-03-13=20=E6=8A=A5=E4=BB=B7=E7=9A=84?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E9=A1=B5=E7=AD=BE=EF=BC=8C=E6=9C=BA=E5=99=A8?= =?UTF-8?q?=E6=88=90=E6=9C=AC=E5=92=8C=E4=BA=BA=E5=B7=A5=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E4=B9=9F=E6=8B=86=E5=BC=80=EF=BC=8C=E5=88=86=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E5=92=8C=E8=B0=83=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quote/entity/QuoteDetailRouting.java | 12 +++ .../impl/QuoteDetailRoutingServiceImpl.java | 91 +++++++++---------- 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/spring/modules/quote/entity/QuoteDetailRouting.java b/src/main/java/com/spring/modules/quote/entity/QuoteDetailRouting.java index 0729640c..933b7549 100644 --- a/src/main/java/com/spring/modules/quote/entity/QuoteDetailRouting.java +++ b/src/main/java/com/spring/modules/quote/entity/QuoteDetailRouting.java @@ -119,12 +119,24 @@ public class QuoteDetailRouting { @TableField(exist = false) private BigDecimal totalLaborCost; + @TableField(exist = false) + private BigDecimal totalLaborRunCost; // 人工成本-生产 + + @TableField(exist = false) + private BigDecimal totalLaborSetupCost; // 人工成本-调机 + @TableField(exist = false) private BigDecimal totalManCost; @TableField(exist = false) private BigDecimal totalMachCost; + @TableField(exist = false) + private BigDecimal totalMachRunCost; // 机器成本-生产 + + @TableField(exist = false) + private BigDecimal totalMachSetupCost; // 机器成本-调机 + @TableField(exist = false) private BigDecimal totalCost; } diff --git a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java index d01bbc32..d88d9565 100644 --- a/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java +++ b/src/main/java/com/spring/modules/quote/service/impl/QuoteDetailRoutingServiceImpl.java @@ -57,25 +57,32 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl ids = quoteDetailBomTreeService.getAllChildIds(detail, quoteDetailRouting.getTreeId()); ids.add(quoteDetailRouting.getTreeId()); 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())); + fillCosts(o, detail.getQty()); 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())); + fillCosts(o, detail.getQty()); return o; }).collect(Collectors.toList()); } + private void fillCosts(QuoteDetailRouting o, BigDecimal qty) { + BigDecimal[] laborParts = laborCostParts(o, qty); + o.setTotalLaborSetupCost(laborParts[0].setScale(6, RoundingMode.HALF_UP)); + o.setTotalLaborRunCost(laborParts[1].setScale(6, RoundingMode.HALF_UP)); + o.setTotalLaborCost(laborParts[0].add(laborParts[1]).setScale(6, RoundingMode.HALF_UP)); + + BigDecimal[] machParts = machineCostParts(o, qty); + o.setTotalMachSetupCost(machParts[0].setScale(6, RoundingMode.HALF_UP)); + o.setTotalMachRunCost(machParts[1].setScale(6, RoundingMode.HALF_UP)); + o.setTotalMachCost(machParts[0].add(machParts[1]).setScale(6, RoundingMode.HALF_UP)); + + o.setTotalManCost(manufactureCost(o, qty)); + o.setTotalCost(o.getTotalLaborCost().add(o.getTotalManCost()).add(o.getTotalMachCost())); + } + private BigDecimal unitProcessingTime(QuoteDetailRouting routing, BigDecimal produceQty, BigDecimal moq) { BigDecimal processingTime = BigDecimal.ZERO; if ("小时".equals(routing.getRunTimeDesc())) { @@ -95,53 +102,46 @@ public class QuoteDetailRoutingServiceImpl extends ServiceImpl 0) { - // 加工中心成本 BigDecimal workCenterCost = quoteDetailRouting.getWorkCenterCost(); - // 调机时间 BigDecimal setupTime = quoteDetailRouting.getMachSetupTime(); - // 加工中心成本*调机时间/moq setupCost = workCenterCost.multiply(setupTime.divide(qty, 16, RoundingMode.HALF_UP)); - BigDecimal manufactureCost = BigDecimal.ZERO; - // 单位产出 BigDecimal machCycleTime = unitProcessingTime(quoteDetailRouting, quoteDetailRouting.getMachRunFactor(), qty); - // 效率 BigDecimal efficiencyFactor = quoteDetailRouting.getEfficiencyFactor(); - // 损耗率 BigDecimal shrinkageFactor = quoteDetailRouting.getShrinkageFactor(); - // 加工中心成本*调机时间/moq+加工中心成本/效率/单位产出/(1-损耗率) - // 加工中心成本/效率/单位产出/(1-损耗率) - // 加工中心成本/效率/100 BigDecimal num1 = workCenterCost.divide(efficiencyFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP), 16, RoundingMode.HALF_UP); - // 加工中心成本/效率/100/单位产出 BigDecimal num2 = num1.multiply(machCycleTime); - // 加工中心成本/效率/100/单位产出/(1-损耗率/100) - manufactureCost = num2.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP); - - setupCost = setupCost.add(manufactureCost); + runCost = num2.divide(BigDecimal.ONE.subtract(shrinkageFactor.divide(BigDecimal.valueOf(100), 16, RoundingMode.HALF_UP)), 16, RoundingMode.HALF_UP); } - return setupCost.setScale(6, RoundingMode.HALF_UP); + return new BigDecimal[]{setupCost, runCost}; + } + + private BigDecimal machineCost(QuoteDetailRouting quoteDetailRouting, BigDecimal qty) { + BigDecimal[] parts = machineCostParts(quoteDetailRouting, qty); + return parts[0].add(parts[1]).setScale(6, RoundingMode.HALF_UP); } @Override