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