From 2e44b182b43fecaf6a2510c9226f18ffd2cee6c9 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 15 四月 2025 17:33:46 +0800
Subject: [PATCH] 监管平台调试完毕

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TaskUtil.java                   |   21 -
 ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java         |  365 +++++++++++++++++++++++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java                        |   88 ++--
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java  |    1 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java        |   22 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupEquipmentPowerInfo.java     |    3 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java       |   21 +
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationPowerInfoResult.java |    8 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java                    |   15 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java   |    3 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java         |   47 +++
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java           |    2 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java               |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java     |   53 ++-
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java   |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECSuperviseUtil.java               |  243 +++++++++++++---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/SupStationInfoResult.java      |    1 
 17 files changed, 751 insertions(+), 146 deletions(-)

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 e260cce..be1d542 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
@@ -22,7 +22,7 @@
 	 * @param id
 	 * @return
 	 */
-	@PostMapping("/evcs/v1.0/supervise_notification_station_info")
+	@PostMapping("/evcs/v2.0/supervise_notification_station_info")
 	R  superviseNotificationStationInfo(@RequestParam("id") Integer id);
 
 	/**
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 60e93b3..ed2cadc 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
@@ -226,6 +226,8 @@
 		}
 		
 		this.updateById(site);
+		tcecClient.superviseNotificationStationInfo(site.getId());
+
 		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 43815e0..3e0bc3c 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
@@ -155,7 +155,6 @@
         sendMessageClient.qrCodeDelivery(qrCodeDelivery);
         Site site = siteMapper.selectById(chargingPile.getSiteId());
         // 推送充换电站信息
-        tcecClient.superviseNotificationStationInfo(site.getId());
         return AjaxResult.success();
     }
     
@@ -194,6 +193,8 @@
         qrCodeDelivery.setCode_prefix(code_prefix);
         qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + dto.getCode());
         sendMessageClient.qrCodeDelivery(qrCodeDelivery);
+        tcecClient.superviseNotificationStationInfo(one.getSiteId());
+
         return AjaxResult.success();
     }
 
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
index 59f7d37..1548517 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java
@@ -323,6 +323,7 @@
 			qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + chargingGun.getCode());
 			sendMessageClient.qrCodeDelivery(qrCodeDelivery);
 		}
+		tcecClient.superviseNotificationStationInfo(chargingPile.getSiteId());
 		return AjaxResult.success();
 	}
 	
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java
index 05d84e2..9cfdc7c 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECPushUtil.java
@@ -6,7 +6,6 @@
 import com.ruoyi.chargingPile.api.model.*;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.dto.ChargingPercentProvinceDto;
-import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.integration.api.vo.StartChargeResult;
@@ -28,6 +27,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -157,14 +157,12 @@
 				break;
 		}
 		supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
-		supEquipChargeStatus.setSOC(new BigDecimal(chargingOrder.getEndSoc()));
+
+		supEquipChargeStatus.setSOC(StringUtils.hasLength(chargingOrder.getEndSoc())?new BigDecimal(chargingOrder.getEndSoc()):new BigDecimal("1"));
 		supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
 		supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
 		supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
-		List<Operator> operators = operatorClient.getAllOperator().getData();
-		for (Operator operator : operators) {
-			tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
-		}
+			tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus);
 		return R.ok();
 	}
 	/**
@@ -208,10 +206,7 @@
 				break;
 		}
 
-		List<Operator> operators = operatorClient.getAllOperator().getData();
-		for (Operator operator : operators) {
-			tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
-		}
+			tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo);
 		return R.ok();
 	}
 }
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 0ed8892..27ad97f 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
@@ -22,6 +22,7 @@
 import org.springframework.util.StringUtils;
 
 import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -37,11 +38,23 @@
 @Component
 public class TCECSuperviseUtil {
 	// 测试环境
+//	private static final String OperatorID = "MA01H3BQ2";
+//	private static final String OperatorSecret = "f1331ef0b37c2d1b";
+//	private static final String SigSecret = "a6fedf0e1b27d6f7";
+//	private static final String DataSecret = "50a61b93919c9604";
+//	private static final String DataSecretIV = "7c8ac6861661d584";
+//	private final static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0";
+
+	// 正式环境
 	private static final String OperatorID = "MA01H3BQ2";
-	private static final String OperatorSecret = "f1331ef0b37c2d1b";
-	private static final String SigSecret = "a6fedf0e1b27d6f7";
-	private static final String DataSecret = "50a61b93919c9604";
-	private static final String DataSecretIV = "7c8ac6861661d584";
+	private static final String OperatorSecret = "a762796b2a8989b8";
+	private static final String SigSecret = "52cd107eb677c004";
+	private static final String DataSecret = "98f46ab6481d87c4";
+	private static final String DataSecretIV = "978170fd1c11a70e";
+	private final static String url = "https://hlht-dipper-sc.unievbj.com/evcs/v1.0.0";
+
+
+
 
 
 	private static final String OurDataSecret = "50a61b93919c9605";
@@ -52,7 +65,6 @@
 	@Autowired
 	private RedisService redisService;
 	public static final String TOKEN_KEY = "charge_token:";
-	private final static String url = "https://dev-gov-hlht-sc.unievbj.com/evcs/v1.0.0/";
 	/**
 	 * 获取token
 	 */
