mirror of
https://gitee.com/san-bing/JChargePointProtocol
synced 2026-05-04 18:09:54 +08:00
* !44 comment * !39 添加下行日志打印 * !36 扩展计价领域模型 * !35 webui 初步成型 * !34 webui 初步成型
This commit is contained in:
@@ -10,7 +10,7 @@ import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
|
||||
|
||||
/**
|
||||
* @author baigod
|
||||
* @author 九筒
|
||||
*/
|
||||
public abstract class LvnengDownlinkCmdExe extends AbstractLvnengCmdExe {
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import java.io.Serializable;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author baigod
|
||||
* @author 九筒
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
*/
|
||||
package sanbing.jcpp.protocol.lvneng;
|
||||
|
||||
import sanbing.jcpp.protocol.enums.SupportedProtocols;
|
||||
|
||||
/**
|
||||
* 绿能协议常量定义
|
||||
*
|
||||
* @author sanbing
|
||||
* @author 九筒
|
||||
* @since 2024-12-16
|
||||
*/
|
||||
public final class LvnengProtocolConstants {
|
||||
@@ -23,7 +25,7 @@ public final class LvnengProtocolConstants {
|
||||
*/
|
||||
public static final class ProtocolNames {
|
||||
/** 绿能协议 v3.4.0 */
|
||||
public static final String LVNENG_V340 = "lvnengV340";
|
||||
public static final String LVNENG_V340 = SupportedProtocols.LVNENG_V340;
|
||||
|
||||
// 注解专用简短别名
|
||||
public static final String V340 = LVNENG_V340;
|
||||
|
||||
@@ -13,7 +13,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.JCPPPair;
|
||||
import sanbing.jcpp.infrastructure.util.codec.ByteUtil;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.DownlinkRequestMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.ProtocolMessageProcessor;
|
||||
import sanbing.jcpp.protocol.domain.DownlinkCmdEnum;
|
||||
@@ -122,10 +122,10 @@ public class LvnengProtocolMessageProcessor extends ProtocolMessageProcessor {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void downlinkHandle(SessionToHandlerMsg sessionToHandlerMsg) {
|
||||
protected void doDownlinkHandle(SessionToHandlerMsg sessionToHandlerMsg) {
|
||||
TcpSession session = (TcpSession) sessionToHandlerMsg.session();
|
||||
|
||||
ProtocolProto.DownlinkRequestMessage protocolDownlinkMsg = sessionToHandlerMsg.downlinkMsg();
|
||||
DownlinkRequestMessage protocolDownlinkMsg = sessionToHandlerMsg.downlinkMsg();
|
||||
|
||||
DownlinkCmdEnum downlinkCmd = DownlinkCmdEnum.valueOf(protocolDownlinkMsg.getDownlinkCmd());
|
||||
|
||||
|
||||
@@ -9,12 +9,13 @@ package sanbing.jcpp.protocol.lvneng;
|
||||
import com.google.protobuf.ByteString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
|
||||
|
||||
/**
|
||||
* @author baigod
|
||||
* @author 九筒
|
||||
*/
|
||||
@Slf4j
|
||||
public abstract class LvnengUplinkCmdExe extends AbstractLvnengCmdExe {
|
||||
@@ -22,11 +23,15 @@ public abstract class LvnengUplinkCmdExe extends AbstractLvnengCmdExe {
|
||||
public abstract void execute(TcpSession tcpSession, LvnengUplinkMessage lvnengUplinkMessage, ProtocolContext ctx);
|
||||
|
||||
protected UplinkQueueMessage.Builder uplinkMessageBuilder(String messageKey, TcpSession tcpSession, LvnengUplinkMessage lvnengUplinkMessage) {
|
||||
// 从Tracer总获取当前时间
|
||||
long ts = TracerContextUtil.getCurrentTracer().getTracerTs();
|
||||
|
||||
return UplinkQueueMessage.newBuilder()
|
||||
.setMessageIdMSB(lvnengUplinkMessage.getId().getMostSignificantBits())
|
||||
.setMessageIdLSB(lvnengUplinkMessage.getId().getLeastSignificantBits())
|
||||
.setSessionIdMSB(tcpSession.getId().getMostSignificantBits())
|
||||
.setSessionIdLSB(tcpSession.getId().getLeastSignificantBits())
|
||||
.setTs(ts)
|
||||
.setRequestData(ByteString.copyFrom(JacksonUtil.writeValueAsBytes(lvnengUplinkMessage)))
|
||||
.setMessageKey(messageKey)
|
||||
.setProtocolName(tcpSession.getProtocolName());
|
||||
|
||||
@@ -14,13 +14,13 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 绿能协议下行命令转换器(单例)
|
||||
*
|
||||
* <p>
|
||||
* 建立通用下行命令与绿能协议特定命令字的显式转换关系
|
||||
* 使用Map存储转换关系,提供O(1)性能
|
||||
*
|
||||
* <p>
|
||||
* 采用单例模式,避免重复实例化
|
||||
*
|
||||
* @author sanbing
|
||||
* @author 九筒
|
||||
* @since 2024-12-16
|
||||
*/
|
||||
public class LvnengDownlinkCmdConverter implements DownlinkCmdConverter {
|
||||
|
||||
@@ -28,9 +28,9 @@ import java.util.Arrays;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static sanbing.jcpp.infrastructure.util.config.ThreadPoolConfiguration.PROTOCOL_SESSION_SCHEDULED;
|
||||
import static sanbing.jcpp.proto.gen.ProtocolProto.SessionCloseReason.SESSION_CLOSE_MANUALLY;
|
||||
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.lvneng.LvnengProtocolConstants.ProtocolNames.V340;
|
||||
|
||||
@@ -74,7 +74,7 @@ public class LvnengV340LoginAckDLCmd extends LvnengDownlinkCmdExe {
|
||||
loginAck(tcpSession, requestData, new byte[]{0x00, 0x00, 0x00, 0x00});
|
||||
|
||||
// 断开连接
|
||||
tcpSession.close(MANUALLY);
|
||||
tcpSession.close(SESSION_CLOSE_MANUALLY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,8 +13,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.infrastructure.util.trace.TracerContextUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.ChargingProgressProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.GunRunStatus;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.GunRunStatusProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
@@ -50,8 +49,6 @@ public class LvnengV340RealTimeDataULCmd extends LvnengUplinkCmdExe {
|
||||
ByteBuf byteBuf = Unpooled.wrappedBuffer(lvnengUplinkMessage.getMsgBody());
|
||||
|
||||
ObjectNode additionalInfo = JacksonUtil.newObjectNode();
|
||||
// 从Tracer总获取当前时间
|
||||
long ts = TracerContextUtil.getCurrentTracer().getTracerTs();
|
||||
|
||||
//1预留
|
||||
byteBuf.skipBytes(2);
|
||||
@@ -84,8 +81,8 @@ public class LvnengV340RealTimeDataULCmd extends LvnengUplinkCmdExe {
|
||||
byte soc = byteBuf.readByte();
|
||||
additionalInfo.put("soc", soc);
|
||||
|
||||
/** 9 告警码,0-无告警 非0参靠枚举类
|
||||
* @see LvnengAlarmCodeEnum
|
||||
/* 9 告警码,0-无告警 非0参靠枚举类
|
||||
@see LvnengAlarmCodeEnum
|
||||
*/
|
||||
long alarmCode = byteBuf.readUnsignedInt();
|
||||
String alarmCodeDesc = alarmCode == 0L ? "" : LvnengAlarmCodeEnum.getByCode(alarmCode);
|
||||
@@ -231,7 +228,6 @@ public class LvnengV340RealTimeDataULCmd extends LvnengUplinkCmdExe {
|
||||
// 抢状态
|
||||
GunRunStatus gunRunStatus = parseGunRunStatus(pileStatus);
|
||||
GunRunStatusProto gunRunStatusProto = GunRunStatusProto.newBuilder()
|
||||
.setTs(ts)
|
||||
.setPileCode(pileCode)
|
||||
.setGunCode(gunCode + "")
|
||||
.setGunRunStatus(gunRunStatus)
|
||||
@@ -249,8 +245,7 @@ public class LvnengV340RealTimeDataULCmd extends LvnengUplinkCmdExe {
|
||||
if (StringUtils.isNotBlank(tradeNo)) {
|
||||
|
||||
// 充电进度
|
||||
ProtocolProto.ChargingProgressProto.Builder chargingProgressProtoBuilder = ProtocolProto.ChargingProgressProto.newBuilder()
|
||||
.setTs(ts)
|
||||
ChargingProgressProto.Builder chargingProgressProtoBuilder = ChargingProgressProto.newBuilder()
|
||||
.setPileCode(pileCode)
|
||||
.setGunCode(gunCode + "")
|
||||
.setTradeNo(tradeNo)
|
||||
|
||||
@@ -13,12 +13,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.TimePeriodDetail;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.*;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.TimePeriodDetail.PeriodItem;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.TransactionDetail;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.TransactionRecordRequest;
|
||||
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;
|
||||
@@ -189,7 +185,7 @@ public class LvnengV340TransactionRecordULCmd extends LvnengUplinkCmdExe {
|
||||
.build();
|
||||
//订单明细
|
||||
TransactionDetail transactionDetail = TransactionDetail.newBuilder()
|
||||
.setType(ProtocolProto.DetailType.TIME_PERIOD)
|
||||
.setType(DetailType.TIME_PERIOD)
|
||||
.setTimePeriod(timePeriodDetail)
|
||||
.build();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user