From f56262ee1cb3c554878984e3536ab55a298bdedf Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 11 三月 2025 09:02:16 +0800 Subject: [PATCH] 修改809对接bug --- ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/util/jtt809/encoder/Jtt809Encoder.java | 126 +++++++++++++++++++++-------------------- 1 files changed, 64 insertions(+), 62 deletions(-) diff --git a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/util/jtt809/encoder/Jtt809Encoder.java b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/util/jtt809/encoder/Jtt809Encoder.java index 43c6349..7c8ad6b 100644 --- a/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/util/jtt809/encoder/Jtt809Encoder.java +++ b/ruoyi-service/ruoyi-dataInterchange/src/main/java/com/ruoyi/dataInterchange/util/jtt809/encoder/Jtt809Encoder.java @@ -1,5 +1,6 @@ package com.ruoyi.dataInterchange.util.jtt809.encoder; +import com.ruoyi.dataInterchange.util.jtt809.common.ByteArrayUtil; import com.ruoyi.dataInterchange.util.jtt809.common.CRC16CCITT; import com.ruoyi.dataInterchange.util.jtt809.common.Jtt809Constant; import com.ruoyi.dataInterchange.util.jtt809.common.Jtt809Util; @@ -8,71 +9,72 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; - -import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; -import java.time.ZoneOffset; +import lombok.extern.slf4j.Slf4j; /** * @author tucke */ +@Slf4j public class Jtt809Encoder extends MessageToByteEncoder<OuterPacket> { - - - @Override - protected void encode(ChannelHandlerContext ctx, OuterPacket packet, ByteBuf out) throws Exception { - if (packet == null) { - return; - } - int gnsscenterId; - if (ctx.channel().hasAttr(Jtt809Constant.NettyAttribute.GNSS_CENTER_ID)) { - gnsscenterId = Integer.parseInt(ctx.channel().attr(Jtt809Constant.NettyAttribute.GNSS_CENTER_ID).get()); - } else { - gnsscenterId = packet.getGnsscenterId(); - } - byte[] body = packet.getBody(); - if (body == null) { - body = new byte[0]; - } - // 32 = 头标识[1] + 数据头[30 = 长度[4] + 序列号[4] + 数据类型[2] + 接入码[4] + 版本号[3] + 加密标识[1] + 密钥[4]] + 时间[8] + 尾标识[1] - int len = body.length + 32; - out.markReaderIndex(); - // 数据长度 - out.writeInt(len); - // 序列号 - out.writeInt(GnssCenterService.getInstance().serialNo(gnsscenterId)); - // 业务数据类型 - out.writeShort(packet.getId()); - // 下级平台接入码 - out.writeInt(gnsscenterId); - // 版本号 - out.writeByte(1); - out.writeByte(0); - out.writeByte(0); - // 报文加密标识位 - out.writeByte(0); - // 数据加密的密钥 - out.writeInt(0); - // 数据体 - out.writeBytes(body); - // 校验码 - byte[] crcBytes = new byte[out.readableBytes()]; - out.readBytes(crcBytes); - out.writeShort(CRC16CCITT.crc16(crcBytes)); - - // 转义 - out.resetReaderIndex(); - byte[] escapeBytes = new byte[out.readableBytes()]; - out.readBytes(escapeBytes); - - // 重置下标 - out.setIndex(0, 0); - // 包头标识 - out.writeByte(Jtt809Constant.PACKET_HEAD_FLAG); - // 数据内容 - out.writeBytes(Jtt809Util.escape(escapeBytes)); - // 包尾标识 - out.writeByte(Jtt809Constant.PACKET_END_FLAG); - } - + + + @Override + protected void encode(ChannelHandlerContext ctx, OuterPacket packet, ByteBuf out) throws Exception { + if (packet == null) { + return; + } + int gnsscenterId; + if (ctx.channel().hasAttr(Jtt809Constant.NettyAttribute.GNSS_CENTER_ID)) { + gnsscenterId = Integer.parseInt(ctx.channel().attr(Jtt809Constant.NettyAttribute.GNSS_CENTER_ID).get()); + } else { + gnsscenterId = packet.getGnsscenterId(); + } + byte[] body = packet.getBody(); + if (body == null) { + body = new byte[0]; + } + // 26 = 头标识[1] + 数据头[22 = 长度[4] + 序列号[4] + 数据类型[2] + 接入码[4] + 版本号[3] + 加密标识[1] + 密钥[4]] + 校验码[2] + 尾标识[1] + int len = body.length + 26; + out.markReaderIndex(); + // 数据长度 + out.writeInt(len); + // 序列号 + out.writeInt(GnssCenterService.getInstance().serialNo(gnsscenterId)); + // 业务数据类型 + out.writeShort(packet.getId()); + // 下级平台接入码 + out.writeInt(gnsscenterId); + // 版本号 + out.writeByte(1); + out.writeByte(0); + out.writeByte(0); + // 报文加密标识位 + out.writeByte(0); + // 数据加密的密钥 + out.writeInt(0); + // 数据体 + out.writeBytes(body); + // 校验码 + byte[] crcBytes = new byte[out.readableBytes()]; + out.readBytes(crcBytes); + out.writeShort(CRC16CCITT.crc16(crcBytes)); + + // 转义 + out.resetReaderIndex(); + byte[] escapeBytes = new byte[out.readableBytes()]; + out.readBytes(escapeBytes); + + // 重置下标 + out.setIndex(0, 0); + // 包头标识 + out.writeByte(Jtt809Constant.PACKET_HEAD_FLAG); + // 数据内容 + out.writeBytes(Jtt809Util.escape(escapeBytes)); + // 包尾标识 + out.writeByte(Jtt809Constant.PACKET_END_FLAG); + byte[] readableBytes = new byte[out.readableBytes()]; + out.readBytes(readableBytes); + log.info("下发数据包, packetLen : {}, packet : {}", readableBytes.length, ByteArrayUtil.bytes2HexStr(readableBytes)); + } + } -- Gitblit v1.7.1