计费规则:高峰日出行计算
This commit is contained in:
parent
8f44c10610
commit
6954ef1391
@ -483,14 +483,41 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
LocalDateTime startTime = userOrders.getStartTime();
|
||||
LocalDateTime endTime = userOrders.getEndTime();
|
||||
Long orderId = userOrders.getOrderId();
|
||||
//TODO:计算起步费用后时间后移
|
||||
//处理为自然时间段:防止跨天
|
||||
List<TimeSegment> timeSegments = TimeUtils.splitByDays(startTime, endTime);
|
||||
for (int i = 0; i < timeSegments.size(); i++) {
|
||||
TimeSegment timeSegment = timeSegments.get(i);
|
||||
boolean checked = checkWeek(timeSegment, feignEbikeSysRcostsetDto);
|
||||
BigDecimal dailiedFee = BigDecimal.ZERO;
|
||||
decimal = decimal.add(dailiedFee);
|
||||
String weekNumber = TimeUtils.getDayOfWeekNumber(startTime);
|
||||
boolean checked = checkWeek(weekNumber, feignEbikeSysRcostsetDto);
|
||||
if (checked) {
|
||||
//高峰日计费
|
||||
List<ResFeignEbikeSysRcostsetWeekDto> weekDtos = feignEbikeSysRcostsetDto.getEbikeSysRcostsetWeekDtos();
|
||||
for (ResFeignEbikeSysRcostsetWeekDto weekCostCalculation : weekDtos) {
|
||||
if (weekCostCalculation.getWeek().contains(weekNumber)) {
|
||||
long minutes = TimeUtils.betweenMinutes(startTime, endTime);
|
||||
BigDecimal startupCost = weekCostCalculation.getStartupCost();
|
||||
EbikeOrderDetails startupDetails = new EbikeOrderDetails(orderId, OrderDetailsType.TRAVEL_EXPENSES_ON_PEAK_DAYS, "高峰日起步费用", startupCost, JSONObject.toJSONString(feignEbikeSysRcostsetDto), null, LocalDateTime.now());
|
||||
list.add(startupDetails);
|
||||
decimal = decimal.add(startupCost);
|
||||
Integer startupDuration = weekCostCalculation.getStartupDuration();
|
||||
//判断是否超出起步时长
|
||||
if (minutes > startupDuration) {
|
||||
startTime = startTime.plusMinutes(startupDuration);
|
||||
long newMinutes = TimeUtils.betweenMinutes(startTime, endTime);
|
||||
Integer duration = weekCostCalculation.getDuration();
|
||||
//时长费用
|
||||
BigDecimal durationCost = weekCostCalculation.getDurationCost();
|
||||
int newMinutesInt = NumberUtils.longConvertInt(newMinutes);
|
||||
int ceil = NumberUtils.divideAndCeil(newMinutesInt, duration);
|
||||
BigDecimal bigDecimalCeil = BigDecimal.valueOf(ceil);
|
||||
//总时长费用
|
||||
BigDecimal multiply = bigDecimalCeil.multiply(durationCost);
|
||||
EbikeOrderDetails timeDetails = new EbikeOrderDetails(orderId, OrderDetailsType.TRAVEL_EXPENSES_ON_PEAK_DAYS, "高峰日时长费用", multiply, JSONObject.toJSONString(feignEbikeSysRcostsetDto), null, LocalDateTime.now());
|
||||
list.add(timeDetails);
|
||||
decimal = decimal.add(multiply);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//默认计费
|
||||
decimal = defaultCostCalculation(list, userOrders, feignEbikeSysRcostsetDto, userOrders.getOrderId());
|
||||
}
|
||||
return decimal;
|
||||
}
|
||||
@ -499,14 +526,12 @@ public class UserOrdersServiceImpl extends ServiceImpl<UserOrdersMapper, EbikeUs
|
||||
/**
|
||||
* 检查是否高峰期
|
||||
*
|
||||
* @param timeSegment 自然时间段
|
||||
* @param weekNumber 周几
|
||||
* @param feignEbikeSysRcostsetDto 计费规则
|
||||
* @return 是否
|
||||
*/
|
||||
boolean checkWeek(TimeSegment timeSegment, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto) {
|
||||
boolean checkWeek(String weekNumber, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto) {
|
||||
List<ResFeignEbikeSysRcostsetWeekDto> weekDtos = feignEbikeSysRcostsetDto.getEbikeSysRcostsetWeekDtos();
|
||||
LocalDateTime startTime = timeSegment.getStart();
|
||||
String weekNumber = TimeUtils.getDayOfWeekNumber(startTime);
|
||||
for (ResFeignEbikeSysRcostsetWeekDto weekCostCalculation : weekDtos) {
|
||||
if (weekCostCalculation.getWeek().contains(weekNumber)) {
|
||||
return true;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user