!27 Merge branch 'master' into Feat_远程账户余额更新

* 离线卡数据同步(0x44) 离线卡数据同步应答(0x43)
* Merge branch 'master' into Feat_远程账户余额更新
* 离线卡数据同步(0x44) 离线卡数据同步应答(0x43)
* 下发卡个数 参数校验
* Merge branch 'master' into Feat_远程账户余额更新
* 离线卡数据同步(0x44)  离线卡数据同步应答(0x43)
* 远程账户余额更新(0x42)  余额更新应答(0x41)
This commit is contained in:
八万
2025-08-25 03:05:54 +00:00
committed by 三丙
parent 361c00687a
commit 6a8157e179
15 changed files with 495 additions and 14 deletions

View File

@@ -6,16 +6,28 @@
*/
package sanbing.jcpp.app.adapter;
import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
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.*;
import java.math.BigDecimal;
import java.util.HashMap;
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;
/**
* @author baigod
@@ -174,4 +186,33 @@ public class TestController {
return ResponseEntity.ok("success");
}
@GetMapping("/api/limitUpdateRequest")
public ResponseEntity<String> limitUpdateRequest() {
pileProtocolService.limitUpdateRequest(ProtocolProto.LimitUpdateRequest.newBuilder()
.setCardNo("1000000000123456")
.setPileCode("20231212000010")
.setGunCode("01")
.setLimitYuan("1000")
.build());
return ResponseEntity.ok("success");
}
@GetMapping("/api/offlineCardSyncRequest")
public ResponseEntity<String> offlineCardSyncRequest() {
List<CardInfo> cardInfos = Lists.newArrayList(CardInfo.newBuilder().setCardNo("1000000000123456").setLogicCardNo("1000000000123456").build(),
CardInfo.newBuilder().setCardNo("1000000000123457").setLogicCardNo("1000000000123457").build(),
CardInfo.newBuilder().setCardNo("1000000000123458").setLogicCardNo("1000000000123458").build());
pileProtocolService.offlineCardSyncRequest(OfflineCardSyncRequest.newBuilder()
.setPileCode("20231212000010")
.setTotal(cardInfos.size())
.addAllCardInfo(cardInfos)
.build());
return ResponseEntity.ok("success");
}
}

View File

@@ -136,4 +136,23 @@ public interface PileProtocolService {
*/
void postLockStatus(UplinkQueueMessage uplinkQueueMessage, Callback callback);
/**
* 远程账户余额更新
*/
void limitUpdateRequest(ProtocolProto.LimitUpdateRequest request);
/**
* 远程账户余额更新应答
*/
void onLimitUpdateResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback);
/**
* 离线卡数据同步
*/
void offlineCardSyncRequest(ProtocolProto.OfflineCardSyncRequest request);
/**
* 离线卡数据同步应答
*/
void onOfflineCardSyncResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback);
}

View File

@@ -444,12 +444,63 @@ public class DefaultPileProtocolService implements PileProtocolService {
int parkStatus = groundLockStatusProto.getParkStatus();
int lockBattery = groundLockStatusProto.getLockBattery();
int alarmStatus = groundLockStatusProto.getAlarmStatus();
log.info("地锁状态信息: 桩编码: {}, 枪号: {}, 车位锁状态: {}, 车位状态: {}, 地锁电量: {}%, 报警状态: {}",
log.info("地锁状态信息: 桩编码: {}, 枪号: {}, 车位锁状态: {}, 车位状态: {}, 地锁电量: {}%, 报警状态: {}",
pileCode, gunCode, lockStatus, parkStatus, lockBattery, alarmStatus);
// TODO 处理相关业务逻辑,比如保存地锁状态信息到数据库
callback.onSuccess();
}
@Override
public void onLimitUpdateResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback) {
log.info("接收到充电桩远程账户余额更新应答 {}", uplinkQueueMessage);
// TODO 处理相关业务逻辑
callback.onSuccess();
}
@Override
public void limitUpdateRequest(LimitUpdateRequest request) {
UUID messageId = UUID.randomUUID();
UUID requestId = UUID.randomUUID();
DownlinkRequestMessage.Builder downlinkRequestMessageBuilder = DownlinkRequestMessage.newBuilder()
.setMessageIdMSB(messageId.getMostSignificantBits())
.setMessageIdLSB(messageId.getLeastSignificantBits())
.setPileCode(request.getPileCode())
.setRequestIdMSB(requestId.getMostSignificantBits())
.setRequestIdLSB(requestId.getLeastSignificantBits())
.setDownlinkCmd(DownlinkCmdEnum.LIMIT_UPDATE_REQUEST.name())
.setLimitUpdateRequest(request);
downlinkCallService.sendDownlinkMessage(downlinkRequestMessageBuilder,request.getPileCode());
}
@Override
public void offlineCardSyncRequest(OfflineCardSyncRequest request) {
UUID messageId = UUID.randomUUID();
UUID requestId = UUID.randomUUID();
DownlinkRequestMessage.Builder downlinkRequestMessageBuilder = DownlinkRequestMessage.newBuilder()
.setMessageIdMSB(messageId.getMostSignificantBits())
.setMessageIdLSB(messageId.getLeastSignificantBits())
.setPileCode(request.getPileCode())
.setRequestIdMSB(requestId.getMostSignificantBits())
.setRequestIdLSB(requestId.getLeastSignificantBits())
.setDownlinkCmd(DownlinkCmdEnum.OFFLINE_CARD_SYNC_REQUEST.name())
.setOfflineCardSyncRequest(request);
downlinkCallService.sendDownlinkMessage(downlinkRequestMessageBuilder,request.getPileCode());
}
@Override
public void onOfflineCardSyncResponse(UplinkQueueMessage uplinkQueueMessage, Callback callback) {
log.info("接收到充电桩离线卡数据同步应答 {}", uplinkQueueMessage);
// TODO 处理相关业务逻辑
callback.onSuccess();
}

View File

@@ -223,7 +223,15 @@ public class ProtocolUplinkConsumerService extends AbstractConsumerService imple
} else if (uplinkQueueMsg.hasGroundLockStatusProto()) {
pileProtocolService.postLockStatus(uplinkQueueMsg, callback);
} else if (uplinkQueueMsg.hasLimitUpdateResponse()) {
pileProtocolService.onLimitUpdateResponse(uplinkQueueMsg, callback);
} else if (uplinkQueueMsg.hasOfflineCardSyncResponse()) {
pileProtocolService.onOfflineCardSyncResponse(uplinkQueueMsg, callback);
} else {
callback.onSuccess();