From a155690a38eb156a4dbef88452b3d5decc833e77 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期五, 24 一月 2025 15:27:41 +0800
Subject: [PATCH] 新增引流接口及业务逻辑

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java                                  |   47 +++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECController.java                                     |  220 +++++++++++-----
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java |    6 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java                                                     |   27 ++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java                                           |  155 +++++++----
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java                                           |   45 +++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java                       |   45 +++
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java                         |   10 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java                     |   10 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationStopCharge.java                       |    2 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStopCharge.java                              |    2 
 /dev/null                                                                                                                            |   43 ---
 ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports  |    3 
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java                            |    5 
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java                        |   14 +
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java                                          |   28 ++
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/StartChargeResult.java                                    |    7 
 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java                                  |   69 +++++
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java                                     |   17 +
 19 files changed, 557 insertions(+), 198 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
new file mode 100644
index 0000000..ddd9bce
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/TCECClientFallbackFactory.java
@@ -0,0 +1,45 @@
+package com.ruoyi.integration.api.factory;
+
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.feignClient.TCECClient;
+import com.ruoyi.integration.api.vo.StartChargeResult;
+import org.springframework.cloud.openfeign.FallbackFactory;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/1/24 10:33
+ */
+public class TCECClientFallbackFactory implements FallbackFactory<TCECClient> {
+	@Override
+	public TCECClient create(Throwable cause) {
+		
+		
+		return new TCECClient() {
+			@Override
+			public R pushChargingGunStatus(Integer id, Integer status) {
+				return R.fail("接口状态变化后推送给第三方失败:" + cause.getMessage());
+			}
+			
+			@Override
+			public R notificationStartChargeResult(StartChargeResult result) {
+				return R.fail("启动充电结果推送失败:" + cause.getMessage());
+			}
+			
+			@Override
+			public R notificationEquipChargeStatus(String startChargeSeq, Integer operatorId) {
+				return R.fail("推送充电状态失败:" + cause.getMessage());
+			}
+			
+			@Override
+			public R notificationStopChargeResult(String startChargeSeq, String connectorID, Integer operatorId) {
+				return R.fail("推送停止充电结果失败:" + cause.getMessage());
+			}
+			
+			
+			@Override
+			public R notificationChargeOrderInfo(String startChargeSeq, Integer operatorId) {
+				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
new file mode 100644
index 0000000..8e7e738
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/TCECClient.java
@@ -0,0 +1,69 @@
+package com.ruoyi.integration.api.feignClient;
+
+import com.ruoyi.common.core.constant.ServiceNameConstants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.integration.api.factory.TCECClientFallbackFactory;
+import com.ruoyi.integration.api.vo.StartChargeResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/1/24 10:32
+ */
+@FeignClient(contextId = "TCECClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = TCECClientFallbackFactory.class)
+public interface TCECClient {
+	
+	
+	/**
+	 * 接口状态变化后推送给第三方
+	 * @return
+	 */
+	@PostMapping("/evcs/v1.0/pushChargingGunStatus")
+	R pushChargingGunStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status);
+	
+	
+	
+	/**
+	 * 启动充电结果推送
+	 * @param result
+	 * @return
+	 */
+	@PostMapping("/evcs/v1.0/notificationStartChargeResult")
+	R notificationStartChargeResult(@RequestBody StartChargeResult result);
+	
+	
+	
+	
+	/**
+	 * 推送充电状态
+	 * @param startChargeSeq
+	 * @return
+	 */
+	@PostMapping("/evcs/v1.0/notificationEquipChargeStatus")
+	R notificationEquipChargeStatus(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId);
+	
+	
+	
+	/**
+	 * 推送停止充电结果
+	 * @param startChargeSeq    充电订单号
+	 * @param connectorID       充电设备接口编码
+	 * @return
+	 */
+	@PostMapping("/evcs/v1.0/notificationStopChargeResult")
+	R notificationStopChargeResult(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("connectorID") String connectorID,
+	                                      @RequestParam("operatorId") Integer operatorId);
+	
+	
+	
+	/**
+	 * 推送订单信息
+	 * @param startChargeSeq
+	 * @return
+	 */
+	@PostMapping("/notificationChargeOrderInfo")
+	R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId);
+}
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/StartChargeResult.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/StartChargeResult.java
similarity index 83%
rename from ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/StartChargeResult.java
rename to ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/StartChargeResult.java
index 6e09c38..a0017cb 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/StartChargeResult.java
+++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/StartChargeResult.java
@@ -1,4 +1,4 @@
-package com.ruoyi.order.api.model;
+package com.ruoyi.integration.api.vo;
 
 import lombok.Data;
 
@@ -33,7 +33,12 @@
 	private String ConnectorID;
 	/**
 	 * 充电启动时间
+	 * yyyy-MM-dd HH:mm:ss
 	 */
 	@NotNull
 	private String StartTime;
+	/**
+	 * 合作商ID
+	 */
+	private String operatorID;
 }
diff --git a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 3e8f391..dfcb4b7 100644
--- a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -7,4 +7,5 @@
 com.ruoyi.integration.api.factory.SwitchwayGateFallbackFactory
 com.ruoyi.integration.api.factory.IotInterfaceFallbackFactory
 com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory
-com.ruoyi.integration.api.factory.BmsDemandAndChargerExportationFallbackFactory
\ No newline at end of file
+com.ruoyi.integration.api.factory.BmsDemandAndChargerExportationFallbackFactory
+com.ruoyi.integration.api.factory.TCECClientFallbackFactory
\ No newline at end of file
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java
index 895cc2b..206524e 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Operator.java
@@ -6,6 +6,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 /**
  * 运营商信息
  * @author zhibing.pu
@@ -50,6 +52,31 @@
 	@TableField("sigSecret")
 	private String sigSecret;
 	/**
+	 * 测试接口地址
+	 */
+	@TableField("test_url")
+	private String testUrl;
+	/**
+	 * 接口地址
+	 */
+	@TableField("url")
+	private String url;
+	/**
+	 * 我方登录三方秘钥
+	 */
+	@TableField("ourOperatorSecret")
+	private String ourOperatorSecret;
+	/**
+	 * 各平台登录token
+	 */
+	@TableField("accessToken")
+	private String accessToken;
+	/**
+	 * token过期时间(秒)
+	 */
+	@TableField("tokenAvailableTime")
+	private LocalDateTime tokenAvailableTime;
+	/**
 	 * token
 	 */
 	@TableField(exist = false)
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java
index d223fba..53ccf8e 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OperatorFallbackFactory.java
@@ -5,6 +5,8 @@
 import com.ruoyi.other.api.feignClient.OperatorClient;
 import org.springframework.cloud.openfeign.FallbackFactory;
 
+import java.util.List;
+
 /**
  * @author zhibing.pu
  * @Date 2025/1/22 15:16
@@ -17,9 +19,24 @@
 		return new OperatorClient() {
 			
 			@Override
+			public R<Operator> getOperatorById(Integer id) {
+				return R.fail("获取运营商数据失败:" + cause.getMessage());
+			}
+			
+			@Override
 			public R<Operator> getOperator(String operatorId) {
 				return R.fail("获取运营商数据失败:" + cause.getMessage());
 			}
+			
+			@Override
+			public R<List<Operator>> getAllOperator() {
+				return R.fail("获取所有运营商失败:" + cause.getMessage());
+			}
+			
+			@Override
+			public R editOperator(Operator operator) {
+				return R.fail("更新运营商数据失败:" + cause.getMessage());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java
index 8dcbee4..d75bc3a 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OperatorClient.java
@@ -6,7 +6,10 @@
 import com.ruoyi.other.api.factory.OperatorFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
@@ -16,6 +19,14 @@
 public interface OperatorClient {
 	
 	
+	/**
+	 * 获取运营商数据
+	 * @param id
+	 * @return
+	 */
+	@PostMapping("/operator/getOperatorById")
+	R<Operator> getOperatorById(@RequestParam("id") Integer id);
+	
 	
 	/**
 	 * 获取运营商数据
@@ -24,6 +35,19 @@
 	 */
 	@PostMapping("/operator/getOperator")
 	R<Operator> getOperator(@RequestParam("operatorId") String operatorId);
-
-
+	
+	
+	/**
+	 * 获取所有运营商
+	 * @return
+	 */
+	@PostMapping("/operator/getAllOperator")
+	R<List<Operator>> getAllOperator();
+	
+	/**
+	 * 更新运营商数据
+	 * @return
+	 */
+	@PostMapping("/operator/editOperator")
+	R editOperator(@RequestBody Operator operator);
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java
deleted file mode 100644
index f5239c8..0000000
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.ruoyi.common.core.utils;
-
-import com.obs.services.ObsClient;
-import com.obs.services.model.ObjectMetadata;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.UUID;
-
-public class ObsUploadUtil {
-
-	public static String endPoint = "obs.cn-southwest-2.myhuaweicloud.com";
-	public static String accessKeyId = "LP9N1TLAYN8ERS1PVIYK";
-	public static String accessKeySecret = "bV55lFHi1cG0SYBvnab8yIgDX6etKRSLh5j1gkPR";
-	public static String bucketName = "haitunyingyu";
-	public static String oss_domain = "https://haitunyingyu.obs.cn-southwest-2.myhuaweicloud.com/";
-	// 创建ObsClient实例
-	public static ObsClient obsClient = new ObsClient(accessKeyId, accessKeySecret, endPoint);
-
-	public static String obsUpload(MultipartFile file) throws IOException{
-		//CommonsMultipartFile file = (CommonsMultipartFile)multipartFile;
-		String fileName = "";
-		if(file!=null && !"".equals(file.getOriginalFilename()) && file.getOriginalFilename()!=null){
-			InputStream content = file.getInputStream();//获得指定文件的输入流
-			ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata
-			meta.setContentLength(file.getSize());  // 必须设置ContentLength
-			String originalFilename = file.getOriginalFilename();
-			if (originalFilename.contains("apk")){
-				fileName = "bf2fe5c5499341e5bc0d56c0c7d5fb2e.apk";
-				System.err.println("apk");
-			}else{
-				fileName =  UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length());
-			}
-			obsClient.putObject(bucketName,"admin/"+fileName,content,meta);// 上传Object.
-			if(fileName != null && !"".equals(fileName)){
-				System.out.println(fileName);
-				fileName = oss_domain+"admin/"+fileName;
-			}
-		}
-		return fileName;
-	}
-
-	/**
-	 * 删除某个Object
-	 *
-	 * @param bucketUrl
-	 * @return
-	 */
-	public static boolean deleteObject(String bucketUrl) {
-		try {
-			bucketUrl=bucketUrl.replace(oss_domain+"web","");
-			// 删除Object.
-			obsClient.deleteObject(bucketName, bucketUrl);
-		} catch (Exception e) {
-			e.printStackTrace();
-			return false;
-		} finally {
-			//ossClient.shutdown();
-		}
-		return true;
-	}
-	
-//	 public static void createBucket(String bucketName)
-//     {
-//         //初始化 OSSClient
-////          ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret);
-//
-//         // 新建一个Bucket
-//         Bucket bucket = ossClient.createBucket(bucketName);
-//         System.out.println(bucket.getName());
-//         System.out.println(bucket.getCreationDate());
-//     }
-//	 
-//	 public static void main(String[] args) {
-//		 OssUploadUtil.createBucket("ssfdfsd");
-//	}
-}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/obs/OBSUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/obs/OBSUtil.java
deleted file mode 100644
index 018c46b..0000000
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/obs/OBSUtil.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.ruoyi.common.core.utils.obs;
-
-import com.obs.services.ObsClient;
-import com.obs.services.model.PutObjectRequest;
-import com.obs.services.model.PutObjectResult;
-
-import java.io.InputStream;
-
-/**
- * 对象存储上传
- * @author zhibing.pu
- * @date 2023/3/15 11:32
- */
-public class OBSUtil {
-
-    public static String endPoint = "https://obs.cn-southwest-2.myhuaweicloud.com";
-    public static String ak = "ONCVMOIXDX55ADAU5MFS";
-    public static String sk = "3uuS3p3rcw2WYSpFVPveIGm7wVvx5OtoCNhbBv3n";
-    public static String bucketname = "yixingtong";
-
-    /**
-     * 上传文件
-     * @param inputStream
-     * @param objectKey
-     * @return
-     */
-    public static String  putObjectToBucket(InputStream inputStream, String objectKey) {
-        try {
-            // 创建ObsClient实例
-            ObsClient obsClient = new ObsClient(ak, sk, endPoint);
-            // 待上传的本地文件路径,需要指定到具体的文件名
-            PutObjectRequest request = new PutObjectRequest();
-            request.setBucketName(bucketname);
-            request.setObjectKey(objectKey);
-            request.setInput(inputStream);
-            PutObjectResult putObjectResult = obsClient.putObject(request);
-            return putObjectResult.getObjectUrl();
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        return null;
-    }
-}
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
index 86b27c7..6fa0fb2 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -30,6 +30,7 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.annotation.Logical;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.integration.api.feignClient.TCECClient;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.vo.TChargingOrderVo;
@@ -74,6 +75,9 @@
 	
 	@Resource
 	private ChargingOrderClient chargingOrderClient;
+	
+	@Resource
+	private TCECClient tcecClient;
 
 
     @Autowired
@@ -259,6 +263,9 @@
 				tChargingGun1.setId(tChargingGun.getId());
 				tChargingGun1.setStatus(2);
 				chargingGunService.updateById(tChargingGun1);
+				//推送状态给三方平台
+				tcecClient.pushChargingGunStatus(tChargingGun.getId(), tChargingGun1.getStatus());
+				
 				if(chargingPile.getStatus() != 1){
 					TChargingPile chargingPile1 = new TChargingPile();
 					chargingPile1.setId(chargingPile.getId());
@@ -279,6 +286,8 @@
 				tChargingGun1.setId(tChargingGun.getId());
 				tChargingGun1.setStatus(7);
 				chargingGunService.updateById(tChargingGun1);
+				//推送状态给三方平台
+				tcecClient.pushChargingGunStatus(tChargingGun.getId(), tChargingGun1.getStatus());
 				
 				//桩处于正常,桩所属的枪都处于非正常,修改桩状态为异常
 				List<TChargingGun> list = chargingGunService.list(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0));
@@ -321,11 +330,16 @@
 					}
 					tChargingGun1.setId(tChargingGun.getId());
 					chargingGunService.updateById(tChargingGun1);
+					
+					//推送状态给三方平台
+					tcecClient.pushChargingGunStatus(tChargingGun.getId(), tChargingGun1.getStatus());
 				}else{
 					TChargingGun tChargingGun1 = new TChargingGun();
 					tChargingGun1.setId(tChargingGun.getId());
 					tChargingGun1.setStatus(3);
 					chargingGunService.updateById(tChargingGun1);
+					//推送状态给三方平台
+					tcecClient.pushChargingGunStatus(tChargingGun.getId(), tChargingGun1.getStatus());
 				}
 				
 				List<TFaultMessage> list = faultMessageService.list(new LambdaQueryWrapper<TFaultMessage>().eq(TFaultMessage::getChargingGunId, tChargingGun.getId())
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 b9b4859..2372b5f 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
@@ -26,10 +26,7 @@
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.integration.api.feignClient.IntegrationClient;
-import com.ruoyi.integration.api.feignClient.IotInterfaceClient;
-import com.ruoyi.integration.api.feignClient.SendMessageClient;
-import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient;
+import com.ruoyi.integration.api.feignClient.*;
 import com.ruoyi.integration.api.model.QrCodeDelivery;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.integration.api.vo.AddDevice;
@@ -69,6 +66,9 @@
 	
 	@Resource
 	private TChargingGunService chargingGunService;
+	
+	@Resource
+	private TCECClient tcecClient;
 	
 	@Resource
 	private SysUserClient sysUserClient;
@@ -689,6 +689,8 @@
 				chargingGun1.setId(chargingGun.getId());
 				chargingGun1.setStatus(1);
 				chargingGunService.updateById(chargingGun1);
+				//推送状态给三方平台
+				tcecClient.pushChargingGunStatus(chargingGun1.getId(), chargingGun1.getStatus());
 				
 				//桩处于正常,桩所属的枪都处于非正常,修改桩状态为异常
 				TChargingPile chargingPile = this.getById(chargingGun.getChargingPileId());
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 3aa324b..71d189a 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
@@ -13,13 +13,12 @@
 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.common.security.service.TokenService;
 import com.ruoyi.integration.drainage.model.*;
 import com.ruoyi.integration.drainage.model.enu.*;
 import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient;
 import com.ruoyi.order.api.feignClient.ChargingOrderClient;
 import com.ruoyi.order.api.model.AddTripartitePlatformOrder;
-import com.ruoyi.order.api.model.StartChargeResult;
+import com.ruoyi.integration.api.vo.StartChargeResult;
 import com.ruoyi.order.api.model.TChargingOrder;
 import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
 import com.ruoyi.other.api.domain.Operator;
@@ -36,6 +35,9 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -132,7 +134,7 @@
 		Operator operator = r.getData();
 		baseRequest.setOperator(operator);
 		//校验签名
-		String sign = buildSign(baseRequest);
+		String sign = TCECUtil.buildSign(baseRequest);
 		if(!sign.equals(sig)){
 			baseResult.setRet(4001);
 			baseResult.setMsg("签名校验失败");
@@ -140,32 +142,6 @@
 		}
 		baseResult.setOperator(operator);
 		return baseResult;
-	}
-	
-	
-	/**
-	 * 构建签名字符串
-	 * @param model
-	 * @return
-	 */
-	public String buildSign(BaseModel model){
-		Operator operator = model.getOperator();
-		//签名秘钥SigSecret
-		String key = operator.getSigSecret();
-		String sign = "";
-		switch (operator.getName()){
-			case "XinDianTu":
-				//进行字符串拼接、计算
-				String m = new StringBuilder(model.getOperatorID()).append(model.getData()).append(model.getTimeStamp()).append(model.getSeq()).toString();
-				byte[] hmacMd5 = SignUtil.getHMacMD5Bytes(key.getBytes(), m.getBytes());
-				// 打印计算得到的签名Sig
-				sign = SignUtil.bytesToHexString(hmacMd5);
-				break;
-			case "KuaiDian":
-				sign = SignUtil.hmacSign(model.getData(), key);
-				break;
-		}
-		return sign;
 	}
 	
 	
