mirror of
https://gitee.com/san-bing/JChargePointProtocol
synced 2026-05-03 17:39:55 +08:00
云快充离线卡协议相关矫正
This commit is contained in:
@@ -6,28 +6,18 @@
|
||||
*/
|
||||
package sanbing.jcpp.app.adapter;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import sanbing.jcpp.app.service.PileProtocolService;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.CardInfo;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.FlagPriceProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardSyncRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PeriodProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PricingModelFlag;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PricingModelProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PricingModelRule;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.PricingModelType;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.SetPricingRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author baigod
|
||||
@@ -186,10 +176,10 @@ public class TestController {
|
||||
return ResponseEntity.ok("success");
|
||||
}
|
||||
|
||||
@GetMapping("/api/limitUpdateRequest")
|
||||
public ResponseEntity<String> limitUpdateRequest() {
|
||||
@GetMapping("/api/offlineCardBalanceUpdateRequest")
|
||||
public ResponseEntity<String> offlineCardBalanceUpdateRequest() {
|
||||
|
||||
pileProtocolService.limitUpdateRequest(ProtocolProto.LimitUpdateRequest.newBuilder()
|
||||
pileProtocolService.offlineCardBalanceUpdateRequest(OfflineCardBalanceUpdateRequest.newBuilder()
|
||||
.setCardNo("1000000000123456")
|
||||
.setPileCode("20231212000010")
|
||||
.setGunCode("01")
|
||||
|
||||
@@ -8,6 +8,8 @@ package sanbing.jcpp.app.service;
|
||||
|
||||
import sanbing.jcpp.infrastructure.queue.Callback;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardBalanceUpdateRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardSyncRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.SetPricingRequest;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
|
||||
@@ -139,17 +141,17 @@ public interface PileProtocolService {
|
||||
/**
|
||||
* 远程账户余额更新
|
||||
*/
|
||||
void limitUpdateRequest(ProtocolProto.LimitUpdateRequest request);
|
||||
void offlineCardBalanceUpdateRequest(OfflineCardBalanceUpdateRequest request);
|
||||
|
||||
/**
|
||||
* 远程账户余额更新应答
|
||||
*/
|
||||
void onLimitUpdateResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback);
|
||||
void onOfflineCardBalanceUpdateResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback);
|
||||
|
||||
/**
|
||||
* 离线卡数据同步
|
||||
*/
|
||||
void offlineCardSyncRequest(ProtocolProto.OfflineCardSyncRequest request);
|
||||
void offlineCardSyncRequest(OfflineCardSyncRequest request);
|
||||
|
||||
/**
|
||||
* 离线卡数据同步应答
|
||||
|
||||
@@ -455,7 +455,7 @@ public class DefaultPileProtocolService implements PileProtocolService {
|
||||
|
||||
|
||||
@Override
|
||||
public void onLimitUpdateResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback) {
|
||||
public void onOfflineCardBalanceUpdateResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback) {
|
||||
log.info("接收到充电桩远程账户余额更新应答 {}", uplinkQueueMessage);
|
||||
|
||||
// TODO 处理相关业务逻辑
|
||||
@@ -464,7 +464,7 @@ public class DefaultPileProtocolService implements PileProtocolService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void limitUpdateRequest(LimitUpdateRequest request) {
|
||||
public void offlineCardBalanceUpdateRequest(OfflineCardBalanceUpdateRequest request) {
|
||||
UUID messageId = UUID.randomUUID();
|
||||
UUID requestId = UUID.randomUUID();
|
||||
|
||||
@@ -474,8 +474,8 @@ public class DefaultPileProtocolService implements PileProtocolService {
|
||||
.setPileCode(request.getPileCode())
|
||||
.setRequestIdMSB(requestId.getMostSignificantBits())
|
||||
.setRequestIdLSB(requestId.getLeastSignificantBits())
|
||||
.setDownlinkCmd(DownlinkCmdEnum.LIMIT_UPDATE_REQUEST.name())
|
||||
.setLimitUpdateRequest(request);
|
||||
.setDownlinkCmd(DownlinkCmdEnum.OFFLINE_CARD_BALANCE_UPDATE_REQUEST.name())
|
||||
.setOfflineCardBalanceUpdateRequest(request);
|
||||
downlinkCallService.sendDownlinkMessage(downlinkRequestMessageBuilder,request.getPileCode());
|
||||
}
|
||||
|
||||
|
||||
@@ -224,9 +224,9 @@ public class ProtocolUplinkConsumerService extends AbstractConsumerService imple
|
||||
|
||||
pileProtocolService.postLockStatus(uplinkQueueMsg, callback);
|
||||
|
||||
} else if (uplinkQueueMsg.hasLimitUpdateResponse()) {
|
||||
} else if (uplinkQueueMsg.hasOfflineCardBalanceUpdateResponse()) {
|
||||
|
||||
pileProtocolService.onLimitUpdateResponse(uplinkQueueMsg, callback);
|
||||
pileProtocolService.onOfflineCardBalanceUpdateResponse(uplinkQueueMsg, callback);
|
||||
|
||||
} else if (uplinkQueueMsg.hasOfflineCardSyncResponse()) {
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ message UplinkQueueMessage {
|
||||
BmsHandshakeProto bmsHandshakeProto = 37;
|
||||
OtaResponse otaResponse = 38;
|
||||
GroundLockStatusProto groundLockStatusProto = 39;
|
||||
LimitUpdateResponse limitUpdateResponse = 40;
|
||||
OfflineCardBalanceUpdateResponse offlineCardBalanceUpdateResponse = 40;
|
||||
OfflineCardSyncResponse offlineCardSyncResponse = 41;
|
||||
|
||||
}
|
||||
@@ -99,7 +99,7 @@ message DownlinkRequestMessage {
|
||||
TransactionRecordResponse transactionRecordResponse = 27;
|
||||
RestartPileRequest restartPileRequest = 28;
|
||||
OtaRequest otaRequest = 29;
|
||||
LimitUpdateRequest limitUpdateRequest = 30;
|
||||
OfflineCardBalanceUpdateRequest offlineCardBalanceUpdateRequest = 30;
|
||||
OfflineCardSyncRequest offlineCardSyncRequest = 31;
|
||||
}
|
||||
|
||||
@@ -439,14 +439,14 @@ message GroundLockStatusProto {
|
||||
optional string additionalInfo = 20; // 附加信息
|
||||
}
|
||||
|
||||
message LimitUpdateRequest {
|
||||
message OfflineCardBalanceUpdateRequest {
|
||||
string pileCode = 1; // 充电桩编码
|
||||
string gunCode = 2; // 枪编号
|
||||
string cardNo = 3; // 物理卡号
|
||||
string limitYuan = 4; // 余额
|
||||
}
|
||||
|
||||
message LimitUpdateResponse {
|
||||
message OfflineCardBalanceUpdateResponse {
|
||||
string pileCode = 1; // 充电桩编码
|
||||
string cardNo = 2; // 物理卡号
|
||||
bool success = 3;
|
||||
|
||||
@@ -31,7 +31,7 @@ public enum DownlinkCmdEnum {
|
||||
|
||||
OTA_REQUEST,
|
||||
|
||||
LIMIT_UPDATE_REQUEST,
|
||||
OFFLINE_CARD_BALANCE_UPDATE_REQUEST,
|
||||
|
||||
OFFLINE_CARD_SYNC_REQUEST
|
||||
}
|
||||
@@ -101,13 +101,15 @@
|
||||
|
||||
#### 0x61 地锁数据上送
|
||||
`68 14 00 01 00 61 20 23 12 12 00 00 10 01 00 00 00 00 00 00 00 00 3D 6D`
|
||||
|
||||
---
|
||||
|
||||
#### 0x42 远程账户余额更新
|
||||
`68 18 04 00 00 42 20 23 12 12 00 00 10 01 30 31 00 00 00 00 00 00 a0 86 01 00 4e ac`
|
||||
|
||||
#### 0x41 远程账户余额更新应答
|
||||
`68 14 19 00 00 41 20 23 12 12 00 00 10 10 00 00 00 00 12 34 56 00 bc 16`
|
||||
|
||||
|
||||
#### 0x44 离线卡数据同步
|
||||
`68 3f 02 00 00 44 20 23 12 12 00 00 10 03 00 00 00 10 00 00 00 00 12 34 56 10 00 00 00 00 12 34 56 10 00 00 00 00 12 34 57 10 00 00 00 00 12 34 57 10 00 00 00 00 12 34 58 10 00 00 00 00 12 34 58 ba 94`
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ public enum YunKuaiChongDownlinkCmdEnum {
|
||||
|
||||
OTA_REQUEST(0x94),
|
||||
|
||||
LIMIT_UPDATE_REQUEST(0x42),
|
||||
OFFLINE_CARD_BALANCE_UPDATE_REQUEST(0x42),
|
||||
|
||||
OFFLINE_CARD_SYNC_REQUEST(0x44),
|
||||
|
||||
|
||||
@@ -6,21 +6,21 @@
|
||||
*/
|
||||
package sanbing.jcpp.protocol.yunkuaichong.v150.cmd;
|
||||
|
||||
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.LIMIT_UPDATE_REQUEST;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardBalanceUpdateRequest;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
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.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.OFFLINE_CARD_BALANCE_UPDATE_REQUEST;
|
||||
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 远程账户余额更新
|
||||
@@ -29,26 +29,26 @@ import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(0x42)
|
||||
public class YunKuaiChongV150LimitUpdateRequestDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
public class YunKuaiChongV150OfflineCardBalanceUpdateRequestDLCmd extends YunKuaiChongDownlinkCmdExe {
|
||||
|
||||
@Override
|
||||
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage message, ProtocolContext ctx) {
|
||||
log.info("{} 云快充1.5.0 远程账户余额更新", tcpSession);
|
||||
|
||||
if (!message.getMsg().hasLimitUpdateRequest()) {
|
||||
if (!message.getMsg().hasOfflineCardBalanceUpdateRequest()) {
|
||||
log.error("云快充1.5.0 远程账户余额更新消息体为空");
|
||||
return;
|
||||
}
|
||||
|
||||
// 初始化 buf
|
||||
ByteBuf msgBody = Unpooled.buffer(20);
|
||||
ProtocolProto.LimitUpdateRequest request = message.getMsg().getLimitUpdateRequest();
|
||||
OfflineCardBalanceUpdateRequest request = message.getMsg().getOfflineCardBalanceUpdateRequest();
|
||||
msgBody.writeBytes(encodePileCode(request.getPileCode()));
|
||||
msgBody.writeBytes(encodeGunCode(request.getGunCode()));
|
||||
msgBody.writeBytes(BCDUtil.toBytes(request.getCardNo()));
|
||||
msgBody.writeIntLE(new BigDecimal(request.getLimitYuan()).movePointRight(2).intValue());
|
||||
|
||||
super.encodeAndWriteFlush(LIMIT_UPDATE_REQUEST, msgBody, tcpSession);
|
||||
super.encodeAndWriteFlush(OFFLINE_CARD_BALANCE_UPDATE_REQUEST, msgBody, tcpSession);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,20 +6,21 @@
|
||||
*/
|
||||
package sanbing.jcpp.protocol.yunkuaichong.v150.cmd;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.OfflineCardBalanceUpdateResponse;
|
||||
import sanbing.jcpp.proto.gen.ProtocolProto.UplinkQueueMessage;
|
||||
import sanbing.jcpp.protocol.ProtocolContext;
|
||||
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;
|
||||
|
||||
|
||||
/**
|
||||
* 云快充1.5.0 余额更新应答
|
||||
@@ -28,7 +29,7 @@ import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
|
||||
*/
|
||||
@Slf4j
|
||||
@YunKuaiChongCmd(0x41)
|
||||
public class YunKuaiChongV150LimitUpdateResponseULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
public class YunKuaiChongV150OfflineCardBalanceUpdateResponseULCmd extends YunKuaiChongUplinkCmdExe {
|
||||
|
||||
private static final Map<Byte, String> UPDATE_RESULT;
|
||||
|
||||
@@ -63,8 +64,8 @@ public class YunKuaiChongV150LimitUpdateResponseULCmd extends YunKuaiChongUplink
|
||||
// 修改结果 0x00-修改成功 0x01-设备编号错误 0x02-卡号错误
|
||||
byte updateResult = byteBuf.readByte();
|
||||
|
||||
ProtocolProto.UplinkQueueMessage queueMessage = uplinkMessageBuilder(pileCode, tcpSession, message)
|
||||
.setLimitUpdateResponse(ProtocolProto.LimitUpdateResponse.newBuilder()
|
||||
UplinkQueueMessage queueMessage = uplinkMessageBuilder(pileCode, tcpSession, message)
|
||||
.setOfflineCardBalanceUpdateResponse(OfflineCardBalanceUpdateResponse.newBuilder()
|
||||
.setPileCode(pileCode)
|
||||
.setCardNo(cardNo)
|
||||
.setSuccess(updateResult == 0x00)
|
||||
Reference in New Issue
Block a user