Kaynağa Gözat

feat(electric): 新增充电请求工具类并优化令牌管理

- 添加 ChargingUtil 工具类用于处理充电相关 HTTP 请求
- 引入 AES 加密、HMAC-MD5 签名及序列号生成工具
- 优化 TokenManager 中 access token 的设置逻辑
-修复 ApiToken 中 Duration 类型的导入问题
- 实现带认证头的 POST 表单请求方法
wzq 4 hafta önce
ebeveyn
işleme
9d62609ac2

+ 3 - 1
src/main/java/com/zsElectric/boot/common/util/electric/ApiToken.java

@@ -1,6 +1,8 @@
 package com.zsElectric.boot.common.util.electric;
 
 import lombok.Data;
+
+import java.time.Duration;
 import java.time.LocalDateTime;
 
 /**
@@ -42,6 +44,6 @@ public class ApiToken {
      * 计算剩余有效时间(秒)
      */
     public long getRemainingSeconds() {
-        return java.time.Duration.between(LocalDateTime.now(), expireTime).getSeconds();
+        return Duration.between(LocalDateTime.now(), expireTime).getSeconds();
     }
 }

+ 50 - 0
src/main/java/com/zsElectric/boot/common/util/electric/ChargingUtil.java

@@ -0,0 +1,50 @@
+package com.zsElectric.boot.common.util.electric;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.google.gson.JsonObject;
+import com.zsElectric.boot.common.constant.ConnectivityConstants;
+import com.zsElectric.boot.common.util.AESCryptoUtil;
+import com.zsElectric.boot.common.util.HmacMD5Util;
+import com.zsElectric.boot.common.util.OkHttpUtil;
+import com.zsElectric.boot.common.util.SequenceGenUtil;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+public class ChargingUtil {
+
+    @Resource
+    private TokenManager tokenManager;
+    @Resource
+    private OkHttpUtil okHttpUtil;
+
+    public JsonObject chargingRequest(String url, Map<String,Object> queryParms) {
+        Map<String, String> headers = Map.of(
+                "Authorization", "Bearer " + tokenManager.getValidAccessToken()
+        );
+        try {
+            RequestParmsEntity requestParms = new RequestParmsEntity();
+            SequenceGenUtil.SequenceResult result = SequenceGenUtil.generate();
+
+            requestParms
+                    .setOperatorID(ConnectivityConstants.OPERATOR_ID)
+                    .setData(AESCryptoUtil.decrypt(queryParms.toString(),ConnectivityConstants.DATA_SECRET,ConnectivityConstants.DATA_SECRET_IV))
+                    .setTimeStamp(result.getTimestamp())
+                    .setSeq(result.getSequence())
+                    .setSig(HmacMD5Util.genSign(requestParms.getOperatorID(),requestParms.getData(),requestParms.getTimeStamp(),requestParms.getSeq(),ConnectivityConstants.SIG_SECRET));
+
+            JsonObject response = okHttpUtil.doPostForm(url, BeanUtil.beanToMap(requestParms), headers);
+
+            if (Objects.isNull(response)) {
+                log.error("调用第三方接口获取Token失败");
+                return null;
+            }
+            return response;
+        }catch (Exception e){
+            throw new RuntimeException("调用第三方接口发生异常", e);
+        }
+    }
+}

+ 1 - 1
src/main/java/com/zsElectric/boot/common/util/electric/TokenManager.java

@@ -190,7 +190,7 @@ public class TokenManager {
             }
 
             ApiToken apiToken = new ApiToken();
-            apiToken.setAccessToken("Bearer ");
+            apiToken.setAccessToken(responseData.getAccessToken());
             apiToken.setTokenAvailableTime(responseData.getTokenAvailableTime());
             apiToken.setObtainTime(LocalDateTime.now());
             apiToken.setExpireTime(apiToken.getObtainTime().plusSeconds(apiToken.getTokenAvailableTime()));