| | |
| | | import java.util.Comparator; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @Author liuhaonan |
| | |
| | | */ |
| | | public BigDecimal getchargeDecimalByC3id(Long c3Id) { |
| | | List<C3mChargingCharge> list = list(Wrappers.lambdaQuery(C3mChargingCharge.class).eq(C3mChargingCharge::getC3Id, c3Id)); |
| | | //获取当前时间 |
| | | LocalTime localTime = LocalTime.now(); |
| | | //遍历费率集合 判断当前时间是否在费率时间段内 |
| | | LocalTime startTime; |
| | | LocalTime endTime; |
| | | //默认费率 |
| | | Double charge = 8.8; |
| | | if (list.size() > 1) { |
| | | //费率条数大于1时,遍历费率集合 获取当前时间段的费率 |
| | | for (int i = 0; i < list.size(); i++) { |
| | | //获取费率时间段 转化为LocalTime |
| | | startTime = LocalTime.of(list.get(i).getHour(), list.get(i).getMin()); |
| | | endTime = LocalTime.of(list.get(i + 1).getHour(), list.get(i + 1).getMin()); |
| | | if (i == list.size()) { |
| | | startTime = LocalTime.of(list.get(i).getHour(), list.get(i).getMin()); |
| | | endTime = LocalTime.of(list.get(0).getHour(), list.get(0).getMin()); |
| | | |
| | | //只有一条费率时,直接返回 |
| | | if (list.size() == 1) { |
| | | return BigDecimal.valueOf(list.get(0).getCharge()); |
| | | } else {//费率大于一条时候,计算费率 |
| | | |
| | | //排序费率(根据时间排序) |
| | | List<C3mChargingCharge> collect = |
| | | list.stream().sorted(Comparator.comparing(C3mChargingCharge::getHour).thenComparing(C3mChargingCharge::getMin)).collect(Collectors.toList()); |
| | | System.out.println("----- " + collect); |
| | | |
| | | //获取当前时间 |
| | | // LocalTime localTime = LocalTime.now(); |
| | | LocalTime localTime = LocalTime.of(0, 0); |
| | | System.out.println(localTime); |
| | | |
| | | C3mChargingCharge temp1 = collect.get(collect.size() - 1); |
| | | if (localTime.isAfter(LocalTime.of(temp1.getHour(), temp1.getMin()))) { |
| | | return BigDecimal.valueOf(temp1.getCharge()); |
| | | } |
| | | |
| | | C3mChargingCharge temp2= collect.get(0); |
| | | if (localTime.isBefore(LocalTime.of(temp2.getHour(), temp2.getMin()))) { |
| | | return BigDecimal.valueOf(temp1.getCharge()); |
| | | } |
| | | |
| | | |
| | | for (int i = 0; i < collect.size(); i++) { |
| | | int x = i; |
| | | int y = i + 1; |
| | | if (y == collect.size()) { |
| | | y = 0; |
| | | } |
| | | //判断当前时间是否在费率时间段内 |
| | | if (localTime.isAfter(startTime) && localTime.isBefore(endTime)) { |
| | | //获取费率 |
| | | charge = list.get(i).getCharge(); |
| | | LocalTime startTime = LocalTime.of(collect.get(x).getHour(), collect.get(x).getMin()); |
| | | LocalTime endTime = LocalTime.of(collect.get(y).getHour(), collect.get(y).getMin()); |
| | | |
| | | //当前时间等于费率时间段的开始时间 |
| | | if (localTime.equals(startTime)) { |
| | | return BigDecimal.valueOf(collect.get(x).getCharge()); |
| | | } |
| | | |
| | | //当前时间在费率时间段内 |
| | | if (localTime.isAfter(startTime) && localTime.isBefore(endTime)) { |
| | | return BigDecimal.valueOf(collect.get(x).getCharge()); |
| | | } |
| | | } |
| | | } else if (list.size() == 1) { |
| | | //只有一条费率时,直接获取费率 |
| | | charge = list.get(0).getCharge(); |
| | | } else { |
| | | //其他费率时,获取默认费率 |
| | | charge = 8.8; |
| | | } |
| | | |
| | | //charge转化为BigDecimal |
| | | //double直接使用 new BigDecimal()时会出现精度问题,所以需要使用BigDecimal.valueOf()方法 并设置精度为2位小数 |
| | | BigDecimal chargeDecimal = BigDecimal.valueOf(charge).setScale(2, BigDecimal.ROUND_HALF_UP); |
| | | |
| | | return chargeDecimal; |
| | | // |
| | | // //获取当前时间 |
| | | // LocalTime localTime = LocalTime.now(); |
| | | // //遍历费率集合 判断当前时间是否在费率时间段内 |
| | | // LocalTime startTime; |
| | | // LocalTime endTime; |
| | | // //默认费率 |
| | | // Double charge = 8.8; |
| | | // if (list.size() > 1) { |
| | | // //费率条数大于1时,遍历费率集合 获取当前时间段的费率 |
| | | // for (int i = 0; i < list.size(); i++) { |
| | | // //获取费率时间段 转化为LocalTime |
| | | // startTime = LocalTime.of(list.get(i).getHour(), list.get(i).getMin()); |
| | | // endTime = LocalTime.of(list.get(i + 1).getHour(), list.get(i + 1).getMin()); |
| | | // if (i == list.size()) { |
| | | // startTime = LocalTime.of(list.get(i).getHour(), list.get(i).getMin()); |
| | | // endTime = LocalTime.of(list.get(0).getHour(), list.get(0).getMin()); |
| | | // } |
| | | // //判断当前时间是否在费率时间段内 |
| | | // if (localTime.isAfter(startTime) && localTime.isBefore(endTime)) { |
| | | // //获取费率 |
| | | // charge = list.get(i).getCharge(); |
| | | // } |
| | | // |
| | | // } |
| | | // } else if (list.size() == 1) { |
| | | // //只有一条费率时,直接获取费率 |
| | | // charge = list.get(0).getCharge(); |
| | | // } else { |
| | | // //其他费率时,获取默认费率 |
| | | // charge = 8.8; |
| | | // } |
| | | // |
| | | // //charge转化为BigDecimal |
| | | // //double直接使用 new BigDecimal()时会出现精度问题,所以需要使用BigDecimal.valueOf()方法 并设置精度为2位小数 |
| | | // BigDecimal chargeDecimal = BigDecimal.valueOf(charge).setScale(2, BigDecimal.ROUND_HALF_UP); |
| | | // |
| | | // return chargeDecimal; |
| | | return BigDecimal.valueOf(99); |
| | | } |
| | | } |