From d326a419632a90014e12340a3278def98d1bfd49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E4=B8=99?= <10604541+sanbing-os@user.noreply.gitee.com> Date: Mon, 24 Mar 2025 02:58:11 +0000 Subject: [PATCH] =?UTF-8?q?!6=20=E4=BC=98=E5=8C=96=E4=BA=91=E5=BF=AB?= =?UTF-8?q?=E5=85=85ByteBuf=20*=20=E4=BC=98=E5=8C=96=E4=BA=91=E5=BF=AB?= =?UTF-8?q?=E5=85=85ByteBuf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jcpp/app/service/DownlinkCallService.java | 40 ++++- .../impl/DefaultPileProtocolService.java | 34 ++-- .../service/impl/GrpcDownlinkCallService.java | 5 +- .../service/impl/RestDownlinkCallService.java | 5 +- .../YunKuaiChongProtocolMessageProcessor.java | 159 ++++++++---------- .../YunKuaiChongV150BmsHandshakeULCmd.java | 2 +- .../cmd/YunKuaiChongV150HeartbeatULCmd.java | 2 +- .../v150/cmd/YunKuaiChongV150LoginULCmd.java | 2 +- ...unKuaiChongV150QueryPricingModelULCmd.java | 2 +- .../YunKuaiChongV150RealTimeDataULCmd.java | 2 +- ...unKuaiChongV150RemoteStartResultULCmd.java | 2 +- ...YunKuaiChongV150RemoteStopResultULCmd.java | 2 +- ...nKuaiChongV150SetPricingModelAckULCmd.java | 2 +- ...unKuaiChongV150TransactionRecordULCmd.java | 2 +- ...nKuaiChongV150VerifyPricingModelULCmd.java | 2 +- ...ongV160RemoteParallelStartResultULCmd.java | 2 +- 16 files changed, 146 insertions(+), 119 deletions(-) diff --git a/jcpp-app/src/main/java/sanbing/jcpp/app/service/DownlinkCallService.java b/jcpp-app/src/main/java/sanbing/jcpp/app/service/DownlinkCallService.java index 8592ac9..692dd70 100644 --- a/jcpp-app/src/main/java/sanbing/jcpp/app/service/DownlinkCallService.java +++ b/jcpp-app/src/main/java/sanbing/jcpp/app/service/DownlinkCallService.java @@ -15,6 +15,8 @@ import sanbing.jcpp.infrastructure.cache.CacheValueWrapper; import sanbing.jcpp.infrastructure.cache.TransactionalCache; import sanbing.jcpp.infrastructure.queue.discovery.ServiceInfoProvider; import sanbing.jcpp.proto.gen.ProtocolProto.DownlinkRequestMessage; +import sanbing.jcpp.proto.gen.ProtocolProto.LoginRequest; +import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage; import sanbing.jcpp.protocol.adapter.DownlinkController; import java.util.UUID; @@ -55,22 +57,50 @@ public abstract class DownlinkCallService { if (downlinkMessageBuilder.getSessionIdLSB() == 0) { downlinkMessageBuilder.setSessionIdLSB(protocolSessionId.getLeastSignificantBits()); } - if(downlinkMessageBuilder.getProtocolName() == null){ + if (downlinkMessageBuilder.getProtocolName() == null) { downlinkMessageBuilder.setProtocolName(pileSession.getProtocolName()); } + String nodeId = pileSession.getNodeId(); + String nodeIp = pileSession.getNodeIp(); + int nodeRestPort = pileSession.getNodeRestPort(); + int nodeGrpcPort = pileSession.getNodeGrpcPort(); + + sendDownlinkMessage(downlinkMessageBuilder, nodeId, nodeIp, nodeRestPort, nodeGrpcPort); + } + + public void sendDownlinkMessage(DownlinkRequestMessage.Builder downlinkMessageBuilder, UplinkQueueMessage uplinkQueueMessage, LoginRequest loginRequest) { + + if (downlinkMessageBuilder.getSessionIdMSB() == 0) { + downlinkMessageBuilder.setSessionIdMSB(uplinkQueueMessage.getSessionIdMSB()); + } + if (downlinkMessageBuilder.getSessionIdLSB() == 0) { + downlinkMessageBuilder.setSessionIdLSB(uplinkQueueMessage.getSessionIdLSB()); + } + if (downlinkMessageBuilder.getProtocolName() == null) { + downlinkMessageBuilder.setProtocolName(uplinkQueueMessage.getProtocolName()); + } + + String nodeId = loginRequest.getNodeId(); + String nodeIp = loginRequest.getNodeHostAddress(); + int nodeRestPort = loginRequest.getNodeRestPort(); + int nodeGrpcPort = loginRequest.getNodeGrpcPort(); + + sendDownlinkMessage(downlinkMessageBuilder, nodeId, nodeIp, nodeRestPort, nodeGrpcPort); + } + + private void sendDownlinkMessage(DownlinkRequestMessage.Builder downlinkMessageBuilder, String nodeId, String nodeIp, int nodeRestPort, int nodeGrpcPort) { if (serviceInfoProvider.isMonolith() && - ("caffeine".equalsIgnoreCase(cacheType) || serviceInfoProvider.getServiceId().equalsIgnoreCase(pileSession.getNodeId()))) { + ("caffeine".equalsIgnoreCase(cacheType) || serviceInfoProvider.getServiceId().equalsIgnoreCase(nodeId))) { downlinkController.onDownlink(downlinkMessageBuilder.build()) .setResultHandler(result -> log.debug("下行消息发送完成")); } else { - _sendDownlinkMessage(downlinkMessageBuilder.build(), pileSession); + _sendDownlinkMessage(downlinkMessageBuilder.build(), nodeIp, nodeRestPort, nodeGrpcPort); } } - - protected abstract void _sendDownlinkMessage(DownlinkRequestMessage downlinkMessage, PileSession pileSession); + protected abstract void _sendDownlinkMessage(DownlinkRequestMessage downlinkMessage, String nodeIp, int nodeRestPort, int nodeGrpcPort); } \ No newline at end of file diff --git a/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/DefaultPileProtocolService.java b/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/DefaultPileProtocolService.java index 5889b77..91f5ee0 100644 --- a/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/DefaultPileProtocolService.java +++ b/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/DefaultPileProtocolService.java @@ -64,27 +64,36 @@ public class DefaultPileProtocolService implements PileProtocolService { DownlinkRequestMessage.Builder downlinkMessageBuilder = createDownlinkMessageBuilder(uplinkQueueMessage, loginRequest.getPileCode()); downlinkMessageBuilder.setDownlinkCmd(DownlinkCmdEnum.LOGIN_ACK.name()); + if (pile != null) { - // 保存到缓存 - cacheSession(uplinkQueueMessage, pile, + + PileSession pileSession = createSession(uplinkQueueMessage, pile, loginRequest.getRemoteAddress(), loginRequest.getNodeId(), loginRequest.getNodeHostAddress(), loginRequest.getNodeRestPort(), loginRequest.getNodeGrpcPort()); + // 保存到缓存 + pileSessionCache.put(new PileSessionCacheKey(pile.getPileCode()), pileSession); + downlinkMessageBuilder.setLoginResponse(LoginResponse.newBuilder() .setSuccess(true) .setPileCode(loginRequest.getPileCode()) .build()); + + downlinkCallService.sendDownlinkMessage(downlinkMessageBuilder, pileCode); } else { + downlinkMessageBuilder.setLoginResponse(LoginResponse.newBuilder() .setSuccess(false) .setPileCode(loginRequest.getPileCode()) .build()); + + + downlinkCallService.sendDownlinkMessage(downlinkMessageBuilder, uplinkQueueMessage, loginRequest); } - downlinkCallService.sendDownlinkMessage(downlinkMessageBuilder, pileCode); callback.onSuccess(); } @@ -99,7 +108,7 @@ public class DefaultPileProtocolService implements PileProtocolService { if (pile != null) { // 重新保存到缓存 - cacheSession(uplinkQueueMessage, pile, + createSession(uplinkQueueMessage, pile, heartBeatRequest.getRemoteAddress(), heartBeatRequest.getNodeId(), heartBeatRequest.getNodeHostAddress(), @@ -110,13 +119,13 @@ public class DefaultPileProtocolService implements PileProtocolService { callback.onSuccess(); } - private void cacheSession(UplinkQueueMessage uplinkQueueMessage, - Pile pile, - String remoteAddress, - String nodeId, - String nodeIp, - int restPort, - int grpcPort) { + private PileSession createSession(UplinkQueueMessage uplinkQueueMessage, + Pile pile, + String remoteAddress, + String nodeId, + String nodeIp, + int restPort, + int grpcPort) { PileSession pileSession = new PileSession(pile.getId(), pile.getPileCode(), uplinkQueueMessage.getProtocolName()); pileSession.setProtocolSessionId(new UUID(uplinkQueueMessage.getSessionIdMSB(), uplinkQueueMessage.getSessionIdLSB())); pileSession.setRemoteAddress(remoteAddress); @@ -124,7 +133,8 @@ public class DefaultPileProtocolService implements PileProtocolService { pileSession.setNodeIp(nodeIp); pileSession.setNodeRestPort(restPort); pileSession.setNodeGrpcPort(grpcPort); - pileSessionCache.put(new PileSessionCacheKey(pile.getPileCode()), pileSession); + + return pileSession; } @Override diff --git a/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/GrpcDownlinkCallService.java b/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/GrpcDownlinkCallService.java index ed2babf..7f3ac99 100644 --- a/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/GrpcDownlinkCallService.java +++ b/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/GrpcDownlinkCallService.java @@ -11,7 +11,6 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.stereotype.Service; -import sanbing.jcpp.app.data.PileSession; import sanbing.jcpp.app.service.DownlinkCallService; import sanbing.jcpp.app.service.grpc.DownlinkGrpcClient; import sanbing.jcpp.proto.gen.ProtocolProto.DownlinkRequestMessage; @@ -31,7 +30,7 @@ public class GrpcDownlinkCallService extends DownlinkCallService { DownlinkGrpcClient downlinkGrpcClient; @Override - protected void _sendDownlinkMessage(DownlinkRequestMessage downlinkMessage, PileSession pileSession) { + protected void _sendDownlinkMessage(DownlinkRequestMessage downlinkMessage, String nodeIp, int nodeRestPort, int nodeGrpcPort) { try { RequestMsg requestMsg = RequestMsg.newBuilder() @@ -40,7 +39,7 @@ public class GrpcDownlinkCallService extends DownlinkCallService { .setDownlinkRequestMessage(downlinkMessage) .build(); - downlinkGrpcClient.sendDownlinkRequest(HostAndPort.fromParts(pileSession.getNodeIp(), pileSession.getNodeGrpcPort()), + downlinkGrpcClient.sendDownlinkRequest(HostAndPort.fromParts(nodeIp, nodeGrpcPort), requestMsg); } catch (Exception e) { diff --git a/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/RestDownlinkCallService.java b/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/RestDownlinkCallService.java index d806225..babe4db 100644 --- a/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/RestDownlinkCallService.java +++ b/jcpp-app/src/main/java/sanbing/jcpp/app/service/impl/RestDownlinkCallService.java @@ -16,7 +16,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; -import sanbing.jcpp.app.data.PileSession; import sanbing.jcpp.app.service.DownlinkCallService; import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil; import sanbing.jcpp.proto.gen.ProtocolProto.DownlinkRequestMessage; @@ -35,10 +34,10 @@ public class RestDownlinkCallService extends DownlinkCallService { RestTemplate downlinkRestTemplate; @Override - protected void _sendDownlinkMessage(DownlinkRequestMessage downlinkMessage, PileSession pileSession) { + protected void _sendDownlinkMessage(DownlinkRequestMessage downlinkMessage, String nodeIp, int nodeRestPort, int nodeGrpcPort) { try { - invokeDownlinkRestApi(downlinkMessage, pileSession.getNodeIp(), pileSession.getNodeRestPort()); + invokeDownlinkRestApi(downlinkMessage, nodeIp, nodeGrpcPort); } catch (RestClientException e) { log.error("下行消息发送异常", e); diff --git a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java index 6c92654..830ea6c 100644 --- a/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java +++ b/jcpp-protocol-yunkuaichong/src/main/java/sanbing/jcpp/protocol/yunkuaichong/YunKuaiChongProtocolMessageProcessor.java @@ -23,6 +23,7 @@ import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd; import sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum; import java.lang.reflect.InvocationTargetException; +import java.util.Arrays; import java.util.Map; import java.util.Set; import java.util.UUID; @@ -70,93 +71,81 @@ public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcess @Override public void uplinkHandle(ListenerToHandlerMsg listenerToHandlerMsg) { - UUID msgId = listenerToHandlerMsg.id(); - byte[] msg = listenerToHandlerMsg.msg(); - TcpSession session = (TcpSession) listenerToHandlerMsg.session(); + final UUID msgId = listenerToHandlerMsg.id(); + final byte[] msg = listenerToHandlerMsg.msg(); + final TcpSession session = (TcpSession) listenerToHandlerMsg.session(); - ByteBuf in = Unpooled.copiedBuffer(msg); + // ================== 前置快速失败检查 ================== + if (msg.length < 8 || msg[0] != 0x68) { + return; + } - // 判断是否可以读取报头,8个字节 - if (in.readableBytes() < 8) { + ByteBuf in = Unpooled.wrappedBuffer(msg); + try { + // ================== 协议头解析 ================== + final int dataLength = in.getUnsignedByte(1); + final int bodyLength = dataLength - 4; + final int checksumPos = 6 + bodyLength; + + // ================== 组合边界检查 ================== + if (dataLength < 4 || in.readableBytes() < checksumPos + 2) { + return; + } + + // ================== 字段快速解析 ================== + final int seqNo = in.getUnsignedShort(2); + final int encryptFlag = in.getUnsignedByte(4); + final int frameType = in.getUnsignedByte(5); + + // ================== 校验和双模式处理 ================== + final int checkSumLE = in.getUnsignedShortLE(checksumPos); + final int checkSumBE = in.getUnsignedShort(checksumPos); + + // ================== 校验数据智能拷贝 ================== + final byte[] checkData = Arrays.copyOfRange(msg, 2, 2 + dataLength); + + // ================== 短路校验流程 ================== + JCPPPair checkResult = checkCrcSum(checkData, checkSumLE); + if (!checkResult.getFirst()) { + checkResult = checkCrcSum(checkData, checkSumBE); + if (log.isDebugEnabled()) { // 日志惰性计算 + log.debug("{} 云快充校验域一次校验失败 CMD:{} 校验和:0x{} 期望校验和:0x{}", + session, frameType, Integer.toHexString(checkSumBE), Integer.toHexString(checkResult.getSecond())); + } + } + + // ================== 最终校验失败处理 ================== + if (!checkResult.getFirst()) { + log.info("{} 云快充校验域二次校验失败 CMD:{} 校验和:0x{} 期望校验和:0x{}", + session, frameType, Integer.toHexString(checkSumBE), Integer.toHexString(checkResult.getSecond())); + return; + } + + // ================== 消息对象智能构建 ================== + ByteBuf slicedBuf = in.slice(6, bodyLength); + + if (slicedBuf.readableBytes() != bodyLength) { + log.error("协议体长度异常: expected={}, actual={}", + bodyLength, slicedBuf.readableBytes()); + return; + } + + byte[] msgBody = new byte[bodyLength]; + slicedBuf.readBytes(msgBody); + + exeCmd(new YunKuaiChongUplinkMessage(msgId) + .setHead(0x68) + .setDataLength(dataLength) + .setSequenceNumber(seqNo) + .setEncryptionFlag(encryptFlag) + .setCmd(frameType) + .setMsgBody(msgBody) // 使用正确长度的数组 + .setCheckSum(checkResult.getSecond()) + .setRawFrame(msg), + session); + } finally { in.release(); - return; } - - // 起始标识, 固定为0x68 - int startFlag = in.readUnsignedByte(); - if (startFlag != 0x68) { - in.release(); - return; - } - - // 数据长度 = 序列号域+加密标志+帧类型标志+消息体 - int dataLength = in.readUnsignedByte(); - - // 报文的流水号 - int seqNo = in.readUnsignedShortLE(); - - // 加密标志 - int encryptFlag = in.readUnsignedByte(); - - // 帧类型标志 - int frameType = in.readUnsignedByte(); - - // 判断是否可以读取消息体,N-4个字节 - int msgBodyLength = dataLength - 4; - if (in.readableBytes() < msgBodyLength) { - in.release(); - return; - } - - // 消息体 - byte[] msgBody = new byte[msgBodyLength]; - in.readBytes(msgBody); - - // 判断是否可以读取校验和, 2个字节 - if (in.readableBytes() < 2) { - in.release(); - return; - } - - // 读取两字节校验域 - byte[] byCheckSum = new byte[2]; - in.readBytes(byCheckSum); - - ByteBuf csTemp = Unpooled.buffer(); - csTemp.writeBytes(byCheckSum); - - // 校验校验和,先用小端获取做短路校验 - int checkSum = csTemp.readUnsignedShortLE(); - - byte[] checkData = new byte[dataLength]; - - System.arraycopy(msg, 2, checkData, 0, dataLength); - - JCPPPair checkResult = checkCrcSum(checkData, checkSum); - - if (Boolean.FALSE.equals(checkResult.getFirst())) { - csTemp.writeBytes(byCheckSum); - checkSum = csTemp.readUnsignedShort(); - checkResult = checkCrcSum(checkData, checkSum); - log.debug("云快充检验和 第二次检查: checkResult:{}, checkSum:{}", checkResult, checkSum); - } - - if (Boolean.FALSE.equals(checkResult.getFirst())) { - log.info("云快充检验和不一致两次不通过 不处理! CMD:{},校验域:{},正确校验和:{}", frameType, checkSum, checkResult.getSecond()); - return; - } - - YunKuaiChongUplinkMessage message = new YunKuaiChongUplinkMessage(msgId); - message.setHead(startFlag); - message.setDataLength(dataLength); - message.setSequenceNumber(seqNo); - message.setEncryptionFlag(encryptFlag); - message.setCmd(frameType); - message.setMsgBody(msgBody); - message.setCheckSum(checkSum); - message.setRawFrame(msg); - - exeCmd(message, session); } @Override @@ -188,7 +177,7 @@ public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcess if (uplinkCmdExe == null) { - log.info("[{}] 云快充协议接收到未知的上行指令 {}", session, message.getCmd()); + log.info("{} 云快充协议接收到未知的上行指令 {}", session, message.getCmd()); return; } @@ -201,7 +190,7 @@ public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcess if (downlinkCmdExe == null) { - log.info("[{}] 云快充协议接收到未知的下行指令 {}", session, message.getCmd()); + log.info("{} 云快充协议接收到未知的下行指令 {}", session, message.getCmd()); return; } 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/v150/cmd/YunKuaiChongV150BmsHandshakeULCmd.java index 2f36cda..1693d0f 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/v150/cmd/YunKuaiChongV150BmsHandshakeULCmd.java @@ -32,7 +32,7 @@ public class YunKuaiChongV150BmsHandshakeULCmd extends YunKuaiChongUplinkCmdExe @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.debug("{} 云快充1.5.0充电握手", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); ObjectNode additionalInfo = JacksonUtil.newObjectNode(); 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/v150/cmd/YunKuaiChongV150HeartbeatULCmd.java index 4ba60fd..a259f35 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/v150/cmd/YunKuaiChongV150HeartbeatULCmd.java @@ -33,7 +33,7 @@ public class YunKuaiChongV150HeartbeatULCmd extends YunKuaiChongUplinkCmdExe { @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.debug("{} 云快充1.5.0充电桩心跳包", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); ObjectNode additionalInfo = JacksonUtil.newObjectNode(); 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/v150/cmd/YunKuaiChongV150LoginULCmd.java index 830b935..1259d7d 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/v150/cmd/YunKuaiChongV150LoginULCmd.java @@ -32,7 +32,7 @@ public class YunKuaiChongV150LoginULCmd extends YunKuaiChongUplinkCmdExe { @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.debug("{} 云快充1.5.0登录认证请求", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); ObjectNode additionalInfo = JacksonUtil.newObjectNode(); 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/v150/cmd/YunKuaiChongV150QueryPricingModelULCmd.java index 6fcb7b9..54c78a2 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/v150/cmd/YunKuaiChongV150QueryPricingModelULCmd.java @@ -31,7 +31,7 @@ public class YunKuaiChongV150QueryPricingModelULCmd extends YunKuaiChongUplinkCm @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0充电桩计费模型请求", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); ObjectNode additionalInfo = JacksonUtil.newObjectNode(); 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/v150/cmd/YunKuaiChongV150RealTimeDataULCmd.java index 3ceafef..b716243 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/v150/cmd/YunKuaiChongV150RealTimeDataULCmd.java @@ -57,7 +57,7 @@ public class YunKuaiChongV150RealTimeDataULCmd extends YunKuaiChongUplinkCmdExe @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0上传实时监测数据", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); // 从Tracer总获取当前时间 long ts = TracerContextUtil.getCurrentTracer().getTracerTs(); 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/v150/cmd/YunKuaiChongV150RemoteStartResultULCmd.java index 07b9947..d20bc33 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/v150/cmd/YunKuaiChongV150RemoteStartResultULCmd.java @@ -33,7 +33,7 @@ public class YunKuaiChongV150RemoteStartResultULCmd extends YunKuaiChongUplinkCm @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0远程启动充电命令回复", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); // 从Tracer总获取当前时间 long ts = TracerContextUtil.getCurrentTracer().getTracerTs(); 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/v150/cmd/YunKuaiChongV150RemoteStopResultULCmd.java index 1b5acde..e7a98ab 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/v150/cmd/YunKuaiChongV150RemoteStopResultULCmd.java @@ -32,7 +32,7 @@ public class YunKuaiChongV150RemoteStopResultULCmd extends YunKuaiChongUplinkCmd @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0远程停机命令回复", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); // 从Tracer总获取当前时间 long ts = TracerContextUtil.getCurrentTracer().getTracerTs(); 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/v150/cmd/YunKuaiChongV150SetPricingModelAckULCmd.java index bc5f7ab..8dc19f6 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/v150/cmd/YunKuaiChongV150SetPricingModelAckULCmd.java @@ -31,7 +31,7 @@ public class YunKuaiChongV150SetPricingModelAckULCmd extends YunKuaiChongUplinkC @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0计费模型应答", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); // 1.桩编号 byte[] pileCodeBytes = new byte[7]; 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/v150/cmd/YunKuaiChongV150TransactionRecordULCmd.java index 41a3d45..a2b6754 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/v150/cmd/YunKuaiChongV150TransactionRecordULCmd.java @@ -37,7 +37,7 @@ public class YunKuaiChongV150TransactionRecordULCmd extends YunKuaiChongUplinkCm @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0交易记录", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); ObjectNode additionalInfo = JacksonUtil.newObjectNode(); 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/v150/cmd/YunKuaiChongV150VerifyPricingModelULCmd.java index 2bdb960..489a444 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/v150/cmd/YunKuaiChongV150VerifyPricingModelULCmd.java @@ -34,7 +34,7 @@ public class YunKuaiChongV150VerifyPricingModelULCmd extends YunKuaiChongUplinkC @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.5.0计费模型验证请求", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); ObjectNode additionalInfo = JacksonUtil.newObjectNode(); 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 index 520e82f..0c4f93a 100644 --- 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 @@ -33,7 +33,7 @@ public class YunKuaiChongV160RemoteParallelStartResultULCmd extends YunKuaiChong @Override public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) { log.info("{} 云快充1.6.远程并充启机命令回复", tcpSession); - ByteBuf byteBuf = Unpooled.copiedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); + ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody()); // 从Tracer总获取当前时间 long ts = TracerContextUtil.getCurrentTracer().getTracerTs();