@@ -72,43 +84,118 @@
 	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(){
+//		String token = redisService.getCacheObject(TOKEN_KEY);
+//		if(StringUtils.hasLength(token)){
+//			return token;
+//		}
+//		JSONObject jsonObject = new JSONObject();
+//		jsonObject.put("OperatorID", OperatorID);
+//		jsonObject.put("OperatorSecret", OperatorSecret);
+//		String params = jsonObject.toJSONString();
+//		// 参数加密
+//		String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+//		// 获取签名
+//		String timeStamp = System.currentTimeMillis() + "";
+//		SequenceGenerator generator = new SequenceGenerator();
+//		String nextSequence = generator.getNextSequence();
+//		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+//		jsonObject = new JSONObject();
+//		jsonObject.put("OperatorID", OperatorID);
+//		jsonObject.put("Data", data);
+//		jsonObject.put("TimeStamp", timeStamp);
+//		jsonObject.put("Seq", nextSequence);
+//		jsonObject.put("Sig", hmacMD5);
+//		String result = HttpUtils.sendPost(url+query_token, jsonObject.toJSONString());
+//		String string = JSONObject.parseObject(result).getString("Data");
+//		String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+//		JSONObject tokenResult = JSONObject.parseObject(decrypt);
+//		token = tokenResult.getString("AccessToken");
+//		Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime");
+//		redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS);
+//		return token;
+//	}
+	public String queryToken(){
+		HttpRequest post = HttpUtil.createPost(url + query_token);
+		JSONObject info = new JSONObject();
+		info.put("OperatorID", "906171535");
+		info.put("OperatorSecret", OperatorSecret);
+		Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+		post.contentType("application/json;charset=utf-8");
+		BaseRequestJianGuan baseRequest = new BaseRequestJianGuan();
+		baseRequest.setOperatorID("906171535");
+		baseRequest.setTimeStamp(timeStamp+"");
+		baseRequest.setSeq("0001");
+		String jsonString = JacksonUtils.toJson(info);
+		SequenceGenerator generator = new SequenceGenerator();
+		String nextSequence = generator.getNextSequence();
+		String data = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString);
+		String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", data,nextSequence,SigSecret);
+		baseRequest.setData(data);
+		baseRequest.setSig(hmacMD5);
+		String request_json = JacksonUtils.toJson(baseRequest);
+		log.info("获取三方平台授权token请求地址:" + post.getUrl());
+		log.info("获取三方平台授权token请求参数:" + request_json);
+		log.info("获取三方平台授权token请求Data:" + jsonString);
+		post.body(request_json);
+		HttpResponse execute = post.execute();
+		if(200 != execute.getStatus()){
+			log.error("获取三方平台授权token失败:" + execute.body());
+			return null;
+		}
+		log.info("获取三方平台授权token响应参数:" + execute.body());
+		BaseResult baseResult = JSON.parseObject(execute.body(), BaseResult.class);
+		Integer Ret = baseResult.getRet();
+		if(0 != Ret){
+			log.error("获取三方平台授权token失败:" + baseResult.getMsg());
+			return null;
+		}
+		//解密参数
+		String decrypt = AESUtil.decrypt(baseResult.getData(), DataSecret, DataSecretIV);
+		log.info("获取三方平台授权token响应Data:" + decrypt);
+		QueryTokenResult queryTokenResult = JSON.parseObject(decrypt, QueryTokenResult.class);
+		String token = queryTokenResult.getAccessToken();
+//		Long tokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + queryTokenResult.getTokenAvailab
+		return token;
+	}
 
 	/**
 	 * 获取token
 	 */
