Explorar el Código

互联互通对接调试:名称优化,目录优化等

skyline hace 1 año
padre
commit
ab1bfd7fc8

+ 1 - 1
service/src/main/java/com/kym/service/cache/PlatformCache.java → common/src/main/java/com/kym/common/cache/PlatformCache.java

@@ -1,4 +1,4 @@
-package com.kym.service.cache;
+package com.kym.common.cache;
 
 import com.kym.common.utils.PlatformConvertUtil;
 import com.kym.entity.admin.Platform;

+ 4 - 5
common/src/main/java/com/kym/common/exception/EnPushException.java → common/src/main/java/com/kym/common/exception/PlatformPushException.java

@@ -5,18 +5,17 @@ import lombok.Getter;
 
 /**
  * @author skyline
- * @description EN+推送数据数据异常
- * @date 2023-08-04 13:36
+ * 互联互通平台推送数据数据异常
  */
 @Getter
-public class EnPushException extends RuntimeException {
+public class PlatformPushException extends RuntimeException {
     Integer code;
     String message;
     Object data;
 
-    public EnPushException(IResponseCode responseEnum, Object data) {
+    public PlatformPushException(IResponseCode responseEnum, Object data) {
         this.code = responseEnum.getCode();
         this.message = responseEnum.getMessage();
         this.data = data;
     }
-}
+}

+ 3 - 3
common/src/main/java/com/kym/common/handler/GlobalExceptionHandler.java

@@ -6,7 +6,7 @@ import cn.dev33.satoken.exception.NotRoleException;
 import com.kym.common.R;
 import com.kym.common.exception.BaseException;
 import com.kym.common.exception.BusinessException;
-import com.kym.common.exception.EnPushException;
+import com.kym.common.exception.PlatformPushException;
 import jakarta.validation.ConstraintViolation;
 import jakarta.validation.ConstraintViolationException;
 import jakarta.validation.ValidationException;
@@ -103,9 +103,9 @@ public class GlobalExceptionHandler {
      * @param e
      * @return
      */
-    @ExceptionHandler(value = EnPushException.class)
+    @ExceptionHandler(value = PlatformPushException.class)
     @ResponseBody
-    public Object handleEnPushException(EnPushException e) {
+    public Object handleEnPushException(PlatformPushException e) {
         return e.getData();
     }
 

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

@@ -1,15 +1,23 @@
 package com.kym.common.utils;
 
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.crypto.digest.HMac;
+import cn.hutool.crypto.digest.HmacAlgorithm;
+import com.alibaba.fastjson2.JSONObject;
+import com.kym.common.cache.PlatformCache;
+import com.kym.common.constant.ResponseEnum;
+import com.kym.common.exception.PlatformPushException;
+import com.kym.entity.platform.response.PlatformResponse;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.tomcat.util.codec.binary.Base64;
 
 import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 import java.nio.charset.StandardCharsets;
-import java.security.SecureRandom;
+import java.time.LocalDateTime;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -18,6 +26,7 @@ import java.util.logging.Logger;
  *
  * @author skyline
  */
+@Slf4j
 public class PlatformAesUtil {
 
     /**
@@ -32,7 +41,7 @@ public class PlatformAesUtil {
      *
      * @param dataSecret
      * @param dataSecretIv
-     * @param content 待加密内容
+     * @param content      待加密内容
      * @return 返回Base64转码后的加密数据
      */
     public static String encrypt(String dataSecret, String dataSecretIv, String content) {
@@ -109,20 +118,77 @@ public class PlatformAesUtil {
      *
      * @return
      */
-    private static SecretKeySpec getSecretKey(final String key) {
-        //返回生成指定算法密钥生成器的 KeyGenerator 对象
-        KeyGenerator kg;
-        try {
-            kg = KeyGenerator.getInstance(AES);
-            //AES 要求密钥长度为 128
-            kg.init(128, new SecureRandom(key.getBytes()));
-            //生成一个密钥
-            SecretKey secretKey = kg.generateKey();
-            // 转换为AES专用密钥
-            return new SecretKeySpec(secretKey.getEncoded(), AES);
-        } catch (Exception ex) {
-            Logger.getLogger(PlatformAesUtil.class.getName()).log(Level.SEVERE, null, ex);
+//    private static SecretKeySpec getSecretKey(final String key) {
+//        //返回生成指定算法密钥生成器的 KeyGenerator 对象
+//        KeyGenerator kg;
+//        try {
+//            kg = KeyGenerator.getInstance(AES);
+//            //AES 要求密钥长度为 128
+//            kg.init(128, new SecureRandom(key.getBytes()));
+//            //生成一个密钥
+//            SecretKey secretKey = kg.generateKey();
+//            // 转换为AES专用密钥
+//            return new SecretKeySpec(secretKey.getEncoded(), AES);
+//        } catch (Exception ex) {
+//            Logger.getLogger(PlatformAesUtil.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+//        return null;
+//    }
+
+    /**
+     * 验签、解密推送消息
+     *
+     * @param platformName
+     * @param json
+     * @return
+     */
+    public static String signValidation(String platformName, JSONObject json) {
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        // 验签 解密数据
+        var OperatorID = json.getString("OperatorID");
+        var Data = json.getString("Data");
+        var TimeStamp = json.getString("TimeStamp");
+        var Seq = json.getString("Seq");
+        var Sig = json.getString("Sig");
+        var signString = OperatorID + Data + TimeStamp + Seq;
+        HMac mac = new HMac(HmacAlgorithm.HmacMD5, platform.getUserSigSecret().getBytes());
+        // 签名(转为大写)
+        var sign = mac.digestHex(signString).toUpperCase();
+        if (sign.equals(Sig)) {
+            // 解密数据
+            return PlatformAesUtil.decrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), Data);
+        } else {
+            // 验签失败
+            PlatformResponse platformResponse = new PlatformResponse();
+            platformResponse.setRet(4001);
+            platformResponse.setMsg(ResponseEnum.PLATFORM_PUSH_SIGN_FAIL.getMessage());
+            log.error("{}推送数据验签失败,数据:{}", platformName, json);
+            throw new PlatformPushException(ResponseEnum.PLATFORM_PUSH_SIGN_FAIL, platformResponse);
         }
-        return null;
+
+    }
+
+    public static String buildPlatformParams(String platformName, String params) {
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
+        // 使用DataSecret对data加密
+        var dataStr = PlatformAesUtil.encrypt(platform.getDataSecret(), platform.getDataSecretIv(), params);
+        // 时间戳
+        var timeStamp = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN);
+        // 自增序列
+        var seq = timeStamp.substring(timeStamp.length() - 4);
+        // 使用SigSecret以HMAC-MD5算法对消息体签名(签名顺序:OperatorId、Data、TimeStamp、Seq)
+        var signString = platform.getUserOperatorId() + dataStr + timeStamp + seq;
+        HMac mac = new HMac(HmacAlgorithm.HmacMD5, platform.getSigSecret().getBytes());
+        // 签名(转为大写)
+        var sign = mac.digestHex(signString).toUpperCase();
+        return """
+                {
+                    "OperatorID":"%s",
+                    "Data":"%s",
+                    "TimeStamp":"%s",
+                    "Seq":"%s",
+                    "Sig":"%s"
+                }
+                """.formatted(platform.getOperatorId(), dataStr, timeStamp, seq, sign);
     }
 }

+ 1 - 1
service/src/main/java/com/kym/service/admin/StationService.java

@@ -26,7 +26,7 @@ import java.util.Map;
  */
 public interface StationService extends MPJBaseService<Station> {
 
-    List<StationVo> queryEnStationInfo(String platformName, int pageNum, int pageSize) throws JsonProcessingException;
+    List<StationVo> queryPlatformStationInfo(String platformName, int pageNum, int pageSize) throws JsonProcessingException;
 
     @DynamicCache
     Map<String, List<EquipmentInfo>> getCachedEquipmentMap();

+ 16 - 41
service/src/main/java/com/kym/service/admin/impl/StationServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.kym.common.annotation.DynamicCache;
+import com.kym.common.cache.PlatformCache;
 import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.PlatformAesUtil;
@@ -20,7 +21,6 @@ import com.kym.entity.platform.response.PlatformResponse;
 import com.kym.mapper.admin.StationMapper;
 import com.kym.service.admin.*;
 import com.kym.service.cache.KymCache;
-import com.kym.service.cache.PlatformCache;
 import com.kym.service.mybatisplus.MyBaseServiceImpl;
 import com.kym.service.platform.PlatformApi;
 import com.kym.service.platform.PlatformApiService;
@@ -35,6 +35,8 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static com.kym.common.utils.PlatformAesUtil.buildPlatformParams;
+
 /**
  * <p>
  * 充电站信息 服务实现类
@@ -85,8 +87,16 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
         return list(queryWrapper);
     }
 
+    /**
+     * 查询互联互通平台站点信息
+     *
+     * @param platformName
+     * @param pageNum
+     * @param pageSize
+     * @return
+     */
     @Override
-    public List<StationVo> queryEnStationInfo(String platformName, int pageNum, int pageSize) {
+    public List<StationVo> queryPlatformStationInfo(String platformName, int pageNum, int pageSize) {
         var param = """
                 {
                     "PageNo":%d,
@@ -94,7 +104,7 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
                     "LastQueryTime":""
                 }
                 """.formatted(pageNum, pageSize);
-        var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_INFO.getApi(platformName), platformApiService.buildPlatformParams(platformName, param));
+        var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_INFO.getApi(platformName), buildPlatformParams(platformName, param));
         var enStations = parsePlatformResponseData(response, platformName);
         var stationList = enStations.getJSONArray("StationInfos").toJavaList(StationVo.class);
         // 我方station表数据
@@ -125,40 +135,6 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
         return JSONObject.parseObject(PlatformAesUtil.decrypt(platform.getDataSecret(), platform.getDataSecretIv(), response.getData()));
     }
 
-    /**
-     * 查询互联互通平台充电站信息
-     *
-     * @param platformName
-     * @param pageNum
-     * @param pageSize
-     * @return
-     */
-    public List<StationVo> queryPlatformStationInfo(String platformName, int pageNum, int pageSize) {
-        var param = """
-                {
-                    "PageNo":%d,
-                    "PageSize":%d,
-                    "LastQueryTime":""
-                }
-                """.formatted(pageNum, pageSize);
-        var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_INFO.getApi(platformName), platformApiService.buildPlatformParams(platformName, param));
-        var enStations = parsePlatformResponseData(response, platformName);
-        var stationList = enStations.getJSONArray("StationInfos").toJavaList(StationVo.class);
-        // 我方station表数据
-        var stations = list();
-        stationList.forEach(station -> {
-            station.getEquipmentInfos().forEach(enEquipmentInfo ->
-                    enEquipmentInfo.setShortId(KymCache.INSTANCE.getShortIdByEquipmentIdOrConnectorId(enEquipmentInfo.getEquipmentId()))
-                            .setParkingNo(KymCache.INSTANCE.getParkNoByEquipmentIdOrConnectorId(enEquipmentInfo.getEquipmentId())));
-            var res = stations.stream().filter(item -> item.getStationId().equals(station.getStationId())).toList();
-            if (!res.isEmpty()) {
-                station.setPictures(res.get(0).getPictures());
-            } else {
-                station.setPictures(null);
-            }
-        });
-        return stationList;
-    }
 
     @DynamicCache(timeout = 15 * 60 * 1000L)
     @Override
@@ -251,7 +227,7 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
                         "StationIDs":["%s"]
                     }
                     """.formatted(String.join("\",\"", String.join(",", platform2StationIds.get(platformName))));
-            var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_STATUS.getApi(platformName), platformApiService.buildPlatformParams(platformName, param));
+            var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_STATUS.getApi(platformName), buildPlatformParams(platformName, param));
             var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
             var enStationStatus = JSONObject.parseObject(PlatformAesUtil.decrypt(platform.getDataSecret(), platform.getDataSecretIv(), response.getData()));
             res.addAll(enStationStatus.getJSONArray("StationStatusInfos").toJavaList(PlatformStationStatusInfo.class));
@@ -278,8 +254,7 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
                 }
                 """.formatted(stationId, startTime, endTime);
         var platformName = PlatformCache.INSTANCE.getPlatformNameByStationId(stationId);
-        var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_STATS.getApi(platformName), platformApiService.buildPlatformParams(platformName, param));
-        // TODO: 2023-08-12 包装成自己的数据格式
+        var response = platformApiService.platformPost(platformName, PlatformApi.PLATFORM_QUERY_STATION_STATS.getApi(platformName), buildPlatformParams(platformName, param));
         var enStationStats = parsePlatformResponseData(response, platformName);
         return enStationStats.getJSONObject("StationStats").toJavaObject(PlatformStationStatsInfo.class);
     }
