免费阶段加调度费
This commit is contained in:
parent
fb78f577b7
commit
fb2a782f23
@ -49,7 +49,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.cdzy.user.model.entity.table.EbikeOrderDetailTableDef.EBIKE_ORDER_DETAIL;
|
||||
import static com.cdzy.user.model.entity.table.EbikeOrderTableDef.EBIKE_ORDER;
|
||||
import static com.cdzy.user.model.entity.table.EbikeRefundTableDef.EBIKE_REFUND;
|
||||
|
||||
@ -455,35 +454,7 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
Integer baseDurationMinutes = Objects.requireNonNullElse(order.getBaseDurationMinutes(), 0);
|
||||
int chargeDurationMinutes = Objects.requireNonNullElse(order.getChargeDurationMinutes(), 1);
|
||||
|
||||
// 2. 计算总骑行时长(秒)
|
||||
long totalRideSeconds = Duration.between(order.getStartTime(), endTime).toSeconds();
|
||||
// 向上取整为分钟
|
||||
long totalRideMinutes = (totalRideSeconds + 59) / 60;
|
||||
|
||||
// 3. 免费阶段:总时长 <= 免费时长
|
||||
if (totalRideMinutes <= freeDurationMinutes) {
|
||||
dto.setTotalCost(BigDecimal.ZERO);
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 4. 起步阶段:免费之后,但未超出起步时长 只收起步费
|
||||
long includedInBaseMinutes = freeDurationMinutes + baseDurationMinutes;
|
||||
if (totalRideMinutes <= includedInBaseMinutes) {
|
||||
dto.setBaseFee(baseFee);
|
||||
dto.setTotalCost(baseFee);
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 5. 超出起步阶段:计算额外时长费用
|
||||
long extraMinutes = totalRideMinutes - includedInBaseMinutes;
|
||||
long chargeUnits = (extraMinutes + chargeDurationMinutes - 1) / chargeDurationMinutes;
|
||||
BigDecimal durationCost = durationFee.multiply(BigDecimal.valueOf(chargeUnits));
|
||||
|
||||
dto.setBaseFee(baseFee);
|
||||
dto.setDurationFee(durationCost);
|
||||
BigDecimal baseCost = baseFee.add(durationCost);
|
||||
|
||||
// 6. 调度费用
|
||||
// 2. 计算调度费用
|
||||
BigDecimal additionalFee = BigDecimal.ZERO;
|
||||
if (data != null) {
|
||||
if (Boolean.FALSE.equals(data.getBikeInRegion())) {
|
||||
@ -498,6 +469,34 @@ public class EbikeOrderServiceImpl extends ServiceImpl<EbikeOrderMapper, EbikeOr
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 计算总骑行时长(秒)
|
||||
long totalRideSeconds = Duration.between(order.getStartTime(), endTime).toSeconds();
|
||||
// 向上取整为分钟
|
||||
long totalRideMinutes = (totalRideSeconds + 59) / 60;
|
||||
|
||||
// 4. 免费阶段:总时长 <= 免费时长
|
||||
if (totalRideMinutes <= freeDurationMinutes) {
|
||||
dto.setTotalCost(additionalFee);
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 5. 起步阶段:免费之后,但未超出起步时长 只收起步费
|
||||
long includedInBaseMinutes = freeDurationMinutes + baseDurationMinutes;
|
||||
if (totalRideMinutes <= includedInBaseMinutes) {
|
||||
dto.setBaseFee(baseFee);
|
||||
dto.setTotalCost(baseFee.add(additionalFee));
|
||||
return dto;
|
||||
}
|
||||
|
||||
// 6. 超出起步阶段:计算额外时长费用
|
||||
long extraMinutes = totalRideMinutes - includedInBaseMinutes;
|
||||
long chargeUnits = (extraMinutes + chargeDurationMinutes - 1) / chargeDurationMinutes;
|
||||
BigDecimal durationCost = durationFee.multiply(BigDecimal.valueOf(chargeUnits));
|
||||
|
||||
dto.setBaseFee(baseFee);
|
||||
dto.setDurationFee(durationCost);
|
||||
BigDecimal baseCost = baseFee.add(durationCost);
|
||||
|
||||
// 7. 总费用 + 封顶
|
||||
BigDecimal totalCost = baseCost.add(additionalFee);
|
||||
BigDecimal maxFee = order.getMaxFeeAmount();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user