diff --git a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java index 9bc2071e..da9a2f99 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java @@ -385,8 +385,8 @@ public class UserOrdersServiceImpl extends ServiceImpl 0){ + int result = cappedAmount.compareTo(totalAmount); + if (result > 0) { totalAmount = cappedAmount; } userOrders.setStatus(OrderStatus.PENDING_PAYMENT); @@ -423,7 +423,7 @@ public class UserOrdersServiceImpl extends ServiceImpl list, long orderId) { + BigDecimal timeFee(TimeSegment timeSegment, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto, List list, long orderId) { BigDecimal decimal = BigDecimal.ZERO; // LocalDateTime start = timeSegment.getStart(); // LocalDateTime end = timeSegment.getEnd(); @@ -483,14 +483,41 @@ public class UserOrdersServiceImpl extends ServiceImpl 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 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 weekDtos = feignEbikeSysRcostsetDto.getEbikeSysRcostsetWeekDtos(); - LocalDateTime startTime = timeSegment.getStart(); - String weekNumber = TimeUtils.getDayOfWeekNumber(startTime); for (ResFeignEbikeSysRcostsetWeekDto weekCostCalculation : weekDtos) { if (weekCostCalculation.getWeek().contains(weekNumber)) { return true; @@ -528,12 +553,12 @@ public class UserOrdersServiceImpl extends ServiceImplstartupDuration) { + if (minutes > startupDuration) { startTime = startTime.plusMinutes(startupDuration); long newMinutes = TimeUtils.betweenMinutes(startTime, endTime); Integer duration = feignEbikeSysRcostsetDto.getDuration(); @@ -544,7 +569,7 @@ public class UserOrdersServiceImpl extends ServiceImpl