From 20075860ecd50806f7eb594e1d959dd72c871f8a Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 28 十月 2024 15:19:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java |  247 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 203 insertions(+), 44 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 f0b3e44..4c48815 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
@@ -3,6 +3,7 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.time.*;
 
 
@@ -26,10 +27,12 @@
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.integration.api.model.PageChargingOrderAndUploadRealTimeMonitoringDataDto;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
 import com.ruoyi.integration.api.model.ChargingOrderAndUploadRealTimeMonitoringDataDto;
+import com.ruoyi.integration.api.model.UploadRealTimeMonitoringPageData;
 import com.ruoyi.order.api.model.*;
 import com.ruoyi.order.api.query.ChargingOrderQuery;
 import com.ruoyi.common.core.dto.MongoChargingOrderQuery;
@@ -350,12 +353,12 @@
         chargingOrderInfoVO.setSurplus(byId.getTotalElectricity()!=null?byId.getTotalElectricity().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
         chargingOrderInfoVO.setTotalPower(byId.getPower()!=null?byId.getPower().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":"");
         if (byId.getAppUserCarId()!=null){
-            List<TAppUserCar> data = appUserCarClient.getCarByIds(Arrays.asList(byId.getAppUserCarId())).getData();
-            if (!data.isEmpty()){
-                chargingOrderInfoVO.setLicensePlate(data.get(0).getLicensePlate());
-                chargingOrderInfoVO.setVehicleBrand(data.get(0).getVehicleBrand());
-                chargingOrderInfoVO.setVehicleModel(data.get(0).getVehicleModel());
-                chargingOrderInfoVO.setVehicleUse(data.get(0).getVehicleUse());
+            TAppUserCar data = appUserCarClient.getCarById(byId.getAppUserCarId()+"").getData();
+            if (data!=null){
+                chargingOrderInfoVO.setLicensePlate(data.getLicensePlate());
+                chargingOrderInfoVO.setVehicleBrand(data.getVehicleBrand());
+                chargingOrderInfoVO.setVehicleModel(data.getVehicleModel());
+                chargingOrderInfoVO.setVehicleUse(data.getVehicleUse());
             }
         }
         // 时段总服务费
@@ -789,48 +792,61 @@
     @PostMapping(value = "/watch/chargingOrder")
     @ApiOperation(value = "监控订单", tags = {"管理后台-订单管理"})
     public R watchChargingOrder(@RequestBody MongoChargingOrderQuery mongoChargingOrderQuery) {
-//        Integer page = dto.getPageCurr();
-//        Integer pageSize = dto.getPageSize();
-//        List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData();
-//        dto.setUserIds(data);
-//        dto.setPageCurr(1);
-//        dto.setPageSize(99999);
 
-//        Map<String,TChargingOrder> map = new HashMap<>();
-//        //吧list放入map中
-//        for (ChargingOrderVO record : res.getList().getRecords()) {
-//            map.put(record.getCode(),record);
-//        }
-//        Set<String> strings = map.keySet();
-
-
-        List<UploadRealTimeMonitoringData> data1 = uploadRealTimeMonitoringDataClient.getAll(mongoChargingOrderQuery).getData();
+        mongoChargingOrderQuery.setPageSize(10);
+        UploadRealTimeMonitoringPageData data1 = uploadRealTimeMonitoringDataClient.getAll(mongoChargingOrderQuery).getData();
 
         List<ChargingOrderAndUploadRealTimeMonitoringDataDto> dtos = new ArrayList<>();
         Map<String,ChargingOrderVO> map  = new HashMap<>();
-        for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1) {
+        for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1.getRecords()) {
             ChargingOrderAndUploadRealTimeMonitoringDataDto dataDto = new ChargingOrderAndUploadRealTimeMonitoringDataDto();
-            BeanUtils.copyProperties(uploadRealTimeMonitoringData,dataDto);
             ChargingOrderQuery dto = new ChargingOrderQuery();
             dto.setCode(uploadRealTimeMonitoringData.getTransaction_serial_number());
-            TCharingOrderVO vo = chargingOrderService.chargingOrder(dto);
-            if (!vo.getList().getRecords().isEmpty()) {
-                ChargingOrderVO chargingOrderVO = vo.getList().getRecords().get(0);
-                if (chargingOrderVO != null) {
-                    BeanUtils.copyProperties(chargingOrderVO, dataDto);
+
+            if (map.get(uploadRealTimeMonitoringData.getTransaction_serial_number())==null) {
+                TCharingOrderVO vo = chargingOrderService.chargingOrder(dto);
+                map.put(uploadRealTimeMonitoringData.getTransaction_serial_number(),vo.getList().getRecords().get(0));
+                if (!vo.getList().getRecords().isEmpty()) {
+                    ChargingOrderVO chargingOrderVO = vo.getList().getRecords().get(0);
+                    if (chargingOrderVO != null) {
+                        BeanUtils.copyProperties(chargingOrderVO, dataDto);
+                    }
+                    BeanUtils.copyProperties(uploadRealTimeMonitoringData, dataDto);
+                    dataDto.setStartTime(uploadRealTimeMonitoringData.getStartTime());
+                    dataDto.setEndTime(uploadRealTimeMonitoringData.getEndTime() == null ? null : uploadRealTimeMonitoringData.getEndTime());
+                    dataDto.setStatus(uploadRealTimeMonitoringData.getStatus());
+                    dtos.add(dataDto);
                 }
-                dtos.add(dataDto);
             }else {
-                continue;
+                ChargingOrderVO vo = map.get(uploadRealTimeMonitoringData.getTransaction_serial_number());
+                BeanUtils.copyProperties(vo, dataDto);
+                BeanUtils.copyProperties(uploadRealTimeMonitoringData, dataDto);
+                dataDto.setStartTime(uploadRealTimeMonitoringData.getStartTime());
+                dataDto.setEndTime(uploadRealTimeMonitoringData.getEndTime() == null ? null : uploadRealTimeMonitoringData.getEndTime());
+                dataDto.setStatus(uploadRealTimeMonitoringData.getStatus());
+                dtos.add(dataDto);
             }
         }
+        for (int i = 0; i < dtos.size(); i++) {
+            dtos.get(i).setIndex(i);
+        }
 
+        PageChargingOrderAndUploadRealTimeMonitoringDataDto page = new PageChargingOrderAndUploadRealTimeMonitoringDataDto();
+        page.setTotal(data1.getCount());
+        page.setRecords(dtos);
 
-        return R.ok(dtos);
+        return R.ok(page);
     }
-    
-    
-    
+
+
+
+    @ResponseBody
+    @GetMapping(value = "/watch/deletes")
+    @ApiOperation(value = "监控订单-删除", tags = {"管理后台-订单管理"})
+    public R watchChargingOrder(@RequestParam String id) {
+        uploadRealTimeMonitoringDataClient.delete(id);
+        return R.ok();
+    }
     
     /**
      * 处理充电订单实时监控数据相关的业务逻辑
@@ -919,25 +935,165 @@
 
         if (statisticsQueryDto.getDayType()==1){
             List<Map<String,Object>> maps1 = chargingOrderService.getDateData(chargingOrderIds);
-            tCharingOrderMapVO.setMaps1(maps1);
+
+            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(maps1, 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("paymentAmount", 0);
+                    timeMap.put("paymoney", 0);
+                    timeMap.put("servicecharge", 0);
+
+                    charMap.add(timeMap);
+                }
+            }
+
+            tCharingOrderMapVO.setMaps1(charMap);
         }else if (statisticsQueryDto.getDayType()==2){
+
+
+
             List<Map<String,Object>> maps1 = chargingOrderService.getWeekData(chargingOrderIds);
-            tCharingOrderMapVO.setMaps1(maps1);
+
+            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(maps1, 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("paymentAmount", 0);
+                    dateMap.put("paymoney", 0);
+                    dateMap.put("servicecharge", 0);
+                    dateRangeStatistics.add(dateMap);
+                }
+
+                // 移动到下一天
+                startDate = startDate.plusDays(1);
+            }
+            tCharingOrderMapVO.setMaps1(dateRangeStatistics);
         }else if (statisticsQueryDto.getDayType()==3){
             List<Map<String,Object>> maps1 = chargingOrderService.getMonthData(chargingOrderIds);
-            tCharingOrderMapVO.setMaps1(maps1);
+
+            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(maps1, 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("paymentAmount", 0);
+                    dateMap.put("paymoney", 0);
+                    dateMap.put("servicecharge", 0);
+                    dateRangeStatistics.add(dateMap);
+                }
+
+                // 移动到下一天
+                startDate = startDate.plusDays(1);
+            }
+            tCharingOrderMapVO.setMaps1(dateRangeStatistics);
         }else  if (statisticsQueryDto.getDayType()==4){
             List<Map<String,Object>> maps1 = chargingOrderService.getYearData(chargingOrderIds);
-            tCharingOrderMapVO.setMaps1(maps1);
+
+            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(maps1, 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("paymentAmount", 0);
+                    dateMap.put("paymoney", 0);
+                    dateMap.put("servicecharge", 0);
+                    dateRangeStatistics.add(dateMap);
+                }
+
+                // 移动到下一天
+                startDate = startDate.plusDays(1);
+            }
+            tCharingOrderMapVO.setMaps1(dateRangeStatistics);
         }else if (statisticsQueryDto.getDayType()==5){
             List<Map<String,Object>> maps1 = chargingOrderService.getByDate(chargingOrderIds);
-            tCharingOrderMapVO.setMaps1(maps1);
+
+            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(maps1, 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("paymentAmount", 0);
+                    dateMap.put("paymoney", 0);
+                    dateMap.put("servicecharge", 0);
+                    dateRangeStatistics.add(dateMap);
+                }
+
+                // 移动到下一天
+                startDate = startDate.plusDays(1);
+            }
+            tCharingOrderMapVO.setMaps1(dateRangeStatistics);
         }
 
 
         tCharingOrderMapVO.setMaps(maps);
+        BigDecimal allMoney = new BigDecimal(0);
+        for (Map<String, Object> map : maps) {
+            BigDecimal periodElectricPrice = (BigDecimal) map.get("period_electric_price");
+            allMoney = allMoney.add(periodElectricPrice);
+            BigDecimal total_amount = (BigDecimal) map.get("total_amount");
+            allMoney = allMoney.add(total_amount);
+        }
+        allMoney =  allMoney.multiply(new BigDecimal("0.006"));
 
-
+        tCharingOrderMapVO.setAllMoney(allMoney);
         return R.ok(tCharingOrderMapVO);
 
     }
@@ -1225,8 +1381,8 @@
         return R.ok(tCharingUserEquimentVO);
     }
 
-
-    private static double calculateAveragePercent(List<Map<String, Object>> mapList1, List<Map<String, Object>> mapList2) {
+    private static final DecimalFormat DF = new DecimalFormat("#.00");
+    public static double calculateAveragePercent(List<Map<String, Object>> mapList1, List<Map<String, Object>> mapList2) {
         int totalElements = mapList1.size() + mapList2.size();
         double sum = 0.0;
 
@@ -1248,7 +1404,10 @@
         }
 
         // 计算平均值
-        return sum / totalElements;
+        double average = sum / totalElements;
+
+        // 格式化为两位小数
+        return Double.parseDouble(DF.format(average));
     }
 
     @ResponseBody
@@ -1278,7 +1437,7 @@
         //当日的订单总数
         int size = list.size();
         //计算list中paymentAmount的总和
-        BigDecimal totalPaymentAmount = list.stream().map(TChargingOrder::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalPaymentAmount = list.stream().map(TChargingOrder::getPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         //计算list中electrovalence的总和
         BigDecimal totalElectrovalence = list.stream().map(TChargingOrder::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add);
         //计算list中serviceCharge的总和

--
Gitblit v1.7.1