| | |
| | | pageInfo.setRecords(list); |
| | | return R.ok(pageInfo); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<EnterpriseChargingAnalysisVO>> enterpriseChargingAnalysis(EnterpriseChargingAnalysisQuery query) { |
| | | PageInfo<EnterpriseChargingAnalysisVO> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize()); |
| | | List<EnterpriseChargingAnalysisVO> list = this.baseMapper.enterpriseChargingAnalysis(pageInfo, query); |
| | | for (EnterpriseChargingAnalysisVO row : list) { |
| | | EnterpriseChargingAnalysisQuery rowQuery = buildEnterpriseRowQuery(query, row); |
| | | List<Map<String, Object>> topSites = this.baseMapper.enterpriseTopSites(rowQuery); |
| | | String topSiteNames = topSites.stream() |
| | | .map(item -> Objects.toString(item.get("siteName"), "")) |
| | | .filter(org.springframework.util.StringUtils::hasText) |
| | | .collect(Collectors.joining("、")); |
| | | row.setTopSiteNames(topSiteNames); |
| | | row.setAverageChargingInterval(calculateAverageChargingInterval(this.baseMapper.enterpriseChargingTimes(rowQuery))); |
| | | } |
| | | pageInfo.setRecords(list); |
| | | return R.ok(pageInfo); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<EnterpriseChargingDetailVO>> enterpriseChargingDetail(EnterpriseChargingAnalysisQuery query) { |
| | | PageInfo<EnterpriseChargingDetailVO> pageInfo = new PageInfo<>(query.getPageCurr(), query.getPageSize()); |
| | | List<EnterpriseChargingDetailVO> list = this.baseMapper.enterpriseChargingDetail(pageInfo, query); |
| | | pageInfo.setRecords(list); |
| | | return R.ok(pageInfo); |
| | | } |
| | | |
| | | @Override |
| | | public List<EnterpriseChargingDetailVO> enterpriseChargingDetailExport(EnterpriseChargingAnalysisQuery query) { |
| | | return this.baseMapper.enterpriseChargingDetailExport(query); |
| | | } |
| | | |
| | | private EnterpriseChargingAnalysisQuery buildEnterpriseRowQuery(EnterpriseChargingAnalysisQuery source, EnterpriseChargingAnalysisVO row) { |
| | | EnterpriseChargingAnalysisQuery rowQuery = new EnterpriseChargingAnalysisQuery(); |
| | | BeanUtils.copyProperties(source, rowQuery); |
| | | rowQuery.setCompanyName(null); |
| | | rowQuery.setExactCompanyName(row.getCompanyName()); |
| | | rowQuery.setSocialCreditCode(row.getSocialCreditCode()); |
| | | return rowQuery; |
| | | } |
| | | |
| | | private BigDecimal calculateAverageChargingInterval(List<LocalDateTime> times) { |
| | | if (times == null || times.size() < 2) { |
| | | return BigDecimal.ZERO; |
| | | } |
| | | long totalMinutes = 0L; |
| | | for (int i = 1; i < times.size(); i++) { |
| | | long minutes = ChronoUnit.MINUTES.between(times.get(i - 1), times.get(i)); |
| | | if (minutes > 0) { |
| | | totalMinutes += minutes; |
| | | } |
| | | } |
| | | return BigDecimal.valueOf(totalMinutes) |
| | | .divide(BigDecimal.valueOf(times.size() - 1L), 4, RoundingMode.HALF_UP) |
| | | .divide(BigDecimal.valueOf(60), 2, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<TChargingOrderRefund>> getRefundList(ChargingRefundDto chargingRefundDto) { |
| | | PageInfo<TChargingOrderRefund> pageInfo = new PageInfo<>(chargingRefundDto.getPageCurr(), chargingRefundDto.getPageSize()); |