| | |
| | | LocalDateTime[] range = franchiseeRange(params); |
| | | List<FranchiseeDayStat> dayStats = franchiseeDayStats(siteIds, range); |
| | | Map<String, Object> summary = new LinkedHashMap<>(); |
| | | summary.put("orderAmountWan", sum(dayStats, FranchiseeDayStat::getChargingIncome).divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_UP)); |
| | | summary.put("orderAmountWan", franchiseeOrderAmountWan(dayStats)); |
| | | summary.put("serviceFeeWan", sum(dayStats, FranchiseeDayStat::getServiceFee).divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_UP)); |
| | | summary.put("chargingPowerWan", sum(dayStats, FranchiseeDayStat::getCapacity).divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_UP)); |
| | | summary.put("chargingAmount", sum(dayStats, FranchiseeDayStat::getChargingIncome)); |
| | |
| | | return new LocalDateTime[]{today.atStartOfDay(), today.plusDays(1).atStartOfDay()}; |
| | | } |
| | | |
| | | static BigDecimal franchiseeOrderAmountWan(List<FranchiseeDayStat> stats) { |
| | | return stats.stream().map(FranchiseeDayStat::getPaymentAmount) |
| | | .map(value -> value == null ? BigDecimal.ZERO : value) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | private <T> BigDecimal sum(List<T> items, java.util.function.Function<T, BigDecimal> getter) { return items.stream().map(getter).map(this::value).reduce(BigDecimal.ZERO, BigDecimal::add); } |
| | | private BigDecimal value(BigDecimal value) { return value == null ? BigDecimal.ZERO : value; } |
| | | private Map<LocalDate, FranchiseeDayStat> dayStatByDay(List<FranchiseeDayStat> stats) { |