diff --git a/jsowell-admin/src/main/java/com/jsowell/thirdparty/lianlian/LianLianController.java b/jsowell-admin/src/main/java/com/jsowell/thirdparty/lianlian/LianLianController.java index 569a3bc9f..5f9969489 100644 --- a/jsowell-admin/src/main/java/com/jsowell/thirdparty/lianlian/LianLianController.java +++ b/jsowell-admin/src/main/java/com/jsowell/thirdparty/lianlian/LianLianController.java @@ -37,9 +37,6 @@ public class LianLianController extends BaseController { @Autowired private LianLianService lianLianService; - @Autowired - private IThirdPartyPlatformConfigService thirdPartyPlatformConfigService; - /** * 推送充电站信息 notification_stationInfo * http://localhost:8080/LianLian/pushStationInfo @@ -273,8 +270,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryEquipmentDTO queryEquipmentDTO = JSONObject.parseObject(dataStr, QueryEquipmentDTO.class); @@ -337,8 +336,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStartChargeDTO queryStartChargeDTO = JSONObject.parseObject(dataStr, QueryStartChargeDTO.class); @@ -400,8 +401,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryEquipChargeStatusDTO queryEquipChargeStatusDTO = JSONObject.parseObject(dataStr, QueryEquipChargeStatusDTO.class); @@ -457,8 +460,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStartChargeDTO queryStartChargeDTO = JSONObject.parseObject(dataStr, QueryStartChargeDTO.class); @@ -513,8 +518,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 PushOrderSettlementDTO pushOrderSettlementDTO = JSONObject.parseObject(dataStr, PushOrderSettlementDTO.class); @@ -553,8 +560,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); @@ -594,8 +603,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); @@ -635,8 +646,10 @@ public class LianLianController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, "UTF-8"); // 转换成相应对象 QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); diff --git a/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java b/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java index 5400990ed..40d88a147 100644 --- a/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java +++ b/jsowell-admin/src/main/java/com/jsowell/thirdparty/nanrui/NRController.java @@ -64,8 +64,10 @@ public class NRController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); @@ -100,8 +102,10 @@ public class NRController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); @@ -138,8 +142,10 @@ public class NRController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 NRQueryOrderDTO nrQueryOrderDTO = JSONObject.parseObject(dataStr, NRQueryOrderDTO.class); diff --git a/jsowell-admin/src/main/java/com/jsowell/thirdparty/zhongdianlian/ZDLController.java b/jsowell-admin/src/main/java/com/jsowell/thirdparty/zhongdianlian/ZDLController.java index a37379274..12d16e617 100644 --- a/jsowell-admin/src/main/java/com/jsowell/thirdparty/zhongdianlian/ZDLController.java +++ b/jsowell-admin/src/main/java/com/jsowell/thirdparty/zhongdianlian/ZDLController.java @@ -3,8 +3,15 @@ package com.jsowell.thirdparty.zhongdianlian; import com.alibaba.fastjson2.JSONObject; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; +import com.jsowell.common.exception.BusinessException; +import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.util.JWTUtils; +import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.dto.PushInfoParamDTO; +import com.jsowell.pile.dto.PushStationInfoDTO; import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.pile.service.IThirdPartyPlatformConfigService; import com.jsowell.thirdparty.lianlian.common.CommonResult; import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO; import com.jsowell.thirdparty.lianlian.service.LianLianService; @@ -12,10 +19,7 @@ import com.jsowell.thirdparty.lianlian.util.Cryptos; import com.jsowell.thirdparty.lianlian.util.Encodes; import com.jsowell.thirdparty.zhongdianlian.service.ZDLService; 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 org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; @@ -23,7 +27,7 @@ import java.nio.charset.StandardCharsets; import java.util.Map; /** - * TODO + * 中电联 controller * * @author Lemon * @Date 2023/9/14 15:31 @@ -79,8 +83,11 @@ public class ZDLController extends BaseController { } 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), operatorSecret.getBytes(), operatorSecret.getBytes()); + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes()); String dataStr = new String(plainText, StandardCharsets.UTF_8); // 转换成相应对象 QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); @@ -94,4 +101,173 @@ public class ZDLController extends BaseController { } return CommonResult.failed("查询充电站信息发生异常"); } + + /** + * 中电联平台查询统计信息 + * http://localhost:8080/zdl/v1/query_stations_stats + * @param dto + * @return + */ + @PostMapping("/v1/query_stations_stats") + public CommonResult queryStationsStats(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { + logger.info("中电联平台查询统计信息 params:{}", JSONObject.toJSONString(dto)); + try { + // 校验令牌 + String token = request.getHeader("Authorization"); + if (!JWTUtils.checkThirdPartyToken(token)) { + // 校验失败 + return CommonResult.failed("令牌校验错误"); + } + // 校验签名 + Map resultMap = lianLianService.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); + // 转换成相应对象 + QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); + queryStationInfoDTO.setOperatorId(dto.getOperatorID()); + Map map = zdlService.queryStationStats(queryStationInfoDTO); + + return CommonResult.success(0, "查询统计信息成功!", map.get("Data"), map.get("Sig")); + } catch (Exception e) { + logger.info("中电联平台查询统计信息 error:", e); + e.printStackTrace(); + } + return CommonResult.failed("查询统计信息发生异常"); + } + + /** + * 中电联平台设备接口状态查询 + * http://localhost:8080/zdl/v1/query_stations_status + * @param dto + * @return + */ + @PostMapping("/v1/query_stations_status") + public CommonResult queryStationsStatus(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { + logger.info("中电联平台设备接口状态查询 params:{}", JSONObject.toJSONString(dto)); + try { + // 校验令牌 + String token = request.getHeader("Authorization"); + if (!JWTUtils.checkThirdPartyToken(token)) { + // 校验失败 + return CommonResult.failed("令牌校验错误"); + } + // 校验签名 + Map resultMap = lianLianService.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); + // 转换成相应对象 + QueryStationInfoDTO queryStationInfoDTO = JSONObject.parseObject(dataStr, QueryStationInfoDTO.class); + queryStationInfoDTO.setOperatorId(dto.getOperatorID()); + Map map = zdlService.queryStationStatus(queryStationInfoDTO); + + return CommonResult.success(0, "设备接口状态查询成功!", map.get("Data"), map.get("Sig")); + } catch (Exception e) { + logger.info("中电联平台设备接口状态查询 error:", e); + e.printStackTrace(); + } + return CommonResult.failed("设备接口状态查询发生异常"); + } + + + /** + * 推送充电站信息 notification_stationInfo + * http://localhost:8080/zdl/v1/pushStationInfo + * @param dto + * @return + */ + @PostMapping("/pushStationInfo") + public RestApiResponse pushStationInfo(@RequestBody PushStationInfoDTO dto) { + logger.info("推送中电联平台充电站信息 params:{}", JSONObject.toJSONString(dto)); + RestApiResponse response = null; + try { + if (StringUtils.isBlank(String.valueOf(dto.getStationId()))) { + throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); + } + zdlService.pushStationInfo(dto); + response = new RestApiResponse<>(); + }catch (BusinessException e) { + logger.error("推送中电联平台充电站信息 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + }catch (Exception e) { + logger.error("推送中电联平台充电站信息 error", e); + response = new RestApiResponse<>(e); + } + logger.info("推送中电联平台充电站信息 result:{}", response); + return response; + } + + /** + * 联联平台设备状态变化推送 + * http://localhost:8080/zdl/v1/pushStationStatus + * @param dto + * @return + */ + @PostMapping("/pushStationStatus") + public RestApiResponse pushStationStatus(@RequestBody PushInfoParamDTO dto) { + logger.info("中电联平台设备状态变化推送 params:{}", JSONObject.toJSONString(dto)); + RestApiResponse response = null; + try { + if (StringUtils.isBlank(String.valueOf(dto.getPileConnectorCode())) || + StringUtils.isBlank(String.valueOf(dto.getStatus()))) { + throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); + } + String result = zdlService.notificationStationStatus(dto.getPileConnectorCode(), dto.getStatus()); + response = new RestApiResponse<>(result); + }catch (BusinessException e) { + logger.error("中电联平台设备状态变化推送 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + }catch (Exception e) { + logger.error("中电联平台设备状态变化推送 error", e); + response = new RestApiResponse<>(e); + } + logger.info("中电联平台设备状态变化推送 result:{}", response); + return response; + } + + + /** + * 推送订单信息 + * @param orderCode + * @return + */ + @GetMapping("/pushOrderInfo/{orderCode}") + public RestApiResponse pushOrderInfo(@PathVariable("orderCode")String orderCode) { + logger.info("中电联平台推送订单信息 params:{}", orderCode); + RestApiResponse response = null; + try { + if (StringUtils.isBlank(orderCode)) { + throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); + } + String result = zdlService.pushChargeOrderInfo(orderCode); + response = new RestApiResponse<>(result); + }catch (BusinessException e) { + logger.error("中电联平台推送订单信息 error",e); + response = new RestApiResponse<>(e.getCode(), e.getMessage()); + }catch (Exception e) { + logger.error("中电联平台推送订单信息 error", e); + response = new RestApiResponse<>(e); + } + logger.info("中电联平台推送订单信息 result:{}", response); + return response; + } } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/impl/LianLianServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/impl/LianLianServiceImpl.java index 0925cdf25..3ab903be6 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/impl/LianLianServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/impl/LianLianServiceImpl.java @@ -735,7 +735,7 @@ public class LianLianServiceImpl implements LianLianService { Map resultMap = Maps.newLinkedHashMap(); // 加密数据 byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(vo).getBytes(), - configInfo.getOperatorSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); + configInfo.getDataSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); String encryptData = Encodes.encodeBase64(encryptText); resultMap.put("Data", encryptData); @@ -1529,6 +1529,8 @@ public class LianLianServiceImpl implements LianLianService { Map resultMap = new LinkedHashMap<>(); resultMap.put("Data", dto.getData()); resultMap.put("OperatorSecret", operatorSecret); + resultMap.put("DataSecret", platformConfig.getDataSecret()); + resultMap.put("DataSecretIV", platformConfig.getDataSecretIv()); return resultMap; } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java index 34939347b..f7352f234 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java @@ -150,7 +150,7 @@ public class NRServiceImpl implements NRService { // 拼装南瑞平台所需参数 NRStationInfo nrStationInfo = NRStationInfo.builder() - .stationId("NR" + stationInfoVO.getId()) + .stationId(String.valueOf(stationInfoVO.getId())) .operatorID(Constants.OPERATORID_JIANG_SU) .equipmentOwnerID(Constants.OPERATORID_JIANG_SU) .stationName(stationInfoVO.getStationName()) @@ -249,7 +249,7 @@ public class NRServiceImpl implements NRService { for (PileStationInfo pileStationInfo : pageInfo.getList()) { // 拼装参数 NRStationInfo nrStationInfo = NRStationInfo.builder() - .stationId("NR" + pileStationInfo.getId()) + .stationId(String.valueOf(pileStationInfo.getId())) .operatorID(Constants.OPERATORID_JIANG_SU) .equipmentOwnerID(Constants.OPERATORID_JIANG_SU) .stationName(pileStationInfo.getStationName())