diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/thirdparty/huawei/HuaWeiControllerV2.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/thirdparty/huawei/HuaWeiControllerV2.java new file mode 100644 index 000000000..ede268237 --- /dev/null +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/thirdparty/huawei/HuaWeiControllerV2.java @@ -0,0 +1,89 @@ +package com.jsowell.web.controller.thirdparty.huawei; + +import com.alibaba.fastjson2.JSONObject; +import com.jsowell.common.annotation.Anonymous; +import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.util.JWTUtils; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.thirdparty.huawei.HuaweiServiceV2; +import com.jsowell.thirdparty.lianlian.common.CommonResult; +import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo; +import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO; +import com.jsowell.thirdparty.lianlian.util.Cryptos; +import com.jsowell.thirdparty.lianlian.util.Encodes; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; +import java.util.Map; + +/** + * TODO + * + * @author Lemon + * @Date 2024/2/2 14:34:56 + */ +@Anonymous +@RestController +@RequestMapping("/huawei") +public class HuaWeiControllerV2 extends BaseController { + + @Autowired + private HuaweiServiceV2 huaweiServiceV2; + + /** + * 获取token接口 + * http://localhost:8080/huawei/v1/query_token + */ + @PostMapping("/v2/query_token") + public CommonResult queryToken(@RequestBody CommonParamsDTO dto) { + logger.info("华为平台请求令牌 params:{}", JSONObject.toJSONString(dto)); + try { + Map map = huaweiServiceV2.generateToken(dto); + logger.info("华为平台请求令牌 result:{}", JSONObject.toJSONString(map)); + return CommonResult.success(0, "请求令牌成功!", map.get("Data"), map.get("Sig")); + } catch (UnsupportedEncodingException e) { + logger.error("获取token接口 异常"); + return CommonResult.failed("获取token发生异常"); + } + } + + /** + * 华为设备接口状态变化推送 + * @param dto + * @return + */ + @PostMapping("/v2/notification_stationStatus") + public CommonResult receiveNotificationStationStatus(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { + logger.info("华为设备接口状态变化推送 params:{}", JSONObject.toJSONString(dto)); + // 校验令牌 + String token = request.getHeader("Authorization"); + if (!JWTUtils.checkThirdPartyToken(token)) { + // 校验失败 + return CommonResult.failed("令牌校验错误"); + } + // 校验签名 + Map resultMap = huaweiServiceV2.checkoutSign(dto); + if (resultMap == null) { + // 签名错误 + return CommonResult.failed("签名校验错误"); + } + String operatorSecret = resultMap.get("OperatorSecret"); + String dataString = resultMap.get("Data"); + String dataSecret = resultMap.get("DataSecret"); + String dataSecretIV = resultMap.get("DataSecretIV"); + // 解密data + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); + String dataStr = new String(plainText, StandardCharsets.UTF_8); + // 转换成相应对象 + ConnectorStatusInfo connectorStatusInfo = JSONObject.parseObject(dataStr, ConnectorStatusInfo.class); + connectorStatusInfo.setOperatorId(dto.getOperatorID()); + Map map = huaweiServiceV2.receiveNotificationStationStatus(connectorStatusInfo); + return CommonResult.success(0, "设备接口状态变化推送成功!", map.get("Data"), map.get("Sig")); + } +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java index c204e0e69..2bdbfae89 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaweiServiceV2.java @@ -15,7 +15,6 @@ import com.jsowell.common.enums.thirdparty.huawei.StopFailedReasonEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.enums.ykc.StartModeEnum; -import com.jsowell.common.enums.ykc.StopChargingFailedReasonEnum; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.StringUtils; @@ -38,6 +37,8 @@ import com.jsowell.pile.vo.web.PileStationVO; import com.jsowell.thirdparty.lianlian.common.CommonResult; import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo; import com.jsowell.thirdparty.lianlian.domain.StationStatusInfo; +import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO; +import com.jsowell.thirdparty.lianlian.service.LianLianService; import com.jsowell.thirdparty.lianlian.util.Cryptos; import com.jsowell.thirdparty.lianlian.util.Encodes; import com.jsowell.thirdparty.lianlian.util.GBSignUtils; @@ -48,6 +49,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.charset.StandardCharsets; @@ -65,6 +67,9 @@ import java.util.concurrent.TimeUnit; @Slf4j public class HuaweiServiceV2 { + @Autowired + private LianLianService lianLianService; + @Autowired private PileStationInfoService pileStationInfoService; @@ -166,6 +171,14 @@ public class HuaweiServiceV2 { return token; } + public Map generateToken(CommonParamsDTO dto) throws UnsupportedEncodingException { + return lianLianService.generateToken(dto); + } + + public Map checkoutSign(CommonParamsDTO dto) { + return lianLianService.checkoutSign(dto); + } + /** * 平台充电设备编码同步 *