diff --git a/README.md b/README.md index 64f5f67..7c26330 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ ------------------------------ #### 当前支持的充电桩协议 -| 协议名 | 版本号 | -|---|---| -| 云快充 | 1.5.0 | +| 协议名 | 版本号 | +|---|------------| +| 云快充 | 1.5.0、1.6.0 | ------------------------------ #### 充电桩协议文档 diff --git a/jcpp-app-bootstrap/src/main/resources/app-service.yml b/jcpp-app-bootstrap/src/main/resources/app-service.yml index f09509a..7eb821b 100644 --- a/jcpp-app-bootstrap/src/main/resources/app-service.yml +++ b/jcpp-app-bootstrap/src/main/resources/app-service.yml @@ -206,6 +206,45 @@ service: linger-ms: "${PROTOCOLS_YUNKUAICHONGV150_FORWARD_KAFKA_LINGER_MS:0}" buffer-memory: "${PROTOCOLS_YUNKUAICHONGV150_FORWARD_BUFFER_MEMORY:33554432}" other-properties: "${PROTOCOLS_YUNKUAICHONGV150_FORWARD_QUEUE_KAFKA_OTHER_PROPERTIES:}" + yunkuaichongV160: + enabled: "${PROTOCOLS_YUNKUAICHONGV150_ENABLED:true}" + listener: + tcp: + bind-address: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_BIND_ADDRESS:0.0.0.0}" + bind-port: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_BIND_PORT:38002}" + boss-group-thread_count: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_BOSS_GROUP_THREADS:4}" + worker-group-thread-count: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_WORKER_GROUP_THREADS:16}" + so-keep-alive: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_KEEPALIVE:true}" + so-backlog: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_BACKLOG:128}" + so-rcvbuf: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_RCVBUF:65536}" + so-sndbuf: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_SNDBUF:65536}" + nodelay: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_NODELAY:true}" + handler: + idle-timeout-seconds: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_HANDLER_IDLE_TIMEOUT_SECONDS:600}" + max_connections: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_HANDLER_MAX_CONNECTIONS:100000}" + # 默认为二进制类型的拆包器 + # 可选JSON类型的拆包器 "${PROTOCOLS_YUNKUAICHONGV160_NETTY_HANDLER_BINARY_CONFIGURATION:type:JSON}" + # 可选纯文本类型的拆包器 "${PROTOCOLS_YUNKUAICHONGV160_NETTY_HANDLER_BINARY_CONFIGURATION:type:TEXT;maxFrameLength:128;stripDelimiter:true;messageSeparator:null;charsetName:UTF-8}" + configuration: "${PROTOCOLS_YUNKUAICHONGV160_NETTY_HANDLER_BINARY_CONFIGURATION:type:BINARY;decoder:sanbing.jcpp.protocol.listener.tcp.decoder.JCPPLengthFieldBasedFrameDecoder;byteOrder:LITTLE_ENDIAN;head:68;lengthFieldOffset:1;lengthFieldLength:1;lengthAdjustment:2;initialBytesToStrip:0}" + forwarder: + # 如果是单体服务,可选kafka、memory,未来计划扩展RocketMQ, GRpc、REST + type: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_TYPE:memory}" + memory: + topic: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_MEMORY_TOPIC:protocol_uplink}" + kafka: + topic: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_TOPIC:protocol_uplink}" + jcpp-partition: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_JCPP_PARTITION:true}" # 是否利用JCPP的分片框架 + # 以下配置只有在service.type为protocol时且jcpp-partition为false时才生效 + bootstrap-servers: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_SERVERS:10.102.12.102:9092}" + acks: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_ACKS:1}" + # # 可选 protobuf(推荐)、json + encoder: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_ENCODER:protobuf}" + retries: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_RETRIES:1}" + compression-type: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_COMPRESSION_TYPE:lz4}" # none, gzip, snappy, lz4, zstd + batch-size: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_BATCH_SIZE:16384}" + linger-ms: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_LINGER_MS:0}" + buffer-memory: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_BUFFER_MEMORY:33554432}" + other-properties: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_QUEUE_KAFKA_OTHER_PROPERTIES:}" thread-pool: sharding: diff --git a/jcpp-app-bootstrap/src/test/resources/app-service-test.properties b/jcpp-app-bootstrap/src/test/resources/app-service-test.properties index b397d7b..75de971 100644 --- a/jcpp-app-bootstrap/src/test/resources/app-service-test.properties +++ b/jcpp-app-bootstrap/src/test/resources/app-service-test.properties @@ -1,3 +1,4 @@ redis.connection.type=cluster redis.cluster.nodes=10.102.12.101:30700,10.102.12.101:32027,10.102.12.101:30767,10.102.12.101:30250,10.102.12.101:30612,10.102.12.101:32303 -service.protocols.yunkuaichongV150.listener.tcp.bind-port=0 \ No newline at end of file +service.protocols.yunkuaichongV150.listener.tcp.bind-port=0 +service.protocols.yunkuaichongV160.listener.tcp.bind-port=0 \ No newline at end of file diff --git a/jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/domain/DownlinkCmdEnum.java b/jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/domain/DownlinkCmdEnum.java index 4fbe3f5..e5407f8 100644 --- a/jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/domain/DownlinkCmdEnum.java +++ b/jcpp-protocol-api/src/main/java/sanbing/jcpp/protocol/domain/DownlinkCmdEnum.java @@ -20,4 +20,6 @@ public enum DownlinkCmdEnum { REMOTE_START_CHARGING, TRANSACTION_RECORD, + + REMOTE_PARALLEL_START_CHARGING, } \ No newline at end of file diff --git a/jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml b/jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml index 284a6bb..ea92de8 100644 --- a/jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml +++ b/jcpp-protocol-bootstrap/src/main/resources/protocol-service.yml @@ -81,6 +81,43 @@ service: linger-ms: "${PROTOCOLS_YUNKUAICHONGV150_FORWARD_KAFKA_LINGER_MS:0}" buffer-memory: "${PROTOCOLS_YUNKUAICHONGV150_FORWARD_BUFFER_MEMORY:33554432}" other-properties: "${PROTOCOLS_YUNKUAICHONGV150_FORWARD_QUEUE_KAFKA_OTHER_PROPERTIES:}" + yunkuaichongV160: + enabled: "${PROTOCOLS_YUNKUAICHONGV160_ENABLED:true}" + listener: + tcp: + bind-address: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_BIND_ADDRESS:0.0.0.0}" + bind-port: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_BIND_PORT:38002}" + boss-group-thread_count: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_BOSS_GROUP_THREADS:4}" + worker-group-thread-count: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_WORKER_GROUP_THREADS:16}" + so-keep-alive: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_KEEPALIVE:true}" + so-backlog: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_BACKLOG:128}" + so-rcvbuf: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_RCVBUF:65536}" + so-sndbuf: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_SO_SNDBUF:65536}" + nodelay: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_NODELAY:true}" + handler: + idle-timeout-seconds: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_HANDLER_IDLE_TIMEOUT_SECONDS:600}" + max_connections: "${PROTOCOLS_YUNKUAICHONGV160_LISTENER_TCP_HANDLER_MAX_CONNECTIONS:100000}" + # 默认为二进制类型的拆包器 + # 可选JSON类型的拆包器 "${PROTOCOLS_YUNKUAICHONGV160_NETTY_HANDLER_BINARY_CONFIGURATION:type:JSON}" + # 可选纯文本类型的拆包器 "${PROTOCOLS_YUNKUAICHONGV160_NETTY_HANDLER_BINARY_CONFIGURATION:type:TEXT;maxFrameLength:128;stripDelimiter:true;messageSeparator:null;charsetName:UTF-8}" + configuration: "${PROTOCOLS_YUNKUAICHONGV160_NETTY_HANDLER_BINARY_CONFIGURATION:type:BINARY;decoder:sanbing.jcpp.protocol.listener.tcp.decoder.JCPPLengthFieldBasedFrameDecoder;byteOrder:LITTLE_ENDIAN;head:68;lengthFieldOffset:1;lengthFieldLength:1;lengthAdjustment:2;initialBytesToStrip:0}" + forwarder: + # 作为前置服务单独启时可选:kafka、kafka-sharding,未来计划扩展RocketMQ, GRpc、REST + type: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_TYPE:kafka}" + kafka: + topic: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_TOPIC:protocol_uplink}" + jcpp-partition: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_JCPP_PARTITION:true}" # 是否利用JCPP的分片框架 + # 以下配置只有在service.type为protocol时且jcpp-partition为false时才生效 + bootstrap-servers: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_SERVERS:10.102.12.102:9092}" + acks: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_ACKS:1}" + # # 可选 protobuf(推荐)、json + encoder: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_ENCODER:protobuf}" + retries: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_RETRIES:1}" + compression-type: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_COMPRESSION_TYPE:lz4}" # none, gzip, snappy, lz4, zstd + batch-size: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_BATCH_SIZE:16384}" + linger-ms: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_KAFKA_LINGER_MS:0}" + buffer-memory: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_BUFFER_MEMORY:33554432}" + other-properties: "${PROTOCOLS_YUNKUAICHONGV160_FORWARD_QUEUE_KAFKA_OTHER_PROPERTIES:}" # 应用程序服务注册中心配置 zk: diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/AbstractYunKuaiChongCmdExe.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/AbstractYunKuaiChongCmdExe.java index 84ea84f..c36a94e 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/AbstractYunKuaiChongCmdExe.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/AbstractYunKuaiChongCmdExe.java @@ -12,7 +12,7 @@ import sanbing.jcpp.infrastructure.util.codec.BCDUtil; import sanbing.jcpp.proto.gen.ProtocolProto; import sanbing.jcpp.protocol.listener.tcp.TcpSession; import sanbing.jcpp.protocol.listener.tcp.enums.SequenceNumberLength; -import sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum; +import sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum; import java.math.BigDecimal; import java.math.RoundingMode; @@ -98,7 +98,7 @@ public class AbstractYunKuaiChongCmdExe { } - protected byte[] encode(YunKuaiChongV150DownlinkCmdEnum downlinkCmd, + protected byte[] encode(YunKuaiChongDownlinkCmdEnum downlinkCmd, int seqNo, int encryptionFlag, ByteBuf msgBody) { @@ -120,7 +120,7 @@ public class AbstractYunKuaiChongCmdExe { return toBytes(response); } - protected void encodeAndWriteFlush(YunKuaiChongV150DownlinkCmdEnum downlinkCmd, + protected void encodeAndWriteFlush(YunKuaiChongDownlinkCmdEnum downlinkCmd, int seqNo, int encryptionFlag, ByteBuf msgBody, @@ -131,7 +131,7 @@ public class AbstractYunKuaiChongCmdExe { tcpSession.writeAndFlush(Unpooled.copiedBuffer(encode)); } - protected void encodeAndWriteFlush(YunKuaiChongV150DownlinkCmdEnum downlinkCmd, + protected void encodeAndWriteFlush(YunKuaiChongDownlinkCmdEnum downlinkCmd, ByteBuf msgBody, TcpSession tcpSession) { diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongDownlinkCmdExe.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongDownlinkCmdExe.java index 41c5f97..4ad8414 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongDownlinkCmdExe.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongDownlinkCmdExe.java @@ -10,7 +10,7 @@ import sanbing.jcpp.protocol.listener.tcp.TcpSession; /** * @author baigod */ -public abstract class YunKuaiChongDownlinkCmdExe extends AbstractYunKuaiChongCmdExe{ +public abstract class YunKuaiChongDownlinkCmdExe extends AbstractYunKuaiChongCmdExe { public abstract void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx); diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunKuaiChongV15ProtocolMessageProcessor.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java similarity index 80% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunKuaiChongV15ProtocolMessageProcessor.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java index 66f4b8b..e932c99 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunKuaiChongV15ProtocolMessageProcessor.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150; +package sanbing.jcpp.protocol.yunkuaichong; import cn.hutool.core.util.ClassUtil; import io.netty.buffer.ByteBuf; @@ -17,12 +17,8 @@ import sanbing.jcpp.protocol.domain.ListenerToHandlerMsg; import sanbing.jcpp.protocol.domain.SessionToHandlerMsg; import sanbing.jcpp.protocol.forwarder.Forwarder; import sanbing.jcpp.protocol.listener.tcp.TcpSession; -import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe; -import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage; -import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkCmdExe; -import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage; import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; -import sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum; +import sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum; import java.lang.reflect.InvocationTargetException; import java.util.Map; @@ -33,17 +29,17 @@ import java.util.concurrent.ConcurrentHashMap; import static sanbing.jcpp.infrastructure.util.codec.ByteUtil.checkCrcSum; @Slf4j -public class YunKuaiChongV15ProtocolMessageProcessor extends ProtocolMessageProcessor { - private final Map uplinkCmdExeMap = new ConcurrentHashMap<>(); - private final Map downlinkCmdExeMap = new ConcurrentHashMap<>(); +public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcessor { + private final Map uplinkCmdExeMap = new ConcurrentHashMap<>(); + private final Map downlinkCmdExeMap = new ConcurrentHashMap<>(); - public YunKuaiChongV15ProtocolMessageProcessor(Forwarder forwarder, ProtocolContext protocolContext) { + public YunKuaiChongProtocolMessageProcessor(Forwarder forwarder, ProtocolContext protocolContext) { super(forwarder, protocolContext); Set> cmdClasses = ClassUtil.scanPackageByAnnotation(ClassUtil.getPackage(this.getClass()), YunKuaiChongCmd.class); cmdClasses.stream().filter(YunKuaiChongUplinkCmdExe.class::isAssignableFrom) .forEach(clazz -> { - byte cmd = clazz.getAnnotation(YunKuaiChongCmd.class).value(); + int cmd = clazz.getAnnotation(YunKuaiChongCmd.class).value(); try { YunKuaiChongUplinkCmdExe yunKuaiChongUplinkCmdExe = (YunKuaiChongUplinkCmdExe) clazz.getDeclaredConstructor().newInstance(); uplinkCmdExeMap.put(cmd, yunKuaiChongUplinkCmdExe); @@ -57,7 +53,7 @@ public class YunKuaiChongV15ProtocolMessageProcessor extends ProtocolMessageProc cmdClasses.stream().filter(YunKuaiChongDownlinkCmdExe.class::isAssignableFrom) .forEach(clazz -> { - byte cmd = clazz.getAnnotation(YunKuaiChongCmd.class).value(); + int cmd = clazz.getAnnotation(YunKuaiChongCmd.class).value(); try { YunKuaiChongDownlinkCmdExe yunKuaiChongDownlinkCmdExe = (YunKuaiChongDownlinkCmdExe) clazz.getDeclaredConstructor().newInstance(); downlinkCmdExeMap.put(cmd, yunKuaiChongDownlinkCmdExe); @@ -138,15 +134,15 @@ public class YunKuaiChongV15ProtocolMessageProcessor extends ProtocolMessageProc JCPPPair checkResult = checkCrcSum(checkData, checkSum); - if (!checkResult.getFirst()) { + if (Boolean.FALSE.equals(checkResult.getFirst())) { csTemp.writeBytes(byCheckSum); checkSum = csTemp.readUnsignedShortLE(); checkResult = checkCrcSum(checkData, checkSum); - log.info("云快充V1.5检验和 第二次检查: checkResult:{}, checkSum:{}", checkResult, checkSum); + log.info("云快充检验和 第二次检查: checkResult:{}, checkSum:{}", checkResult, checkSum); } - if (!checkResult.getFirst()) { - log.info("云快充V1.5检验和不一致两次不通过 不处理! CMD:{},校验域:{},正确校验和:{}", frameType, checkSum, checkResult.getSecond()); + if (Boolean.FALSE.equals(checkResult.getFirst())) { + log.info("云快充检验和不一致两次不通过 不处理! CMD:{},校验域:{},正确校验和:{}", frameType, checkSum, checkResult.getSecond()); return; } @@ -169,7 +165,7 @@ public class YunKuaiChongV15ProtocolMessageProcessor extends ProtocolMessageProc DownlinkRestMessage protocolDownlinkMsg = sessionToHandlerMsg.downlinkMsg(); - int cmd = YunKuaiChongV150DownlinkCmdEnum.valueOf(protocolDownlinkMsg.getDownlinkCmd()).getCmd(); + int cmd = YunKuaiChongDownlinkCmdEnum.valueOf(protocolDownlinkMsg.getDownlinkCmd()).getCmd(); YunKuaiChongDwonlinkMessage message = new YunKuaiChongDwonlinkMessage(); message.setId(new UUID(protocolDownlinkMsg.getMessageIdMSB(), protocolDownlinkMsg.getMessageIdLSB())); @@ -188,11 +184,11 @@ public class YunKuaiChongV15ProtocolMessageProcessor extends ProtocolMessageProc } private void exeCmd(YunKuaiChongUplinkMessage message, TcpSession session) { - YunKuaiChongUplinkCmdExe uplinkCmdExe = uplinkCmdExeMap.get((byte) message.getCmd()); + YunKuaiChongUplinkCmdExe uplinkCmdExe = uplinkCmdExeMap.get(message.getCmd()); if (uplinkCmdExe == null) { - log.info("[{}] 云快充V1.5协议接收到未知的上行指令 {}", session, message.getCmd()); + log.info("[{}] 云快充协议接收到未知的上行指令 {}", session, message.getCmd()); return; } @@ -201,11 +197,11 @@ public class YunKuaiChongV15ProtocolMessageProcessor extends ProtocolMessageProc } private void exeCmd(YunKuaiChongDwonlinkMessage message, TcpSession session) { - YunKuaiChongDownlinkCmdExe downlinkCmdExe = downlinkCmdExeMap.get((byte) message.getCmd()); + YunKuaiChongDownlinkCmdExe downlinkCmdExe = downlinkCmdExeMap.get(message.getCmd()); if (downlinkCmdExe == null) { - log.info("[{}] 云快充V1.5协议接收到未知的下行指令 {}", session, message.getCmd()); + log.info("[{}] 云快充协议接收到未知的下行指令 {}", session, message.getCmd()); return; } diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongUplinkCmdExe.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongUplinkCmdExe.java index 450dd81..52cb0d9 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongUplinkCmdExe.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongUplinkCmdExe.java @@ -15,7 +15,7 @@ import sanbing.jcpp.protocol.listener.tcp.TcpSession; * @author baigod */ @Slf4j -public abstract class YunKuaiChongUplinkCmdExe extends AbstractYunKuaiChongCmdExe{ +public abstract class YunKuaiChongUplinkCmdExe extends AbstractYunKuaiChongCmdExe { public abstract void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx); diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/annotation/YunKuaiChongCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/annotation/YunKuaiChongCmd.java index d86321b..515b6b0 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/annotation/YunKuaiChongCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/annotation/YunKuaiChongCmd.java @@ -14,6 +14,6 @@ import java.lang.annotation.*; @Documented public @interface YunKuaiChongCmd { - byte value(); + int value(); } \ No newline at end of file diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150BmsHandshakeULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150BmsHandshakeULCmd.java similarity index 98% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150BmsHandshakeULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150BmsHandshakeULCmd.java index 36f35f8..ce9bbe2 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150BmsHandshakeULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150BmsHandshakeULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import cn.hutool.core.util.HexUtil; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150HeartbeatULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150HeartbeatULCmd.java similarity index 95% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150HeartbeatULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150HeartbeatULCmd.java index d35735b..5d6d331 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150HeartbeatULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150HeartbeatULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; @@ -18,7 +18,7 @@ import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkCmdExe; import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage; import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.HEARTBEAT; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.HEARTBEAT; /** * 云快充1.5.0 充电桩心跳包 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150LoginAckDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150LoginAckDLCmd.java similarity index 94% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150LoginAckDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150LoginAckDLCmd.java index d7d0b70..8930cae 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150LoginAckDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150LoginAckDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -28,8 +28,8 @@ import static sanbing.jcpp.infrastructure.util.config.ThreadPoolConfiguration.PR import static sanbing.jcpp.protocol.domain.SessionCloseReason.MANUALLY; import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.FAILURE_BYTE; import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.SUCCESS_BYTE; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.LOGIN_ACK; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.SYNC_TIME; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.LOGIN_ACK; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SYNC_TIME; /** * 云快充1.5.0登录认证应答 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150LoginULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150LoginULCmd.java similarity index 98% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150LoginULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150LoginULCmd.java index 0971188..83eb7b5 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150LoginULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150LoginULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150QueryPricingModelAckDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150QueryPricingModelAckDLCmd.java similarity index 96% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150QueryPricingModelAckDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150QueryPricingModelAckDLCmd.java index 8c6a732..36a4a40 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150QueryPricingModelAckDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150QueryPricingModelAckDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -23,7 +23,7 @@ import java.util.List; import java.util.Map; import static sanbing.jcpp.proto.gen.ProtocolProto.PricingModelFlag.*; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.QUERY_PRICING_ACK; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.QUERY_PRICING_ACK; /** * 计费模型请求应答 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150QueryPricingModelULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150QueryPricingModelULCmd.java similarity index 97% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150QueryPricingModelULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150QueryPricingModelULCmd.java index 3741366..779ce3d 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150QueryPricingModelULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150QueryPricingModelULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RealTimeDataULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RealTimeDataULCmd.java similarity index 99% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RealTimeDataULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RealTimeDataULCmd.java index 8aa463c..671aa57 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RealTimeDataULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RealTimeDataULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStartDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStartDLCmd.java similarity index 93% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStartDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStartDLCmd.java index 9846f10..c37b671 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStartDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStartDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -16,7 +16,7 @@ import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe; import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage; import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.REMOTE_START_CHARGING; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_START_CHARGING; /** * 云快充1.5.0 运营平台远程控制启机 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStartResultULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStartResultULCmd.java similarity index 98% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStartResultULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStartResultULCmd.java index 6dca0e4..6a2eead 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStartResultULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStartResultULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStopDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStopDLCmd.java similarity index 90% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStopDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStopDLCmd.java index 67c4793..04c53c3 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStopDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStopDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -14,7 +14,7 @@ import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe; import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage; import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.REMOTE_START_CHARGING; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_START_CHARGING; /** * 云快充1.5.0 运营平台远程停机 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStopResultULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStopResultULCmd.java similarity index 98% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStopResultULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStopResultULCmd.java index dbda740..c00a2cf 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150RemoteStopResultULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150RemoteStopResultULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150SetPricingModelAckULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150SetPricingModelAckULCmd.java similarity index 93% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150SetPricingModelAckULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150SetPricingModelAckULCmd.java index 8e04b1b..cb74462 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150SetPricingModelAckULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150SetPricingModelAckULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -16,7 +16,7 @@ import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkCmdExe; import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage; import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.QUERY_PRICING_ACK; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.QUERY_PRICING_ACK; /** * 云快充1.5.0 计费模型应答 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150SetPricingModelDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150SetPricingModelDLCmd.java similarity index 93% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150SetPricingModelDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150SetPricingModelDLCmd.java index 44b066e..97b8b07 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150SetPricingModelDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150SetPricingModelDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -23,8 +23,8 @@ import java.util.List; import java.util.Map; import static sanbing.jcpp.proto.gen.ProtocolProto.PricingModelFlag.*; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.QUERY_PRICING_ACK; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.SET_PRICING; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.QUERY_PRICING_ACK; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SET_PRICING; /** * 云快充1.5.0 计费模型设置 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150TransactionRecordAckDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150TransactionRecordAckDLCmd.java similarity index 92% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150TransactionRecordAckDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150TransactionRecordAckDLCmd.java index 417db72..3e9e845 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150TransactionRecordAckDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150TransactionRecordAckDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -18,7 +18,7 @@ import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.FAILURE_BYTE; import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.SUCCESS_BYTE; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.VERIFY_PRICING_ACK; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.VERIFY_PRICING_ACK; /** * 云快充1.5.0 交易记录确认 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150TransactionRecordULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150TransactionRecordULCmd.java similarity index 99% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150TransactionRecordULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150TransactionRecordULCmd.java index 8fbdf8b..1661cbf 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150TransactionRecordULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150TransactionRecordULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; import io.netty.buffer.ByteBuf; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150VerifyPricingModelAckDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150VerifyPricingModelAckDLCmd.java similarity index 94% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150VerifyPricingModelAckDLCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150VerifyPricingModelAckDLCmd.java index fbe0a34..f92586a 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150VerifyPricingModelAckDLCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150VerifyPricingModelAckDLCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -20,7 +20,7 @@ import java.util.Arrays; import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.FAILURE_BYTE; import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.SUCCESS_BYTE; -import static sanbing.jcpp.protocol.yunkuaichong.v150.enums.YunKuaiChongV150DownlinkCmdEnum.VERIFY_PRICING_ACK; +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.VERIFY_PRICING_ACK; /** * 云快充1.5.0计费模型验证请求应答 diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150VerifyPricingModelULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150VerifyPricingModelULCmd.java similarity index 97% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150VerifyPricingModelULCmd.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150VerifyPricingModelULCmd.java index 24a6d31..d968999 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/cmd/YunKuaiChongV150VerifyPricingModelULCmd.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/commoncmd/YunKuaiChongV150VerifyPricingModelULCmd.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.cmd; +package sanbing.jcpp.protocol.yunkuaichong.commoncmd; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/enums/YunKuaiChongV150DownlinkCmdEnum.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/enums/YunKuaiChongDownlinkCmdEnum.java similarity index 68% rename from jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/enums/YunKuaiChongV150DownlinkCmdEnum.java rename to jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/enums/YunKuaiChongDownlinkCmdEnum.java index 5dab6f1..c6b16e7 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/enums/YunKuaiChongV150DownlinkCmdEnum.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/enums/YunKuaiChongDownlinkCmdEnum.java @@ -2,7 +2,7 @@ * 抖音关注:程序员三丙 * 知识星球:https://t.zsxq.com/j9b21 */ -package sanbing.jcpp.protocol.yunkuaichong.v150.enums; +package sanbing.jcpp.protocol.yunkuaichong.enums; import lombok.AllArgsConstructor; import lombok.Getter; @@ -12,7 +12,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum YunKuaiChongV150DownlinkCmdEnum { +public enum YunKuaiChongDownlinkCmdEnum { LOGIN_ACK(0x02), @@ -30,9 +30,10 @@ public enum YunKuaiChongV150DownlinkCmdEnum { REMOTE_STOP_CHARGING(0x36), - TRANSACTION_RECORD(0x40) - ; + TRANSACTION_RECORD(0x40), - private int cmd; + REMOTE_PARALLEL_START_CHARGING(0xA4); + + private final Integer cmd; } \ No newline at end of file diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunkuaichongV150ProtocolBootstrap.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunkuaichongV150ProtocolBootstrap.java index 6fb79d9..03e497b 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunkuaichongV150ProtocolBootstrap.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v150/YunkuaichongV150ProtocolBootstrap.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import sanbing.jcpp.infrastructure.util.annotation.ProtocolComponent; import sanbing.jcpp.protocol.ProtocolBootstrap; import sanbing.jcpp.protocol.ProtocolMessageProcessor; +import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolMessageProcessor; import static sanbing.jcpp.protocol.yunkuaichong.v150.YunkuaichongV150ProtocolBootstrap.PROTOCOL_NAME; @@ -38,7 +39,7 @@ public class YunkuaichongV150ProtocolBootstrap extends ProtocolBootstrap { @Override protected ProtocolMessageProcessor messageProcessor() { - return new YunKuaiChongV15ProtocolMessageProcessor(forwarder, protocolContext); + return new YunKuaiChongProtocolMessageProcessor(forwarder, protocolContext); } diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/YunkuaichongV160ProtocolBootstrap.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/YunkuaichongV160ProtocolBootstrap.java new file mode 100644 index 0000000..85793fb --- /dev/null +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/YunkuaichongV160ProtocolBootstrap.java @@ -0,0 +1,46 @@ +/** + * 抖音关注:程序员三丙 + * 知识星球:https://t.zsxq.com/j9b21 + */ +package sanbing.jcpp.protocol.yunkuaichong.v160; + +import lombok.extern.slf4j.Slf4j; +import sanbing.jcpp.infrastructure.util.annotation.ProtocolComponent; +import sanbing.jcpp.protocol.ProtocolBootstrap; +import sanbing.jcpp.protocol.ProtocolMessageProcessor; +import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolMessageProcessor; + +import static sanbing.jcpp.protocol.yunkuaichong.v160.YunkuaichongV160ProtocolBootstrap.PROTOCOL_NAME; + +/** + * @author baigod + */ + +@ProtocolComponent(PROTOCOL_NAME) +@Slf4j +public class YunkuaichongV160ProtocolBootstrap extends ProtocolBootstrap { + + public static final String PROTOCOL_NAME = "yunkuaichongV160"; + + @Override + protected String getProtocolName() { + return PROTOCOL_NAME; + } + + @Override + protected void _init() { + // do nothing + } + + @Override + protected void _destroy() { + // do nothing + } + + @Override + protected ProtocolMessageProcessor messageProcessor() { + return new YunKuaiChongProtocolMessageProcessor(forwarder, protocolContext); + } + + +} \ No newline at end of file diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/cmd/YunKuaiChongV160RemoteParallelStartDLCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/cmd/YunKuaiChongV160RemoteParallelStartDLCmd.java new file mode 100644 index 0000000..4a2449a --- /dev/null +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/cmd/YunKuaiChongV160RemoteParallelStartDLCmd.java @@ -0,0 +1,80 @@ +/** + * 抖音关注:程序员三丙 + * 知识星球:https://t.zsxq.com/j9b21 + */ +package sanbing.jcpp.protocol.yunkuaichong.v160.cmd; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import sanbing.jcpp.infrastructure.util.codec.BCDUtil; +import sanbing.jcpp.proto.gen.ProtocolProto; +import sanbing.jcpp.protocol.ProtocolContext; +import sanbing.jcpp.protocol.listener.tcp.TcpSession; +import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe; +import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage; +import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_START_CHARGING; + +/** + * 云快充1.6.0 运营平台远程控制并充启机 + * + * @author baigod + */ +@Slf4j +@YunKuaiChongCmd(0xA4) +public class YunKuaiChongV160RemoteParallelStartDLCmd extends YunKuaiChongDownlinkCmdExe { + + static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); + + @Override + public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) { + log.info("{} 云快充1.6.0运营平台远程控制并充启机", tcpSession); + + if (!yunKuaiChongDwonlinkMessage.getMsg().hasRemoteStartChargingRequest()) { + return; + } + + ProtocolProto.RemoteStartChargingRequest remoteStartChargingRequest = yunKuaiChongDwonlinkMessage.getMsg().getRemoteStartChargingRequest(); + String pileCode = remoteStartChargingRequest.getPileCode(); + String gunCode = remoteStartChargingRequest.getGunCode(); + String tradeNo = remoteStartChargingRequest.getTradeNo(); + int limitYuan = remoteStartChargingRequest.getLimitYuan(); + + byte[] cardNo = encodeCardNo(tradeNo); + + ByteBuf msgBody = Unpooled.buffer(44); + // 交易流水号 + msgBody.writeBytes(encodeTradeNo(tradeNo)); + // 桩编码 + msgBody.writeBytes(encodePileCode(pileCode)); + // 枪号 + msgBody.writeBytes(encodeGunCode(gunCode)); + // 逻辑卡号 BCD码 + msgBody.writeBytes(cardNo); + // 物理卡号 + msgBody.writeBytes(cardNo); + // 账户余额 + msgBody.writeIntLE(limitYuan); + // 并充序号 + msgBody.writeBytes(BCDUtil.toBytes(LocalDateTime.now().format(dateTimeFormatter))); + + encodeAndWriteFlush(REMOTE_START_CHARGING, + msgBody, + tcpSession); + } + + /** + * 用交易流水号做卡号 + */ + private static byte[] encodeCardNo(String tradeNo) { + tradeNo = StringUtils.right(tradeNo, 16); + tradeNo = StringUtils.leftPad(tradeNo, 16, '0'); + return BCDUtil.toBytes(tradeNo); + } +} \ No newline at end of file diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/cmd/YunKuaiChongV160RemoteParallelStartResultULCmd.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/cmd/YunKuaiChongV160RemoteParallelStartResultULCmd.java new file mode 100644 index 0000000..cc994c2 --- /dev/null +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/v160/cmd/YunKuaiChongV160RemoteParallelStartResultULCmd.java @@ -0,0 +1,104 @@ +/** + * 抖音关注:程序员三丙 + * 知识星球:https://t.zsxq.com/j9b21 + */ +package sanbing.jcpp.protocol.yunkuaichong.v160.cmd; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import lombok.extern.slf4j.Slf4j; +import sanbing.jcpp.infrastructure.util.codec.BCDUtil; +import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil; +import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil; +import sanbing.jcpp.proto.gen.ProtocolProto.RemoteStartChargingResponse; +import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage; +import sanbing.jcpp.protocol.ProtocolContext; +import sanbing.jcpp.protocol.listener.tcp.TcpSession; +import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkCmdExe; +import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage; +import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; + +/** + * 云快充1.6.0 远程并充启机命令回复 + * + * @author baigod + */ +@Slf4j +@YunKuaiChongCmd(0xA3) +public class YunKuaiChongV160RemoteParallelStartResultULCmd extends YunKuaiChongUplinkCmdExe { + + @Override + public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { + log.info("{} 云快充1.6.远程并充启机命令回复", tcpSession); + ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + + // 从Tracer总获取当前时间 + long ts = TracerContextUtil.getCurrentTracer().getTracerTs(); + + ObjectNode additionalInfo = JacksonUtil.newObjectNode(); + + // 1.交易流水号 + byte[] tradeNoBytes = new byte[16]; + byteBuf.readBytes(tradeNoBytes); + String tradeNo = decodeTradeNo(tradeNoBytes); + + // 2.桩编号 + byte[] pileCodeBytes = new byte[7]; + byteBuf.readBytes(pileCodeBytes); + String pileCode = BCDUtil.toString(pileCodeBytes); + + // 3.抢号 + byte gunCodeByte = byteBuf.readByte(); + String gunCode = BCDUtil.toString(gunCodeByte); + + // 4.命令执行结果 0x00失败 0x01成功 + boolean isSuccess = (byteBuf.readByte() == 0x01); + + // 5.失败原因 0无 1设备编码不匹配 2枪已在充电 3设备故障 4设备离线 5未插枪 + byte failReasonByte = byteBuf.readByte(); + String failReason = mapFailCode(failReasonByte); + + // 6.主辅枪标记 0x00 主枪 0x01辅枪 + byte gunFlagByte = byteBuf.readByte(); + String gunFlag = BCDUtil.toString(gunFlagByte); + additionalInfo.put("主辅枪标记", gunFlag); + + // 7.并充序号,0xA4下发的并充序号 + byte[] parallelSeqNoBytes = new byte[6]; + byteBuf.readBytes(parallelSeqNoBytes); + String parallelSeqNo = BCDUtil.toString(parallelSeqNoBytes); + additionalInfo.put("并充序号", parallelSeqNo); + + RemoteStartChargingResponse remoteStartChargingResponse = RemoteStartChargingResponse.newBuilder() + .setTs(ts) + .setPileCode(pileCode) + .setGunCode(gunCode) + .setTradeNo(tradeNo) + .setSuccess(isSuccess) + .setFailReason(failReason) + .setAdditionalInfo(additionalInfo.toString()) + .build(); + + // 转发到后端 + UplinkQueueMessage uplinkQueueMessage = uplinkMessageBuilder(pileCode, tcpSession, yunKuaiChongUplinkMessage) + .setRemoteStartChargingResponse(remoteStartChargingResponse) + .build(); + + tcpSession.getForwarder().sendMessage(uplinkQueueMessage); + } + + public static String mapFailCode(byte failCode) { + return switch (failCode) { + case 0x00 -> "无"; + case 0x01 -> "设备编号不匹配"; + case 0x02 -> "枪已在充电"; + case 0x03 -> "设备故障"; + case 0x04 -> "设备离线"; + case 0x05 -> "未插枪"; + case 0x33 -> "充电失败"; // 充电失败或其他相关信息 + case 0x34 -> "待启充"; // 示例,处理收到充电命令 + default -> "未知错误代码"; + }; + } +} \ No newline at end of file