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 index 88e746847..808765a46 100644 --- 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 @@ -4,12 +4,15 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.util.JWTUtils; +import com.jsowell.pile.dto.ThirdPartyCommonStartChargeDTO; import com.jsowell.pile.dto.huawei.*; import com.jsowell.pile.vo.huawei.QueryChargeStatusVO; import com.jsowell.pile.vo.huawei.QueryEquipAuthVO; import com.jsowell.pile.vo.huawei.QueryStartChargeVO; +import com.jsowell.thirdparty.common.CommonService; import com.jsowell.thirdparty.huawei.HuaweiServiceV2; import com.jsowell.thirdparty.lianlian.common.CommonResult; import com.jsowell.thirdparty.lianlian.domain.ConnectorStatusInfo; @@ -40,6 +43,9 @@ public class HuaWeiControllerV2 extends BaseController { @Autowired private HuaweiServiceV2 huaweiServiceV2; + @Autowired + private CommonService commonService; + /** * 获取token接口 * http://localhost:8080/huawei/v1/query_token @@ -184,12 +190,12 @@ public class HuaWeiControllerV2 extends BaseController { Map resultMap = null; try { resultMap = huaweiServiceV2.vinStartCharge(vinStartChargeDTO); - logger.info("华为vin启动充电 result:{}", resultMap); - }catch (Exception e) { + } catch (Exception e) { logger.error("华为vin启动充电 error", e); } + logger.info("华为vin启动充电 resultMap:{}", resultMap); if (resultMap != null) { - return CommonResult.success(0, "vin启动充电成功!", resultMap.get("Data"), resultMap.get("Sig")); + return CommonResult.success(0, "vin启动充电结果", resultMap.get("Data"), resultMap.get("Sig")); }else { return CommonResult.failed("vin启动充电 error"); } @@ -342,6 +348,21 @@ public class HuaWeiControllerV2 extends BaseController { + @PostMapping("/commonStartCharge") + public RestApiResponse commonStartCharge(@RequestBody ThirdPartyCommonStartChargeDTO dto) { + RestApiResponse response = null; + try { + String result = commonService.commonQueryStartCharge(dto); + response = new RestApiResponse<>(result); + } catch (Exception e) { + logger.error("统一启动充电接口 error", e); + } + logger.info("统一启动充电接口 params:{}, result:{}", JSON.toJSONString(dto), response); + return response; + } + + + /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/ThirdPartyCommonStartChargeDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/ThirdPartyCommonStartChargeDTO.java new file mode 100644 index 000000000..9af6ad923 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/ThirdPartyCommonStartChargeDTO.java @@ -0,0 +1,40 @@ +package com.jsowell.pile.dto; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 通用第三方站点启动充电dto + * + * @author Lemon + * @Date 2024/3/25 8:37:19 + */ +@Data +public class ThirdPartyCommonStartChargeDTO { + /** + * 第三方平台类型 + */ + private String thirdPartyType; + + /** + * 站点id列表 + */ + private List stationIds; + + /** + * 枪口号 + */ + private String pileConnectorCode; + + /** + * 充电金额 + */ + private BigDecimal chargeAmount; + + /** + * 支付方式 + */ + private String payMode; +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/common/CommonService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/common/CommonService.java index 93ee27b0d..01270971f 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/common/CommonService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/common/CommonService.java @@ -21,6 +21,7 @@ import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.domain.ThirdPartyStationRelation; import com.jsowell.pile.domain.ThirdpartyParkingConfig; import com.jsowell.pile.dto.PushStationInfoDTO; +import com.jsowell.pile.dto.ThirdPartyCommonStartChargeDTO; import com.jsowell.pile.dto.huawei.HWQueryStartChargeDTO; import com.jsowell.pile.dto.lutongyunting.BindCouponDTO; import com.jsowell.pile.dto.ruanjie.UseCouponDTO; @@ -501,36 +502,41 @@ public class CommonService { /** * 统一请求启动充电,目前给华为平台用 - * @param thirdPartyType - * @param stationIds - * @param pileConnectorCode + * @param dto * @return */ - public String commonQueryStartCharge(String thirdPartyType, List stationIds, String pileConnectorCode, BigDecimal chargeAmount, String payMode) { + public String commonQueryStartCharge(ThirdPartyCommonStartChargeDTO dto) { + String thirdPartyType = dto.getThirdPartyType(); + List stationIds = dto.getStationIds(); + String pileConnectorCode = dto.getPileConnectorCode(); + BigDecimal chargeAmount = dto.getChargeAmount(); + String payMode = dto.getPayMode(); + // 判断平台类型 if (StringUtils.equals(ThirdPlatformTypeEnum.HUA_WEI.getCode(), thirdPartyType)) { // 华为平台 + String label = ThirdPlatformTypeEnum.getLabelByCode(thirdPartyType); // query_station_status 查询站点枪口详情 Map map = huaweiServiceV2.queryStationStatus(stationIds); String status = map.get(pileConnectorCode); // 判断枪口状态 if (!StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), status)) { - log.error(thirdPartyType + "判断枪口状态 error, 枪口状态为:{}", status); + log.error(label + "判断枪口状态 error, 枪口状态为:{}", status); } // query_equip_auth 请求设备认证 QueryEquipAuthVO vo = huaweiServiceV2.queryEquipAuth(pileConnectorCode); Integer succStat = vo.getSuccStat(); if (succStat != Constants.zero) { - log.error(thirdPartyType + "请求设备认证 error, {}", vo.getFailReason()); + log.error(label + "请求设备认证 error, {}", vo.getFailReason()); } // query_start_charge 请求启动充电 - HWQueryStartChargeDTO dto = new HWQueryStartChargeDTO(); - dto.setConnectorID(pileConnectorCode); - dto.setMoneyLimit(chargeAmount); - dto.setPayMode(payMode); - QueryStartChargeVO startChargeVO = huaweiServiceV2.queryStartCharge(dto); + HWQueryStartChargeDTO chargeDTO = new HWQueryStartChargeDTO(); + chargeDTO.setConnectorID(pileConnectorCode); + chargeDTO.setMoneyLimit(chargeAmount); + chargeDTO.setPayMode(payMode); + QueryStartChargeVO startChargeVO = huaweiServiceV2.queryStartCharge(chargeDTO); if (startChargeVO.getSuccStat() != Constants.zero) { - log.error(thirdPartyType + "请求启动充电 error, {}", startChargeVO.getFailReason()); + log.error(label + "请求启动充电 error, {}", startChargeVO.getFailReason()); } String startChargeSeq = startChargeVO.getStartChargeSeq(); // 充电订单号 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 2e4db0e0a..582456f7b 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 @@ -761,7 +761,7 @@ public class HuaweiServiceV2 { // 将交易记录中的交易标识 05 传入实时数据对象,用于结算订单后解锁 vin 状态 data.setTransactionIdentifier("05"); } - + String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderBasicInfo.getMerchantId()); AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode); orderLogic.settleOrderForThirdParty(data, orderBasicInfo); @@ -817,6 +817,9 @@ public class HuaweiServiceV2 { if (configInfo == null) { return null; } + int succStat = Constants.one; // 操作结果 + int failReason = Constants.one; // 失败原因 + JSONObject jsonObject = new JSONObject(); String vinCode = dto.getVin(); String pileConnectorCode = dto.getConnectorID(); @@ -827,32 +830,35 @@ public class HuaweiServiceV2 { MemberPlateNumberRelation basicInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(vinCode); if (basicInfo == null) { // 该用户未注册 - throw new BusinessException(ReturnCodeEnum.CODE_GENERATE_ORDER_ERROR); + jsonObject.put("SuccStat", succStat); + jsonObject.put("FailReason", failReason); + + Map resultMap = getResultMap(jsonObject); + return resultMap; + }else { + // 生成订单,并启动充电 + GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO(); + generateOrderDTO.setMemberPlateNumberRelation(basicInfo); + generateOrderDTO.setPileSn(pileSn); + generateOrderDTO.setConnectorCode(connectorCode); + generateOrderDTO.setStartMode(StartModeEnum.VIN_CODE.getValue()); + generateOrderDTO.setMemberId(basicInfo.getMemberId()); + generateOrderDTO.setStartSoc(String.valueOf(dto.getSoc())); + + Map map = orderBasicInfoService.generateOrderByCard(generateOrderDTO); + if (map != null) { + // 鉴权成功 + succStat = Constants.zero; + failReason = Constants.zero; + } + + jsonObject.put("SuccStat", succStat); + jsonObject.put("FailReason", failReason); + + Map resultMap = getResultMap(jsonObject); + return resultMap; } - // 生成订单,并启动充电 - GenerateOrderDTO generateOrderDTO = new GenerateOrderDTO(); - generateOrderDTO.setMemberPlateNumberRelation(basicInfo); - generateOrderDTO.setPileSn(pileSn); - generateOrderDTO.setConnectorCode(connectorCode); - generateOrderDTO.setStartMode(StartModeEnum.VIN_CODE.getValue()); - generateOrderDTO.setMemberId(basicInfo.getMemberId()); - generateOrderDTO.setStartSoc(String.valueOf(dto.getSoc())); - - int succStat = Constants.one; // 操作结果 - int failReason = Constants.one; // 失败原因 - Map map = orderBasicInfoService.generateOrderByCard(generateOrderDTO); - if (map != null) { - // 鉴权成功 - succStat = Constants.zero; - failReason = Constants.zero; - } - JSONObject jsonObject = new JSONObject(); - jsonObject.put("SuccStat", succStat); - jsonObject.put("FailReason", failReason); - - Map resultMap = getResultMap(jsonObject); - return resultMap; } 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 b65f0fe6e..b8d7eb945 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 @@ -385,7 +385,7 @@ public class LianLianServiceImpl implements LianLianService { String dataSecret = "E6gnWuz0QzBW75CR"; // SPBNJ1Z5EQNmpK08 VTAEKDPVN9CUS7WO huawei: zd4NrLWJ38XCTaqP E6gnWuz0QzBW75CR String dataSecretIV = "SXejaSUx5yud8UHm"; // peRoTcb2C7zqKeII 83UZFFRRZDYNF5CR huawei: RJJecvNTJ48SGMG7 SXejaSUx5yud8UHm String signSecret = "sRjCDeokckFGpYpA"; // sRjCDeokckFGpYpA - String dataString = "o1tqVesDkPUXBNdUmE10Z7FWjAf/KFO3Iq4NWNCcFeq0h8wBcdWcZwojkdv2TNFpS0Qftv1HWDTdm+8Pjj0AIw=="; + String dataString = "GZlmSIZOVzT+Yvpc2PmvNmwKXhaqSnsNdCUS61pq9BxES7v9FWNrUvqk3OsAUMPvjCwmYeskIglHXw0OFfYGZ1bXxAzHymzsqfehZ10WoNs="; // 解密data byte[] plainText = Cryptos.aesDecrypt(Encodes.decodeBase64(dataString), dataSecret.getBytes(), dataSecretIV.getBytes());