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