@@ -293,7 +268,7 @@ public class StationServiceImpl extends MyBaseServiceImpl<StationMapper, Station
     public void pullEnStationInfos(String stationId) {
         // 指定的站点信息
         var platformName = PlatformCache.INSTANCE.getPlatformNameByStationId(stationId);
-        var stationVo = queryEnStationInfo(platformName, 1, 1000)
+        var stationVo = queryPlatformStationInfo(platformName, 1, 1000)
                 .stream().filter(vo -> stationId.equals(vo.getStationId())).findFirst().orElse(null);
 
         var station = new Station();

+ 1 - 0
service/src/main/java/com/kym/service/cache/KymCache.java

@@ -2,6 +2,7 @@ package com.kym.service.cache;
 
 import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.kym.common.cache.PlatformCache;
 import com.kym.entity.admin.ConnectorInfo;
 import com.kym.entity.admin.EquipmentRelation;
 import com.kym.entity.admin.Platform;

+ 1 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -20,7 +20,7 @@ import com.kym.service.admin.ConnectorInfoService;
 import com.kym.service.admin.EquipmentInfoService;
 import com.kym.service.admin.EquipmentRelationService;
 import com.kym.service.cache.KymCache;
-import com.kym.service.cache.PlatformCache;
+import com.kym.common.cache.PlatformCache;
 import com.kym.service.platform.PlatformApiService;
 import com.kym.service.jobs.DelayService;
 import com.kym.service.miniapp.*;

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

@@ -1,6 +1,6 @@
 package com.kym.service.platform;
 
-import com.kym.service.cache.PlatformCache;
+import com.kym.common.cache.PlatformCache;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.RequestMethod;
 

+ 0 - 6
service/src/main/java/com/kym/service/platform/PlatformApiService.java

@@ -15,12 +15,6 @@ public interface PlatformApiService {
 
     String queryPlatformToken(String platformName);
 
-
-    String buildPlatformParams(String platformName, String params);
-
-
-    String signValidation(String platformName, JSONObject json);
-
     JSONObject queryEquipAuth(String platformName, String connectorId, String equipAuthSeq);
 
     @DynamicCache(spel = "#connectorId")

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

@@ -11,14 +11,14 @@ import com.kym.common.annotation.PlatformConvert;
 import com.kym.common.annotation.PlatformName;
 import com.kym.common.constant.ResponseEnum;
 import com.kym.common.exception.BusinessException;
-import com.kym.common.exception.EnPushException;
+import com.kym.common.exception.PlatformPushException;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.PlatformAesUtil;
 import com.kym.common.utils.PlatformConvertUtil;
 import com.kym.entity.common.RedisKeys;
 import com.kym.entity.platform.PlatformRespQueryToken;
 import com.kym.entity.platform.response.PlatformResponse;
-import com.kym.service.cache.PlatformCache;
+import com.kym.common.cache.PlatformCache;
 import com.kym.service.platform.PlatformApi;
 import com.kym.service.platform.PlatformApiService;
 import lombok.extern.slf4j.Slf4j;
@@ -30,6 +30,8 @@ import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.concurrent.TimeUnit;
 
+import static com.kym.common.utils.PlatformAesUtil.buildPlatformParams;
+
 /**
  * @author skyline
  * 互联互通平台接口服务
@@ -121,12 +123,13 @@ public class PlatformApiServiceImpl implements PlatformApiService {
             log.debug("从缓存中查询到token:{},ttl:{}", token, redisTemplate.getExpire(RedisKeys.EN_PLUS_TOKEN + platformName));
             return token;
         }
+        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
         var data = """
                 {
                     "OperatorID":"%s",
                     "OperatorSecret":"%s"
                 }
-                """.formatted(PlatformCache.INSTANCE.getPlatformByName(platformName).getUserOperatorId(), PlatformCache.INSTANCE.getPlatformByName(platformName).getOperatorSecret());
+                """.formatted(platform.getUserOperatorId(), platform.getOperatorSecret());
 
         var requestParams = buildPlatformParams(platformName, data);
 
@@ -138,7 +141,8 @@ public class PlatformApiServiceImpl implements PlatformApiService {
             var platformRespQueryToken = parse(jsonObject.toJSONString(), PlatformRespQueryToken.class);
             log.debug("{}接口AccessToken:{}", platformName, platformRespQueryToken.toString());
             // 缓存token不同平台不同key,有效期7天(我们这里每次请求en+获取token的有效期并不是从7天开始,有效期是在en+的剩余有效时间)
-            redisTemplate.opsForValue().set(RedisKeys.EN_PLUS_TOKEN + platformName, platformRespQueryToken.getAccessToken(), platformRespQueryToken.getTokenAvailableTime(), TimeUnit.SECONDS);
+            redisTemplate.opsForValue().set(RedisKeys.EN_PLUS_TOKEN + platformName,
+                    platformRespQueryToken.getAccessToken(), platformRespQueryToken.getTokenAvailableTime(), TimeUnit.SECONDS);
             return platformRespQueryToken.getAccessToken();
         } else {
             // 记录错误码,返回错误信息
@@ -164,74 +168,6 @@ public class PlatformApiServiceImpl implements PlatformApiService {
         }
     }
 
-
-    /**
-     * 根据平台分别加密数据、签名、组装请求消息体
-     *
-     * @param platformName
-     * @param params
-     * @return
-     */
-    @Override
-    public String buildPlatformParams(String platformName, String params) {
-        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
-        // 使用DataSecret对data加密
-        var dataStr = PlatformAesUtil.encrypt(platform.getDataSecret(), platform.getDataSecretIv(), params);
-        // 时间戳
-        var timeStamp = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_PATTERN);
-        // 自增序列
-        var seq = timeStamp.substring(timeStamp.length() - 4);
-        // 使用SigSecret以HMAC-MD5算法对消息体签名(签名顺序:OperatorId、Data、TimeStamp、Seq)
-        var signString = platform.getUserOperatorId() + dataStr + timeStamp + seq;
-        HMac mac = new HMac(HmacAlgorithm.HmacMD5, platform.getSigSecret().getBytes());
-        // 签名(转为大写)
-        var sign = mac.digestHex(signString).toUpperCase();
-        return """
-                {
-                    "OperatorID":"%s",
-                    "Data":"%s",
-                    "TimeStamp":"%s",
-                    "Seq":"%s",
-                    "Sig":"%s"
-                }
-                """.formatted(platform.getOperatorId(), dataStr, timeStamp, seq, sign);
-    }
-
-    /**
-     * 验签、解密推送消息
-     *
-     * @param platformName
-     * @param json
-     * @return
-     */
-    @Override
-    public String signValidation(String platformName, JSONObject json) {
-        var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
-        // 验签 解密数据
-        var OperatorID = json.getString("OperatorID");
-        var Data = json.getString("Data");
-        var TimeStamp = json.getString("TimeStamp");
-        var Seq = json.getString("Seq");
-        var Sig = json.getString("Sig");
-        var signString = OperatorID + Data + TimeStamp + Seq;
-        HMac mac = new HMac(HmacAlgorithm.HmacMD5, platform.getUserSigSecret().getBytes());
-        // 签名(转为大写)
-        var sign = mac.digestHex(signString).toUpperCase();
-        if (sign.equals(Sig)) {
-            // 解密数据
-            return PlatformAesUtil.decrypt(platform.getUserDataSecret(), platform.getUserDataSecretIv(), Data);
-        } else {
-            // 验签失败
-            PlatformResponse enResponse = new PlatformResponse();
-            enResponse.setRet(4001);
-            enResponse.setMsg(ResponseEnum.PLATFORM_PUSH_SIGN_FAIL.getMessage());
-            log.error("{}推送数据验签失败,数据:{}", platformName, json);
-            throw new EnPushException(ResponseEnum.PLATFORM_PUSH_SIGN_FAIL, enResponse);
-        }
-
-    }
-
-
     /**
      * 请求设备认证
      *
@@ -321,7 +257,7 @@ public class PlatformApiServiceImpl implements PlatformApiService {
     }
 
     /**
-     * 与en+开发约定使用该接口更新正在充电中的订单的金额信息,解决充电过程中用户充值续充场景  todo 朗新不支持该功能
+     * 与en+开发约定使用该接口更新正在充电中的订单的金额信息,解决充电过程中用户充值续充场景 (注意:朗新不支持该功能)
      *
      * @param platformName
      * @param startChargeSeq
@@ -350,7 +286,7 @@ public class PlatformApiServiceImpl implements PlatformApiService {
      */
     @Override
     @PlatformConvert
-    public JSONObject queryStopCharge(@PlatformName String platformName, String startChargeSeq,@ConnectorID String connectorId) {
+    public JSONObject queryStopCharge(@PlatformName String platformName, String startChargeSeq, @ConnectorID String connectorId) {
         var param = """
                 {
                     "StartChargeSeq":"%s",

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

@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.kym.common.cache.PlatformCache;
 import com.kym.common.utils.CommUtil;
 import com.kym.common.utils.PlatformAesUtil;
 import com.kym.common.utils.PlatformConvertUtil;
@@ -21,10 +22,8 @@ import com.kym.service.admin.ConnectorInfoService;
 import com.kym.service.admin.EquipmentInfoService;
 import com.kym.service.admin.MonitorLogService;
 import com.kym.service.cache.KymCache;
-import com.kym.service.cache.PlatformCache;
 import com.kym.service.factory.DiscountStrategyFactory;
 import com.kym.service.miniapp.*;
-import com.kym.service.platform.PlatformApiService;
 import com.kym.service.platform.PlatformNotifyService;
 import jakarta.annotation.PostConstruct;
 import org.slf4j.Logger;
@@ -50,7 +49,6 @@ import java.util.stream.Collectors;
 public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     private static final Logger LOGGER = LoggerFactory.getLogger(PlatformNotifyServiceImpl.class);
     public final StringRedisTemplate redisTemplate;
-    private final PlatformApiService platformApiService;
     private final ChargeOrderService chargeOrderService;
     private final ChargeService chargeService;
     private final AccountService accountService;
@@ -63,8 +61,11 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     @Value("${kym.notify-email}")
     private String notifyEmail;
 
-    public PlatformNotifyServiceImpl(PlatformApiService platformApiService, ChargeOrderService chargeOrderService, ChargeService chargeService, AccountService accountService, WalletDetailService walletDetailService, MonitorLogService monitorLogService, EquipmentInfoService equipmentInfoService, ConnectorInfoService connectorInfoService, StringRedisTemplate redisTemplate, UserStationService userStationService) {
-        this.platformApiService = platformApiService;
+    public PlatformNotifyServiceImpl(ChargeOrderService chargeOrderService, ChargeService chargeService,
+                                     AccountService accountService, WalletDetailService walletDetailService,
+                                     MonitorLogService monitorLogService, EquipmentInfoService equipmentInfoService,
+                                     ConnectorInfoService connectorInfoService, StringRedisTemplate redisTemplate,
+                                     UserStationService userStationService) {
         this.chargeOrderService = chargeOrderService;
         this.chargeService = chargeService;
         this.accountService = accountService;
@@ -83,7 +84,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
 
     @Override
     public String queryToken(String platformName, JSONObject json) {
-        var data = platformApiService.signValidation(platformName, json);
+        var data = PlatformAesUtil.signValidation(platformName, json);
         LOGGER.info("【{}互联互通平台推送】收到请求快与慢Token:{},解密数据:{}", platformName, json, data);
         var platform = PlatformCache.INSTANCE.getPlatformByName(platformName);
         // 查询缓存,存在则返回值和过期时间,不存在则重新生成并缓存
@@ -118,7 +119,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     @Override
     @DS("db-admin")
     public String handleNotificationStationStatus(String platformName, JSONObject json) {
-        var data = platformApiService.signValidation(platformName, json);
+        var data = PlatformAesUtil.signValidation(platformName, json);
         LOGGER.info("【{}互联互通平台推送】收到充电桩设备状态变化推送:{},解密数据:{}", platformName, json, data);
         // 更新数据库,存入redis,发送邮件通知
         var connectorStatusInfo = JSONObject.parseObject(data).getJSONObject("ConnectorStatusInfo").toJavaObject(PlatformConnectorStatusInfo.class);
@@ -183,7 +184,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     @Transactional(rollbackFor = Exception.class)
     @DS("db-miniapp")
     public String handleNotificationStartChargeResult(String platformName, JSONObject json) {
-        var data = platformApiService.signValidation(platformName, json);
+        var data = PlatformAesUtil.signValidation(platformName, json);
         LOGGER.info("【{}互联互通平台推送】收到启动充电结果推送:{},解密数据:{}", platformName, json, data);
         var obj = JSONObject.parseObject(data);
         var startChargeSeq = obj.getString("StartChargeSeq");
@@ -221,7 +222,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String handleNotificationEquipChargeStatus(String platformName, JSONObject json) {
-        var dataStr = platformApiService.signValidation(platformName, json);
+        var dataStr = PlatformAesUtil.signValidation(platformName, json);
         var data = JSONObject.parseObject(dataStr);
         LOGGER.info("【{}互联互通平台推送】 :{},解密数据:{}", platformName, json, data);
         var startChargeSeq = data.getString("StartChargeSeq");
@@ -260,7 +261,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String handleNotificationStopChargeResult(String platformName, JSONObject json) {
-        var dataStr = platformApiService.signValidation(platformName, json);
+        var dataStr = PlatformAesUtil.signValidation(platformName, json);
         var data = JSONObject.parseObject(dataStr);
         LOGGER.info("【{}互联互通平台推送】收到停止充电结果推送:{},解密数据:{}", platformName, json, data);
         var startChargeSeq = data.getString("StartChargeSeq");
@@ -290,7 +291,7 @@ public class PlatformNotifyServiceImpl implements PlatformNotifyService {
     @Override
     @DSTransactional(rollbackFor = Exception.class)
     public String handleNotificationChargeOrderInfo(String platformName, JSONObject json) {
-        var dataStr = platformApiService.signValidation(platformName, json);
+        var dataStr = PlatformAesUtil.signValidation(platformName, json);
         var data = JSONObject.parseObject(dataStr);
         LOGGER.info("【{}互联互通平台推送】收到充电订单信息推送:{},解密数据:{}", platformName, json, data);
         var startChargeSeq = data.getString("StartChargeSeq");

+ 5 - 5
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -23,9 +23,9 @@ import com.kym.entity.miniapp.*;
 import com.kym.entity.wechat.*;
 import com.kym.service.admin.ActivityService;
 import com.kym.service.admin.InvoiceDetailService;
-import com.kym.service.cache.PlatformCache;
-import com.kym.service.platform.PlatformApiService;
+import com.kym.common.cache.PlatformCache;
 import com.kym.service.miniapp.*;
+import com.kym.service.platform.PlatformApiService;
 import com.kym.service.wechat.WxPayService;
 import com.wechat.pay.java.core.Config;
 import com.wechat.pay.java.core.RSAAutoCertificateConfig;
@@ -356,13 +356,13 @@ public class WxPayServiceImpl implements WxPayService {
                 payLogService.save(payLog);
                 LOGGER.info("微信支付回调{}:业务处理结束", notifyRes[2]);
 
-                // 如果存在进行中的订单,则向en+更新用户余额
+                // 如果存在进行中的订单,则向en+更新用户余额(朗新不支持此操作)
                 var chargingOrder = chargeOrderService.getChargingOrderByUserId(walletDetail.getUserId());
-                if (chargingOrder != null) {
+                if (chargingOrder != null && "EN_PLUS".equals(PlatformCache.INSTANCE.getPlatformNameByConnectorId(chargingOrder.getConnectorId()))) {
                     var account = accountService.getAccountByUserId(walletDetail.getUserId());
                     // TODO: 2023-11-30 快充这里考虑过充的金额要提高
                     var res = platformApiService.updateBalanceByQueryEquipChargeStatus(PlatformCache.INSTANCE.getPlatformNameByConnectorId(chargingOrder.getConnectorId()), chargingOrder.getStartChargeSeq(), account.getBalance() - 50);
-                    LOGGER.info("用户:{}充电过程中充值,已更新en+充电金额,en+返回数据:{}", account.getUserId(), res);
+                    LOGGER.info("用户:{}充电过程中充值,已更新EN_PLUS充电金额,en+返回数据:{}", account.getUserId(), res);
                 }
                 return ResponseEntity.status(HttpStatus.OK).build();