mirror of
https://gitee.com/san-bing/JChargePointProtocol
synced 2026-05-04 18:09:54 +08:00
!33 新增云快充启动充电的逻辑卡号和物理卡号,和双枪并充序号以及双枪并充的测试接口
* 新增云快充启动充电的逻辑卡号和物理卡号,和双枪并充序号以及双枪并充的测试接口 * CMD路由优化 * Merge remote-tracking branch 'gitee/master' into Feat_Lvneng_module_optimize * cmd路由优化 * cmd路由优化 * 绿能模块优化 * 新增云快充1.7 0x3D * 添加停止充电的TestController
This commit is contained in:
@@ -12,9 +12,11 @@ import io.netty.buffer.Unpooled;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.protocol.domain.DownlinkCmdEnum;
|
||||
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
|
||||
import sanbing.jcpp.protocol.listener.tcp.enums.SequenceNumberLength;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum;
|
||||
import sanbing.jcpp.protocol.mapping.DownlinkCmdConverter;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.mapping.YunKuaiChongDownlinkCmdConverter;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
@@ -38,6 +40,11 @@ public class AbstractYunKuaiChongCmdExe {
|
||||
|
||||
protected static final byte YUNKUAICHONG_HEAD = 0x68;
|
||||
protected static final int YUNKUAICHONG_NORMAL_ENCRYPTION_FLAG = 0;
|
||||
|
||||
/**
|
||||
* 下行命令转换器单例,用于将通用命令转换为协议特定命令值
|
||||
*/
|
||||
private static final DownlinkCmdConverter DOWNLINK_CMD_CONVERTER = YunKuaiChongDownlinkCmdConverter.getInstance();
|
||||
|
||||
private static final DecimalFormat PRICING_ID_DECIMAL_FORMAT = new DecimalFormat("0000");
|
||||
|
||||
@@ -104,8 +111,21 @@ public class AbstractYunKuaiChongCmdExe {
|
||||
return BCDUtil.toBytes(tradeNoStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编码卡号为BCD格式
|
||||
* 云快充协议卡号为6字节(12位BCD码),需要做长度校验和补0操作
|
||||
*/
|
||||
protected static byte[] encodeCardNo(String cardNo) {
|
||||
if (StringUtils.length(cardNo) > 12) {
|
||||
throw new IllegalArgumentException("云快充可接受最大卡号为12位");
|
||||
}
|
||||
|
||||
protected byte[] encode(YunKuaiChongDownlinkCmdEnum downlinkCmd,
|
||||
String cardNoStr = StringUtils.leftPad(cardNo, 12, '0');
|
||||
|
||||
return BCDUtil.toBytes(cardNoStr);
|
||||
}
|
||||
|
||||
protected byte[] encode(int downlinkCmd,
|
||||
int seqNo,
|
||||
int encryptionFlag,
|
||||
ByteBuf msgBody) {
|
||||
@@ -115,7 +135,7 @@ public class AbstractYunKuaiChongCmdExe {
|
||||
response.writeByte(msgBodyLength + 4);
|
||||
response.writeShortLE(seqNo);
|
||||
response.writeByte(encryptionFlag);
|
||||
response.writeByte(downlinkCmd.getCmd());
|
||||
response.writeByte(downlinkCmd);
|
||||
response.writeBytes(msgBody);
|
||||
|
||||
// 帧校验域:从序列号域到数据域的 CRC 校验,校验多项式为 0x180D,低字节在前,高字节在后
|
||||
@@ -127,7 +147,7 @@ public class AbstractYunKuaiChongCmdExe {
|
||||
return toBytes(response);
|
||||
}
|
||||
|
||||
protected void encodeAndWriteFlush(YunKuaiChongDownlinkCmdEnum downlinkCmd,
|
||||
protected void encodeAndWriteFlush(int downlinkCmd,
|
||||
int seqNo,
|
||||
int encryptionFlag,
|
||||
ByteBuf msgBody,
|
||||
@@ -138,7 +158,7 @@ public class AbstractYunKuaiChongCmdExe {
|
||||
tcpSession.writeAndFlush(Unpooled.copiedBuffer(encode));
|
||||
}
|
||||
|
||||
protected void encodeAndWriteFlush(YunKuaiChongDownlinkCmdEnum downlinkCmd,
|
||||
protected void encodeAndWriteFlush(int downlinkCmd,
|
||||
ByteBuf msgBody,
|
||||
TcpSession tcpSession) {
|
||||
|
||||
@@ -150,6 +170,34 @@ public class AbstractYunKuaiChongCmdExe {
|
||||
tcpSession.writeAndFlush(Unpooled.copiedBuffer(encode));
|
||||
}
|
||||
|
||||
/**
|
||||
* 便捷方法:直接使用 DownlinkCmdEnum 发送命令
|
||||
*/
|
||||
protected void encodeAndWriteFlush(DownlinkCmdEnum downlinkCmdEnum,
|
||||
int seqNo,
|
||||
int encryptionFlag,
|
||||
ByteBuf msgBody,
|
||||
TcpSession tcpSession) {
|
||||
if (!DOWNLINK_CMD_CONVERTER.supports(downlinkCmdEnum)) {
|
||||
throw new IllegalArgumentException("云快充协议不支持下行命令: " + downlinkCmdEnum);
|
||||
}
|
||||
Integer cmd = DOWNLINK_CMD_CONVERTER.convertToCmd(downlinkCmdEnum);
|
||||
encodeAndWriteFlush(cmd, seqNo, encryptionFlag, msgBody, tcpSession);
|
||||
}
|
||||
|
||||
/**
|
||||
* 便捷方法:直接使用 DownlinkCmdEnum 发送命令(自动生成序列号)
|
||||
*/
|
||||
protected void encodeAndWriteFlush(DownlinkCmdEnum downlinkCmdEnum,
|
||||
ByteBuf msgBody,
|
||||
TcpSession tcpSession) {
|
||||
if (!DOWNLINK_CMD_CONVERTER.supports(downlinkCmdEnum)) {
|
||||
throw new IllegalArgumentException("云快充协议不支持下行命令: " + downlinkCmdEnum);
|
||||
}
|
||||
Integer cmd = DOWNLINK_CMD_CONVERTER.convertToCmd(downlinkCmdEnum);
|
||||
encodeAndWriteFlush(cmd, msgBody, tcpSession);
|
||||
}
|
||||
|
||||
protected static BigDecimal reduceMagnification(long value, int magnification) {
|
||||
return new BigDecimal(value).divide(new BigDecimal(magnification), 4, RoundingMode.HALF_UP);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*/
|
||||
package sanbing.jcpp.protocol.yunkuaichong;
|
||||
|
||||
import cn.hutool.core.util.ClassUtil;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.ByteBufUtil;
|
||||
import io.netty.buffer.Unpooled;
|
||||
@@ -16,71 +16,43 @@ import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.DownlinkRequestMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.ProtocolMessageProcessor;
|
||||
import sanbing.jcpp.protocol.domain.DownlinkCmdEnum;
|
||||
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.annotation.YunKuaiChongCmd;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum;
|
||||
import sanbing.jcpp.protocol.mapping.DownlinkCmdConverter;
|
||||
import sanbing.jcpp.protocol.routing.ProtocolCommandRouter;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.mapping.YunKuaiChongDownlinkCmdConverter;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static sanbing.jcpp.infrastructure.util.codec.ByteUtil.checkCrcSum;
|
||||
|
||||
@Slf4j
|
||||
public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcessor {
|
||||
// 修改为基于协议名+cmd的路由映射,格式为 "protocolName:cmd" -> CommandExecutor
|
||||
private final Map<String, YunKuaiChongUplinkCmdExe> uplinkCmdExeMap = new ConcurrentHashMap<>();
|
||||
private final Map<String, YunKuaiChongDownlinkCmdExe> downlinkCmdExeMap = new ConcurrentHashMap<>();
|
||||
|
||||
private final ProtocolCommandRouter<YunKuaiChongUplinkCmdExe> uplinkRouter;
|
||||
private final ProtocolCommandRouter<YunKuaiChongDownlinkCmdExe> downlinkRouter;
|
||||
private final DownlinkCmdConverter downlinkCmdConverter;
|
||||
|
||||
public YunKuaiChongProtocolMessageProcessor(Forwarder forwarder, ProtocolContext protocolContext) {
|
||||
super(forwarder, protocolContext);
|
||||
|
||||
Set<Class<?>> cmdClasses = ClassUtil.scanPackageByAnnotation(ClassUtil.getPackage(this.getClass()), YunKuaiChongCmd.class);
|
||||
cmdClasses.stream().filter(YunKuaiChongUplinkCmdExe.class::isAssignableFrom)
|
||||
.forEach(clazz -> {
|
||||
YunKuaiChongCmd annotation = clazz.getAnnotation(YunKuaiChongCmd.class);
|
||||
int cmd = annotation.value();
|
||||
String[] protocolNames = annotation.protocolNames();
|
||||
try {
|
||||
YunKuaiChongUplinkCmdExe yunKuaiChongUplinkCmdExe = (YunKuaiChongUplinkCmdExe) clazz.getDeclaredConstructor().newInstance();
|
||||
// 为每个支持的协议名注册命令执行器
|
||||
for (String protocolName : protocolNames) {
|
||||
String key = protocolName + ":" + cmd;
|
||||
uplinkCmdExeMap.put(key, yunKuaiChongUplinkCmdExe);
|
||||
}
|
||||
} catch (InstantiationException |
|
||||
IllegalAccessException |
|
||||
InvocationTargetException |
|
||||
NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
// 使用 CommandRouter 替代手动注册逻辑
|
||||
this.uplinkRouter = new ProtocolCommandRouter<>(
|
||||
this.getClass(),
|
||||
YunKuaiChongUplinkCmdExe.class::isAssignableFrom
|
||||
);
|
||||
|
||||
cmdClasses.stream().filter(YunKuaiChongDownlinkCmdExe.class::isAssignableFrom)
|
||||
.forEach(clazz -> {
|
||||
YunKuaiChongCmd annotation = clazz.getAnnotation(YunKuaiChongCmd.class);
|
||||
int cmd = annotation.value();
|
||||
String[] protocolNames = annotation.protocolNames();
|
||||
try {
|
||||
YunKuaiChongDownlinkCmdExe yunKuaiChongDownlinkCmdExe = (YunKuaiChongDownlinkCmdExe) clazz.getDeclaredConstructor().newInstance();
|
||||
// 为每个支持的协议名注册命令执行器
|
||||
for (String protocolName : protocolNames) {
|
||||
String key = protocolName + ":" + cmd;
|
||||
downlinkCmdExeMap.put(key, yunKuaiChongDownlinkCmdExe);
|
||||
}
|
||||
} catch (InstantiationException |
|
||||
IllegalAccessException |
|
||||
InvocationTargetException |
|
||||
NoSuchMethodException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
this.downlinkRouter = new ProtocolCommandRouter<>(
|
||||
this.getClass(),
|
||||
YunKuaiChongDownlinkCmdExe.class::isAssignableFrom
|
||||
);
|
||||
|
||||
// 获取下行命令转换器单例
|
||||
this.downlinkCmdConverter = YunKuaiChongDownlinkCmdConverter.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -170,7 +142,16 @@ public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcess
|
||||
|
||||
DownlinkRequestMessage protocolDownlinkMsg = sessionToHandlerMsg.downlinkMsg();
|
||||
|
||||
int cmd = YunKuaiChongDownlinkCmdEnum.valueOf(protocolDownlinkMsg.getDownlinkCmd()).getCmd();
|
||||
DownlinkCmdEnum downlinkCmd = DownlinkCmdEnum.valueOf(protocolDownlinkMsg.getDownlinkCmd());
|
||||
|
||||
// 首先检查是否支持该命令
|
||||
if (!downlinkCmdConverter.supports(downlinkCmd)) {
|
||||
log.warn("云快充协议不支持下行命令: {}", downlinkCmd);
|
||||
return;
|
||||
}
|
||||
|
||||
// 支持的命令直接转换(这里不会返回null)
|
||||
Integer cmd = downlinkCmdConverter.convertToCmd(downlinkCmd);
|
||||
|
||||
YunKuaiChongDwonlinkMessage message = new YunKuaiChongDwonlinkMessage();
|
||||
message.setId(new UUID(protocolDownlinkMsg.getMessageIdMSB(), protocolDownlinkMsg.getMessageIdLSB()));
|
||||
@@ -191,9 +172,8 @@ public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcess
|
||||
private void exeCmd(YunKuaiChongUplinkMessage message, TcpSession session) {
|
||||
String protocolName = session.getProtocolName();
|
||||
int cmd = message.getCmd();
|
||||
String key = protocolName + ":" + cmd;
|
||||
|
||||
YunKuaiChongUplinkCmdExe uplinkCmdExe = uplinkCmdExeMap.get(key);
|
||||
YunKuaiChongUplinkCmdExe uplinkCmdExe = uplinkRouter.getExecutor(protocolName, cmd);
|
||||
|
||||
if (uplinkCmdExe == null) {
|
||||
log.info("{} 云快充协议接收到未知的上行指令,协议: {}, 指令: 0x{}",
|
||||
@@ -207,9 +187,8 @@ public class YunKuaiChongProtocolMessageProcessor extends ProtocolMessageProcess
|
||||
private void exeCmd(YunKuaiChongDwonlinkMessage message, TcpSession session) {
|
||||
String protocolName = session.getProtocolName();
|
||||
int cmd = message.getCmd();
|
||||
String key = protocolName + ":" + cmd;
|
||||
|
||||
YunKuaiChongDownlinkCmdExe downlinkCmdExe = downlinkCmdExeMap.get(key);
|
||||
YunKuaiChongDownlinkCmdExe downlinkCmdExe = downlinkRouter.getExecutor(protocolName, cmd);
|
||||
|
||||
if (downlinkCmdExe == null) {
|
||||
log.info("{} 云快充协议接收到未知的下行指令,协议: {}, 指令: 0x{}",
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/**
|
||||
* 开源代码,仅供学习和交流研究使用,商用请联系三丙
|
||||
* 微信:mohan_88888
|
||||
* 抖音:程序员三丙
|
||||
* 付费课程知识星球:https://t.zsxq.com/aKtXo
|
||||
*/
|
||||
package sanbing.jcpp.protocol.yunkuaichong.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* @author baigod
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface YunKuaiChongCmd {
|
||||
|
||||
int value();
|
||||
|
||||
/**
|
||||
* 支持的协议名列表,必须明确指定
|
||||
*/
|
||||
String[] protocolNames();
|
||||
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
/**
|
||||
* 开源代码,仅供学习和交流研究使用,商用请联系三丙
|
||||
* 微信:mohan_88888
|
||||
* 抖音:程序员三丙
|
||||
* 付费课程知识星球:https://t.zsxq.com/aKtXo
|
||||
*/
|
||||
package sanbing.jcpp.protocol.yunkuaichong.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @author baigod
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum YunKuaiChongDownlinkCmdEnum {
|
||||
|
||||
LOGIN_ACK(0x02),
|
||||
|
||||
SYNC_TIME(0x56),
|
||||
|
||||
HEARTBEAT(0x04),
|
||||
|
||||
VERIFY_PRICING_ACK(0x06),
|
||||
|
||||
QUERY_PRICING_ACK(0X0A),
|
||||
|
||||
SET_PRICING(0x58),
|
||||
|
||||
REMOTE_START_CHARGING(0x34),
|
||||
|
||||
REMOTE_STOP_CHARGING(0x36),
|
||||
|
||||
TRANSACTION_RECORD_ACK(0x40),
|
||||
|
||||
REMOTE_PARALLEL_START_CHARGING(0xA4),
|
||||
|
||||
REMOTE_RESTART_PILE(0x92),
|
||||
|
||||
OTA_REQUEST(0x94),
|
||||
|
||||
OFFLINE_CARD_BALANCE_UPDATE_REQUEST(0x42),
|
||||
|
||||
OFFLINE_CARD_SYNC_REQUEST(0x44),
|
||||
|
||||
SYNC_TIME_REQUEST(0x56),
|
||||
|
||||
;
|
||||
private final Integer cmd;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* 开源代码,仅供学习和交流研究使用,商用请联系三丙
|
||||
* 微信:mohan_88888
|
||||
* 抖音:程序员三丙
|
||||
* 付费课程知识星球:https://t.zsxq.com/aKtXo
|
||||
*/
|
||||
package sanbing.jcpp.protocol.yunkuaichong.mapping;
|
||||
|
||||
import sanbing.jcpp.protocol.domain.DownlinkCmdEnum;
|
||||
import sanbing.jcpp.protocol.mapping.DownlinkCmdConverter;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 云快充协议下行命令转换器(单例)
|
||||
*
|
||||
* 建立通用下行命令与云快充协议特定命令字的显式转换关系
|
||||
* 使用Map存储转换关系,提供O(1)性能
|
||||
*
|
||||
* 采用单例模式,避免重复实例化
|
||||
*
|
||||
* @author sanbing
|
||||
* @since 2024-12-16
|
||||
*/
|
||||
public class YunKuaiChongDownlinkCmdConverter implements DownlinkCmdConverter {
|
||||
|
||||
/**
|
||||
* 单例实例
|
||||
*/
|
||||
private static final YunKuaiChongDownlinkCmdConverter INSTANCE = new YunKuaiChongDownlinkCmdConverter();
|
||||
|
||||
/**
|
||||
* 命令映射表,使用Map提供O(1)查找性能
|
||||
*/
|
||||
private static final Map<DownlinkCmdEnum, Integer> COMMAND_MAP = new ConcurrentHashMap<>();
|
||||
|
||||
static {
|
||||
// 初始化云快充协议的命令映射
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.LOGIN_ACK, 0x02);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.HEARTBEAT_ACK, 0x04); // 心跳应答
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.VERIFY_PRICING_ACK, 0x06);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.QUERY_PRICING_ACK, 0X0A);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.SET_PRICING, 0x58);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.REMOTE_START_CHARGING, 0x34);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.REMOTE_STOP_CHARGING, 0x36);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.TRANSACTION_RECORD_ACK, 0x40);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.REMOTE_PARALLEL_START_CHARGING, 0xA4);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.REMOTE_RESTART_PILE, 0x92);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.OTA_REQUEST, 0x94);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.OFFLINE_CARD_BALANCE_UPDATE_REQUEST, 0x42);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.OFFLINE_CARD_SYNC_REQUEST, 0x44);
|
||||
COMMAND_MAP.put(DownlinkCmdEnum.SYNC_TIME_REQUEST, 0x56);
|
||||
}
|
||||
|
||||
/**
|
||||
* 私有构造函数,防止外部实例化
|
||||
*/
|
||||
private YunKuaiChongDownlinkCmdConverter() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单例实例
|
||||
*
|
||||
* @return 单例实例
|
||||
*/
|
||||
public static YunKuaiChongDownlinkCmdConverter getInstance() {
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer convertToCmd(DownlinkCmdEnum downlinkCmd) {
|
||||
return COMMAND_MAP.get(downlinkCmd);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProtocolName() {
|
||||
return "云快充协议";
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.BmsAbortProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -32,7 +32,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* 云快充1.5.0 充电阶段BMS中止
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x1D, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x1D, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150BmsAbortULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,10 +16,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.BmsChargingErrorProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -27,7 +27,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* 云快充1.5.0充电桩错误报文
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x1B, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x1B, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150BmsChargingErrorULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,10 +16,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.BmsChargingInfoProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -29,7 +29,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author facai
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x25, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x25, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150BmsChargingInfoULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -17,10 +17,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.BmsHandshakeProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
@@ -32,7 +32,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x15, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x15, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150BmsHandshakeULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -14,10 +14,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.BmsParamConfigReportProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@@ -28,7 +28,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* 命令码:0x17 (参数配置帧上行命令)
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x17, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x17, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150BmsParamConfigReportULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
// 电流值偏移量常量(单位:安培)
|
||||
private static final BigDecimal CURRENT_OFFSET = new BigDecimal("-400.0");
|
||||
|
||||
@@ -15,13 +15,13 @@ import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.HeartBeatRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.HEARTBEAT_ACK;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.HEARTBEAT;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 充电桩心跳包
|
||||
@@ -29,7 +29,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x03, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x03, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150HeartbeatULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
@@ -76,7 +76,7 @@ public class YunKuaiChongV150HeartbeatULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
pingAckMsgBody.writeByte(gunCodeByte);
|
||||
pingAckMsgBody.writeByte(0);
|
||||
|
||||
encodeAndWriteFlush(HEARTBEAT,
|
||||
encodeAndWriteFlush(HEARTBEAT_ACK,
|
||||
yunKuaiChongUplinkMessage.getSequenceNumber(),
|
||||
yunKuaiChongUplinkMessage.getEncryptionFlag(),
|
||||
pingAckMsgBody,
|
||||
|
||||
@@ -14,10 +14,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.GroundLockStatusProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -26,7 +26,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* 命令码:0x61 (地锁状态/报警信息帧上行命令)
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x61, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x61, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150LockStatusULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,25 +16,25 @@ import sanbing.jcpp.infrastructure.util.mdc.MDCUtils;
|
||||
import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.LoginResponse;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
|
||||
import sanbing.jcpp.protocol.listener.tcp.enums.SequenceNumberLength;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static sanbing.jcpp.infrastructure.util.config.ThreadPoolConfiguration.PROTOCOL_SESSION_SCHEDULED;
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.LOGIN_ACK;
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.SYNC_TIME_REQUEST;
|
||||
import static sanbing.jcpp.protocol.domain.SessionCloseReason.MANUALLY;
|
||||
import static sanbing.jcpp.protocol.listener.tcp.TcpSession.SCHEDULE_KEY_AUTO_SYNC_TIME;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.FAILURE_BYTE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.SUCCESS_BYTE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.LOGIN_ACK;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SYNC_TIME;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0登录认证应答
|
||||
@@ -42,7 +42,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x02, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x02, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150LoginAckDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
@@ -113,7 +113,7 @@ public class YunKuaiChongV150LoginAckDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
syncTimeMsgBody.writeBytes(pileCodeBytes);
|
||||
syncTimeMsgBody.writeBytes(CP56Time2aUtil.encode(LocalDateTime.now()));
|
||||
|
||||
encodeAndWriteFlush(SYNC_TIME,
|
||||
encodeAndWriteFlush(SYNC_TIME_REQUEST,
|
||||
tcpSession.nextSeqNo(SequenceNumberLength.SHORT),
|
||||
requestData.getEncryptionFlag(),
|
||||
syncTimeMsgBody,
|
||||
|
||||
@@ -15,10 +15,10 @@ import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.LoginRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
@@ -28,7 +28,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* 云快充1.5.0充电桩登录认证
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x01, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x01, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150LoginULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,16 +12,15 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardBalanceUpdateRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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.math.BigDecimal;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.OFFLINE_CARD_BALANCE_UPDATE_REQUEST;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.OFFLINE_CARD_BALANCE_UPDATE_REQUEST;
|
||||
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 远程账户余额更新
|
||||
@@ -29,7 +28,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author bawan
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x42, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x42, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150OfflineCardBalanceUpdateRequestDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -14,10 +14,10 @@ import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardBalanceUpdateResponse;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -30,7 +30,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author bawan
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x41, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x41, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150OfflineCardBalanceUpdateResponseULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
private static final Map<Byte, String> UPDATE_RESULT;
|
||||
|
||||
@@ -12,13 +12,13 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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 static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.OFFLINE_CARD_SYNC_REQUEST;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.OFFLINE_CARD_SYNC_REQUEST;
|
||||
|
||||
|
||||
/**
|
||||
@@ -27,7 +27,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author bawan
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x44, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x44, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150OfflineCardSyncRequestDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,10 +13,10 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -29,7 +29,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author bawan
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x43, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x43, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150OfflineCardSyncResponseULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
private static final Map<Byte, Map<Byte, String>> FAILURE_REASON;
|
||||
|
||||
@@ -11,13 +11,13 @@ import io.netty.buffer.Unpooled;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OtaRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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 static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.OTA_REQUEST;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.OTA_REQUEST;
|
||||
|
||||
|
||||
/**
|
||||
@@ -26,7 +26,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author bawan
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x94, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x94, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150OtaRequestDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,10 +12,10 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -28,7 +28,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author bawan
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x93, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x93, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150OtaResponseULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
private static final Map<Byte, String> UPGRADE_STATUS;
|
||||
|
||||
@@ -14,10 +14,10 @@ import sanbing.jcpp.proto.gen.ProtocolProto.PeriodProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PricingModelProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.QueryPricingResponse;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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.math.BigDecimal;
|
||||
import java.time.LocalTime;
|
||||
@@ -25,8 +25,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static sanbing.jcpp.proto.gen.ProtocolProto.PricingModelFlag.*;
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.QUERY_PRICING_ACK;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.QUERY_PRICING_ACK;
|
||||
|
||||
/**
|
||||
* 计费模型请求应答
|
||||
@@ -34,7 +34,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x0A, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x0A, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150QueryPricingModelAckDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,10 +15,10 @@ import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.QueryPricingRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -27,7 +27,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x09, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x09, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150QueryPricingModelULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,10 +19,10 @@ import sanbing.jcpp.proto.gen.ProtocolProto.GunRunStatus;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.GunRunStatusProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
@@ -36,7 +36,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x13, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x13, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RealTimeDataULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
// 故障说明列表
|
||||
|
||||
@@ -9,19 +9,17 @@ package sanbing.jcpp.protocol.yunkuaichong.v150.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.RemoteStartChargingRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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.math.BigDecimal;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.REMOTE_START_CHARGING;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_START_CHARGING;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 运营平台远程控制启机
|
||||
@@ -29,7 +27,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x34, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x34, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RemoteStartDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
@@ -45,9 +43,13 @@ public class YunKuaiChongV150RemoteStartDLCmd extends YunKuaiChongDownlinkCmdExe
|
||||
String gunCode = remoteStartChargingRequest.getGunCode();
|
||||
String tradeNo = remoteStartChargingRequest.getTradeNo();
|
||||
String limitYuan = remoteStartChargingRequest.getLimitYuan();
|
||||
|
||||
byte[] cardNo = encodeCardNo(tradeNo);
|
||||
|
||||
|
||||
// 优先使用传入的卡号,如果没有则使用交易流水号生成
|
||||
String logicalCardNo = remoteStartChargingRequest.hasLogicalCardNo() ?
|
||||
remoteStartChargingRequest.getLogicalCardNo() : tradeNo;
|
||||
String physicalCardNo = remoteStartChargingRequest.hasPhysicalCardNo() ?
|
||||
remoteStartChargingRequest.getPhysicalCardNo() : tradeNo;
|
||||
|
||||
ByteBuf msgBody = Unpooled.buffer(44);
|
||||
// 交易流水号
|
||||
msgBody.writeBytes(encodeTradeNo(tradeNo));
|
||||
@@ -56,9 +58,9 @@ public class YunKuaiChongV150RemoteStartDLCmd extends YunKuaiChongDownlinkCmdExe
|
||||
// 枪号
|
||||
msgBody.writeBytes(encodeGunCode(gunCode));
|
||||
// 逻辑卡号 BCD码
|
||||
msgBody.writeBytes(cardNo);
|
||||
msgBody.writeBytes(encodeCardNo(logicalCardNo));
|
||||
// 物理卡号
|
||||
msgBody.writeBytes(cardNo);
|
||||
msgBody.writeBytes(encodeCardNo(physicalCardNo));
|
||||
// 账户余额
|
||||
msgBody.writeIntLE(new BigDecimal(limitYuan).multiply(new BigDecimal("100")).intValue());
|
||||
|
||||
@@ -67,12 +69,4 @@ public class YunKuaiChongV150RemoteStartDLCmd extends YunKuaiChongDownlinkCmdExe
|
||||
tcpSession);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用交易流水号做卡号
|
||||
*/
|
||||
private static byte[] encodeCardNo(String tradeNo) {
|
||||
tradeNo = StringUtils.right(tradeNo, 16);
|
||||
tradeNo = StringUtils.leftPad(tradeNo, 16, '0');
|
||||
return BCDUtil.toBytes(tradeNo);
|
||||
}
|
||||
}
|
||||
@@ -16,10 +16,10 @@ 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.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -29,7 +29,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x33, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x33, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RemoteStartResultULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,13 +11,13 @@ import io.netty.buffer.Unpooled;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.RemoteStopChargingRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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 static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.REMOTE_STOP_CHARGING;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_STOP_CHARGING;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 运营平台远程停机
|
||||
@@ -25,7 +25,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x36, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x36, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RemoteStopDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -16,10 +16,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.RemoteStopChargingResponse;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -29,7 +29,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x35, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x35, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RemoteStopResultULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -14,10 +14,10 @@ import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.RestartPileResponse;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -25,7 +25,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* 云快充1.5.0 远程重启充电命令回复
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x91, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x91, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RestartPileAckULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,19 +11,19 @@ import io.netty.buffer.Unpooled;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.RestartPileRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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 static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.REMOTE_RESTART_PILE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_RESTART_PILE;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 运营平台远程重启充电桩
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x92, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x92, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150RestartPileDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,13 +13,14 @@ import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.SetPricingResponse;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.mapping.YunKuaiChongDownlinkCmdConverter;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.SET_PRICING;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SET_PRICING;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 计费模型应答
|
||||
@@ -27,7 +28,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x57, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x57, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150SetPricingModelAckULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
@@ -43,7 +44,7 @@ public class YunKuaiChongV150SetPricingModelAckULCmd extends YunKuaiChongUplinkC
|
||||
boolean isSuccess = (byteBuf.readByte() == 0x01);
|
||||
|
||||
// 从缓存取上个请求的pricingId
|
||||
Object pricingId = tcpSession.getRequestCache().asMap().getOrDefault(pileCode + SET_PRICING.getCmd(), null);
|
||||
Object pricingId = tcpSession.getRequestCache().asMap().getOrDefault(pileCode + YunKuaiChongDownlinkCmdConverter.getInstance().convertToCmd(SET_PRICING), null);
|
||||
|
||||
if (pricingId instanceof Long pricingIdL) {
|
||||
// 转发到后端
|
||||
|
||||
@@ -14,10 +14,11 @@ import sanbing.jcpp.proto.gen.ProtocolProto.PeriodProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PricingModelProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.SetPricingRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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 sanbing.jcpp.protocol.yunkuaichong.mapping.YunKuaiChongDownlinkCmdConverter;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalTime;
|
||||
@@ -25,8 +26,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static sanbing.jcpp.proto.gen.ProtocolProto.PricingModelFlag.*;
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.SET_PRICING;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SET_PRICING;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 计费模型设置
|
||||
@@ -34,7 +35,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x58, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x58, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150SetPricingModelDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) {
|
||||
@@ -84,7 +85,7 @@ public class YunKuaiChongV150SetPricingModelDLCmd extends YunKuaiChongDownlinkCm
|
||||
setPricingAckMsgBody.writeBytes(bytes);
|
||||
|
||||
// 放进缓存后再下发
|
||||
tcpSession.getRequestCache().put(pileCode + SET_PRICING.getCmd(), pricingId);
|
||||
tcpSession.getRequestCache().put(pileCode + YunKuaiChongDownlinkCmdConverter.getInstance().convertToCmd(SET_PRICING), pricingId);
|
||||
|
||||
encodeAndWriteFlush(SET_PRICING,
|
||||
setPricingAckMsgBody,
|
||||
|
||||
@@ -13,13 +13,13 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.CP56Time2aUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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 static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.SYNC_TIME_REQUEST;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SYNC_TIME;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0对时设置
|
||||
@@ -28,7 +28,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x56, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x56, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150TimeSyncDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) {
|
||||
@@ -42,6 +42,6 @@ public class YunKuaiChongV150TimeSyncDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
ByteBuf syncTimeMsgBody = Unpooled.buffer(14);
|
||||
syncTimeMsgBody.writeBytes(encodePileCode(pileCode));
|
||||
syncTimeMsgBody.writeBytes(CP56Time2aUtil.encode(DateUtil.parseLocalDateTime(time)));
|
||||
encodeAndWriteFlush(SYNC_TIME, syncTimeMsgBody, tcpSession);
|
||||
encodeAndWriteFlush(SYNC_TIME_REQUEST, syncTimeMsgBody, tcpSession);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,10 +14,10 @@ import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.infrastructure.util.codec.CP56Time2aUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -30,7 +30,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x55, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x55, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150TimeSyncResultULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,23 +12,23 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.TransactionRecordResponse;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.TRANSACTION_RECORD_ACK;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.FAILURE_BYTE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.SUCCESS_BYTE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.TRANSACTION_RECORD_ACK;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 交易记录确认
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x40, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x40, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150TransactionRecordAckDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -15,10 +15,10 @@ import sanbing.jcpp.infrastructure.util.codec.CP56Time2aUtil;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.*;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -34,7 +34,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x3B, protocolNames = {V150, V160})
|
||||
@ProtocolCmd(value = 0x3B, protocolNames = {V150, V160})
|
||||
public class YunKuaiChongV150TransactionRecordULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -12,18 +12,18 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.VerifyPricingResponse;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage;
|
||||
import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.VERIFY_PRICING_ACK;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.FAILURE_BYTE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage.SUCCESS_BYTE;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.VERIFY_PRICING_ACK;
|
||||
|
||||
/**
|
||||
* 云快充1.5.0计费模型验证请求应答
|
||||
@@ -31,7 +31,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x06, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x06, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150VerifyPricingModelAckDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) {
|
||||
|
||||
@@ -16,10 +16,10 @@ import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.VerifyPricingRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.*;
|
||||
|
||||
@@ -30,7 +30,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x05, protocolNames = {V150, V160, V170})
|
||||
@ProtocolCmd(value = 0x05, protocolNames = {V150, V160, V170})
|
||||
public class YunKuaiChongV150VerifyPricingModelULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,21 +9,22 @@ 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.annotation.ProtocolCmd;
|
||||
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.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
import static sanbing.jcpp.protocol.domain.DownlinkCmdEnum.REMOTE_PARALLEL_START_CHARGING;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.V160;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.REMOTE_PARALLEL_START_CHARGING;
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.V170;
|
||||
// 移除枚举导入: REMOTE_PARALLEL_START_CHARGING
|
||||
|
||||
/**
|
||||
* 云快充1.6.0 运营平台远程控制并充启机
|
||||
@@ -31,7 +32,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEn
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0xA4, protocolNames = {V160})
|
||||
@ProtocolCmd(value = 0xA4, protocolNames = {V160, V170})
|
||||
public class YunKuaiChongV160RemoteParallelStartDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
||||
@@ -50,7 +51,11 @@ public class YunKuaiChongV160RemoteParallelStartDLCmd extends YunKuaiChongDownli
|
||||
String tradeNo = remoteStartChargingRequest.getTradeNo();
|
||||
String limitYuan = remoteStartChargingRequest.getLimitYuan();
|
||||
|
||||
byte[] cardNo = encodeCardNo(tradeNo);
|
||||
// 优先使用传入的卡号,如果没有则使用交易流水号生成
|
||||
String logicalCardNo = remoteStartChargingRequest.hasLogicalCardNo() ?
|
||||
remoteStartChargingRequest.getLogicalCardNo() : tradeNo;
|
||||
String physicalCardNo = remoteStartChargingRequest.hasPhysicalCardNo() ?
|
||||
remoteStartChargingRequest.getPhysicalCardNo() : tradeNo;
|
||||
|
||||
ByteBuf msgBody = Unpooled.buffer(44);
|
||||
// 交易流水号
|
||||
@@ -60,25 +65,19 @@ public class YunKuaiChongV160RemoteParallelStartDLCmd extends YunKuaiChongDownli
|
||||
// 枪号
|
||||
msgBody.writeBytes(encodeGunCode(gunCode));
|
||||
// 逻辑卡号 BCD码
|
||||
msgBody.writeBytes(cardNo);
|
||||
msgBody.writeBytes(encodeCardNo(logicalCardNo));
|
||||
// 物理卡号
|
||||
msgBody.writeBytes(cardNo);
|
||||
msgBody.writeBytes(encodeCardNo(physicalCardNo));
|
||||
// 账户余额
|
||||
msgBody.writeIntLE(new BigDecimal(limitYuan).intValue());
|
||||
// 并充序号
|
||||
msgBody.writeBytes(BCDUtil.toBytes(LocalDateTime.now().format(dateTimeFormatter)));
|
||||
String parallelNo = remoteStartChargingRequest.hasParallelNo() ?
|
||||
remoteStartChargingRequest.getParallelNo() : LocalDateTime.now().format(dateTimeFormatter);
|
||||
msgBody.writeBytes(BCDUtil.toBytes(parallelNo));
|
||||
|
||||
encodeAndWriteFlush(REMOTE_PARALLEL_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);
|
||||
}
|
||||
}
|
||||
@@ -16,10 +16,10 @@ 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.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.ProtocolNames.V160;
|
||||
|
||||
@@ -29,7 +29,7 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0xA3, protocolNames = {V160})
|
||||
@ProtocolCmd(value = 0xA3, protocolNames = {V160})
|
||||
public class YunKuaiChongV160RemoteParallelStartResultULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,10 +16,10 @@ import sanbing.jcpp.infrastructure.util.codec.CP56Time2aUtil;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.*;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.annotation.ProtocolCmd;
|
||||
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;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
@@ -34,8 +34,14 @@ import static sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongProtocolConstants.P
|
||||
* @author baigod
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(value = 0x3D, protocolNames = {V170})
|
||||
@ProtocolCmd(value = 0x3D, protocolNames = {V170})
|
||||
public class YunKuaiChongV170TransactionRecordULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
// V1.7.0 新增字段常量定义
|
||||
private static final String METER_NO_KEY = "meterNo";
|
||||
private static final String METER_ENCRYPTED_CONTEXT_KEY = "meterEncryptedContext";
|
||||
private static final String METER_PROTOCOL_VERSION_KEY = "meterProtocolVersion";
|
||||
private static final String ENCRYPTION_METHOD_KEY = "encryptionMethod";
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
|
||||
log.info("{} 云快充1.7.0交易记录", tcpSession);
|
||||
@@ -72,18 +78,18 @@ public class YunKuaiChongV170TransactionRecordULCmd extends YunKuaiChongUplinkCm
|
||||
byte[] meterNoBytes = new byte[6];
|
||||
byteBuf.readBytes(meterNoBytes);
|
||||
String meterNo = BCDUtil.toString(meterNoBytes);
|
||||
additionalInfo.put("电表表号", meterNo);
|
||||
additionalInfo.put(METER_NO_KEY, meterNo);
|
||||
|
||||
// 7.电表密文
|
||||
byte[] meterContextEncyptB = new byte[34];
|
||||
byteBuf.readBytes(meterContextEncyptB);
|
||||
additionalInfo.put("电表密文", HexUtil.encodeHexStr(meterContextEncyptB));
|
||||
additionalInfo.put(METER_ENCRYPTED_CONTEXT_KEY, HexUtil.encodeHexStr(meterContextEncyptB));
|
||||
|
||||
// 8.电表协议版本号
|
||||
additionalInfo.put("电表协议版本号", byteBuf.readUnsignedShortLE());
|
||||
additionalInfo.put(METER_PROTOCOL_VERSION_KEY, byteBuf.readUnsignedShortLE());
|
||||
|
||||
// 9.加密方式
|
||||
additionalInfo.put("加密方式", byteBuf.readUnsignedByte());
|
||||
additionalInfo.put(ENCRYPTION_METHOD_KEY, byteBuf.readUnsignedByte());
|
||||
|
||||
// 10.尖单价
|
||||
BigDecimal topPrice = reduceMagnification(byteBuf.readUnsignedIntLE(), 100000);
|
||||
|
||||
Reference in New Issue
Block a user