From d60d50ed8a5910f0d099e0d78000e2a520c8416a Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Thu, 29 Aug 2024 15:24:29 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E7=94=B5=E5=8D=95=E8=BD=A6=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jsowell/common/YouDianUtils.java | 40 +++++++++++++------ .../com/jsowell/common/util/BytesUtil.java | 29 -------------- .../ElectricBicyclesServerHandler.java | 2 +- .../pile/domain/ebike/AbsEBikeMessage.java | 3 +- 4 files changed, 30 insertions(+), 44 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java b/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java index ef2a7a75c..691409d04 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/YouDianUtils.java @@ -10,21 +10,35 @@ import java.util.Arrays; */ @Slf4j public class YouDianUtils { - public static void main(String[] args) { - String s = "44 4e 59 0a 00 3b 37 ab 04 01 00 21 00 38 02"; - byte[] bytes = BytesUtil.hexStringToByteArray(s); - String s2 = BytesUtil.printHexBinary(bytes); - System.out.println(s2); - byte[] bytes2 = BytesUtil.hexStringToByteArray(s2); - System.out.println(bytes2); - boolean b = validateChecksum(bytes); - // - String s3 = "44 4e 59 0a 00 3b 37 ab 04 01 00 21 00"; - byte[] bytes3 = BytesUtil.hexStringToByteArray(s3); - int i = calculateCheckField(bytes3); - BytesUtil.intToBytesLittle(i); + /** + * 将byte数组转换为物理ID + * @param bytes 输入的byte数组 + * @return 物理ID对象,包含设备识别码和二维码下方的编号 + */ + public static int convertToPhysicalId(byte[] bytes) { + // 检查输入是否合法 + if (bytes == null || bytes.length != 4) { + throw new IllegalArgumentException("Input byte array must be of length 4."); + } + + // 小端模式转大端模式 + byte[] bigEndianBytes = new byte[4]; + bigEndianBytes[0] = bytes[3]; + bigEndianBytes[1] = bytes[2]; + bigEndianBytes[2] = bytes[1]; + bigEndianBytes[3] = bytes[0]; + + // 提取设备识别码 + byte deviceId = bigEndianBytes[0]; + + // 剩余的三个字节转换为十进制 + int deviceNumber = ((bigEndianBytes[1] & 0xFF) << 16) | + ((bigEndianBytes[2] & 0xFF) << 8) | + (bigEndianBytes[3] & 0xFF); + log.debug("设备识别码:{}, 桩编号:{}", deviceId, deviceNumber); + return deviceNumber; } /** diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java b/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java index c4007cd9d..099dc078e 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java @@ -236,35 +236,6 @@ public class BytesUtil { return new String(temp); } - /** - * 将byte数组转换为物理ID - * @param bytes 输入的byte数组 - * @return 物理ID对象,包含设备识别码和二维码下方的编号 - */ - public static int convertToPhysicalId(byte[] bytes) { - // 检查输入是否合法 - if (bytes == null || bytes.length != 4) { - throw new IllegalArgumentException("Input byte array must be of length 4."); - } - - // 小端模式转大端模式 - byte[] bigEndianBytes = new byte[4]; - bigEndianBytes[0] = bytes[3]; - bigEndianBytes[1] = bytes[2]; - bigEndianBytes[2] = bytes[1]; - bigEndianBytes[3] = bytes[0]; - - // 提取设备识别码 - byte deviceId = bigEndianBytes[0]; - - // 剩余的三个字节转换为十进制 - int deviceNumber = ((bigEndianBytes[1] & 0xFF) << 16) | - ((bigEndianBytes[2] & 0xFF) << 8) | - (bigEndianBytes[3] & 0xFF); - log.debug("设备识别码:{}, 桩编号:{}", deviceId, deviceNumber); - return deviceNumber; - } - /** * @函数功能: BCD码转为10进制串(阿拉伯数据) 小端模式 * @输入参数: BCD码 diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java index e4d613969..2cd48363c 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java @@ -64,7 +64,7 @@ public class ElectricBicyclesServerHandler extends ChannelInboundHandlerAdapter // 处理数据 byte[] response = eBikeService.process(msg, ctx); if (Objects.nonNull(response)) { - log.info("响应数据:{}", BytesUtil.binary(response, 16)); + log.info("[响应数据]:{}", BytesUtil.binary(response, 16)); // 响应客户端 ByteBuf buffer = ctx.alloc().buffer().writeBytes(response); // this.channelWrite(channel.id(), buffer); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java index 547290c4c..ee93a441b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/AbsEBikeMessage.java @@ -1,5 +1,6 @@ package com.jsowell.pile.domain.ebike; +import com.jsowell.common.YouDianUtils; import com.jsowell.common.util.BytesUtil; import com.jsowell.pile.domain.ebike.deviceupload.*; import lombok.Getter; @@ -73,7 +74,7 @@ public abstract class AbsEBikeMessage { // 读取物理ID byte[] physicalIdBytes = Arrays.copyOfRange(messageBytes, 5, 9); - int physicalId = BytesUtil.convertToPhysicalId(physicalIdBytes); + int physicalId = YouDianUtils.convertToPhysicalId(physicalIdBytes); // 读取消息ID byte[] messageIdBytes = Arrays.copyOfRange(messageBytes, 9, 11);