From 4e69180aa8ac277d48fb7e9d3ad579248f80300d Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Wed, 28 Aug 2024 15:21:49 +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 --- .../electricbicycles/HeartbeatHandler.java | 12 +++++++ .../pile/domain/ebike/AbsEBikeMessage.java | 3 +- .../ebike/deviceupload/EBikeMessageCmd02.java | 5 +++ .../ebike/deviceupload/EBikeMessageCmd03.java | 8 +++++ .../ebike/deviceupload/EBikeMessageCmd04.java | 5 +++ .../ebike/deviceupload/EBikeMessageCmd06.java | 5 +++ .../ebike/deviceupload/EBikeMessageCmd20.java | 5 +++ .../ebike/deviceupload/EBikeMessageCmd21.java | 5 +++ .../ebike/deviceupload/EBikeMessageCmd22.java | 7 ++++ .../ebike/serversend/EBikeMessageCmd81.java | 5 +++ .../ebike/serversend/EBikeMessageCmd82.java | 5 +++ .../service/impl/EBikeSendCommandService.java | 34 +++++++++++++++++++ 12 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandService.java diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java index a77e5de1d..84757fe1b 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/electricbicycles/HeartbeatHandler.java @@ -3,6 +3,8 @@ package com.jsowell.netty.handler.electricbicycles; import com.alibaba.fastjson2.JSON; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ebike.EBikeDataProtocol; +import com.jsowell.common.util.BytesUtil; +import com.jsowell.common.util.bean.SerializationUtil; import com.jsowell.netty.factory.EBikeOperateFactory; import com.jsowell.pile.domain.ebike.AbsEBikeMessage; import com.jsowell.pile.domain.ebike.EBikeCommandEnum; @@ -37,6 +39,16 @@ public class HeartbeatHandler extends AbstractEBikeHandler { EBikeMessageCmd21 message = (EBikeMessageCmd21) AbsEBikeMessage.parseMessage(dataProtocol.getBytes()); // 保存时间 saveLastTimeAndCheckChannel(message.getPhysicalId() + "", ctx); + + try { + byte[] serialize = SerializationUtil.serialize(message); + log.info("心跳包序列化:{}", BytesUtil.binary(serialize, 16)); + EBikeMessageCmd21 deserialize = SerializationUtil.deserialize(EBikeMessageCmd21.class, serialize); + log.info("心跳包反序列化:{}", JSON.toJSONString(deserialize)); + } catch (Exception e) { + log.info("error", e); + } + EBikeMessageCmd21.DeviceHeartbeat deviceHeartbeat = message.getDeviceHeartbeat(); log.info("设备心跳包:{}", JSON.toJSONString(message)); return getResult(dataProtocol, Constants.zeroByteArray); 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 c5f9d992d..ef12e063b 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 @@ -52,7 +52,6 @@ public abstract class AbsEBikeMessage { } } - public static AbsEBikeMessage parseMessage(byte[] messageBytes) { if (messageBytes == null || messageBytes.length < 14 || messageBytes.length > 256) { throw new IllegalArgumentException("Invalid message bytes"); @@ -101,6 +100,8 @@ public abstract class AbsEBikeMessage { } } + public abstract byte[] getMessageBytes(); + public static void main(String[] args) { String s = "44 4e 59 00 0d 3b 37 ab 04 b9 00 22 54 33 cc 66 03 7b".replace(" ", ""); byte[] messageBytes = BytesUtil.hexStringToByteArray(s); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd02.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd02.java index 568854f6a..57e179b03 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd02.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd02.java @@ -26,6 +26,11 @@ public class EBikeMessageCmd02 extends AbsEBikeMessage { this.creditCardInfo = new CreditCardInfo(dataBytes); } + @Override + public byte[] getMessageBytes() { + return null; + } + public CreditCardInfo getCreditCardInfo() { return creditCardInfo; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd03.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd03.java index 7905ca43b..351f0d836 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd03.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd03.java @@ -6,6 +6,9 @@ import lombok.Data; import java.util.Arrays; +/** + * 结算消费信息上传(03指令) + */ public class EBikeMessageCmd03 extends AbsEBikeMessage { private SettlementInfo settlementInfo; @@ -20,6 +23,11 @@ public class EBikeMessageCmd03 extends AbsEBikeMessage { this.settlementInfo = new SettlementInfo(dataBytes); } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + public SettlementInfo getSettlementInfo() { return settlementInfo; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd04.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd04.java index 4fa758b82..df84e9235 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd04.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd04.java @@ -24,6 +24,11 @@ public class EBikeMessageCmd04 extends AbsEBikeMessage { this.confirmOrder = new ConfirmOrder(dataBytes); } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + public ConfirmOrder getSettlementInfo() { return confirmOrder; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java index 324f69405..aeecbb646 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd06.java @@ -26,6 +26,11 @@ public class EBikeMessageCmd06 extends AbsEBikeMessage { this.powerHeartbeat = new PowerHeartbeat(dataBytes); } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + public PowerHeartbeat getPowerHeartbeat() { return powerHeartbeat; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java index 9d6e4895d..5d1d671d8 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd20.java @@ -23,6 +23,11 @@ public class EBikeMessageCmd20 extends AbsEBikeMessage { this.deviceRegister = new DeviceRegister(dataBytes); } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + public DeviceRegister getDeviceRegister() { return deviceRegister; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java index c8d676d61..029ba14e7 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd21.java @@ -29,6 +29,11 @@ public class EBikeMessageCmd21 extends AbsEBikeMessage { this.deviceHeartbeat = new DeviceHeartbeat(dataBytes); } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + /** * 此为心跳包,间隔时间默认为3分钟,方便服务器管理SocketIP * 设备如2次收不到服务器应答,则进入离线状态 diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd22.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd22.java index 9a1789967..6e2c73b7f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd22.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/deviceupload/EBikeMessageCmd22.java @@ -1,5 +1,6 @@ package com.jsowell.pile.domain.ebike.deviceupload; +import com.jsowell.common.util.bean.SerializationUtil; import com.jsowell.pile.domain.ebike.AbsEBikeMessage; import lombok.Getter; import lombok.Setter; @@ -22,4 +23,10 @@ public class EBikeMessageCmd22 extends AbsEBikeMessage { } + @Override + public byte[] getMessageBytes() { + byte[] serialize = SerializationUtil.serialize(this); + return serialize; + } + } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd81.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd81.java index 9eb7e985e..ef04ece8f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd81.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd81.java @@ -18,4 +18,9 @@ public class EBikeMessageCmd81 extends AbsEBikeMessage { } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd82.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd82.java index a4cfb31bd..671f8a513 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd82.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/ebike/serversend/EBikeMessageCmd82.java @@ -24,6 +24,11 @@ public class EBikeMessageCmd82 extends AbsEBikeMessage { this.specificData = new SpecificData(dataBytes); } + @Override + public byte[] getMessageBytes() { + return new byte[0]; + } + public SpecificData getSpecificData() { return specificData; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandService.java new file mode 100644 index 000000000..d89f84da0 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/EBikeSendCommandService.java @@ -0,0 +1,34 @@ +package com.jsowell.pile.service.impl; + +import com.jsowell.common.enums.ykc.PileChannelEntity; +import com.jsowell.pile.domain.ebike.AbsEBikeMessage; +import io.netty.channel.ChannelHandlerContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 电单车发送指令service + */ +@Slf4j +@Service +public class EBikeSendCommandService { + + /** + * 公共方法发送指令 + * @param pileSn 装编号 + * @param msg 消息 + * @param timeout 超时时间 + * @param unit 时间单位 + */ + private void sendCommand(String pileSn, Class msg, long timeout, TimeUnit unit) { + // 通过桩编号获取channel + ChannelHandlerContext ctx = PileChannelEntity.getChannelByPileSn(pileSn); + if (Objects.isNull(ctx)) { + log.error("push命令[{}]失败, 桩号:{}无法获取到长连接, 请检查充电桩连接状态!", "value", pileSn); + throw new NullPointerException("channel"); + } + } +}