-	public String queryToken(){
-		String token = redisService.getCacheObject(TOKEN_KEY);
-		if(StringUtils.hasLength(token)){
-			return token;
-		}
-		JSONObject jsonObject = new JSONObject();
-		jsonObject.put("OperatorID", OperatorID);
-		jsonObject.put("OperatorSecret", OperatorSecret);
-		String params = jsonObject.toJSONString();
-		// 参数加密
-		String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
-		// 获取签名
-		String timeStamp = System.currentTimeMillis() + "";
-		SequenceGenerator generator = new SequenceGenerator();
-		String nextSequence = generator.getNextSequence();
-		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
-		jsonObject = new JSONObject();
-		jsonObject.put("OperatorID", OperatorID);
-		jsonObject.put("Data", data);
-		jsonObject.put("TimeStamp", timeStamp);
-		jsonObject.put("Seq", nextSequence);
-		jsonObject.put("Sig", hmacMD5);
-		String result = HttpUtils.sendPost(url+query_token, jsonObject.toJSONString());
-		String string = JSONObject.parseObject(result).getString("Data");
-		String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
-		JSONObject tokenResult = JSONObject.parseObject(decrypt);
-		token = tokenResult.getString("AccessToken");
-		Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime");
-		redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS);
-		return token;
-	}
+//	public String queryToken(){
+//		String token = redisService.getCacheObject(TOKEN_KEY);
+//		if(StringUtils.hasLength(token)){
+//			return token;
+//		}
+//		JSONObject jsonObject = new JSONObject();
+//		jsonObject.put("OperatorID", OperatorID);
+//		jsonObject.put("OperatorSecret", OperatorSecret);
+//		String params = jsonObject.toJSONString();
+//		// 参数加密
+//		String data = AesEncryption.encrypt(DataSecret, DataSecretIV, params);
+//		// 获取签名
+//		String timeStamp = System.currentTimeMillis() + "";
+//		SequenceGenerator generator = new SequenceGenerator();
+//		String nextSequence = generator.getNextSequence();
+//		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,SigSecret);
+//		jsonObject = new JSONObject();
+//		jsonObject.put("OperatorID", "906171535");
+//		jsonObject.put("OperatorSecret", OperatorSecret);
+//		jsonObject.put("Data", data);
+//		jsonObject.put("TimeStamp", timeStamp);
+//		jsonObject.put("Seq", nextSequence);
+//		jsonObject.put("Sig", hmacMD5);
+//		String result = HttpUtils.sendPost(url+query_token, jsonObject.toJSONString());
+//		String string = JSONObject.parseObject(result).getString("Data");
+//		String decrypt = AesEncryption.decrypt(DataSecret, DataSecretIV, string);
+//		JSONObject tokenResult = JSONObject.parseObject(decrypt);
+//		token = tokenResult.getString("AccessToken");
+//		Integer TokenAvailableTime = tokenResult.getInteger("TokenAvailableTime");
+//		redisService.setCacheObject(TOKEN_KEY,token, (long) (TokenAvailableTime - 60), TimeUnit.SECONDS);
+//		return token;
+//	}
 
 
 	/**
@@ -173,6 +260,34 @@
 	 */
 	public NotificationChargeOrderInfoResult notificationChargeOrderInfo(Operator operator, SupChargeOrderInfo info){
 		HttpRequest post = HttpUtil.createPost(url+supervise_notification_charge_order_info);
+		if (info.getOrderStatus()!=null){
+			switch (info.getOrderStatus()){
+				case -1:
+					info.setOrderStatus(7);
+					break;
+				case 0:
+					info.setOrderStatus(7);
+					break;
+				case 1:
+					info.setOrderStatus(1);
+					break;
+				case 2:
+					info.setOrderStatus(1);
+
+					break;
+				case 3:
+					info.setOrderStatus(2);
+					break;
+				case 4:
+					info.setOrderStatus(3);
+					break;
+				case 5:
+					info.setOrderStatus(4);
+					break;
+			}
+		}else{
+			info.setOrderStatus(5);
+		}
 		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
@@ -197,15 +312,15 @@
 	/**
 	 * 构建请求参数和消息头
 	 * @param post
-	 * @param o
+	 * @param
 	 */
 	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 " + queryToken());
-		BaseRequest baseRequest = new BaseRequest();
-		baseRequest.setOperatorID(operator.getOurOperatorId());
-		baseRequest.setTimeStamp(timeStamp);
+		BaseRequestJianGuan baseRequest = new BaseRequestJianGuan();
+		baseRequest.setOperatorID("906171535");
+		baseRequest.setTimeStamp(timeStamp+"");
 		baseRequest.setSeq("0001");
 		// 使用 Jackson 转换为 JSON
 		ObjectMapper objectMapper = new ObjectMapper();
@@ -216,18 +331,56 @@
         } catch (Exception e) {
             e.printStackTrace();
         }
-		String encrypt = AesEncryption.encrypt(jsonString, DataSecret, DataSecretIV);
+
+		String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString);
+//		String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString);
+
 		baseRequest.setData(encrypt);
 		baseRequest.setOperator(operator);
 		SequenceGenerator generator = new SequenceGenerator();
 		String nextSequence = generator.getNextSequence();
-		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp+"", encrypt,nextSequence,SigSecret);
+
+		String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", encrypt,nextSequence,SigSecret);
+//		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+
 		baseRequest.setSig(hmacMD5);
 		String request_json = JacksonUtils.toJson(baseRequest);
 		post.body(request_json);
 		log.info("推送三方平台请求地址:" + post.getUrl());
 		log.info("推送三方平台请求参数:" + request_json);
 		log.info("推送三方平台请求Data:" + jsonString);
