From 3b4bd94a21864b9b638395c95c467bb82a2f157e Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 26 三月 2025 21:25:22 +0800
Subject: [PATCH] 监管平台

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java                  |   77 ++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java       |   31 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java                   |  220 ++++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java    |   18 +
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java    |    7 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java                 |  258 --------------
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java     |   25 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java                        |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java     |   29 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java |   13 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java   |   12 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java            |   34 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java            |  210 +++++++++++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java           |    1 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java               |   10 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java               |  108 +++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java      |   19 +
 17 files changed, 794 insertions(+), 280 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
index 91cd74b..ab7cfb8 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
@@ -17,7 +17,12 @@
 		
 		
 		return new TCECClient() {
-			@Override
+            @Override
+            public R superviseNotificationStationInfo(Integer id) {
+				return R.fail("推送充换电站信息失败:" + cause.getMessage());
+            }
+
+            @Override
 			public R pushChargingGunStatus(String getFullNumber, Integer status) {
 				return R.fail("接口状态变化后推送给第三方失败:" + cause.getMessage());
 			}
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
index 3e3becc..c3ed65e 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
@@ -17,8 +17,14 @@
  */
 @FeignClient(contextId = "TCECClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = TCECClientFallbackFactory.class)
 public interface TCECClient {
-	
-	
+	/**
+	 * 推送充换电站信息
+	 * @param id
+	 * @return
+	 */
+	@PostMapping("/evcs/v1.0/supervise_notification_station_info")
+	R  superviseNotificationStationInfo(@RequestParam Integer id);
+
 	/**
 	 * 接口状态变化后推送给第三方
 	 * @return
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java
index 157fa00..bb7b7f1 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/dto/ChargingStatisticeDTO.java
@@ -18,4 +18,6 @@
     private LocalDateTime startTime;
     @ApiModelProperty(value = "结束时间2020-01-01 23:59:59")
     private LocalDateTime endTime;
+    @ApiModelProperty(value = "站点id")
+    private Integer siteId;
 }
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
index 3f991b8..60e93b3 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -196,7 +196,6 @@
 		}
 		site.setMark(0);
 		this.save(site);
-		// 推送充电站数据给监管平台
 		return AjaxResult.success();
 	}
 	
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
index 1ab951e..43815e0 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java
@@ -11,6 +11,7 @@
 import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
 import com.ruoyi.chargingPile.api.vo.*;
 import com.ruoyi.chargingPile.api.domain.SiteMenu;
+import com.ruoyi.chargingPile.mapper.SiteMapper;
 import com.ruoyi.chargingPile.mapper.TChargingGunMapper;
 import com.ruoyi.chargingPile.service.IPartnerService;
 import com.ruoyi.chargingPile.service.TChargingGunService;
@@ -23,6 +24,7 @@
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.integration.api.feignClient.SendMessageClient;
+import com.ruoyi.integration.api.feignClient.TCECClient;
 import com.ruoyi.integration.api.model.QrCodeDelivery;
 import com.ruoyi.other.api.feignClient.RoleSiteClient;
 import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -72,7 +74,8 @@
     @Resource
     private SiteClient siteClient;
 
-
+    @Autowired
+    private TCECClient tcecClient;
     @Resource
     private TokenService tokenService;
     
@@ -117,7 +120,9 @@
         pageInfo.setRecords(list);
         return pageInfo;
     }
-    
+
+@Autowired
+private SiteMapper siteMapper;
     /**
      * 添加充电枪
      * @param dto
@@ -148,6 +153,9 @@
         qrCodeDelivery.setCode_prefix(code_prefix);
         qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + dto.getCode());
         sendMessageClient.qrCodeDelivery(qrCodeDelivery);
+        Site site = siteMapper.selectById(chargingPile.getSiteId());
+        // 推送充换电站信息
+        tcecClient.superviseNotificationStationInfo(site.getId());
         return AjaxResult.success();
     }
     
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java
new file mode 100644
index 0000000..889346d
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/SupSwapEquipmentInfo.java
@@ -0,0 +1,34 @@
+package com.ruoyi.integration.drainage;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 换电设备信
+ * 息
+ */
+@Data
+public class SupSwapEquipmentInfo {
+    //换电设备
+    //编码
+    @JsonProperty("SwapMechanicalEquipmentID")
+    private String SwapMechanicalEquipmentID;
+    //换电设备
+    //生产商组
+    //织机构代
+    //码
+    @JsonProperty("SwapManufacturerID")
+    private String SwapManufacturerID;
+    //换电设备
+    //生产商名
+    //称
+    @JsonProperty("SwapManufacturerName")
+    private String SwapManufacturerName;
+    //换电机械
+    //设备额定
+    //功率
+    @JsonProperty("MechanicalEquipmentPower")
+    private BigDecimal MechanicalEquipmentPower;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
index db89dda..9eaf611 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java
@@ -2051,16 +2051,85 @@
 		return R.ok();
 	}
 
+
 	/**
 	 * 推送充换电站信息
-	 * @param site
+	 * @param id
 	 * @return
 	 */
 	@PostMapping("/supervise_notification_station_info")
-	public BaseResult superviseNotificationStationInfo(@RequestBody Site site){
-		BaseResult baseResult = new BaseResult();
+	public R superviseNotificationStationInfo(@RequestParam Integer id){
+		String serviceTel = systemConfigurationClient.getServerPhone().getData();
+		Site site = siteClient.getSiteAll().getData().stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Site());
 
-		return baseResult;
+		List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(site.getId())).getData();
+		List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
+		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
+		SupStationInfo supStationInfo = new SupStationInfo();
+		supStationInfo.setStationID(site.getId().toString());
+		supStationInfo.setStationUniqueNumber(site.getDistrictsCode() + "906171535" + site.getId());
+		supStationInfo.setOperatorID("906171535");
+		supStationInfo.setEquipmentOwnerID("906171535");
+		supStationInfo.setStationName(site.getName());
+		supStationInfo.setCountryCode(site.getCountryCode());
+		supStationInfo.setAreaCode(site.getCityCode());
+		supStationInfo.setAddress(site.getAddress());
+		supStationInfo.setAreaCodeCountryside(site.getAreaCodeCountryside());
+		supStationInfo.setStationTel(site.getPhone());
+
+		supStationInfo.setServiceTel(serviceTel);
+		supStationInfo.setStationClassification(site.getStationClassification());
+		supStationInfo.setGeneralApplicationType(site.getGeneralApplicationType());
+		supStationInfo.setStationType(site.getSiteType());
+		supStationInfo.setStationStatus(site.getStatus());
+		supStationInfo.setParkNums(site.getParkingSpace());
+		supStationInfo.setStationLat(new BigDecimal(site.getLat()).setScale(6, RoundingMode.DOWN));
+		supStationInfo.setStationLng(new BigDecimal(site.getLon()).setScale(6, RoundingMode.DOWN));
+		supStationInfo.setSiteGuide(site.getGuide());
+		supStationInfo.setConstruction(site.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : site.getConstructionSite());
+		supStationInfo.setPictures(StringUtils.isNotEmpty(site.getImgUrl()) ? Arrays.asList(site.getImgUrl().split(",")) : new ArrayList<>());
+
+		supStationInfo.setMatchCars(site.getVehicleDescription());
+		if (org.springframework.util.StringUtils.hasLength(site.getSwapMatchCars())){
+			supStationInfo.setSwapMatchCars(Arrays.asList(site.getSwapMatchCars().split(",")));
+		}
+		supStationInfo.setBusineHours(site.getStartServiceTime());
+		supStationInfo.setRoundTheClock(site.getRoundTheClock());
+		supStationInfo.setParkType(site.getParkType());
+		supStationInfo.setParkFee("{\"rules\":"+site.getParkFee()+","+"\"freeDuration\":"+site.getParkFeeFree()+"}");
+		supStationInfo.setElectricityType(site.getElectricityType());
+		supStationInfo.setBusinessExpandType(site.getBusinessExpandType());
+		supStationInfo.setCapacity(site.getCapacity());
+		supStationInfo.setRatedPower(site.getRatedPower());
+		supStationInfo.setPeriodFee(site.getPeriodFee());
+		supStationInfo.setOfficialRunTime(site.getOfficialRunTime());
+		supStationInfo.setStationOrientation(site.getStationOrientation());
+		supStationInfo.setStationArea(site.getStationArea());
+		supStationInfo.setHavePerson(site.getHavePerson());
+		supStationInfo.setVideoMonitor(site.getVideoMonitor());
+		if (StringUtils.isNotEmpty(site.getSupportingFacilities())){
+			String[] split = site.getSupportingFacilities().split(",");
+			List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList());
+			supStationInfo.setSupportingFacilities(collect);
+		}
+		supStationInfo.setPrinterFlag(site.getPrinterFlag());
+		supStationInfo.setBarrierFlag(site.getBarrierFlag());
+		supStationInfo.setParkingLockFlag(site.getParkingLockFlag());
+		supStationInfo.setEquipmentInfos(buildEquipmentInfo(site.getId(), tChargingPiles, chargingGunList));
+//		supStationInfo.setSwapEquipmentInfos();
+		supStationInfo.setElectricityFee("{"+site.getElectricityFee()+"}");
+		supStationInfo.setEquipmentOwnerName(site.getEquipmentOwnerName());
+		supStationInfo.setResidentNo(site.getResidentNo());
+		supStationInfo.setSupplyType(site.getSupplyType());
+		supStationInfo.setWattHourMeterNo(site.getWattHourMeterNo());
+		supStationInfo.setForwardPower(site.getForwardPower());
+		supStationInfo.setServiceFee("{"+site.getServiceFee()+"}");
+		supStationInfo.setRecordUniqueNo(site.getRecordUniqueNo());
+		BaseResult baseResult = new BaseResult();
+		SupStationInfoResult supStationInfoResult = new SupStationInfoResult();
+		supStationInfoResult.setSupStationInfo(supStationInfo);
+		tcecSuperviseUtil.superviseNotificationStationInfo(supStationInfoResult);
+		return R.ok(baseResult);
 	}
 //
 //
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java
index 43c6faa..7b24b27 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController1.java
@@ -31,6 +31,7 @@
 import com.ruoyi.other.api.feignClient.SystemConfigurationClient;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -56,7 +57,8 @@
 	
 	@Resource
 	private SiteClient siteClient;
-	
+	@Autowired
+	private TCECSuperviseUtil tcecSuperviseUtil;
 	@Resource
 	private ChargingPileClient chargingPileClient;
 	
@@ -1809,262 +1811,8 @@
 		log.info("监管平台查询充电站信息响应参数:" + JacksonUtils.toJson(baseResult));
 		return baseResult;
 	}
