From 7cb8a6506062d0489dcd601a375f9dc89cbf6b4a Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 16 四月 2025 09:02:53 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java |  211 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 211 insertions(+), 0 deletions(-)

diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
new file mode 100644
index 0000000..3df2601
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
@@ -0,0 +1,211 @@
+package com.ruoyi.integration.drainage.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.chargingPile.api.feignClient.*;
+import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
+import com.ruoyi.chargingPile.api.model.TChargingPile;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.integration.drainage.TCECSuperviseUtil;
+import com.ruoyi.integration.drainage.TokenUtil;
+import com.ruoyi.integration.drainage.model.*;
+import com.ruoyi.integration.drainage.model.enu.ConnectorTypeEnum;
+import com.ruoyi.integration.drainage.model.enu.EquipmentTypeEnum;
+import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
+import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
+import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.model.TChargingBill;
+import com.ruoyi.order.api.model.TChargingOrder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/11 8:39
+ */
+@Component
+public class TaskUtil {
+
+
+    @Resource
+    private SiteClient siteClient;
+    @Autowired
+    private TCECSuperviseUtil tcecSuperviseUtil;
+
+    @Resource
+    private ChargingGunClient chargingGunClient;
+
+    @Resource
+    private ChargingOrderClient chargingOrderClient;
+
+    @Resource
+    private ChargingPileClient chargingPileClient;
+
+    // 每天凌晨12点30执行 推送充电用能统计
+    @Scheduled(cron = "0 30 0 * * ?")
+    public void superviseNotificationOperationStatsInfo() {
+        StationStatsInfoResult res = new StationStatsInfoResult();
+        int dayOfMonth1 = LocalDateTime.now().getYear();
+        int dayOfMonth2 = LocalDateTime.now().getMonthValue();
+        int dayOfMonth3 = LocalDateTime.now().getDayOfMonth();
+        List<Site> data = siteClient.getSiteAll().getData();
+        LocalDateTime startLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 0, 0, 0);
+        LocalDateTime endLocalDateTime = LocalDateTime.of(dayOfMonth1, dayOfMonth2, dayOfMonth3, 23, 59, 59);
+        String start = DateUtils.localDateTimeToString(startLocalDateTime);
+        String end = DateUtils.localDateTimeToString(endLocalDateTime);
+        ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
+        chargingStatisticeDTO.setStartTime(startLocalDateTime);
+        chargingStatisticeDTO.setEndTime(endLocalDateTime);
+        List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
+        List<StationStatsInfo> stationStatsInfos = new ArrayList<>();
+        for (Site datum : data) {
+            StationStatsInfo stationStatsInfo = new StationStatsInfo();
+            stationStatsInfo.setStationID(datum.getId().toString());
+            stationStatsInfo.setEquipmentOwnerID("906171535");
+            stationStatsInfo.setOperatorID("906171535");
+            stationStatsInfo.setStationClassification(1);
+            stationStatsInfo.setStartTime(start);
+            stationStatsInfo.setEndTime(end);
+            List<TChargingOrder> chargingOrders = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())).collect(Collectors.toList());
+            // 充电电量
+            BigDecimal electricity = new BigDecimal("0");
+            int chargingCount = 0;
+            for (TChargingOrder chargingOrder : chargingOrders) {
+                if (chargingOrder.getElectricity()!=null){
+                    electricity = electricity.add(chargingOrder.getElectricity());
+                    chargingCount++;
+                }
+            }
+            stationStatsInfo.setStationElectricity(electricity.divide(new BigDecimal("24")).setScale(4, BigDecimal.ROUND_DOWN));
+            stationStatsInfo.setStationTotalChargeEnergy(electricity.setScale(4, BigDecimal.ROUND_DOWN));
+            stationStatsInfo.setStationTotalWarningNum(0);
+            stationStatsInfo.setStationTotalOtherEnergy(new BigDecimal("0"));
+            stationStatsInfo.setStationTotalChargeNum(chargingCount);
+            //构建设备统计数据
+            List<EquipmentStatsInfo> EquipmentStatsInfos = new ArrayList<>();
+            Map<Integer, List<TChargingOrder>> collect = chargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingPileId));
+            for (Integer integer : collect.keySet()) {
+                List<TChargingOrder> tChargingOrders = collect.get(integer);
+                BigDecimal reduce1 = tChargingOrders.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+                EquipmentStatsInfo equipmentStatsInfo = new EquipmentStatsInfo();
+                equipmentStatsInfo.setEquipmentClassification(1);
+                long chargingTime = 0L;
+                for (TChargingOrder tChargingOrder : tChargingOrders) {
+                    // 累加充电时长
+                    LocalDateTime startTime = tChargingOrder.getStartTime();
+                    LocalDateTime endTime = tChargingOrder.getEndTime();
+                    // 计算时间差 单位分钟
+                    chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
+                }
+                equipmentStatsInfo.setEquipmentTotalChargeTime(chargingTime);
+                equipmentStatsInfo.setEquipmentTotalChargeNum(tChargingOrders.size());
+                equipmentStatsInfo.setEquipmentTotalWarningNum(0);
+                equipmentStatsInfo.setEquipmentID(integer.toString());
+                equipmentStatsInfo.setEquipmentElectricity(reduce1);
+                //构建设备接口统计数据
+                Map<Integer, List<TChargingOrder>> collect2 = tChargingOrders.stream().collect(Collectors.groupingBy(TChargingOrder::getChargingGunId));
+                List<ConnectorStatsInfo> ConnectorStatsInfos = new ArrayList<>();
+                for (Integer integer1 : collect2.keySet()) {
+                    List<TChargingOrder> tChargingOrders1 = collect2.get(integer1);
+                    BigDecimal reduce2 = tChargingOrders1.stream().map(TChargingOrder::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
+                    ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
+                    connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
+                    connectorStatsInfo.setConnectorElectricity(reduce2);
+                    ConnectorStatsInfos.add(connectorStatsInfo);
+                }
+                equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
+                EquipmentStatsInfos.add(equipmentStatsInfo);
+            }
+            stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos);
+            stationStatsInfos.add(stationStatsInfo);
+        }
+        res.setStationStatsInfos(stationStatsInfos);
+        tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res);
+    }
+    // 每15分钟执行一次的定时任务
+    @Scheduled(cron = "0 0/15 * * * ?")
+    public void supervise_notification_realtime_power_info() {
+        List<Site> data = siteClient.getSiteAll().getData();
+        List<Integer> siteIds = data.stream().map(Site::getId).collect(Collectors.toList());
+        List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(siteIds).getData();
+        List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
+        List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+        SupStationPowerInfoResult supStationPowerInfoResult = new SupStationPowerInfoResult();
+        List<SupStationPowerInfo> stationStatsInfos = new ArrayList<>();
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime startLocalDateTime = now.minusMinutes(15);
+        ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
+        chargingStatisticeDTO.setStartTime(startLocalDateTime);
+        chargingStatisticeDTO.setEndTime(now);
+        List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
+        for (Site datum : data) {
+            List<TChargingOrder> collect = data1.stream().filter(e -> e.getSiteId().equals(datum.getId())
+            &&e.getChargingPower()!=null).collect(Collectors.toList());
+            SupStationPowerInfo supStationPowerInfo = new SupStationPowerInfo();
+            supStationPowerInfo.setOperatorID("906171535");
+            supStationPowerInfo.setEquipmentOwnerID("906171535");
+            supStationPowerInfo.setStationID(datum.getId().toString());
+            supStationPowerInfo.setStationClassification(1);
+            supStationPowerInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
+            BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal::add).get().divide(new BigDecimal(collect.size()).setScale(4, BigDecimal.ROUND_DOWN));
+            supStationPowerInfo.setStationRealTimePower(divide);
+            supStationPowerInfo.setEquipmentPowerInfos(buildEquipmentPowerInfo(datum.getId(), tChargingPiles, chargingGunList));
+            stationStatsInfos.add(supStationPowerInfo);
+        }
+        supStationPowerInfoResult.setSupStationPowerInfos(stationStatsInfos);
+        tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult);
+
+    }
+    /**
+     * 构建桩数据
+     * @param tChargingPiles
+     * @return
+     */
+    public List<SupEquipmentPowerInfo> buildEquipmentPowerInfo(Integer siteId, List<TChargingPile> tChargingPiles, List<TChargingGun> chargingGunList){
+        List<SupEquipmentPowerInfo> equipmentInfos = new ArrayList<>();
+        List<TChargingPile> collect = tChargingPiles.stream().filter(s -> s.getSiteId().equals(siteId)).collect(Collectors.toList());
+        for (TChargingPile tChargingPile : collect) {
+            SupEquipmentPowerInfo equipmentInfo = new SupEquipmentPowerInfo();
+            equipmentInfo.setEquipmentID(tChargingPile.getId().toString());
+            equipmentInfo.setEquipmentClassification(1);
+            equipmentInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
+            equipmentInfo.setEquipRealTimePower(tChargingPile.getRatedPower());
+            //构建设备接口信息
+            equipmentInfo.setConnectorPowerInfos(buildConnectorPowerInfos(tChargingPile.getId(), tChargingPile.getCode(), chargingGunList));
+            equipmentInfos.add(equipmentInfo);
+        }
+        return equipmentInfos;
+    }
+    /**
+     * 构建接口数据
+     * @param chargingGunList
+     * @return
+     */
+    public List<SupConnectorPowerInfo> buildConnectorPowerInfos(Integer chargingPileId, String code, List<TChargingGun> chargingGunList){
+        List<SupConnectorPowerInfo> connectorInfos = new ArrayList<>();
+        List<TChargingGun> collect = chargingGunList.stream().filter(s -> s.getChargingPileId().equals(chargingPileId)).collect(Collectors.toList());
+        for (TChargingGun chargingGun : collect) {
+            SupConnectorPowerInfo connectorInfo = new SupConnectorPowerInfo();
+            connectorInfo.setConnectorID(chargingGun.getFullNumber());
+            connectorInfo.setEquipmentClassification(chargingGun.getEquipmentClassification());
+            connectorInfo.setDataTime(DateUtils.localDateTimeToString(LocalDateTime.now()));
+            connectorInfo.setConnectorRealTimePower(chargingGun.getChargingPower());
+            connectorInfos.add(connectorInfo);
+        }
+        return connectorInfos;
+    }
+}

--
Gitblit v1.7.1