+	}
+	/**
+	 * 构建请求参数和消息头
+	 * @param post
+	 * @param
+	 */
+	public void buildBodyStatus(HttpRequest post, SupStationPowerInfoResult info, Operator operator){
+		Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+		post.contentType("application/json;charset=utf-8");
+		post.header("Authorization", "Bearer " + queryToken());
+		BaseRequestJianGuan baseRequest = new BaseRequestJianGuan();
+		baseRequest.setOperatorID("906171535");
+		baseRequest.setTimeStamp(timeStamp+"");
+		baseRequest.setSeq("0001");
+		String request_json1 = JacksonUtils.toJson(info);
+		String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,request_json1);
+//		String encrypt = AesEncryption.encrypt(DataSecret, DataSecretIV,jsonString);
+
+		baseRequest.setData(encrypt);
+		baseRequest.setOperator(operator);
+		SequenceGenerator generator = new SequenceGenerator();
+		String nextSequence = generator.getNextSequence();
+
+		String hmacMD5 = HMacMD5Util.getHMacMD5("906171535",timeStamp+"", encrypt,nextSequence,SigSecret);
+//		String hmacMD5 = HMacMD5Util.getHMacMD5(OperatorID,timeStamp, data,nextSequence,OurSigSecret);
+
+		baseRequest.setSig(hmacMD5);
+		String request_json = JacksonUtils.toJson(baseRequest);
+		post.body(request_json);
+		log.info("推送三方平台请求地址:" + post.getUrl());
+		log.info("推送三方平台请求参数:" + request_json);
+		log.info("推送三方平台请求Data:" + request_json1);
 	}
 
 	/**
@@ -289,7 +442,7 @@
 	public void superviseNotificationRealtimePowerInfo(SupStationPowerInfoResult info){
 		Operator operator = new Operator();
 		HttpRequest post = HttpUtil.createPost(url+supervise_notification_realtime_power_info);
-		buildBody(post, info, operator);
+		buildBodyStatus(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
 			log.error("推送充换电站实时功率失败:" + execute.body());
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java
new file mode 100644
index 0000000..b9626d0
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseModelJianGuan.java
@@ -0,0 +1,47 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ruoyi.other.api.domain.Operator;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/1/23 18:33
+ */
+@Data
+public class BaseModelJianGuan {
+	/**
+	 * 运营商标识
+	 */
+	@NotNull
+	@JsonProperty("OperatorID")
+	private String operatorID;
+	/**
+	 * 参数内容
+	 */
+	@NotNull
+	@JsonProperty("Data")
+	private String data;
+	/**
+	 * 时间戳
+	 * yyyyMMddHHmmss
+	 */
+	@NotNull
+	@JsonProperty("TimeStamp")
+	private String timeStamp;
+	/**
+	 * 自增序列
+	 * 4位自增序列取自时间戳,同一秒内按序列自增长,新秒重计。如 0001
+	 */
+	@NotNull
+	@JsonProperty("Seq")
+	private String seq;
+	/**
+	 * 运营商对象
+	 */
+	@JsonIgnore
+	private Operator operator;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java
new file mode 100644
index 0000000..5a580a1
--- /dev/null
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/BaseRequestJianGuan.java
@@ -0,0 +1,21 @@
+package com.ruoyi.integration.drainage.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 公共请求
+ * @author zhibing.pu
+ * @Date 2025/1/21 17:08
+ */
+@Data
+public class BaseRequestJianGuan extends BaseModelJianGuan {
+	/**
+	 * 数字签名
+	 */
+	@NotNull
+	@JsonProperty("Sig")
+	private String sig;
+}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java
index 74431bf..2af5097 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/ConnectorStatsInfo.java
@@ -1,6 +1,7 @@
 package com.ruoyi.integration.drainage.model;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
@@ -25,4 +26,25 @@
 	@NotNull
 	@JsonProperty("ConnectorElectricity")
 	private BigDecimal connectorElectricity;
+	/**
+	 * 充电设备接口累
+	 * 计充电时长
+	 */
+	@NotNull
+	@JsonProperty("ConnectorTotalChargeTime")
+	private Integer ConnectorTotalChargeTime;
+	/**
+	 * 充电设备接口累
+	 * 计充电次数
+	 */
+	@NotNull
+	@JsonProperty("ConnectorTotalChargeNum")
+	private Integer ConnectorTotalChargeNum;
+	/**
+	 * 充电设备接口累
+	 * 计告警数量
+	 */
+	@NotNull
+	@JsonProperty("ConnectorTotalWarningNum")
+	private Integer ConnectorTotalWarningNum;
 }
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
index 9df1b09..43ee464 100644
--- 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
@@ -23,7 +23,6 @@
     @JsonProperty("EquipRealTimePower")
 
     private BigDecimal EquipRealTimePower;
-    @JsonProperty("DataTime")
-
+    @JsonProperty("ConnectorPowerInfos")
     private List<SupConnectorPowerInfo> ConnectorPowerInfos;
 }
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
index 634bef4..6cb8297 100644
--- 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
@@ -12,6 +12,7 @@
  */
 @Data
 public class SupStationInfoResult {
+    @JsonProperty("SupStationInfo")
     private StationInfo SupStationInfo;
 
 
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
index d009e4b..4b66b99 100644
--- 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
@@ -1,13 +1,17 @@
 package com.ruoyi.integration.drainage.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * 推送充换电站实时功率
  */
 @Data
-public class SupStationPowerInfoResult {
-    private List<SupStationPowerInfo> stationStatsInfos;
+public class SupStationPowerInfoResult implements Serializable {
+
+    @JsonProperty("SupStationPowerInfos")
+    private List<SupStationPowerInfo> SupStationPowerInfos;
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
index e2425a7..49cfba5 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/util/TCECCJianGuanontroller.java
@@ -303,7 +303,9 @@
 			stationInfo.setBusineHours(datum.getStartServiceTime());
 			stationInfo.setRoundTheClock(datum.getRoundTheClock());
 			stationInfo.setParkType(datum.getParkType());
-			stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}");
+			if (org.springframework.util.StringUtils.hasLength(datum.getElectricityFee())){
+				stationInfo.setElectricityFee("{"+datum.getElectricityFee()+"}");
+			}
 			stationInfo.setServiceFee("{"+datum.getServiceFee()+"}");
 			stationInfo.setParkFee("{\"rules\":"+datum.getParkFee()+","+"\"freeDuration\":"+datum.getParkFeeFree()+"}");
 			stationInfo.setElectricityType(datum.getElectricityType());
@@ -1814,13 +1816,17 @@
 			}
 			stationInfo.setRoundTheClock(stationInfo.getRoundTheClock()==null?1:stationInfo.getRoundTheClock());
 			stationInfo.setParkType(stationInfo.getParkType()==null?1:stationInfo.getParkType());
-			stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}");
-			stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}");
+			if (!org.springframework.util.StringUtils.hasLength(stationInfo.getElectricityFee())){
+				stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}");
+			}
+			if (!org.springframework.util.StringUtils.hasLength(stationInfo.getServiceFee())){
+				stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}");
+			}
 			stationInfo.setElectricityType(stationInfo.getElectricityType()==null?1:stationInfo.getElectricityType());
 			stationInfo.setBusinessExpandType(stationInfo.getBusinessExpandType()==null?1:stationInfo.getBusinessExpandType());
 			stationInfo.setCapacity(stationInfo.getCapacity()==null?new BigDecimal("1.0000"):stationInfo.getCapacity());
 			stationInfo.setRatedPower(stationInfo.getCapacity()==null?new BigDecimal("40.0000"):stationInfo.getCapacity());
