薪资计算逻辑调整

liweidong
maxiangong 1 week ago
parent 1b74eeaf50
commit 0990b94382
  1. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/pojo/vo/BsSalaryCalculationVO.java
  2. 46
      blade-service/blade-desk/src/main/java/org/springblade/desk/efficiency/util/BsSalaryUtil.java

@ -63,7 +63,7 @@ public class BsSalaryCalculationVO {
/**
* 准备工时
*/
private String hourPrepar;
private String hourPrepare;
/**
* 工时额定单位

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

Loading…
Cancel
Save