From d8786c8c3b5084bdad9ef318d056d81579e622f0 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期一, 30 九月 2024 11:11:04 +0800 Subject: [PATCH] 合并 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 214 insertions(+), 9 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index f798390..a9d993a 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -73,6 +73,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.util.*; @@ -789,9 +790,73 @@ //上方折现 if (statisticsQueryDto.getDayType()==1){ List<Map<String,Object>> map = chargingOrderService.usersDay(); - tCharingUserMapVO.setMap(map); + + List<Map<String, Object>> charMap = new ArrayList<>(); + // 生成从 "00:00" 到 "23:00" 的时间数据 + for (int hour = 0; hour < 24; hour++) { + String time = String.format("%02d:00", hour); + Map<String, Object> mapWithTimeValue = findMapWithTimeValue(map, time); + if (mapWithTimeValue!=null){ + charMap.add(mapWithTimeValue); + }else { + Map<String, Object> timeMap = new HashMap<>(); + timeMap.put("time", time); // 初始化值为 null + timeMap.put("counts", 0); + + charMap.add(timeMap); + } + } + + List<Map<String,Object>> map1 = chargingOrderService.usersDay1(); + + List<Map<String, Object>> charMap1 = new ArrayList<>(); + // 生成从 "00:00" 到 "23:00" 的时间数据 + for (int hour = 0; hour < 24; hour++) { + String time = String.format("%02d:00", hour); + Map<String, Object> mapWithTimeValue = findMapWithTimeValue(map1, time); + if (mapWithTimeValue!=null){ + charMap1.add(mapWithTimeValue); + }else { + Map<String, Object> timeMap = new HashMap<>(); + timeMap.put("time", time); // 初始化值为 null + timeMap.put("counts", 0); + + charMap1.add(timeMap); + } + } + + + tCharingUserMapVO.setMap(charMap); + tCharingUserMapVO.setMap1(charMap1); }else { List<Map<String,Object>> map = chargingOrderService.usersByQuery(statisticsQueryDto); + + + //按日 + // 解析 startTime 和 endTime 为 LocalDate + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(map, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("counts", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + tCharingUserMapVO.setMap(map); } @@ -880,18 +945,37 @@ List<Map<String,Object>> equipmentMap1 = chargingOrderService.equipmentUserType1(siteIds,statisticsQueryDto); //交流可用率 List<Map<String,Object>> equipmentMap2= chargingOrderService.equipmentUserType2(siteIds,statisticsQueryDto); + + //取出直流可用率和交流可用率的percent的平均值保留两位小数 + + double average1 = calculateAveragePercent(equipmentMap1, equipmentMap2); + System.out.printf("The average percent is: %.2f\n", average1); + + //直流故障率 List<Map<String,Object>> equipmentMapbroke1 = chargingOrderService.equipmentMapbroke1(siteIds,statisticsQueryDto); //交流故障率 List<Map<String,Object>> equipmentMapbroke2 = chargingOrderService.equipmentMapbroke2(siteIds,statisticsQueryDto); + + + double average2 = calculateAveragePercent(equipmentMapbroke1, equipmentMapbroke2); + System.out.printf("The average percent is: %.2f\n", average2); //直流离网率 List<Map<String,Object>> equipmentMapOut1 = chargingOrderService.equipmentMapOut1(siteIds,statisticsQueryDto); //交流离网率 List<Map<String,Object>> equipmentMapOut2 = chargingOrderService.equipmentMapOut2(siteIds,statisticsQueryDto); + double average3 = calculateAveragePercent(equipmentMapOut1, equipmentMapOut2); + System.out.printf("The average percent is: %.2f\n", average3); //需求电流满足率 - List<Map<String,Object>> needElec = chargingOrderService.needElec(siteIds,statisticsQueryDto); + List<Map<String,Object>> needElec1 = chargingOrderService.needElec(siteIds,statisticsQueryDto); + List<Map<String,Object>> needElec2 = chargingOrderService.needElec1(siteIds,statisticsQueryDto); + + double average4 = calculateAveragePercent(needElec1, needElec2); + System.out.printf("The average percent is: %.2f\n", average4); + + TCharingUserEquimentVO tCharingUserEquimentVO = new TCharingUserEquimentVO(); tCharingUserEquimentVO.setEquipmentMap1(equipmentMap1); @@ -900,10 +984,40 @@ tCharingUserEquimentVO.setEquipmentMapbroke2(equipmentMapbroke2); tCharingUserEquimentVO.setEquipmentMapOut1(equipmentMapOut1); tCharingUserEquimentVO.setEquipmentMapOut2(equipmentMapOut2); - tCharingUserEquimentVO.setNeedElec(needElec); + tCharingUserEquimentVO.setNeedElec1(needElec1); + tCharingUserEquimentVO.setNeedElec2(needElec2); + tCharingUserEquimentVO.setAverage1(average1); + tCharingUserEquimentVO.setAverage2(average2); + tCharingUserEquimentVO.setAverage3(average3); + tCharingUserEquimentVO.setAverage4(average4); return R.ok(tCharingUserEquimentVO); } + + private static double calculateAveragePercent(List<Map<String, Object>> mapList1, List<Map<String, Object>> mapList2) { + int totalElements = mapList1.size() + mapList2.size(); + double sum = 0.0; + + // 累加两个列表中所有元素的 "percent" 值 + for (Map<String, Object> map : mapList1) { + if (map.containsKey("percent")) { + sum += Double.parseDouble((String) map.get("percent")); + } + } + for (Map<String, Object> map : mapList2) { + if (map.containsKey("percent")) { + sum += Double.parseDouble((String) map.get("percent")); + } + } + + // 防止除以零错误 + if (totalElements == 0) { + return 0.0; + } + + // 计算平均值 + return sum / totalElements; + } @ResponseBody @PostMapping(value = "/work/charge") @@ -978,11 +1092,67 @@ } return R.ok(charMap); }else if (statisticsQueryDto.getDayType()==2){ - List<Map<String,Object>> charMap = chargingOrderService.getDateType(siteIds,statisticsQueryDto); - return R.ok(charMap); + // 假设 chargingOrderService.getDateType() 返回的是按天的数据 + List<Map<String, Object>> charMap1 = chargingOrderService.getDateType(siteIds, statisticsQueryDto); + + // 解析 startTime 和 endTime 为 LocalDate + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("electrovalence", 0); + dateMap.put("orderCount", 0); + dateMap.put("servicecharge", 0); + dateMap.put("electricity", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + +// return dateRangeStatistics; + return R.ok(dateRangeStatistics); }else if (statisticsQueryDto.getDayType()==3){ - List<Map<String,Object>> charMap = chargingOrderService.getMonthType(siteIds,statisticsQueryDto); - return R.ok(charMap); + List<Map<String,Object>> charMap1 = chargingOrderService.getMonthType(siteIds,statisticsQueryDto); + // 解析 startTime 和 endTime 为 LocalDate + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM")); + Map<String, Object> dailyStats = findMapWithDateValue(charMap1, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("electrovalence", 0); + dateMap.put("orderCount", 0); + dateMap.put("servicecharge", 0); + dateMap.put("electricity", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusMonths(1); + } + return R.ok(dateRangeStatistics); } return R.ok(); @@ -999,13 +1169,21 @@ return null; // 如果没有找到,返回 null } + private Map<String, Object> findMapWithDateValue(List<Map<String, Object>> list, String date) { + for (Map<String, Object> map : list) { + if (date.equals(map.get("time"))) { + return map; + } + } + return null; + } @ResponseBody @PostMapping(value = "/work/use") - @ApiOperation(value = "运营情况", tags = {"管理后台-工作台"}) + @ApiOperation(value = "利用率", tags = {"管理后台-工作台"}) public R workUse(@RequestBody ChargingDetailQueryDto statisticsQueryDto) { List<Integer> siteIds = new ArrayList<>(); if (statisticsQueryDto.getSiteId() == null) { @@ -1029,7 +1207,34 @@ BigDecimal result = chargingCapacity.divide(totalRatedPower, 2, RoundingMode.HALF_UP); map.put("chargingCapacity", result); }); - return R.ok(capMap); + + + + // + // 解析 startTime 和 endTime 为 LocalDate + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(capMap, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("chargingCapacity", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + return R.ok(dateRangeStatistics); } -- Gitblit v1.7.1