Merge remote-tracking branch 'origin/main'

This commit is contained in:
PC 2026-01-16 11:25:10 +08:00
commit 476a85519a

View File

@ -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) {