From 0990b94382d9324735da4bb9f3ca2d18f0732193 Mon Sep 17 00:00:00 2001 From: maxiangong <298222784@qq.com> Date: Thu, 21 May 2026 16:32:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=96=AA=E8=B5=84=E8=AE=A1=E7=AE=97=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pojo/vo/BsSalaryCalculationVO.java | 2 +- .../desk/efficiency/util/BsSalaryUtil.java | 46 +++++++------------ 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/pojo/vo/BsSalaryCalculationVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/pojo/vo/BsSalaryCalculationVO.java index 99153f22f..5414e8d00 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/pojo/vo/BsSalaryCalculationVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/pojo/vo/BsSalaryCalculationVO.java @@ -63,7 +63,7 @@ public class BsSalaryCalculationVO { /** * 准备工时 */ - private String hourPrepar; + private String hourPrepare; /** * 工时额定单位 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java index e565f49d2..fe4297b07 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java @@ -109,7 +109,6 @@ public class BsSalaryUtil { if (!StringUtils.hasText(stepStr) || !StringUtils.hasText(stepPriceStr) || count == null || count.compareTo(BigDecimal.ZERO) <= 0) { return BigDecimal.ZERO; } - // 解析阶梯区间 List stepList = Arrays.stream(stepStr.split(" ")) .filter(StringUtils::hasText) @@ -125,37 +124,24 @@ public class BsSalaryUtil { if (priceList.size() != stepList.size() + 1) { return BigDecimal.ZERO; } - BigDecimal totalAmount = BigDecimal.ZERO; - BigDecimal remain = count; - BigDecimal preStep = BigDecimal.ZERO; - // 遍历每一档阶梯 - BigDecimal one = new BigDecimal(1); - for (int i = 0; i < stepList.size() && remain.compareTo(BigDecimal.ZERO) > 0; i++) { - BigDecimal currStep = stepList.get(i).subtract(one); - BigDecimal stepDiff = currStep.subtract(preStep); - // 当前区间实际耗用数量 - BigDecimal useNum = remain.min(stepDiff); - // 累加金额 - if (BsSalaryStandardEnum.STEP_SETTLEMENT_UNIT_BATCH.getCode().equals(stepSettlementUnit)) { - totalAmount = totalAmount.add(priceList.get(i)); + BigDecimal finalPrice = BigDecimal.ZERO; + for (int i = 0; i < stepList.size(); i++) { + BigDecimal stepLimit = stepList.get(i); + if (count.compareTo(stepLimit) <= 0) { + finalPrice = priceList.get(i); + break; } - if (BsSalaryStandardEnum.STEP_SETTLEMENT_UNIT_MULTIPLE.getCode().equals(stepSettlementUnit)) { - totalAmount = totalAmount.add(useNum.multiply(priceList.get(i)).multiply(settlementPrice)); - } - // 剩余数量 - remain = remain.subtract(useNum); - // 记录上一档阶梯 - preStep = currStep; } - // 超出所有阶梯的部分,取最后一档价格 - if (remain.compareTo(BigDecimal.ZERO) > 0) { - BigDecimal lastPrice = priceList.get(priceList.size() - 1); - if (BsSalaryStandardEnum.STEP_SETTLEMENT_UNIT_BATCH.getCode().equals(stepSettlementUnit)) { - totalAmount = totalAmount.add(lastPrice); - } - if (BsSalaryStandardEnum.STEP_SETTLEMENT_UNIT_MULTIPLE.getCode().equals(stepSettlementUnit)) { - totalAmount = totalAmount.add(remain.multiply(lastPrice).multiply(settlementPrice)); - } + if (finalPrice.compareTo(BigDecimal.ZERO) == 0) { + finalPrice = priceList.get(priceList.size() - 1); + } + // 遍历每一档阶梯 + BigDecimal totalAmount = BigDecimal.ZERO; + if (BsSalaryStandardEnum.STEP_SETTLEMENT_UNIT_BATCH.getCode().equals(stepSettlementUnit)) { + totalAmount = finalPrice; + } + if (BsSalaryStandardEnum.STEP_SETTLEMENT_UNIT_MULTIPLE.getCode().equals(stepSettlementUnit)) { + totalAmount = count.multiply(finalPrice).multiply(settlementPrice); } return totalAmount; }