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