diff --git a/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java b/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java index f5dc8d49c..dc10f4659 100644 --- a/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java +++ b/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java @@ -301,22 +301,61 @@ public class LianLianController extends BaseController { * @param dto * @return */ - @PostMapping("/query_start_charge") - public RestApiResponse query_start_charge(@RequestBody QueryStartChargeDTO dto) { + // @PostMapping("/query_start_charge") + // public RestApiResponse query_start_charge(@RequestBody QueryStartChargeDTO dto) { + // logger.info("联联平台请求启动充电 params :{}", JSONObject.toJSONString(dto)); + // RestApiResponse response; + // try { + // QueryStartChargeVO queryStartChargeVO = lianLianService.query_start_charge(dto); + // response = new RestApiResponse<>(queryStartChargeVO); + // }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 request + * @param dto + * @return + */ + @PostMapping("/v1/query_start_charge") + public CommonResult query_start_charge(HttpServletRequest request, @RequestBody CommonParamsDTO dto) { logger.info("联联平台请求启动充电 params :{}", JSONObject.toJSONString(dto)); - RestApiResponse response; try { - QueryStartChargeVO queryStartChargeVO = lianLianService.query_start_charge(dto); - response = new RestApiResponse<>(queryStartChargeVO); - }catch (BusinessException e) { - logger.error("联联平台请求启动充电 error",e); - response = new RestApiResponse<>(e.getCode(), e.getMessage()); + // 校验令牌 + 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"); + // 解密data + byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), operatorSecret.getBytes(), operatorSecret.getBytes()); + String dataStr = new String(plainText, "UTF-8"); + // 转换成相应对象 + QueryStartChargeDTO queryStartChargeDTO = JSONObject.parseObject(dataStr, QueryStartChargeDTO.class); + queryStartChargeDTO.setOperatorID(dto.getOperatorID()); + Map map = lianLianService.query_start_charge(queryStartChargeDTO); + + return CommonResult.success(0, "请求启动充电成功!", map.get("Data"), map.get("Sig")); } catch (Exception e) { logger.error("联联平台请求启动充电 error", e); - response = new RestApiResponse<>(e); } - logger.info("联联平台请求启动充电 result :{}", response); - return response; + return CommonResult.failed("请求启动充电发生异常"); } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java index 937582e29..42ae9015f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStartChargeDTO.java @@ -40,4 +40,7 @@ public class QueryStartChargeDTO { */ @JsonProperty(value = "PlateNum") private String PlateNum; + + @JsonProperty(value = "OperatorID") + private String OperatorID; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 42b2304ab..ef3b8f2db 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -1643,14 +1643,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { String pileSn = StringUtils.substring(pileConnectorCode, 0, 14); String connectorCode = StringUtils.substring(pileConnectorCode, 14, 16); - String transactionCode = IdUtils.generateTransactionCode(pileSn, connectorCode); // 通过桩号查询所属站点 PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn); Long stationId = pileBasicInfo.getStationId(); - // 将此订单信息存入订单表 // 订单基本信息 OrderBasicInfo orderBasicInfo = OrderBasicInfo.builder() @@ -1665,7 +1663,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // .logicCard(pileAuthCardInfo.getLogicCard()) // 卡号 .startMode(StartModeEnum.LIAN_LIAN.getValue()) .payStatus(Constants.ONE) - // .payAmount(totalAccountAmount) // 支付金额 + .payAmount(new BigDecimal("500")) // 支付金额 2023.05.31:联联平台不会传金额,所以先给500,默认是直到充满 .payTime(new Date()) // .payMode(PayModeEnum.PAYMENT_OF_BALANCE.getValue()) // 支付方式 .orderAmount(BigDecimal.ZERO) diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/LianLianService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/LianLianService.java index be1102bca..c87ef73d5 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/LianLianService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/lianlian/service/LianLianService.java @@ -60,7 +60,7 @@ public interface LianLianService { * @param dto * @return */ - QueryStartChargeVO query_start_charge(QueryStartChargeDTO dto); + Map query_start_charge(QueryStartChargeDTO dto); /** * 查询充电状态 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 527a9654b..329bf7d34 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 @@ -551,22 +551,25 @@ public class LianLianServiceImpl implements LianLianService { * * @param dto */ - public QueryStartChargeVO query_start_charge(QueryStartChargeDTO dto) { + public Map query_start_charge(QueryStartChargeDTO dto) { // 通过传过来的订单号和枪口号生成订单 // String orderCode = dto.getStartChargeSeq(); String pileConnectorCode = dto.getConnectorID(); OrderBasicInfo orderInfo = orderBasicInfoService.getOrderInfoByOrderCode(dto.getStartChargeSeq()); if (orderInfo != null) { // 平台已存在订单 - throw new BusinessException("", "平台已存在订单"); + return null; + } + DockingPlatformConfig configInfo = dockingPlatformConfigService.getInfoByOperatorId(dto.getOperatorID()); + if (configInfo == null) { + return null; } - Map map = orderBasicInfoService.generateOrderForLianLian(dto); String orderCode = (String) map.get("orderCode"); String transactionCode = (String) map.get("transactionCode"); OrderBasicInfo orderBasicInfo = (OrderBasicInfo) map.get("orderBasicInfo"); - + // 发送启机指令 StartChargingCommand command = StartChargingCommand.builder() .pileSn(orderBasicInfo.getPileSn()) .connectorCode(orderBasicInfo.getConnectorCode()) @@ -589,8 +592,19 @@ public class LianLianServiceImpl implements LianLianService { // 推送启动充电结果 pushStartChargeResult(orderCode); - return vo; + // 加密 + Map resultMap = Maps.newLinkedHashMap(); + // 加密数据 + byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(vo).getBytes(), + configInfo.getOperatorSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); + String encryptData = Encodes.encodeBase64(encryptText); + resultMap.put("Data", encryptData); + // 生成sig + String resultSign = GBSignUtils.sign(resultMap, configInfo.getOperatorSecret()); + resultMap.put("Sig", resultSign); + + return resultMap; }