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 |  272 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 254 insertions(+), 18 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 f591474..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.*;
@@ -571,7 +572,7 @@
     }
 
     @ResponseBody
-    @GetMapping(value = "/work/shop")
+    @PostMapping(value = "/work/shop")
     @ApiOperation(value = "购物收入", tags = {"后台-工作台"})
     public R workShop(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
         //count近6个月的数据
@@ -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")
@@ -958,23 +1072,118 @@
             siteIds.add(statisticsQueryDto.getSiteId());
         }
         if (statisticsQueryDto.getDayType()==1) {
-          List<Map<String,Object>> charMap = chargingOrderService.getHourType(siteIds,statisticsQueryDto);
+          List<Map<String,Object>> charMap1 = chargingOrderService.getHourType(siteIds,statisticsQueryDto);
+            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(charMap1, time);
+                if (mapWithTimeValue!=null){
+                    charMap.add(mapWithTimeValue);
+                }else {
+                    Map<String, Object> timeMap = new HashMap<>();
+                    timeMap.put("time", time); // 初始化值为 null
+                    timeMap.put("electrovalence", 0);
+                    timeMap.put("orderCount", 0);
+                    timeMap.put("servicecharge", 0);
+                    timeMap.put("electricity", 0);
+                    charMap.add(timeMap);
+                }
+            }
           return R.ok(charMap);
         }else if (statisticsQueryDto.getDayType()==2){
-            List<Map<String,Object>> charMap =  chargingOrderService.getDateType(siteIds,statisticsQueryDto);
-            return R.ok(charMap);
-        }else if (statisticsQueryDto.getDayType()==3){
-            List<Map<String,Object>> charMap =  chargingOrderService.getMonthType(siteIds,statisticsQueryDto);
-        }
+            // 假设 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>> 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();
 
 
     }
 
+    private static Map<String, Object> findMapWithTimeValue(List<Map<String, Object>> charMap1,String timeValue) {
+        for (Map<String, Object> map : charMap1) {
+            if (map.containsKey("time") && map.get("time").equals(timeValue)) {
+                return map;
+            }
+        }
+        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) {
@@ -998,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);
 
 
     }
@@ -1006,9 +1242,9 @@
     @Resource
     private TOrderInvoiceService invoiceService;
     @ResponseBody
-    @PostMapping(value = "/work/shopOrder")
+    @GetMapping(value = "/work/shopOrder")
     @ApiOperation(value = "购物订单统计", tags = {"管理后台-工作台"})
-    public R shopOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+    public R shopOrder() {
         Long count = shoppingOrderService.lambdaQuery().eq(TShoppingOrder::getStatus, 1).count();
         Long count1 = shoppingOrderService.lambdaQuery().eq(TShoppingOrder::getStatus, 2).count();
         List<Long> counts = new ArrayList<>();
@@ -1018,9 +1254,9 @@
     }
 
     @ResponseBody
-    @PostMapping(value = "/work/invoice")
+    @GetMapping(value = "/work/invoice")
     @ApiOperation(value = "开票统计", tags = {"管理后台-工作台"})
-    public R invoice(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+    public R invoice() {
         Long count = invoiceService.lambdaQuery().eq(TOrderInvoice::getStatus, 1).count();
         Long count1 = invoiceService.lambdaQuery().eq(TOrderInvoice::getStatus, 3).count();
         List<Long> counts = new ArrayList<>();
@@ -1030,9 +1266,9 @@
     }
 
     @ResponseBody
-    @PostMapping(value = "/work/users/count")
+    @GetMapping(value = "/work/users/count")
     @ApiOperation(value = "用户数量", tags = {"管理后台-工作台"})
-    public R usersCount(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto) {
+    public R usersCount() {
        List<Map<String,Object>>  userMap  =    chargingOrderService.countAllUserData();
             return R.ok(userMap);
 

--
Gitblit v1.7.1