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