From fffbe85efd188409e13cec768c6d9ccb5df1ef2a Mon Sep 17 00:00:00 2001 From: Lemon Date: Mon, 15 Jan 2024 13:49:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=20=E5=8D=8E=E4=B8=BAVin?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=85=85=E7=94=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsowell/pile/dto/GenerateOrderDTO.java | 5 ++ .../pile/dto/huawei/VinStartChargeDTO.java | 26 ++++++ .../impl/OrderBasicInfoServiceImpl.java | 3 + .../thirdparty/huawei/HuaWeiService.java | 14 +++ .../huawei/impl/HuaWeiServiceImpl.java | 89 +++++++++++++++++-- 5 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/dto/huawei/VinStartChargeDTO.java diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java index 9abf0d9ca..b2075cef7 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/GenerateOrderDTO.java @@ -88,4 +88,9 @@ public class GenerateOrderDTO extends BasicPileDTO{ * 微信小程序appId */ private String appId; + + /** + * 启动时soc + */ + private String startSoc; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/huawei/VinStartChargeDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/huawei/VinStartChargeDTO.java new file mode 100644 index 000000000..a525263d2 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/huawei/VinStartChargeDTO.java @@ -0,0 +1,26 @@ +package com.jsowell.pile.dto.huawei; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * Vin 启动充电DTO + * + * @author Lemon + * @Date 2024/1/15 8:46:28 + */ +@Data +public class VinStartChargeDTO { + @JsonProperty(value = "ConnectorID") + private String connectorID; + + @JsonProperty(value = "Vin") + private String vin; + + @JsonProperty(value = "Soc") + private BigDecimal soc; + + 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 3fd7d766e..a77b35718 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 @@ -3460,6 +3460,9 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { orderBasicInfo.setPlateNumber(memberPlateNumberRelation.getLicensePlateNumber()); } } + if (StringUtils.isNotBlank(dto.getStartSoc())) { + orderBasicInfo.setStartSoc(dto.getStartSoc()); + } } if (StringUtils.equals(dto.getStartType(), StartTypeEnum.APPOINTMENT.getValue())) { diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaWeiService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaWeiService.java index c499d2a24..8d20f2444 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaWeiService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/HuaWeiService.java @@ -7,6 +7,7 @@ import com.jsowell.pile.dto.QueryStartChargeDTO; import com.jsowell.pile.dto.QueryStationInfoDTO; import com.jsowell.pile.dto.huawei.DeliverEquipBusinessDTO; import com.jsowell.pile.dto.huawei.ReceiveDeliverDTO; +import com.jsowell.pile.dto.huawei.VinStartChargeDTO; import com.jsowell.thirdparty.lianlian.dto.CommonParamsDTO; import com.jsowell.thirdparty.zhongdianlian.dto.ZDLGetTokenDTO; @@ -185,4 +186,17 @@ public interface HuaWeiService { * @return */ Map receiveDeliverEquipBusinessPolicyResult(ReceiveDeliverDTO dto); + + + /** + * vin启动充电 + * 平台 <-- 华为 + * + * insert_start_charge + * + * @param dto + * @return + * @throws Exception + */ + Map vinStartCharge(VinStartChargeDTO dto) throws Exception; } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java index 23b42da1f..0c4990b3c 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/huawei/impl/HuaWeiServiceImpl.java @@ -3,17 +3,20 @@ package com.jsowell.thirdparty.huawei.impl; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Maps; import com.jsowell.common.constant.Constants; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; +import com.jsowell.common.enums.ykc.StartModeEnum; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.StringUtils; +import com.jsowell.common.util.YKCUtils; +import com.jsowell.pile.domain.MemberPlateNumberRelation; import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.domain.ThirdPartyPlatformConfig; import com.jsowell.pile.domain.ThirdPartyStationRelation; -import com.jsowell.pile.dto.QueryEquipChargeStatusDTO; -import com.jsowell.pile.dto.QueryEquipmentDTO; -import com.jsowell.pile.dto.QueryStartChargeDTO; -import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.pile.dto.*; import com.jsowell.pile.dto.huawei.DeliverEquipBusinessDTO; import com.jsowell.pile.dto.huawei.ReceiveDeliverDTO; +import com.jsowell.pile.dto.huawei.VinStartChargeDTO; import com.jsowell.pile.service.*; import com.jsowell.pile.vo.base.ThirdPartyStationRelationVO; import com.jsowell.pile.vo.uniapp.BillingPriceVO; @@ -67,6 +70,12 @@ public class HuaWeiServiceImpl implements HuaWeiService { @Autowired private PileMerchantInfoService pileMerchantInfoService; + @Autowired + private MemberPlateNumberRelationService memberPlateNumberRelationService; + + @Autowired + private OrderBasicInfoService orderBasicInfoService; + /** * 获取令牌 * @param dto @@ -270,7 +279,6 @@ public class HuaWeiServiceImpl implements HuaWeiService { // 为空说明未查到该枪口的计费模板 resultJson.put("SuccStat", 1); resultJson.put("FailReason", 1); - return null; }else { // 延时 500ms,异步调用 下发计费策略 接口 CompletableFuture.runAsync(() -> { @@ -311,15 +319,18 @@ public class HuaWeiServiceImpl implements HuaWeiService { public String deliverEquipBusinessPolicy(String equipBizSeq, String pileConnectorCode) { DeliverEquipBusinessDTO params = new DeliverEquipBusinessDTO(); + // 充电业务策略信息 List chargePolicyInfos = new ArrayList<>(); DeliverEquipBusinessDTO.ChargePolicyInfo chargePolicyInfo = new DeliverEquipBusinessDTO.ChargePolicyInfo(); + // 业务策略信息体 List pricePolicyInfos = new ArrayList<>(); DeliverEquipBusinessDTO.ChargePolicyInfo.PricePolicyInfo pricePolicyInfo = new DeliverEquipBusinessDTO.ChargePolicyInfo.PricePolicyInfo(); + // 计费信息 List vinStartCharge(VinStartChargeDTO dto) throws Exception { + ThirdPartyPlatformConfig configInfo = thirdPartyPlatformConfigService.getInfoByOperatorId(dto.getOperatorId()); + if (configInfo == null) { + return null; + } + Map paramMap = new LinkedHashMap<>(); + + String vinCode = dto.getVin(); + String pileConnectorCode = dto.getConnectorID(); + // 截取桩号、枪口号 + String pileSn = StringUtils.substring(pileConnectorCode, 0, pileConnectorCode.length() - 2); + String connectorCode = StringUtils.substring(pileConnectorCode, pileConnectorCode.length() - 2, pileConnectorCode.length()); + // 根据vin查询小程序平台用户信息 + MemberPlateNumberRelation basicInfo = memberPlateNumberRelationService.getMemberPlateInfoByVinCode(vinCode); + if (basicInfo == null) { + // 该用户未注册 + throw new BusinessException(ReturnCodeEnum.CODE_GENERATE_ORDER_ERROR); + } + + // 生成订单,并启动充电 + 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; + } + paramMap.put("SuccStat", succStat); + paramMap.put("FailReason", failReason); + + // 加密 + Map resultMap = Maps.newLinkedHashMap(); + // 加密数据 + byte[] encryptText = Cryptos.aesEncrypt(JSONObject.toJSONString(paramMap).getBytes(), + configInfo.getDataSecret().getBytes(), configInfo.getDataSecretIv().getBytes()); + String encryptData = Encodes.encodeBase64(encryptText); + + resultMap.put("Data", encryptData); + // 生成sig + String resultSign = GBSignUtils.sign(resultMap, configInfo.getSignSecret()); + resultMap.put("Sig", resultSign); + + return resultMap; + } + }