Browse Source

互联互通对接调试:加解密修改等

skyline 1 year ago
parent
commit
11c808668d

+ 5 - 5
common/src/main/java/com/kym/common/utils/PlatformAesUtil.java

@@ -1,7 +1,6 @@
 package com.kym.common.utils;
 
 
-import com.kym.entity.admin.Platform;
 import org.apache.tomcat.util.codec.binary.Base64;
 
 import javax.crypto.Cipher;
@@ -31,11 +30,12 @@ public class PlatformAesUtil {
     /**
      * AES 加密操作
      *
-     * @param config  互联互通平台配置
+     * @param dataSecret
+     * @param dataSecretIv
      * @param content 待加密内容
      * @return 返回Base64转码后的加密数据
      */
-    public static String encrypt(Platform config, String content) {
+    public static String encrypt(String dataSecret, String dataSecretIv, String content) {
 
         if (content == null || content.isEmpty()) {
             return content;
@@ -52,12 +52,12 @@ public class PlatformAesUtil {
             Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
 
             //偏移量
-            IvParameterSpec zeroIv = new IvParameterSpec(config.getUserDataSecretIv().getBytes(StandardCharsets.UTF_8));
+            IvParameterSpec zeroIv = new IvParameterSpec(dataSecretIv.getBytes(StandardCharsets.UTF_8));
 
             byte[] byteContent = content.getBytes(StandardCharsets.UTF_8);
 
             //使用加密秘钥
-            SecretKeySpec skeySpec = new SecretKeySpec(config.getUserDataSecret().getBytes(StandardCharsets.UTF_8), AES);
+            SecretKeySpec skeySpec = new SecretKeySpec(dataSecret.getBytes(StandardCharsets.UTF_8), AES);
             //初始化为加密模式的密码器
             cipher.init(Cipher.ENCRYPT_MODE, skeySpec, zeroIv);
             // 加密

+ 17 - 6
service/src/main/java/com/kym/service/admin/impl/StationServiceImpl.java

@@ -226,20 +226,31 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
 
 
     @Override
-    public List<PlatformStationStatusInfo> stationStatus(String[] ids) {
+    public List<PlatformStationStatusInfo> stationStatus(String[] stationIds) {
+        // 站点ID对应平台名称
+        var stationId2Platform = new HashMap<String, String>();
         // 先对站点id进行分组,单独去请求各自互联互通平台数据
-        var set = new HashSet<String>();
-        for (String stationId : ids) {
-            set.add(PlatformCache.INSTANCE.getPlatformNameByStationId(stationId));
+        var platforms = new HashSet<String>();
+
+        for (String stationId : stationIds) {
+            platforms.add(PlatformCache.INSTANCE.getPlatformNameByStationId(stationId));
+            stationId2Platform.put(stationId, PlatformCache.INSTANCE.getPlatformNameByStationId(stationId));
         }
 
+        // 平台名称对应站点列表
+        var platform2StationIds = new HashMap<String, List<String>>();
+        platforms.forEach(platformName -> {
+            var stationIdsByPlatform = stationId2Platform.entrySet().stream().filter(entry -> entry.getValue().equals(platformName)).map(Map.Entry::getKey).toList();
+            platform2StationIds.put(platformName, stationIdsByPlatform);
+        });
+
         var res = new ArrayList<PlatformStationStatusInfo>();
-        set.forEach(platformName -> {
+        platforms.forEach(platformName -> {
             var param = """
                     {
                         "StationIDs":["%s"]
                     }
-                    """.formatted(String.join("\",\"", ids));
+                    """.formatted(String.join("\",\"", String.join(",", platform2StationIds.get(platformName))));
             var response = platformApiService.platformPost(platformName, CommonApi.EN_PLUS_QUERY_STATION_STATUS.getApi(platformName), platformApiService.buildPlatformParams(platformName, param));
             var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
             var enStationStatus = JSONObject.parseObject(PlatformAesUtil.decrypt(platform.getDataSecret(), platform.getDataSecretIv(), response.getData()));

+ 1 - 1
service/src/main/java/com/kym/service/platform/impl/PlatformApiServiceImpl.java

@@ -176,7 +176,7 @@ public class PlatformApiServiceImpl implements PlatformApiService {
     public String buildPlatformParams(String platformName, String params) {
         var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
         // 使用DataSecret对data加密
-        var dataStr = PlatformAesUtil.encrypt(platform, params);
+        var dataStr = PlatformAesUtil.encrypt(platform.getDataSecret(), platform.getDataSecretIv(), params);
         // 时间戳
         var timeStamp = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN);
         // 自增序列

+ 11 - 6
service/src/main/java/com/kym/service/platform/impl/PlatformNotifyServiceImpl.java

@@ -105,7 +105,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
                     "FailReason":%d
                 }
                 """.formatted(platform.getOperatorId(), 0, token, ttl, 0);
-        return PlatformAesUtil.encrypt(platform, params);
+        return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
     }
 
     /**
@@ -167,7 +167,8 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
                     "Status":%d
                 }
                 """.formatted(0);
-        return PlatformAesUtil.encrypt(PlatformCache.INSTANCE.getPlatformByName(platformName), params);
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
     }
 
 
@@ -205,7 +206,8 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
                     "FailReason":%d
                 }
                 """.formatted(startChargeSeq, 0, 0);
-        return PlatformAesUtil.encrypt(PlatformCache.INSTANCE.getPlatformByName(platformName), params);
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
     }
 
     /**
@@ -244,7 +246,8 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
                     "SuccStat":%d
                 }
                 """.formatted(startChargeSeq, 0);
-        return PlatformAesUtil.encrypt(PlatformCache.INSTANCE.getPlatformByName(platformName), params);
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
     }
 
     /**
@@ -273,7 +276,8 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
                     "FailReason":%d
                 }
                 """.formatted(startChargeSeq, 0, 0);
-        return PlatformAesUtil.encrypt(PlatformCache.INSTANCE.getPlatformByName(platformName), params);
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
     }
 
     /**
@@ -328,7 +332,8 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
                     "ConfirmResult":%d
                 }
                 """.formatted(startChargeSeq, chargeOrder.getConnectorId(), 0);
-        return PlatformAesUtil.encrypt(PlatformCache.INSTANCE.getPlatformByName(platformName), params);
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        return PlatformAesUtil.encrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), params);
     }