免费阶段加调度费
This commit is contained in:
parent
fb78f577b7
commit
fb2a782f23
@ -49,7 +49,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
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.EbikeOrderTableDef.EBIKE_ORDER;
|
||||||
import static com.cdzy.user.model.entity.table.EbikeRefundTableDef.EBIKE_REFUND;
|
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);
|
Integer baseDurationMinutes = Objects.requireNonNullElse(order.getBaseDurationMinutes(), 0);
|
||||||
int chargeDurationMinutes = Objects.requireNonNullElse(order.getChargeDurationMinutes(), 1);
|
int chargeDurationMinutes = Objects.requireNonNullElse(order.getChargeDurationMinutes(), 1);
|
||||||
|
|
||||||
// 2. 计算总骑行时长(秒)
|
// 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. 调度费用
|
|
||||||
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())) {
|
||||||
@ -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. 总费用 + 封顶
|
// 7. 总费用 + 封顶
|
||||||
BigDecimal totalCost = baseCost.add(additionalFee);
|
BigDecimal totalCost = baseCost.add(additionalFee);
|
||||||
BigDecimal maxFee = order.getMaxFeeAmount();
|
BigDecimal maxFee = order.getMaxFeeAmount();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user