diff --git a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java index 66cdfae08..eb72349b7 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java +++ b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java @@ -31,22 +31,22 @@ public class Constants { // 非法交易流水号 由充电桩启动的订单会传全是0的交易流水号 public static final String ILLEGAL_TRANSACTION_CODE = "00000000000000000000000000000000"; - // 充电桩sn号长度 + // 电动汽车充电桩sn号长度 public static final int PILE_SN_LENGTH_FOR_EV = 14; - // 充电桩枪口号长度 + // 电动汽车充电桩枪口号长度 public static final int CONNECTOR_CODE_LENGTH_FOR_EV = 2; - // 充电桩枪口编号长度 - public static final int PILE_CONNECTOR_CODE_LENGTH = PILE_SN_LENGTH_FOR_EV + CONNECTOR_CODE_LENGTH_FOR_EV; + // 电动汽车充电桩枪口编号长度 + public static final int PILE_CONNECTOR_CODE_LENGTH_FOR_EV = PILE_SN_LENGTH_FOR_EV + CONNECTOR_CODE_LENGTH_FOR_EV; - // 充电桩sn号长度 - public static final int PILE_SN_LENGTH_FOR_EBIKE = 14; + // 电单车充电桩sn号长度 + public static final int PILE_SN_LENGTH_FOR_EBIKE = 8; - // 充电桩枪口号长度 + // 电单车充电桩枪口号长度 public static final int CONNECTOR_CODE_LENGTH_FOR_EBIKE = 2; - // 充电桩枪口编号长度 + // 电单车充电桩枪口编号长度 public static final int PILE_CONNECTOR_CODE_LENGTH_FOR_EBIKE = PILE_SN_LENGTH_FOR_EBIKE + CONNECTOR_CODE_LENGTH_FOR_EBIKE; // 汇付手续费费率 diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java index fa3aafb33..bab049481 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java @@ -1,6 +1,6 @@ package com.jsowell.common.util; -import com.google.common.collect.Maps; +import com.google.common.collect.ImmutableMap; import com.google.common.primitives.Bytes; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; @@ -152,38 +152,49 @@ public class YKCUtils { return BytesUtil.ascii2Str(vinCodeByteArr); } + /** + * 解析充电桩连接器编号 + * + * @param pileConnectorCode 充电桩连接器编号 + * @param totalLength 总长度 + * @param connectorOffset 连接器编号的偏移量 + * @return 包含桩编号和连接器编号的映射 + */ + private static Map parsePileConnector(String pileConnectorCode, int totalLength, int connectorOffset) { + String pileSn = StringUtils.substring(pileConnectorCode, 0, totalLength - 2); + String connectorCode = StringUtils.substring(pileConnectorCode, connectorOffset); + + return ImmutableMap.of("pileSn", pileSn, "connectorCode", connectorCode); + } + /** * 解析充电桩编号 + * + * @param pileConnectorCode 充电桩连接器编号 + * @return 包含桩编号和连接器编号的映射 */ public static Map parsePileConnectorCode(String pileConnectorCode) { - // 长度大于10是汽车桩, 否则是电单车桩 - String pileSn; - String connectorCode = ""; - if (pileConnectorCode.length() > 10) { - // 汽车桩, 桩编号14位, 枪口号2位 - if (pileConnectorCode.length() == 16) { - pileSn = StringUtils.substring(pileConnectorCode, 0, pileConnectorCode.length() - 2); - connectorCode = StringUtils.substring(pileConnectorCode, pileConnectorCode.length() - 2); - } else if (pileConnectorCode.length() == 14){ - pileSn = pileConnectorCode; + int length = pileConnectorCode.length(); + + if (length > 10) { + // 汽车桩 + if (length == Constants.PILE_CONNECTOR_CODE_LENGTH_FOR_EV) { + return parsePileConnector(pileConnectorCode, Constants.PILE_CONNECTOR_CODE_LENGTH_FOR_EV, pileConnectorCode.length() - 2); + } else if (length == 14) { + return ImmutableMap.of("pileSn", pileConnectorCode, "connectorCode", ""); } else { - throw new BusinessException(ReturnCodeEnum.CODE_DATA_LENGTH_ERROR); + throw new BusinessException(ReturnCodeEnum.CODE_DATA_LENGTH_ERROR.getValue(), "Invalid EV pile connector code length: " + length); } } else { - // 电单车桩, 桩编号8位, 枪口号2位 - if (pileConnectorCode.length() == 10) { - pileSn = StringUtils.substring(pileConnectorCode, 0, pileConnectorCode.length() - 2); - connectorCode = StringUtils.substring(pileConnectorCode, pileConnectorCode.length() - 2); - } else if (pileConnectorCode.length() == 8){ - pileSn = pileConnectorCode; + // 电单车桩 + if (length == Constants.PILE_CONNECTOR_CODE_LENGTH_FOR_EBIKE) { + return parsePileConnector(pileConnectorCode, Constants.PILE_CONNECTOR_CODE_LENGTH_FOR_EBIKE, pileConnectorCode.length() - 2); + } else if (length == 8) { + return ImmutableMap.of("pileSn", pileConnectorCode, "connectorCode", ""); } else { - throw new BusinessException(ReturnCodeEnum.CODE_DATA_LENGTH_ERROR); + throw new BusinessException(ReturnCodeEnum.CODE_DATA_LENGTH_ERROR.getValue(), "Invalid e-bike pile connector code length: " + length); } } - Map resultMap = Maps.newHashMap(); - resultMap.put("pileSn", pileSn); - resultMap.put("connectorCode", connectorCode); - return resultMap; } /** @@ -208,6 +219,7 @@ public class YKCUtils { public static void main(String[] args) { String pileConnectorCode = "8800000000000201"; + pileConnectorCode = "1327388103"; String pileSn = YKCUtils.getPileSn(pileConnectorCode); System.out.println(pileSn); String connectorCode = YKCUtils.getConnectorCode(pileConnectorCode);