@@ -181,7 +157,7 @@
 		BaseResult baseResult = requestCheck(false, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		QueryTokenResult queryTokenResult = new QueryTokenResult();
@@ -189,6 +165,11 @@
 		if(null == operator){
 			queryTokenResult.setSuccStat(1);
 			queryTokenResult.setFailReason(1);
+			//参数加密
+			String jsonString = JSON.toJSONString(queryTokenResult);
+			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+			baseResult.setData(encrypt);
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		
@@ -202,7 +183,7 @@
 			String jsonString = JSON.toJSONString(queryTokenResult);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		
@@ -219,7 +200,7 @@
 		String jsonString = JSON.toJSONString(queryTokenResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -237,7 +218,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -262,7 +243,7 @@
 		String jsonString = JSON.toJSONString(queryStationsInfoResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -458,7 +439,10 @@
 				connectorStatusInfo.setStatus(255);
 				break;
 		}
-		NotificationStationStatusResult result = TCECUtil.notificationStationStatus(connectorStatusInfo);
+		List<Operator> operators = operatorClient.getAllOperator().getData();
+		for (Operator operator : operators) {
+			TCECUtil.notificationStationStatus(operator, connectorStatusInfo);
+		}
 		return R.ok();
 	}
 	
@@ -473,7 +457,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -532,7 +516,7 @@
 		String jsonString = JSON.toJSONString(result);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -550,7 +534,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -602,7 +586,7 @@
 		String jsonString = JSON.toJSONString(result);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -617,7 +601,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -669,7 +653,7 @@
 		String jsonString = JSON.toJSONString(queryEquipAuthResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -685,7 +669,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -708,7 +692,7 @@
 			String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Integer accountingStrategyId = tChargingGun.getAccountingStrategyId();
@@ -725,7 +709,7 @@
 			String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		List<PolicyInfo> PolicyInfos = new ArrayList<>();
@@ -742,7 +726,7 @@
 		String jsonString = JSON.toJSONString(queryEquipBusinessPolicyResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -757,7 +741,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -782,7 +766,7 @@
 			String jsonString = JSON.toJSONString(result);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		//设备离线
@@ -794,14 +778,14 @@
 			String jsonString = JSON.toJSONString(result);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		//调用充电接口
 		AddTripartitePlatformOrder addTripartitePlatformOrder = new AddTripartitePlatformOrder();
 		addTripartitePlatformOrder.setStartChargeSeq(queryStartCharge.getStartChargeSeq());
 		addTripartitePlatformOrder.setChargingGunId(tChargingGun.getId());
-//		addTripartitePlatformOrder.setOperatorId(query.get);
+		addTripartitePlatformOrder.setOperatorId(operator.getOperatorId());
 		addTripartitePlatformOrder.setPaymentAmount(queryStartCharge.getPaymentAmount());
 		addTripartitePlatformOrder.setRechargePaymentType(queryStartCharge.getPaymentType());
 		R order = chargingOrderClient.addTripartitePlatformOrder(addTripartitePlatformOrder);
@@ -814,7 +798,7 @@
 			String jsonString = JSON.toJSONString(result);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		result.setStartChargeSeqStat(1);
@@ -824,7 +808,7 @@
 		String jsonString = JSON.toJSONString(result);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -838,10 +822,36 @@
 	public R notificationStartChargeResult(@RequestBody StartChargeResult result){
 		NotificationStartCharge notificationStartCharge = new NotificationStartCharge();
 		BeanUtils.copyProperties(result, notificationStartCharge);
-		com.ruoyi.integration.drainage.model.NotificationStartChargeResult notificationStartChargeResult = TCECUtil.notificationStartChargeResult(notificationStartCharge);
+		Operator operator = operatorClient.getOperator(result.getOperatorID()).getData();
+		com.ruoyi.integration.drainage.model.NotificationStartChargeResult notificationStartChargeResult = TCECUtil.notificationStartChargeResult(operator, notificationStartCharge);
 		//启动重试推送机制
 		if(null == notificationStartChargeResult || 1 == notificationStartChargeResult.getSuccStat()){
-		
+			
+			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+			threadPoolExecutor.execute(new Runnable() {
+				//计数器
+				Integer size = 0;
+				@Override
+				public void run() {
+					NotificationStartChargeResult notificationStartChargeResult1 = TCECUtil.notificationStartChargeResult(operator, notificationStartCharge);
+					//启动重试推送机制
+					if(null != notificationStartChargeResult1 && 0 == notificationStartChargeResult1.getSuccStat()){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					size++;
+					if(size >= 5){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					//间隔一分钟重试一次
+					try {
+						Thread.sleep(60000);
+					} catch (InterruptedException e) {
+						throw new RuntimeException(e);
+					}
+				}
+			});
 		}
 		return R.ok();
 	}
@@ -858,7 +868,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -871,7 +881,7 @@
 		String jsonString = JSON.toJSONString(queryEquipChargeStatusResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -987,12 +997,37 @@
 	 * @return
 	 */
 	@PostMapping("/notificationEquipChargeStatus")
-	public R notificationEquipChargeStatus(@RequestParam("startChargeSeq") String startChargeSeq){
+	public R notificationEquipChargeStatus(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId){
 		QueryEquipChargeStatusResult queryEquipChargeStatusResult = buildQueryEquipChargeStatusResult(startChargeSeq);
-		NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = TCECUtil.notificationEquipChargeStatus(queryEquipChargeStatusResult);
+		Operator operator = operatorClient.getOperatorById(operatorId).getData();
+		NotificationEquipChargeStatusResult notificationEquipChargeStatusResult = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult);
 		//启动重试推送机制
 		if(null == notificationEquipChargeStatusResult || 1 == notificationEquipChargeStatusResult.getSuccStat()){
-		
+			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+			threadPoolExecutor.execute(new Runnable() {
+				//计数器
+				Integer size = 0;
+				@Override
+				public void run() {
+					NotificationEquipChargeStatusResult notificationEquipChargeStatusResult1 = TCECUtil.notificationEquipChargeStatus(operator, queryEquipChargeStatusResult);
+					//启动重试推送机制
+					if(null != notificationEquipChargeStatusResult1 && 0 == notificationEquipChargeStatusResult1.getSuccStat()){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					size++;
+					if(size >= 5){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					//间隔一分钟重试一次
+					try {
+						Thread.sleep(60000);
+					} catch (InterruptedException e) {
+						throw new RuntimeException(e);
+					}
+				}
+			});
 		}
 		return R.ok();
 	}
@@ -1008,7 +1043,7 @@
 		BaseResult baseResult = requestCheck(true, baseRequest, request);
 		if(0 != baseResult.getRet()){
 			baseResult.setData("");
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		Operator operator = baseResult.getOperator();
@@ -1030,14 +1065,14 @@
 			String jsonString = JSON.toJSONString(queryStopChargeResult);
 			String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 			baseResult.setData(encrypt);
-			baseResult.setSig(buildSign(baseResult));
+			baseResult.setSig(TCECUtil.buildSign(baseResult));
 			return baseResult;
 		}
 		//参数加密
 		String jsonString = JSON.toJSONString(queryStopChargeResult);
 		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
 		baseResult.setData(encrypt);
-		baseResult.setSig(buildSign(baseResult));
+		baseResult.setSig(TCECUtil.buildSign(baseResult));
 		return baseResult;
 	}
 	
@@ -1050,17 +1085,43 @@
 	 * @return
 	 */
 	@PostMapping("/notificationStopChargeResult")
-	public R notificationStopChargeResult(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("connectorID") String connectorID){
+	public R notificationStopChargeResult(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("connectorID") String connectorID,
+	                                      @RequestParam("operatorId") Integer operatorId){
+		Operator operator = operatorClient.getOperatorById(operatorId).getData();
 		NotificationStopChargeResult info = new NotificationStopChargeResult();
 		info.setStartChargeSeq(startChargeSeq);
 		info.setStartChargeSeqStat(4);
 		info.setConnectorID(connectorID);
 		info.setSuccStat(0);
 		info.setFailReason(0);
-		NotificationStopCharge notificationStopCharge = TCECUtil.notificationStopChargeResult(info);
+		NotificationStopCharge notificationStopCharge = TCECUtil.notificationStopChargeResult(operator, info);
 		//启动重试推送机制
 		if(null == notificationStopCharge || 1 == notificationStopCharge.getSuccStat()){
-		
+			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+			threadPoolExecutor.execute(new Runnable() {
+				//计数器
+				Integer size = 0;
+				@Override
+				public void run() {
+					NotificationStopCharge notificationStopCharge1 = TCECUtil.notificationStopChargeResult(operator, info);
+					//启动重试推送机制
+					if(null != notificationStopCharge1 && 0 == notificationStopCharge1.getSuccStat()){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					size++;
+					if(size >= 5){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					//间隔一分钟重试一次
+					try {
+						Thread.sleep(60000);
+					} catch (InterruptedException e) {
+						throw new RuntimeException(e);
+					}
+				}
+			});
 		}
 		return R.ok();
 	}
@@ -1072,12 +1133,37 @@
 	 * @return
 	 */
 	@PostMapping("/notificationChargeOrderInfo")
-	public R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq){
+	public R notificationChargeOrderInfo(@RequestParam("startChargeSeq") String startChargeSeq, @RequestParam("operatorId") Integer operatorId){
 		NotificationChargeOrderInfo info = buildNotificationChargeOrderInfo(startChargeSeq);
-		NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = TCECUtil.notificationChargeOrderInfo(info);
+		Operator operator = operatorClient.getOperatorById(operatorId).getData();
+		NotificationChargeOrderInfoResult notificationChargeOrderInfoResult = TCECUtil.notificationChargeOrderInfo(operator, info);
 		//启动重试推送机制
 		if(null == notificationChargeOrderInfoResult || 1 == notificationChargeOrderInfoResult.getConfirmResult()){
-		
+			ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+			threadPoolExecutor.execute(new Runnable() {
+				//计数器
+				Integer size = 0;
+				@Override
+				public void run() {
+					NotificationChargeOrderInfoResult notificationChargeOrderInfoResult1 = TCECUtil.notificationChargeOrderInfo(operator, info);
+					//启动重试推送机制
+					if(null != notificationChargeOrderInfoResult1 && 0 == notificationChargeOrderInfoResult1.getConfirmResult()){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					size++;
+					if(size >= 5){
+						threadPoolExecutor.shutdown();
+						return;
+					}
+					//间隔一分钟重试一次
+					try {
+						Thread.sleep(60000);
+					} catch (InterruptedException e) {
+						throw new RuntimeException(e);
+					}
+				}
+			});
 		}
 		return R.ok();
 	}
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
index 0cadb76..697d9d9 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TCECUtil.java
@@ -3,9 +3,14 @@
 import cn.hutool.http.*;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.utils.SpringUtils;
 import com.ruoyi.integration.drainage.model.*;
+import com.ruoyi.integration.drainage.model.enu.InterfaceUrlEnum;
+import com.ruoyi.other.api.domain.Operator;
+import com.ruoyi.other.api.feignClient.OperatorClient;
 import lombok.extern.slf4j.Slf4j;
 
+import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
@@ -23,18 +28,8 @@
 	 * 运营商标识
 	 */
 	private static final String OperatorID = "";
-	/**
-	 * 运营商秘钥
-	 */
-	private static final String OperatorSecret = "";
-	/**
-	 * tokne
-	 */
-	private static String token = "";
-	/**
-	 * token过期时间,秒
-	 */
-	private static Long TokenAvailableTime = 0L;
+	
+	private static OperatorClient operatorClient = SpringUtils.getBean(OperatorClient.class);
 	
 	private static Map<Long, Integer> map = new HashMap<>();
 	
@@ -42,26 +37,31 @@
 	/**
 	 * 获取token
 	 */
-	public static void queryToken(){
+	public static String queryToken(Operator operator){
 		HttpRequest post = HttpUtil.createPost("");
 		post.contentType("application/json;charset=utf-8");
 		JSONObject body = new JSONObject();
 		body.put("OperatorID", OperatorID);
-		body.put("OperatorSecret", OperatorSecret);
+		body.put("OperatorSecret", operator.getOurOperatorSecret());
 		post.body(body.toJSONString());
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
-			log.error("获取token失败:" + execute.body());
-			return;
+			log.error("获取三方token失败:" + execute.body());
+			return null;
 		}
 		JSONObject jsonObject = JSON.parseObject(execute.body());
 		Integer succStat = jsonObject.getInteger("SuccStat");
 		if(0 != succStat){
-			log.error("获取token失败:" + jsonObject.getString("FailReason"));
-			return;
+			log.error("获取三方token失败:" + jsonObject.getString("FailReason"));
+			return null;
 		}
-		token = jsonObject.getString("AccessToken");
-		TokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + jsonObject.getLong("TokenAvailableTime");
+		String token = jsonObject.getString("AccessToken");
+		Long tokenAvailableTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC) + jsonObject.getLong("TokenAvailableTime");
+		LocalDateTime localDateTime = Instant.ofEpochSecond(tokenAvailableTime).atOffset(ZoneOffset.UTC).toLocalDateTime();
+		operator.setAccessToken(token);
+		operator.setTokenAvailableTime(localDateTime);
+		operatorClient.editOperator(operator);
+		return token;
 	}
 	
 	
@@ -69,12 +69,12 @@
 	 * 获取token
 	 * @return
 	 */
-	public static String getToken(){
-		long second = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
-		if(second >= TokenAvailableTime){
-			queryToken();
+	public static String getToken(Operator operator){
+		if(null != operator.getTokenAvailableTime() && operator.getTokenAvailableTime().isBefore(LocalDateTime.now())){
+			return operator.getAccessToken();
+		}else{
+			return queryToken(operator);
 		}
-		return token;
 	}
 	
 	
@@ -83,12 +83,12 @@
 	 * 设备状态变化推送
 	 * @param info
 	 */
-	public static NotificationStationStatusResult notificationStationStatus(ConnectorStatusInfo info) {
-		HttpRequest post = HttpUtil.createPost("");
-		buildBody(post, info);
+	public static NotificationStationStatusResult notificationStationStatus(Operator operator, ConnectorStatusInfo info) {
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_STATION_STATUS.getUrl());
+		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
-			log.error("设备状态变化推送失败:" + execute.body());
+			log.error("推送三方设备状态变化失败:" + execute.body());
 			return null;
 		}
 		return JSON.parseObject(execute.body(), NotificationStationStatusResult.class);
@@ -100,18 +100,18 @@
 	 * @param info
 	 * @return
 	 */
-	public static NotificationStartChargeResult notificationStartChargeResult(NotificationStartCharge info){
-		HttpRequest post = HttpUtil.createPost("");
-		buildBody(post, info);
+	public static NotificationStartChargeResult notificationStartChargeResult(Operator operator, NotificationStartCharge info){
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_START_CHARGE_RESULT.getUrl());
+		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
-			log.error("启动充电结果推送失败:" + execute.body());
+			log.error("推送三方启动充电结果失败:" + execute.body());
 			return null;
 		}
 		JSONObject jsonObject = JSON.parseObject(execute.body());
 		Integer ret = jsonObject.getInteger("Ret");
 		if(0 != ret){
-			log.error("启动充电结果推送失败:" + execute.body());
+			log.error("推送三方启动充电结果失败:" + execute.body());
 			return null;
 		}
 		return jsonObject.getObject("Data", NotificationStartChargeResult.class);
@@ -128,18 +128,18 @@
 	 * @param info
 	 * @return
 	 */
-	public static NotificationEquipChargeStatusResult notificationEquipChargeStatus(QueryEquipChargeStatusResult info){
-		HttpRequest post = HttpUtil.createPost("");
-		buildBody(post, info);
+	public static NotificationEquipChargeStatusResult notificationEquipChargeStatus(Operator operator, QueryEquipChargeStatusResult info){
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_EQUIP_CHARGE_STATUS.getUrl());
+		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
-			log.error("推送充电状态失败:" + execute.body());
+			log.error("推送三方充电状态失败:" + execute.body());
 			return null;
 		}
 		JSONObject jsonObject = JSON.parseObject(execute.body());
 		Integer ret = jsonObject.getInteger("Ret");
 		if(0 != ret){
-			log.error("推送充电状态失败:" + execute.body());
+			log.error("推送三方充电状态失败:" + execute.body());
 			return null;
 		}
 		return jsonObject.getObject("Data", NotificationEquipChargeStatusResult.class);
@@ -151,18 +151,18 @@
 	 * @param info
 	 * @return
 	 */
-	public static NotificationStopCharge notificationStopChargeResult(NotificationStopChargeResult info){
-		HttpRequest post = HttpUtil.createPost("");
-		buildBody(post, info);
+	public static NotificationStopCharge notificationStopChargeResult(Operator operator, NotificationStopChargeResult info){
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_STOP_CHARGE_RESULT.getUrl());
+		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
-			log.error("推送停止充电结果失败:" + execute.body());
+			log.error("推送三方停止充电结果失败:" + execute.body());
 			return null;
 		}
 		JSONObject jsonObject = JSON.parseObject(execute.body());
 		Integer ret = jsonObject.getInteger("Ret");
 		if(0 != ret){
-			log.error("推送停止充电结果失败:" + execute.body());
+			log.error("推送三方停止充电结果失败:" + execute.body());
 			return null;
 		}
 		return jsonObject.getObject("Data", NotificationStopCharge.class);
@@ -176,18 +176,18 @@
 	 * @param info
 	 * @return
 	 */
-	public static NotificationChargeOrderInfoResult notificationChargeOrderInfo(NotificationChargeOrderInfo info){
-		HttpRequest post = HttpUtil.createPost("");
-		buildBody(post, info);
+	public static NotificationChargeOrderInfoResult notificationChargeOrderInfo(Operator operator, NotificationChargeOrderInfo info){
+		HttpRequest post = HttpUtil.createPost(operator.getTestUrl() + InterfaceUrlEnum.NOTIFICATION_CHARGE_ORDER_INFO.getUrl());
+		buildBody(post, info, operator);
 		HttpResponse execute = post.execute();
 		if(200 != execute.getStatus()){
-			log.error("推送充电订单信息失败:" + execute.body());
+			log.error("推送三方充电订单信息失败:" + execute.body());
 			return null;
 		}
 		JSONObject jsonObject = JSON.parseObject(execute.body());
 		Integer ret = jsonObject.getInteger("Ret");
 		if(0 != ret){
-			log.error("推送充电订单信息失败:" + execute.body());
+			log.error("推送三方充电订单信息失败:" + execute.body());
 			return null;
 		}
 		return jsonObject.getObject("Data", NotificationChargeOrderInfoResult.class);
@@ -199,30 +199,59 @@
 	 * @param post
 	 * @param o
 	 */
-	public static void buildBody(HttpRequest post, Object o){
-		Long key = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
-		Integer integer = map.get(key);
+	public static void buildBody(HttpRequest post, Object o, Operator operator){
+		Long timeStamp = Long.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+		Integer integer = map.get(timeStamp);
 		if(null == integer){
 			integer = 1;
 		}else{
 			integer++;
 		}
-		map.put(key, integer);
+		map.put(timeStamp, integer);
 		post.contentType("application/json;charset=utf-8");
-		post.header("Authorization", "Bearer " + getToken());
-		JSONObject body = new JSONObject();
-		body.put("OperatorID", OperatorID);
-		body.put("Data", AESUtil.encrypt(JSON.toJSONString(o)));
-		body.put("TimeStamp", key);
-		body.put("Seq", String.format("%04d", integer));
-		body.put("Sig", "");
-		post.body(body.toJSONString());
-		
+		post.header("Authorization", "Bearer " + getToken(operator));
+		BaseRequest baseRequest = new BaseRequest();
+		baseRequest.setOperatorID(OperatorID);
+		baseRequest.setTimeStamp(timeStamp);
+		baseRequest.setSeq(String.format("%04d", integer));
+		String jsonString = JSON.toJSONString(o);
+		String encrypt = AESUtil.encrypt(jsonString, operator.getDataSecret(), operator.getDataSecretIv());
+		baseRequest.setData(encrypt);
+		baseRequest.setOperator(operator);
+		baseRequest.setSig(buildSign(baseRequest));
+		post.body(JSON.toJSONString(baseRequest));
 		//清空小于当前时间的map中的无效数据
 		for (Long k : map.keySet()) {
-			if(k <= (key - 10)){
+			if(k <= (timeStamp - 10)){
 				map.remove(k);
 			}
 		}
 	}
+	
+	
+	/**
+	 * 构建签名字符串
+	 * @param model
+	 * @return
+	 */
+	public static String buildSign(BaseModel model){
+		Operator operator = model.getOperator();
+		//签名秘钥SigSecret
+		String key = operator.getSigSecret();
+		String sign = "";
+		switch (operator.getName()){
+			case "XinDianTu":
+				//进行字符串拼接、计算
+				String m = new StringBuilder(model.getOperatorID()).append(model.getData()).append(model.getTimeStamp()).append(model.getSeq()).toString();
+				byte[] hmacMd5 = SignUtil.getHMacMD5Bytes(key.getBytes(), m.getBytes());
+				// 打印计算得到的签名Sig
+				sign = SignUtil.bytesToHexString(hmacMd5);
+				break;
+			case "KuaiDian":
+				sign = SignUtil.hmacSign(model.getData(), key);
+				break;
+		}
+		return sign;
+	}
+	
 }
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/NotificationStopCharge.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationStopCharge.java
similarity index 90%
rename from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/NotificationStopCharge.java
rename to ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationStopCharge.java
index a1e4a99..3fae0bf 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/NotificationStopCharge.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/NotificationStopCharge.java
@@ -1,4 +1,4 @@
-package com.ruoyi.integration.drainage;
+package com.ruoyi.integration.drainage.model;
 
 import lombok.Data;
 
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java
index 8d1928e..fd22d00 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStationStats.java
@@ -12,11 +12,6 @@
 @Data
 public class QueryStationStats {
 	/**
-	 * 运营商ID
-	 */
-	@NotNull
-	private String OperatorID;
-	/**
 	 * 充电站ID
 	 */
 	@NotNull
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/QueryStopCharge.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStopCharge.java
similarity index 87%
rename from ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/QueryStopCharge.java
rename to ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStopCharge.java
index 49bea78..8c2677b 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/QueryStopCharge.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/QueryStopCharge.java
@@ -1,4 +1,4 @@
-package com.ruoyi.integration.drainage;
+package com.ruoyi.integration.drainage.model;
 
 import lombok.Data;
 
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
index eebc932..c609fed 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/model/enu/InterfaceUrlEnum.java
@@ -6,10 +6,12 @@
  * @Date 2025/1/21 14:38
  */
 public enum InterfaceUrlEnum {
-	QUERY_STATIONS_INFO("query_stations_info", "查询充电站信息"),
-	NOTIFICATION_STATION_STATUS("notification_stationStatus", "设备状态变化推送"),
-	QUERY_STATION_STATUS("query_station_status", "设备接口状态查询"),
-	
+	NOTIFICATION_STATION_STATUS("/notification_station_status", "设备状态变化推送"),
+	NOTIFICATION_START_CHARGE_RESULT("/notification_start_charge_result", "推送启动充电结果"),
+	NOTIFICATION_EQUIP_CHARGE_STATUS("/notification_equip_charge_status", "推送充电状态"),
+	NOTIFICATION_STOP_CHARGE_RESULT("/notification_stop_charge_result", "推送停止充电结果"),
+	NOTIFICATION_CHARGE_ORDER_INFO("/notification_charge_order_info", "推送充电订单信息"),
+	CHECK_CHARGE_ORDERS("/check_charge_orders", "推送订单对账结果信息"),
 	;
 	
 	private String url;
diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
index a08aeb8..834bc06 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java
@@ -7,6 +7,7 @@
 import com.ruoyi.chargingPile.api.model.TChargingGun;
 import com.ruoyi.chargingPile.api.model.TFaultMessage;
 import com.ruoyi.chargingPile.api.vo.GetChargingGunByCode;
+import com.ruoyi.integration.api.feignClient.TCECClient;
 import com.ruoyi.integration.api.model.Online;
 import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData;
 import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService;
@@ -51,6 +52,9 @@
     private ChargingGunClient chargingGunClient;
     @Resource
     private FaultMessageClient faultMessageClient;
+    
+    @Resource
+    private TCECClient tcecClient;
 
 
     @Override
@@ -124,6 +128,8 @@
                 }
             }
             chargingGunClient.updateChargingGunById(chargingGun);
+            //推送状态给三方平台
+            tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
         }
     }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index d30ab60..c10feaf 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -32,6 +32,7 @@
 import com.ruoyi.integration.api.feignClient.*;
 import com.ruoyi.integration.api.model.*;
 import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply;
+import com.ruoyi.integration.api.vo.StartChargeResult;
 import com.ruoyi.order.api.dto.SettlementConfirmAdd;
 import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient;
 import com.ruoyi.order.api.feignClient.AccountingStrategyOrderClient;
@@ -141,7 +142,7 @@
 	private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient;
 	
 	@Resource
-	private ChargingHandshakeClient chargingHandshakeClient;
+	private TCECClient tcecClient;
 
 	@Resource
 	private SendMessageClient sendMessageClient;
@@ -747,6 +748,10 @@
 			}
 			this.updateById(order);
 			redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+			//推送三方平台订单状态
+			if(2 == chargingOrder.getOrderSource()){
+				tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+			}
 			return true;
 		}else{
 			Integer counter = boot_failed_map.get(code);
@@ -777,6 +782,10 @@
 			order.setEndMode(0);
 			this.updateById(order);
 			redisService.setCacheObject(key, preChargeCheck1, 24L, TimeUnit.HOURS);
+			//推送三方平台订单状态
+			if(2 == chargingOrder.getOrderSource()){
+				tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+			}
 			return true;
 		}
 	}
@@ -836,9 +845,24 @@
 			TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
 			chargingGun.setStatus(4);
 			chargingGunClient.updateChargingGunById(chargingGun);
+			//推送状态给三方平台
+			tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
 		}
 		redisService.setCacheObject("AQJC_" + order.getChargingGunId(), preChargeCheck1, 24L, TimeUnit.HOURS);
 		this.updateById(order);
+		//推送三方平台启动充电结果
+		if(2 == order.getOrderSource()){
+			StartChargeResult result = new StartChargeResult();
+			result.setStartChargeSeq(order.getStartChargeSeq());
+			result.setStartChargeSeqStat(3 == order.getStatus() ? 2 : 4);
+			result.setConnectorID(order.getChargingGunId().toString());
+			result.setStartTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+			Operator operator = operatorClient.getOperatorById(order.getOperatorId()).getData();
+			result.setOperatorID(operator.getOperatorId());
+			tcecClient.notificationStartChargeResult(result);
+			
+			tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
+		}
 	}
 	
 	/**
@@ -1003,7 +1027,6 @@
 		chargingOrder.setStatus(4);
 		chargingOrder.setEndMode(1);
 		this.updateById(chargingOrder);
-		
 		String code1 = order.getCode();
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
 		//异步线程处理停机
@@ -1018,6 +1041,11 @@
 			log.info(code1 + ":-------------------远程停止充电请求-------------------");
 			log.info(platformStopCharging.toString());
 		});
+		//推送三方平台
+		if(2 == order.getOrderSource()){
+			tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
+		}
+		
 		return AjaxResult.success();
 	}
 	
@@ -2256,6 +2284,14 @@
 		this.updateById(order);
 		chargingOrder = this.getById(order.getId());
 		
+		//推送三方平台
+		if(2 == chargingOrder.getOrderSource()){
+			tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+			tcecClient.notificationStopChargeResult(chargingOrder.getStartChargeSeq(), chargingOrder.getChargingGunId().toString(),
+					chargingOrder.getOperatorId());
+			tcecClient.notificationChargeOrderInfo(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
+		}
+		
 		//开始将优惠券优惠的金额添加到明细中
 		BigDecimal couponDiscountAmount = order.getCouponDiscountAmount();
 		if(null != couponDiscountAmount && couponDiscountAmount.compareTo(BigDecimal.ZERO) > 0){
@@ -2277,6 +2313,8 @@
 		chargingGun.setStatus(2);
 		chargingGun.setChargingPower(BigDecimal.ZERO);
 		chargingGunClient.updateChargingGunById(chargingGun);
+		//推送状态给三方平台
+		tcecClient.pushChargingGunStatus(chargingGun.getId(), chargingGun.getStatus());
 		
 		//添加积分
 		TIntegralRule integralRule = integralRuleClient.getSet().getData();
@@ -4074,6 +4112,9 @@
 				scheduler.shutdown();
 			}
 		}, 5, 1, TimeUnit.SECONDS);
+		
+		//推送三方平台订单状态
+		tcecClient.notificationEquipChargeStatus(chargingOrder.getStartChargeSeq(), chargingOrder.getOperatorId());
 		return R.ok();
 	}
 	
@@ -4101,6 +4142,8 @@
 		chargingOrder.setEndMode(1);
 		this.updateById(chargingOrder);
 		
+		tcecClient.notificationEquipChargeStatus(order.getStartChargeSeq(), order.getOperatorId());
+		
 		String code1 = order.getCode();
 		TChargingGun chargingGun = chargingGunClient.getChargingGunById(order.getChargingGunId()).getData();
 		//异步线程处理停机
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java
index a23961c..491f45e 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OperatorController.java
@@ -4,12 +4,10 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.other.api.domain.Operator;
 import com.ruoyi.other.service.OperatorService;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * @author zhibing.pu
@@ -23,6 +21,21 @@
 	private OperatorService operatorService;
 	
 	
+	
+	/**
+	 * 获取运营商数据
+	 * @param id
+	 * @return
+	 */
+	@PostMapping("/getOperatorById")
+	public R<Operator> getOperatorById(@RequestParam("id") Integer id){
+		Operator operator = operatorService.getById(id);
+		return R.ok(operator);
+	}
+	
+	
+	
+	
 	/**
 	 * 获取运营商数据
 	 * @param operatorId
@@ -33,4 +46,28 @@
 		Operator operator = operatorService.getOne(new LambdaQueryWrapper<Operator>().eq(Operator::getOperatorId, operatorId));
 		return R.ok(operator);
 	}
+	
+	
+	
+	/**
+	 * 获取所有运营商
+	 * @return
+	 */
+	@PostMapping("/getAllOperator")
+	public R<List<Operator>> getAllOperator(){
+		List<Operator> list = operatorService.list();
+		return R.ok(list);
+	}
+	
+	
+	
+	/**
+	 * 更新运营商数据
+	 * @return
+	 */
+	@PostMapping("/editOperator")
+	public R editOperator(@RequestBody Operator operator){
+		operatorService.updateById(operator);
+		return R.ok();
+	}
 }

--
Gitblit v1.7.1