| | |
| | | LocalDateTime[] range = franchiseeRange(params); |
| | | List<FranchiseeDayStat> dayStats = franchiseeDayStats(siteIds, range); |
| | | Map<String, Object> summary = new LinkedHashMap<>(); |
| | | summary.put("orderAmountWan", franchiseeOrderAmountWan(dayStats)); |
| | | BigDecimal incomeWan = franchiseeIncomeWan(dayStats); |
| | | BigDecimal totalChargingCapacityWan = sum(dayStats, FranchiseeDayStat::getCapacity).divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_UP); |
| | | summary.put("incomeWan", incomeWan); |
| | | summary.put("orderAmountWan", incomeWan); |
| | | 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("totalChargingCapacityWan", totalChargingCapacityWan); |
| | | summary.put("chargingPowerWan", totalChargingCapacityWan); |
| | | summary.put("chargingAmount", sum(dayStats, FranchiseeDayStat::getChargingIncome)); |
| | | summary.put("chargingOrderCount", dayStats.stream().mapToLong(stat -> numberValue(stat.getOrderCount())).sum()); |
| | | summary.put("powerUtilizationRate", observedPowerUtilization(dayStats)); |
| | |
| | | return new LocalDateTime[]{today.atStartOfDay(), today.plusDays(1).atStartOfDay()}; |
| | | } |
| | | |
| | | static BigDecimal franchiseeOrderAmountWan(List<FranchiseeDayStat> stats) { |
| | | return stats.stream().map(FranchiseeDayStat::getPaymentAmount) |
| | | static BigDecimal franchiseeIncomeWan(List<FranchiseeDayStat> stats) { |
| | | return stats.stream().map(FranchiseeDayStat::getChargingIncome) |
| | | .map(value -> value == null ? BigDecimal.ZERO : value) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | .divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_UP); |