-			stationInfo.setPeriodFee(1);
+			stationInfo.setPeriodFee(stationInfo.getPeriodFee()==null?1:stationInfo.getPeriodFee());
 			stationInfo.setOfficialRunTime(org.springframework.util.StringUtils.hasLength(stationInfo.getOfficialRunTime())?stationInfo.getOfficialRunTime():"2025-01-01");
 			stationInfo.setVideoMonitor(stationInfo.getVideoMonitor()==null?1:stationInfo.getVideoMonitor());
 			int i = 0;
@@ -1847,14 +1853,22 @@
 
 			}
 			stationInfo.setEquipmentOwnerName("明星新能源");
-			stationInfo.setResidentNo("A1234");
+			if (org.springframework.util.StringUtils.hasLength(stationInfo.getResidentNo())){
+				stationInfo.setResidentNo(stationInfo.getResidentNo());
+			}else{
+				stationInfo.setResidentNo("A1234");
+
+			}
 			stationInfo.setSupplyType(stationInfo.getSupplyType()==null?1:stationInfo.getSupplyType());
 			stationInfo.setWattHourMeterNo(org.springframework.util.StringUtils.hasLength(stationInfo.getWattHourMeterNo())?stationInfo.getWattHourMeterNo():UUID.randomUUID().toString().replaceAll("-", ""));
 			stationInfo.setForwardPower(stationInfo.getForwardPower()==null?"1.3654":stationInfo.getForwardPower());
 			String uuid = UUID.randomUUID().toString();
 			String randomString = uuid.replaceAll("-", ""); // 去除'-'
-			stationInfo.setRecordUniqueNo(randomString);
-
+			if (org.springframework.util.StringUtils.hasLength(stationInfo.getRecordUniqueNo())){
+				stationInfo.setRecordUniqueNo(stationInfo.getRecordUniqueNo());
+			}else{
+				stationInfo.setRecordUniqueNo(randomString);
+			}
 		}
 		String timeStamp = System.currentTimeMillis() + "";
 		SequenceGenerator generator = new SequenceGenerator();
@@ -2104,10 +2118,8 @@
 		supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
 		supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
 		supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
-		List<Operator> operators = operatorClient.getAllOperator().getData();
-		for (Operator operator : operators) {
-			tcecSuperviseUtil.notificationSupEquipChargeStatus(operator, supEquipChargeStatus);
-		}
+
+		tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus);
 		return R.ok();
 	}
 	/**
@@ -2150,11 +2162,7 @@
 				supChargeOrderInfo.setStopDesc("费用不足中止");
 				break;
 		}
-
-		List<Operator> operators = operatorClient.getAllOperator().getData();
-		for (Operator operator : operators) {
-			tcecSuperviseUtil.notificationChargeOrderInfo(operator, supChargeOrderInfo);
-		}
+		tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo);
 		return R.ok();
 	}
 
@@ -2184,9 +2192,18 @@
 				stationInfo.setConstruction(255);
 			}
 			stationInfo.setRoundTheClock(stationInfo.getRoundTheClock()==null?1:stationInfo.getRoundTheClock());
+			stationInfo.setRoundTheClock(0);
 			stationInfo.setParkType(stationInfo.getParkType()==null?1:stationInfo.getParkType());
-			stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}");
-			stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}");
+			if (org.springframework.util.StringUtils.hasLength(site.getElectricityFee())){
+				stationInfo.setElectricityFee("{"+site.getElectricityFee()+"}");
+			}else{
+				stationInfo.setElectricityFee("{\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\"}");
+			}
+			if (org.springframework.util.StringUtils.hasLength(site.getServiceFee())){
+				stationInfo.setServiceFee("{"+site.getServiceFee()+"}");
+			}else{
+				stationInfo.setServiceFee("{"+"\"00:00:00-00:30:00\":\"0.4901\",\"00:00:30-01:00:00\":\"0.1234\""+"}");
+			}
 			stationInfo.setElectricityType(stationInfo.getElectricityType()==null?1:stationInfo.getElectricityType());
 			stationInfo.setBusinessExpandType(stationInfo.getBusinessExpandType()==null?1:stationInfo.getBusinessExpandType());
 			stationInfo.setCapacity(stationInfo.getCapacity()==null?new BigDecimal("1.0000"):stationInfo.getCapacity());
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
index 84dfe16..3df2601 100644
--- 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
@@ -53,25 +53,17 @@
     @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 now = LocalDateTime.now();
-        LocalDateTime startLocalDateTime = now.minusDays(1);
-        LocalDateTime endLocalDateTime = now.minusDays(1);
-        // 获取今天凌晨
-        startLocalDateTime.withHour(0);
-        startLocalDateTime.withMinute(0);
-        startLocalDateTime.withSecond(0);
+        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);
-        endLocalDateTime.withHour(23);
-        endLocalDateTime.withMinute(59);
-        endLocalDateTime.withSecond(59);
         String end = DateUtils.localDateTimeToString(endLocalDateTime);
         ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
         chargingStatisticeDTO.setStartTime(startLocalDateTime);
@@ -172,10 +164,9 @@
             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);
+        supStationPowerInfoResult.setSupStationPowerInfos(stationStatsInfos);
         tcecSuperviseUtil.superviseNotificationRealtimePowerInfo(supStationPowerInfoResult);
 
     }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
index b3c6646..112bc2a 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/ChargingMessageListener.java
@@ -254,7 +254,7 @@
                     UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery();
                     BeanUtils.copyProperties(uploadRealTimeMonitoringData, query);
                     chargingOrderClient.chargeMonitoring(query);
-
+                    chargingOrder.setEndSoc(uploadRealTimeMonitoringDataMessage.getSoc()+"");
                     tcecPushUtil.pushSuperviseNotificationEquipChargeStatus(chargingOrder);
 
                 } catch (Exception e) {
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java
index f373c89..5ddedce 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/util/JianGuanTask.java
@@ -1,44 +1,44 @@
-package com.ruoyi.integration.util;
-
-import com.ruoyi.integration.mongodb.service.PingService;
-import com.ruoyi.integration.mongodb.service.PongService;
-import com.ruoyi.integration.rocket.produce.ChargingMessageListener;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-
-
-/**
- * @author zhibing.pu
- * @date 2023/7/11 8:39
- */
-@Component
-public class JianGuanTask {
-
-    @Resource
-    private ChargingMessageListener chargingMessageListener;
-    
-    @Resource
-    private PingService pingService;
-    
-    @Resource
-    private PongService pongService;
-    
-    
-    /**
-     * 5分钟执行的定时任务
-     */
-    @Scheduled(fixedRate = 300000)
-    public void taskMonth() {
-        chargingMessageListener.transactionRecord();
-    }
-    
-    
-    
-    @Scheduled(cron = "0 0 3 * * ?")
-    public void task2() {
-//        pingService.delPing();
-//        pongService.delPong();
-    }
-}
+//package com.ruoyi.integration.util;
+//
+//import com.ruoyi.integration.mongodb.service.PingService;
+//import com.ruoyi.integration.mongodb.service.PongService;
+//import com.ruoyi.integration.rocket.produce.ChargingMessageListener;
+//import org.springframework.scheduling.annotation.Scheduled;
+//import org.springframework.stereotype.Component;
+//
+//import javax.annotation.Resource;
+//
+//
+///**
+// * @author zhibing.pu
+// * @date 2023/7/11 8:39
+// */
+//@Component
+//public class JianGuanTask {
+//
+//    @Resource
+//    private ChargingMessageListener chargingMessageListener;
+//
+//    @Resource
+//    private PingService pingService;
+//
+//    @Resource
+//    private PongService pongService;
+//
+//
+//    /**
+//     * 5分钟执行的定时任务
+//     */
+//    @Scheduled(fixedRate = 300000)
+//    public void taskMonth() {
+//        chargingMessageListener.transactionRecord();
+//    }
+//
+//
+//
+//    @Scheduled(cron = "0 0 3 * * ?")
+//    public void task2() {
+////        pingService.delPing();
+////        pongService.delPong();
+//    }
+//}
diff --git a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
index dfd7b64..e069794 100644
--- a/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
+++ b/ruoyi-service/ruoyi-integration/src/test/java/com/ruoyi/integration/RuoYiIntegrationApplicationTests.java
@@ -1,16 +1,42 @@
 package com.ruoyi.integration;
 
 import com.alibaba.fastjson2.JSON;
