费用计算规则优化
This commit is contained in:
parent
513e0e45fc
commit
51b4f41d03
@ -450,11 +450,13 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
// 1. 基础参数
|
||||
BigDecimal baseFee = Objects.requireNonNullElse(order.getBaseFee(), BigDecimal.ZERO);
|
||||
BigDecimal durationFee = Objects.requireNonNullElse(order.getDurationFee(), BigDecimal.ZERO);
|
||||
Integer freeDurationMinutes = Objects.requireNonNullElse(order.getFreeDurationMinutes(), 0);
|
||||
Integer baseDurationMinutes = Objects.requireNonNullElse(order.getBaseDurationMinutes(), 0);
|
||||
int freeDurationMinutes = Objects.requireNonNullElse(order.getFreeDurationMinutes(), 0);
|
||||
int baseDurationMinutes = Objects.requireNonNullElse(order.getBaseDurationMinutes(), 0);
|
||||
int chargeDurationMinutes = Objects.requireNonNullElse(order.getChargeDurationMinutes(), 1);
|
||||
|
||||
// 2. 计算调度费用
|
||||
if (chargeDurationMinutes <= 0) {
|
||||
chargeDurationMinutes = 1;
|
||||
}
|
||||
// 2. 计算调度费用(运营区域外>停车区外>禁停区)
|
||||
BigDecimal additionalFee = BigDecimal.ZERO;
|
||||
if (data != null) {
|
||||
if (Boolean.FALSE.equals(data.getBikeInRegion())) {
|
||||
@ -480,16 +482,15 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 5. 起步阶段:免费之后,但未超出起步时长 只收起步费
|
||||
long includedInBaseMinutes = freeDurationMinutes + baseDurationMinutes;
|
||||
if (totalRideMinutes <= includedInBaseMinutes) {
|
||||
// 5. 起步阶段(免费 < 骑行 ≤ 起步) (只收起步费用)
|
||||
if (totalRideMinutes <= baseDurationMinutes) {
|
||||
dto.setBaseFee(baseFee);
|
||||
dto.setTotalCost(baseFee.add(additionalFee));
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 6. 超出起步阶段:计算额外时长费用
|
||||
long extraMinutes = totalRideMinutes - includedInBaseMinutes;
|
||||
long extraMinutes = totalRideMinutes - baseDurationMinutes;
|
||||
long chargeUnits = (extraMinutes + chargeDurationMinutes - 1) / chargeDurationMinutes;
|
||||
BigDecimal durationCost = durationFee.multiply(BigDecimal.valueOf(chargeUnits));
|
||||
|
||||
@ -497,7 +498,7 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
dto.setDurationFee(durationCost);
|
||||
BigDecimal baseCost = baseFee.add(durationCost);
|
||||
|
||||
// 7. 总费用 + 封顶
|
||||
// 7. 总费用 是否 大于封顶费用 大于则直接用封顶费用
|
||||
BigDecimal totalCost = baseCost.add(additionalFee);
|
||||
BigDecimal maxFee = order.getMaxFeeAmount();
|
||||
if (maxFee != null && totalCost.compareTo(maxFee) > 0) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user