* !44 comment
* !39 添加下行日志打印
* !36 扩展计价领域模型
* !35 webui 初步成型
* !34 webui 初步成型
This commit is contained in:
三丙
2025-09-09 08:23:59 +00:00
parent 921045af8f
commit 58580ca11e
372 changed files with 37900 additions and 1206 deletions

View File

@@ -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 {

View File

@@ -15,7 +15,7 @@ import java.io.Serializable;
import java.util.UUID;
/**
* @author baigod
* @author 九筒
*/
@Data
@Accessors(chain = true)

View File

@@ -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;

View File

@@ -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());

View File

@@ -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());

View File

@@ -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 {

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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();