+import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
+import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
 import com.ruoyi.chargingPile.api.feignClient.SiteClient;
+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.domain.R;
+import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.integration.barrierGate.model.CloudParkingOrder;
 import com.ruoyi.integration.barrierGate.server.ParkingOrderService;
+import com.ruoyi.integration.drainage.TCECSuperviseUtil;
+import com.ruoyi.integration.drainage.model.*;
 import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
+import com.ruoyi.order.api.dto.ChargingStatisticeDTO;
+import com.ruoyi.order.api.feignClient.ChargingOrderClient;
+import com.ruoyi.order.api.model.TChargingOrder;
+import com.ruoyi.other.api.domain.Operator;
+import com.ruoyi.other.api.feignClient.OperatorClient;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cglib.core.Local;
+import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RuoYiIntegrationApplication.class)
 public class RuoYiIntegrationApplicationTests {
@@ -21,14 +47,339 @@
 	private ParkingOrderService parkingOrderService;
 	@Resource
 	private SiteClient siteClient;
-//	@Test
-//	public void test(){
-//		String json = "{\"appkey\":\"842ae0c027e64b3590af9eea6\",\"enterChannel\":\"001\",\"enterChannelName\":\"进口\",\"enterDateTime\":\"2024-11-01T11:25:15.677Z\",\"id\":\"17B51DA0983C11EFA99CA979A8A8386B\",\"kind\":\"临时卡\",\"name\":\"临时识别\",\"plate\":\"川JD34056\",\"plateColor\":\"绿色\",\"sign\":\"29A902820C2657C51FBE90235152534F\"}";
-//		CloudParkingOrder order = JSON.parseObject(json, CloudParkingOrder.class);
-//		parkingOrderService.cloudParkingInOrder(order);
-//	}
+	@Resource
+	private ChargingGunClient chargingGunClient;
+
+	@Resource
+	private ChargingOrderClient chargingOrderClient;
+
+	@Resource
+	private OperatorClient operatorClient;
+	@Test
+	public void test(){
+		/**
+		 * 推送充电设备接口状态信息
+		 * @param chargingGun
+		 * @return
+		 */
+		List<TChargingGun> data = chargingGunClient.getAllGun().getData();
+		TChargingGun chargingGun = data.stream().filter(e -> e.getId() == 61).findFirst().orElse(new TChargingGun());
+		ConnectorStatusInfo connectorStatusInfo = new ConnectorStatusInfo();
+			connectorStatusInfo.setOperatorID("906171535");
+			connectorStatusInfo.setEquipmentOwnerID("906171535");
+			connectorStatusInfo.setStationID(String.valueOf(chargingGun.getSiteId()));
+			connectorStatusInfo.setEquipmentID(String.valueOf(chargingGun.getChargingPileId()));
+			connectorStatusInfo.setConnectorID(chargingGun.getFullNumber());
+			connectorStatusInfo.setEquipmentClassification(1);
+			switch (chargingGun.getStatus()){
+				case 1:
+					connectorStatusInfo.setStatus(0);
+					break;
+				case 2:
+					connectorStatusInfo.setStatus(1);
+					break;
+				case 3:
+					connectorStatusInfo.setStatus(2);
+					break;
+				case 4:
+					connectorStatusInfo.setStatus(3);
+					break;
+				case 5:
+					connectorStatusInfo.setStatus(3);
+					break;
+				case 6:
+					connectorStatusInfo.setStatus(4);
+					break;
+				case 7:
+					connectorStatusInfo.setStatus(255);
+					break;
+			}
+			connectorStatusInfo.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+//			List<Operator> operators = operatorClient.getAllOperator().getData();
+//			for (Operator operator : operators) {
+				tcecSuperviseUtil.notificationStationStatus(new Operator(), connectorStatusInfo);
+//			}
+	}
+	@Autowired
+	private TCECSuperviseUtil tcecSuperviseUtil;
+	private final static String operatorId = "906171535";
+
 	@Test
 	public void test1(){
-
+		TChargingOrder chargingOrder = chargingOrderClient.orderDetail(1884874763556048898L).getData();
+		SupEquipChargeStatus supEquipChargeStatus = new SupEquipChargeStatus();
+		supEquipChargeStatus.setOperatorID(operatorId);
+		supEquipChargeStatus.setEquipmentOwnerID(operatorId);
+		supEquipChargeStatus.setStationID(String.valueOf(chargingOrder.getSiteId()));
+		supEquipChargeStatus.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
+		supEquipChargeStatus.setOrderNo(operatorId+chargingOrder.getCode());
+		switch (chargingOrder.getStatus()){
+			case 2:
+				supEquipChargeStatus.setConnectorStatus(1);
+				break;
+			case 3:
+				supEquipChargeStatus.setConnectorStatus(2);
+				break;
+			case 4:
+				supEquipChargeStatus.setConnectorStatus(3);
+				break;
+			case 5:
+				supEquipChargeStatus.setConnectorStatus(4);
+				break;
+		}
+		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		supEquipChargeStatus.setConnectorID(chargingGun.getFullNumber());
+		supEquipChargeStatus.setEquipmentClassification(1);
+		supEquipChargeStatus.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		switch (chargingGun.getStatus()){
+			case 1:
+				supEquipChargeStatus.setConnectorStatus(0);
+				break;
+			case 2:
+				supEquipChargeStatus.setConnectorStatus(1);
+				break;
+			case 3:
+				supEquipChargeStatus.setConnectorStatus(2);
+				break;
+			case 4:
+				supEquipChargeStatus.setConnectorStatus(3);
+				break;
+			case 5:
+				supEquipChargeStatus.setConnectorStatus(3);
+				break;
+			case 6:
+				supEquipChargeStatus.setConnectorStatus(4);
+				break;
+			case 7:
+				supEquipChargeStatus.setConnectorStatus(255);
+				break;
+		}
+		supEquipChargeStatus.setCurrentA(chargingOrder.getCurrent());
+		supEquipChargeStatus.setSOC(StringUtils.hasLength(chargingOrder.getEndSoc())?new BigDecimal(chargingOrder.getEndSoc()):new BigDecimal("1"));
+		supEquipChargeStatus.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+		supEquipChargeStatus.setEndTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		supEquipChargeStatus.setTotalPower(chargingOrder.getElectrovalence());
+		tcecSuperviseUtil.notificationSupEquipChargeStatus(new Operator(), supEquipChargeStatus);
 	}
+	@Test
+	public void test2(){
+		TChargingOrder chargingOrder = chargingOrderClient.orderDetail(1884874763556048898L).getData();
+		SupChargeOrderInfo supChargeOrderInfo = new SupChargeOrderInfo();
+		supChargeOrderInfo.setOperatorID(operatorId);
+		supChargeOrderInfo.setEquipmentOwnerID(operatorId);
+		supChargeOrderInfo.setStationID(String.valueOf(chargingOrder.getSiteId()));
+		supChargeOrderInfo.setEquipmentID(String.valueOf(chargingOrder.getChargingPileId()));
+		supChargeOrderInfo.setOrderNo(operatorId+chargingOrder.getCode());
+		TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
+		supChargeOrderInfo.setConnectorID(chargingGun.getFullNumber());
+		supChargeOrderInfo.setEquipmentClassification(1);
+		supChargeOrderInfo.setPushTimeStamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
+		supChargeOrderInfo.setStartTime(chargingOrder.getStartTime() != null ? chargingOrder.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+		supChargeOrderInfo.setEndTime(chargingOrder.getEndTime() != null ? chargingOrder.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : "");
+		supChargeOrderInfo.setTotalPower(chargingOrder.getElectrovalence());
+		supChargeOrderInfo.setTotalElecMoney(chargingOrder.getElectrovalence());
+		supChargeOrderInfo.setTotalServiceMoney(chargingOrder.getServiceCharge());
+		supChargeOrderInfo.setTotalMoney(chargingOrder.getOrderAmount());
+		supChargeOrderInfo.setOrderStatus(chargingOrder.getStatus());
+		switch (chargingOrder.getEndMode()){
+			case 0:
+				supChargeOrderInfo.setStopReason(5);
+				supChargeOrderInfo.setStopDesc("异常终止");
+				break;
+			case 1:
+				supChargeOrderInfo.setStopReason(0);
+				supChargeOrderInfo.setStopDesc("用户手动停止充电");
+				break;
+			case 2:
+				supChargeOrderInfo.setStopReason(1);
+				supChargeOrderInfo.setStopDesc("客户归属地运营商平台停止充电");
+				break;
+			case 3:
+				supChargeOrderInfo.setStopReason(1);
+				supChargeOrderInfo.setStopDesc("费用不足中止");
+				break;
+		}
+		tcecSuperviseUtil.notificationChargeOrderInfo(new Operator(), supChargeOrderInfo);
+	}
+	@Test
+	public void test3(){
+		StationStatsInfoResult res = new StationStatsInfoResult();
+		List<Site> data = siteClient.getSiteAll().getData();
+		LocalDateTime now = LocalDateTime.now();
+		LocalDateTime startLocalDateTime = now.minusDays(1);
+		LocalDateTime endLocalDateTime = now.minusDays(1);
+		LocalDateTime localDateTime1 = LocalDateTime.of(2025, 2, 3, 0, 0, 0);
+		LocalDateTime localDateTime2 = LocalDateTime.of(2025, 2, 3, 23, 59, 59);
+
+
+		// 获取今天凌晨
+		startLocalDateTime.withHour(0);
+		startLocalDateTime.withMinute(0);
+		startLocalDateTime.withSecond(0);
+		startLocalDateTime.withMonth(1);
+		startLocalDateTime.withDayOfMonth(28);
+		String start = DateUtils.localDateTimeToString(startLocalDateTime);
+		endLocalDateTime.withHour(23);
+		endLocalDateTime.withMinute(59);
+		endLocalDateTime.withSecond(59);
+		startLocalDateTime.withMonth(1);
+		startLocalDateTime.withDayOfMonth(28);
+		String end = DateUtils.localDateTimeToString(endLocalDateTime);
+		ChargingStatisticeDTO chargingStatisticeDTO = new ChargingStatisticeDTO();
+		chargingStatisticeDTO.setStartTime(localDateTime1);
+		chargingStatisticeDTO.setEndTime(localDateTime2);
+		List<TChargingOrder> data1 = chargingOrderClient.getChargingStatistics(chargingStatisticeDTO).getData();
+		List<StationStatsInfo> stationStatsInfos = new ArrayList<>();
+		String start1 = DateUtils.localDateTimeToString(localDateTime1);
+		String start2 = DateUtils.localDateTimeToString(localDateTime2);
+
+		for (Site datum : data) {
+			StationStatsInfo stationStatsInfo = new StationStatsInfo();
+			stationStatsInfo.setStationID(datum.getId().toString());
+			stationStatsInfo.setEquipmentOwnerID("906171535");
+			stationStatsInfo.setOperatorID("906171535");
+			stationStatsInfo.setStationClassification(1);
+			stationStatsInfo.setStartTime(start1);
+			stationStatsInfo.setEndTime(start2);
+			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"),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);
+					long chargingTime1 = 0L;
+					for (TChargingOrder chargingOrder : tChargingOrders1) {
+						// 累加充电时长
+						LocalDateTime startTime = chargingOrder.getStartTime();
+						LocalDateTime endTime = chargingOrder.getEndTime();
+						// 计算时间差 单位分钟
+						chargingTime += ChronoUnit.SECONDS.between(startTime, endTime)/60;
+					}
+					TChargingGun chargingGun = chargingGunClient.getChargingGunById(integer1).getData();
+					ConnectorStatsInfo connectorStatsInfo = new ConnectorStatsInfo();
+					connectorStatsInfo.setConnectorID(chargingGun.getFullNumber());
+					connectorStatsInfo.setConnectorElectricity(reduce2);
+					connectorStatsInfo.setConnectorTotalChargeTime(Integer.valueOf(chargingTime+""));
+					connectorStatsInfo.setConnectorTotalChargeNum(tChargingOrders1.size());
+					connectorStatsInfo.setConnectorTotalWarningNum(0);
+					ConnectorStatsInfos.add(connectorStatsInfo);
+				}
+				equipmentStatsInfo.setConnectorStatsInfos(ConnectorStatsInfos);
+				EquipmentStatsInfos.add(equipmentStatsInfo);
+			}
+			stationStatsInfo.setEquipmentStatsInfos(EquipmentStatsInfos);
+			stationStatsInfos.add(stationStatsInfo);
+		}
+		res.setStationStatsInfos(stationStatsInfos);
+		tcecSuperviseUtil.superviseNotificationOperationStatsInfo(res);
+	}
+	@Resource
+	private ChargingPileClient chargingPileClient;
+	@Test
+	public void test4(){
+		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.of(2025, 2, 3, 23, 30, 0);
+		LocalDateTime startLocalDateTime = LocalDateTime.of(2025, 2, 3, 20, 0, 0);
+		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()));
+			if (collect.isEmpty()){
+				supStationPowerInfo.setStationRealTimePower(new BigDecimal("0"));
+			}else{
+				BigDecimal divide = collect.stream().map(TChargingOrder::getChargingPower).reduce(BigDecimal.ZERO,BigDecimal::add).divide(new BigDecimal(collect.size()),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;
+	}
+	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