-	/**
-	 * 推送充电用能统计
-	 * @return
-	 */
-	@PostMapping("/supervise_notification_operation_stats_info")
-	public void superviseNotificationOperationStatsInfo(){
-		List<Site> data = siteClient.getSiteAll().getData();
-		LocalDateTime now = LocalDateTime.now();
-		LocalDateTime startLocalDateTime = now.minusDays(1);
-		LocalDateTime endLocalDateTime = now.minusDays(1);
-		// 获取今天凌晨
-		startLocalDateTime.withHour(0);
-		startLocalDateTime.withMinute(0);
-		startLocalDateTime.withSecond(0);
-		String start = DateUtils.localDateTimeToString(startLocalDateTime);
-		endLocalDateTime.withHour(23);
-		endLocalDateTime.withMinute(59);
-		endLocalDateTime.withSecond(59);
-		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);
-		}
-	}
-	/**
-	 * 推送充换电站实时功率
-	 * @return
-	 */
-	@PostMapping("/supervise_notification_realtime_power_info")
-	public void superviseNotificationRealtimePowerInfo(){
 
-	}
-
-	/**
-	 * 推送充换电站信息
-	 * @param datum
-	 * @return
-	 */
-	@PostMapping("/supervise_notification_station_info")
-	public void superviseNotificationStationInfo(@RequestBody Site datum){
-		BaseResult baseResult = new BaseResult();
-		StationInfo stationInfo = new StationInfo();
-		List<TChargingPile> tChargingPiles = chargingPileClient.getChargingPileBySiteIds(Collections.singletonList(datum.getId())).getData();
-		List<Integer> collect1 = tChargingPiles.stream().map(TChargingPile::getId).collect(Collectors.toList());
-		List<TChargingGun> chargingGunList = chargingGunClient.getChargingGunByChargingPileIds(collect1).getData();
-		String serviceTel = systemConfigurationClient.getServerPhone().getData();
-		stationInfo.setAreaCodeCountryside(datum.getAreaCodeCountryside());
-		stationInfo.setStationClassification(datum.getStationClassification());
-		stationInfo.setGeneralApplicationType(datum.getGeneralApplicationType());
-		if (org.springframework.util.StringUtils.hasLength(datum.getSwapMatchCars())){
-			stationInfo.setSwapMatchCars(Arrays.asList(datum.getSwapMatchCars().split(",")));
-		}
-		stationInfo.setBusineHours(datum.getStartServiceTime());
-		stationInfo.setRoundTheClock(datum.getRoundTheClock());
-		stationInfo.setParkType(datum.getParkType());
-		stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}");
-		stationInfo.setServiceFee("{"+datum.getServiceFee()+"}");
-		stationInfo.setParkFee("{\"rules\":"+datum.getParkFee()+","+"\"freeDuration\":"+datum.getParkFeeFree()+"}");
-		stationInfo.setElectricityType(datum.getElectricityType());
-		stationInfo.setBusinessExpandType(datum.getBusinessExpandType());
-		stationInfo.setCapacity(datum.getCapacity());
-		stationInfo.setRatedPower(datum.getRatedPower());
-		stationInfo.setPeriodFee(datum.getPeriodFee());
-		stationInfo.setOfficialRunTime(datum.getOfficialRunTime());
-		stationInfo.setStationOrientation(datum.getStationOrientation());
-		stationInfo.setStationArea(datum.getStationArea());
-		stationInfo.setHavePerson(datum.getHavePerson());
-		stationInfo.setVideoMonitor(datum.getVideoMonitor());
-		if (StringUtils.isNotEmpty(datum.getSupportingFacilities())){
-			String[] split = datum.getSupportingFacilities().split(",");
-			List<Integer> collect = Arrays.stream(split).map(Integer::parseInt).collect(Collectors.toList());
-			stationInfo.setSupportingFacilities(collect);
-		}
-		stationInfo.setPrinterFlag(datum.getPrinterFlag());
-		stationInfo.setBarrierFlag(datum.getBarrierFlag());
-		stationInfo.setParkingLockFlag(datum.getParkingLockFlag());
-		stationInfo.setEquipmentOwnerName(datum.getEquipmentOwnerName());
-		stationInfo.setResidentNo(datum.getResidentNo());
-		stationInfo.setSupplyType(datum.getSupplyType());
-		stationInfo.setWattHourMeterNo(datum.getWattHourMeterNo());
-		BigDecimal forwardPower = datum.getForwardPower();
-		if (forwardPower!=null){
-			stationInfo.setForwardPower(forwardPower.setScale(4, BigDecimal.ROUND_HALF_UP).toString());
-		}
-		stationInfo.setRecordUniqueNo(datum.getRecordUniqueNo());
-		stationInfo.setStationID(datum.getId().toString());
-		stationInfo.setOperatorID("906171535");
-		stationInfo.setEquipmentOwnerID("906171535");
-		stationInfo.setStationName(datum.getName());
-		stationInfo.setCountryCode(StringUtils.isNotEmpty(datum.getCountryCode()) ? datum.getCountryCode() : "CN");
-		stationInfo.setAreaCode(datum.getDistrictsCode());
-		stationInfo.setAddress(datum.getAddress());
-		stationInfo.setStationTel(datum.getPhone());
-		stationInfo.setServiceTel(serviceTel);
-		switch (datum.getSiteType()){
-			case 0:
-				stationInfo.setStationType(StationTypeEnum.OTHER.getType());
-				break;
-			case 1:
-				stationInfo.setStationType(StationTypeEnum.PUBLIC.getType());
-				break;
-			case 2:
-				stationInfo.setStationType(StationTypeEnum.PERSONAGE.getType());
-				break;
-			case 3:
-				stationInfo.setStationType(StationTypeEnum.BUS_SPECIFIC.getType());
-				break;
-			case 4:
-				stationInfo.setStationType(StationTypeEnum.SANITATION_SPECIFIC.getType());
-				break;
-			case 5:
-				stationInfo.setStationType(StationTypeEnum.LOGISTICS_SPECIFIC.getType());
-				break;
-			case 6:
-				stationInfo.setStationType(StationTypeEnum.TEXT_SPECIFIC.getType());
-				break;
-		}
-		if(datum.getStatus() == 1){
-			stationInfo.setStationStatus(StationStatusEnum.NORMAL_USE.getStatus());
-		}
-		if(datum.getStatus() == 2){
-			stationInfo.setStationStatus(StationStatusEnum.MAINTAIN.getStatus());
-		}
-		if(datum.getStatus() == 3){
-			stationInfo.setStationStatus(StationStatusEnum.OFF_LINE.getStatus());
-		}
-		stationInfo.setParkNums(datum.getParkingSpace());
-		stationInfo.setStationLat(new BigDecimal(datum.getLat()).setScale(6, RoundingMode.DOWN));
-		stationInfo.setStationLng(new BigDecimal(datum.getLon()).setScale(6, RoundingMode.DOWN));
-		stationInfo.setConstruction(datum.getConstructionSite() == 0 ? ConstructionEnum.OTHER.getType() : datum.getConstructionSite());
-		stationInfo.setPictures(StringUtils.isNotEmpty(datum.getImgUrl()) ? Arrays.asList(datum.getImgUrl().split(",")) : new ArrayList<>());
-		stationInfo.setSiteGuide(datum.getGuide());
-		stationInfo.setMatchCars(datum.getVehicleDescription());
-		stationInfo.setElectricityFee(datum.getRateDescription());
-		//构建充电设备信息数据
-		stationInfo.setEquipmentInfos(buildEquipmentInfo(datum.getId(), tChargingPiles, chargingGunList));
-		// 推送
-		HttpRequest post = HttpUtil.createPost(url + "supervise_notification_station_info");
-		buildBody(post, stationInfo);
-		HttpResponse execute = post.execute();
-		if(200 != execute.getStatus()){
-			log.error("推送监管平台电站信息失败:" + execute.body());
-			return ;
-		}
-		log.info("推送监管平台电站信息响应:" + execute.body());
-		String data = baseResult.getData();
-		// 转化为json
-		if(!data.contains("0")){
-			log.error("推送监管平台电站信息失败:" + baseResult.getMsg());
-			// 重试
-			for (int i = 1; i <= 3; i++) {
-				try {
-					Thread.sleep(5000);
-					HttpRequest post1 = HttpUtil.createPost(url + "supervise_notification_station_info");
-					buildBody(post1, stationInfo);
-					HttpResponse execute1 = post1.execute();
-					if(200 == execute1.getStatus()){
-						log.info("重试次数:"+i+"推送监管平台电站信息响应:" + execute1.body());
-						BaseResult baseResult2 = JSON.parseObject(execute1.body(), BaseResult.class);
-						String data1 = baseResult2.getData();
-						if (data1.contains("0")){
-							break;
-						}
-					}
-				} catch (InterruptedException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-		}
-	}
-	/**
-	 * 构建请求参数和消息头
-	 * @param post
-	 * @param o
-	 */
-	public static void buildBody(HttpRequest post, Object o){
-		Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-		post.contentType("application/json;charset=utf-8");
-//		post.header("Authorization", "Bearer " + getToken(operator));
-		BaseRequest baseRequest = new BaseRequest();
-		baseRequest.setOperatorID("906171535");
-		baseRequest.setTimeStamp(timeStamp);
-		baseRequest.setSeq("0001");
-		String jsonString = JacksonUtils.toJson(o);
-		String encrypt = AESUtil.encrypt(jsonString, ourDataSecret, ourDataSecretIv);
-		baseRequest.setData(encrypt);
-		baseRequest.setSig(TCECUtil.ourBuildSign(baseRequest));
-		log.info("监管平台推送参数:" + JacksonUtils.toJson(baseRequest));
-		String request_json = JacksonUtils.toJson(baseRequest);
-		post.body(request_json);
-
-	}
 
 //
 //
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java
index 5d23f51..9e859d2 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java
@@ -20,6 +20,7 @@
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import static com.ruoyi.integration.drainage.TCECUtil.getToken;
@@ -59,13 +60,16 @@
 	 *推送充电订单信息
 	 */
 	private final static String supervise_notification_charge_order_info = "/supervise_notification_charge_order_info";
+	private final static String supervise_notification_operation_stats_info = "/supervise_notification_operation_stats_info";
+	private final static String supervise_notification_realtime_power_info = "/supervise_notification_realtime_power_info";
+	private final static String supervise_notification_station_info = "/supervise_notification_station_info";
 
 
-	
+
 	/**
 	 * 获取token
 	 */
-	public String queryToken(Operator operator){
+	public String queryToken(){
 		String token = redisService.getCacheObject(TOKEN_KEY);
 		if(StringUtils.hasLength(token)){
 			return token;
@@ -96,8 +100,7 @@
 		redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS);
 		return token;
 	}
-	
-	
+
 
 	/**
 	 * 设备状态变化推送
@@ -124,8 +127,8 @@
 		NotificationStationStatusResult notificationStationStatusResult = JSON.parseObject(decrypt, NotificationStationStatusResult.class);
 		return notificationStationStatusResult;
 	}
-	
-	
+
+
 	/**
 	 * 推动充电状态
 	 * @param info
@@ -152,8 +155,8 @@
 		NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = JSON.parseObject(decrypt, NotificationEquipChargeStatusResult.class);
 		return notificationEquipChargeStatusResult;
 	}
-	
-	
+
+
 	/**
 	 * 推送充电订单信息
 	 * @param info
@@ -180,8 +183,8 @@
 		NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = JSON.parseObject(decrypt, NotificationChargeOrderInfoResult.class);
 		return notificationChargeOrderInfoResult;
 	}
-	
-	
+
+
 	/**
 	 * 构建请求参数和消息头
 	 * @param post
@@ -190,7 +193,7 @@
 	public void buildBody(HttpRequest post, Object o, Operator operator){
 		Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
 		post.contentType("application/json;charset=utf-8");
-		post.header("Authorization", "Bearer " + getToken(operator));
+		post.header("Authorization", "Bearer " + queryToken());
 		BaseRequest baseRequest = new BaseRequest();
 		baseRequest.setOperatorID(operator.getOurOperatorId());
 		baseRequest.setTimeStamp(timeStamp);
@@ -207,8 +210,83 @@
 		log.info("推送三方平台请求Data:" + jsonString);
 	}
 
-	
-	
+	/**
+	 * 推送充电用能统计
+	 * @param info
+	 * @return
+	 */
+	public void superviseNotificationOperationStatsInfo(StationStatsInfoResult info){
+		Operator operator = new Operator();
+		HttpRequest post = HttpUtil.createPost(url+supervise_notification_operation_stats_info);
+		buildBody(post, info, operator);
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("推送充电用能统计失败:" + execute.body());
+			return ;
+		}
+		log.info("推送充电用能统计信息响应:" + execute.body());
+		BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+		Integer Ret = baseResult.getRet();
+		if(0 != Ret){
+			log.error("推送充电用能统计信息失败:" + baseResult.getMsg());
+			return ;
+		}
+		//解密参数
+		String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		log.info("推送充电用能统计信息Data:" + decrypt);
+
+	}
+	/**
+	 * 推送充换电站信息
+	 * @param info
+	 * @return
+	 */
+	public void superviseNotificationStationInfo(SupStationInfoResult info){
+		Operator operator = new Operator();
+		HttpRequest post = HttpUtil.createPost(url+supervise_notification_station_info);
+		buildBody(post, info, operator);
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("推送充换电站信息失败:" + execute.body());
+			return ;
+		}
+		log.info("推送充换电站信息信息响应:" + execute.body());
+		BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+		Integer Ret = baseResult.getRet();
+		if(0 != Ret){
+			log.error("推送充换电站信息失败:" + baseResult.getMsg());
+			return ;
+		}
+		//解密参数
+		String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		log.info("推送充换电站信息信息Data:" + decrypt);
+	}
+	/**
+	 * 充换电站功率信息
+	 * @param info
+	 * @return
+	 */
+	public void superviseNotificationRealtimePowerInfo(SupStationPowerInfoResult info){
+		Operator operator = new Operator();
+		HttpRequest post = HttpUtil.createPost(url+supervise_notification_realtime_power_info);
+		buildBody(post, info, operator);
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("推送充换电站实时功率失败:" + execute.body());
+			return ;
+		}
+		log.info("推送充换电站实时功率信息响应:" + execute.body());
+		BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+		Integer Ret = baseResult.getRet();
+		if(0 != Ret){
+			log.error("推送充换电站实时功率信息失败:" + baseResult.getMsg());
+			return ;
+		}
+		//解密参数
+		String decrypt = AESUtil.decrypt(baseResult.getData(), operator.getDataSecret(), operator.getDataSecretIv());
+		log.info("推送充换电站实时功率信息Data:" + decrypt);
+	}
+
 	public static void main(String[] args) {
 		BaseModel model = new BaseModel();
 		model.setOperatorID("MA25CNM38");
@@ -226,8 +304,8 @@
 		// 打印计算得到的签名Sig
 		String s = SignUtil.bytesToHexString(hmacMd5);
 		System.err.println(s);
-		
-		
+
+
 //		BaseModel model = new BaseModel();
 //		model.setOperatorID("MA25CNM38");
 //		model.setData("xQYYEPiwoc4JENnQsF50qP6Tmnj7uU/AshWn3QbIgrMIk8zvFpy6fWLIiLzQHcLPFCihqH1uzoNhGVNcS8Wvf5gIx9+cWJvYtjwtsjAGMEwNQ6y+rF1jjKnqCNcQbHbhqJ2l76sD54QCFKyenKxymrXri19bDV8hizn3nBw+jcHBtqKHWzjdSHwPDWPIw4rXnrbWLya2PXVgYtVg93WPtliw+0xsqW0BxJamE70/Ilbg4wB5fOAOvXmbLFI+v9jRjpcA7ImhprqPMYkXYAfa2QlICrJEBK7DfpJvRMzKzeT90kOAITqIqFvbfV0ti+greRqToLP6ni4o6w3ID42UmKasIpLTnx+qtR4bVTBTRuDzXvNXDA92RqHaJO21xbSen1eHN/yGfrchBIM0gmav7EpaYAerfU4ubnmJ6xujR6okYepJwBD5DiSIrObfS+GWVPRekvnjvm7BC02NXTrGKA==");
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java
new file mode 100644
index 0000000..560a0d2
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/StationStatsInfoResult.java
@@ -0,0 +1,18 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 充电站统计信息
+ * @author zhibing.pu
+ * @Date 2025/1/21 15:17
+ */
+@Data
+public class StationStatsInfoResult {
+	private List<StationStatsInfo> stationStatsInfos;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java
new file mode 100644
index 0000000..61bb8d2
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupConnectorPowerInfo.java
@@ -0,0 +1,25 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 充电设备接口功率信息
+ */
+@Data
+public class SupConnectorPowerInfo {
+    @JsonProperty("ConnectorID")
+
+    private String ConnectorID;
+    @JsonProperty("EquipmentClassification")
+
+    private Integer EquipmentClassification;
+    @JsonProperty("DataTime")
+
+    private String DataTime;
+    @JsonProperty("ConnectorRealTimePower")
+
+    private BigDecimal ConnectorRealTimePower;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java
new file mode 100644
index 0000000..9df1b09
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java
@@ -0,0 +1,29 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 充电设备功率信息
+ */
+@Data
+public class SupEquipmentPowerInfo {
+    @JsonProperty("EquipmentID")
+
+    private String EquipmentID;
+    @JsonProperty("EquipmentClassification")
+
+    private Integer EquipmentClassification;
+    @JsonProperty("DataTime")
+
+    private String DataTime;
+    @JsonProperty("EquipRealTimePower")
+
+    private BigDecimal EquipRealTimePower;
+    @JsonProperty("DataTime")
+
+    private List<SupConnectorPowerInfo> ConnectorPowerInfos;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java
new file mode 100644
index 0000000..f0b8ee7
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfo.java
@@ -0,0 +1,210 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.integration.drainage.SupSwapEquipmentInfo;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 充换电站信息
+ */
+@Data
+public class SupStationInfo {
+    // 充换电站ID
+    @JsonProperty("StationID")
+    private String StationID;
+    // 充换电站唯一编码
+    @JsonProperty("StationUniqueNumber")
+    private String StationUniqueNumber;
+    //平台运营商
+    //ID
+    @JsonProperty("OperatorID")
+    private String OperatorID;
+    //充换电服务
+    //运营商ID
+    @JsonProperty("EquipmentOwnerID")
+    private String EquipmentOwnerID;
+    //充换电站名
+    //称
+    @JsonProperty("StationName")
+    private String StationName;
+    //充换电站国
+    //家代码
+    @JsonProperty("CountryCode")
+    private String CountryCode;
+    //充换电站省
+    //市辖区编码
+    @JsonProperty("AreaCode")
+    private String AreaCode;
+    //详细地址
+    @JsonProperty("Address")
+    private String Address;
+    //充换电站所
+    //在县以下行
+    //政区划代码
+    @JsonProperty("AreaCodeCountryside")
+    private String AreaCodeCountryside;
+    // 站点电话
+    @JsonProperty("StationTel")
+    private String StationTel;
+    // 服务电话
+    @JsonProperty("ServiceTel")
+    private String ServiceTel;
+    // 站点分类
+    @JsonProperty("StationClassification")
+    private Integer StationClassification;
+    //通用类型
+    @JsonProperty("GeneralApplicationType")
+    private Integer GeneralApplicationType;
+    //站点类型
+    @JsonProperty("StationType")
+    private Integer StationType;
+    //站点状态
+    @JsonProperty("StationStatus")
+    private Integer StationStatus;
+    //车位数量
+    @JsonProperty("ParkNums")
+    private Integer ParkNums;
+    //经度
+    @JsonProperty("StationLng")
+    private BigDecimal StationLng;
+    //纬度
+    @JsonProperty("StationLat")
+    private BigDecimal StationLat;
+    //站点引导
+    @JsonProperty("SiteGuide")
+    private String SiteGuide;
+    //建设场所
+    @JsonProperty("Construction")
+    private Integer Construction;
+    //站点照片
+    @JsonProperty("Pictures")
+    private List<String> Pictures;
+    //使用车型描
+    //述
+    @JsonProperty("MatchCars")
+    private String MatchCars;
+    //服务车型描
+    //述
+    @JsonProperty("SwapMatchCars")
+    private List<String> SwapMatchCars;
+    //车位楼层及
+    //数量描述
+    @JsonProperty("ParkInfo")
+    private String ParkInfo;
+    //营业时间
+    @JsonProperty("BusineHours")
+    private String BusineHours;
+    //7*24小时营
+    //业
+    @JsonProperty("RoundTheClock")
+    private Integer RoundTheClock;
+    //停车费类型
+    @JsonProperty("ParkType")
+    private Integer ParkType;
+    //停车费描述
+    @JsonProperty("ParkFee")
+    private String ParkFee;
+    //支付方式
+    @JsonProperty("Payment")
+    private String Payment;
+    //是否支持预
+    //约
+    @JsonProperty("SupportOrder")
+    private Integer SupportOrder;
+    //备注
+    @JsonProperty("Remark")
+    private String Remark;
+    //电费类型
+    @JsonProperty("ElectricityType")
+    private Integer ElectricityType;
+    //报装类型
+    @JsonProperty("BusinessExpandType")
+    private Integer BusinessExpandType;
+    //报装电源容
+    //量
+    @JsonProperty("Capacity")
+    private BigDecimal Capacity;
+    //站点额定总
+    //功率
+    @JsonProperty("RatedPower")
+    private BigDecimal RatedPower;
+    //峰谷分时
+    @JsonProperty("PeriodFee")
+    private Integer PeriodFee;
+    //正式投运时
+    //间
+    @JsonProperty("OfficialRunTime")
+    private String OfficialRunTime;
+    //充换电站方
+    //位
+    @JsonProperty("StationOrientation")
+    private Integer StationOrientation;
+    //充换电站建
+    //设面积
+    @JsonProperty("StationArea")
+    private BigDecimal StationArea;
+    //充换电站人
+    //工值守
+    @JsonProperty("HavePerson")
+    private Integer HavePerson;
+    //视频监控配
+    //套情况
+    @JsonProperty("VideoMonitor")
+    private Integer VideoMonitor;
+    //周边配套设
+    // 施
+    @JsonProperty("SupportingFacilities")
+    private List<Integer> SupportingFacilities;
+    //是否有小票
+    //机
+    @JsonProperty("PrinterFlag")
+    private Integer PrinterFlag;
+    //是否有道闸
+    @JsonProperty("BarrierFlag")
+    private Integer BarrierFlag;
+    //是否有地锁
+    @JsonProperty("ParkingLockFlag")
+    private Integer ParkingLockFlag;
+    //充电设备信
+    //息列表
+    @JsonProperty("EquipmentInfos")
+    private List<EquipmentInfo> EquipmentInfos;
+    //换电设备信
+    //息
+    @JsonProperty("SwapEquipmentInfos")
+    private List<SupSwapEquipmentInfo> SwapEquipmentInfos;
+    //充电电费描
+    //述
+    @JsonProperty("ElectricityFee")
+    private String ElectricityFee;
+    //设备所属方
+    //名称
+    @JsonProperty("EquipmentOwnerName")
+    private String EquipmentOwnerName;
+    //供电局用户
+    //编号
+    @JsonProperty("ResidentNo")
+    private String ResidentNo;
+    //供电类型
+    @JsonProperty("SupplyType")
+    private Integer SupplyType;
+    //表号
+    @JsonProperty("WattHourMeterNo")
+    private String WattHourMeterNo;
+    //外电功率
+    @JsonProperty("ForwardPower")
+    private BigDecimal ForwardPower;
+    //服务费描述
+    @JsonProperty("ServiceFee")
+    private String ServiceFee;
+    //充电站全省
+    //唯一备案号
+    @JsonProperty("RecordUniqueNo")
+    private String RecordUniqueNo;
+
+
+
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java
new file mode 100644
index 0000000..3a09447
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java
@@ -0,0 +1,19 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.integration.drainage.model.EquipmentInfo;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 充换电站信息
+ */
+@Data
+public class SupStationInfoResult {
+    private SupStationInfo SupStationInfo;
+
+
+
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java
new file mode 100644
index 0000000..74793ea
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 推送充换电站实时功率
+ */
+@Data
+public class SupStationPowerInfo {
+    @NotNull
+    @JsonProperty("OperatorID")
+    private String OperatorID;
+    @JsonProperty("EquipmentOwnerID")
+    private String EquipmentOwnerID;
+    @JsonProperty("StationID")
+    private String StationID;
+    @JsonProperty("StationClassification")
+    private Integer StationClassification;
+    @JsonProperty("DataTime")
+    private String DataTime;
+    @JsonProperty("StationRealTimePower")
+    private BigDecimal StationRealTimePower;
+    @JsonProperty("EquipmentPowerInfos")
+    private List<SupEquipmentPowerInfo> EquipmentPowerInfos;
+
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java
new file mode 100644
index 0000000..d009e4b
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java
@@ -0,0 +1,13 @@
+package com.ruoyi.integration.drainage.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 推送充换电站实时功率
+ */
+@Data
+public class SupStationPowerInfoResult {
+    private List<SupStationPowerInfo> stationStatsInfos;
+}
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..84dfe16
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java
@@ -0,0 +1,220 @@
+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();
+
+        List<Site> data = siteClient.getSiteAll().getData();
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime startLocalDateTime = now.minusDays(1);
+        LocalDateTime endLocalDateTime = now.minusDays(1);
+        // 获取今天凌晨
+        startLocalDateTime.withHour(0);
+        startLocalDateTime.withMinute(0);
+        startLocalDateTime.withSecond(0);
+        String start = DateUtils.localDateTimeToString(startLocalDateTime);
+        endLocalDateTime.withHour(23);
+        endLocalDateTime.withMinute(59);
+        endLocalDateTime.withSecond(59);
+        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.setStationStatsInfos(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