远程启动充电指令增加同步等待充电桩应答并打印结果

pushStartChargingCommand 发送 0x34 启机指令后,通过 SyncPromise 同步等待 0x33 应答(最多3秒),在同一线程打印启动结果。效果:成功打印成功,失败打印失败(原因),超时打印超时提示。
This commit is contained in:
Guoqs
2026-07-25 17:01:41 +08:00
parent f11b781c27
commit c013f1f90d
2 changed files with 40 additions and 0 deletions

View File

@@ -1,5 +1,7 @@
package com.jsowell.netty.handler.yunkuaichong;
import com.jsowell.common.protocol.SyncPromise;
import com.jsowell.common.util.RpcUtil;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.constant.mq.ThirdPartyRabbitConstants;
import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
@@ -20,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.CompletableFuture;
/**
@@ -101,6 +104,17 @@ public class RemoteStartChargingRequestHandler extends AbstractYkcHandler {
String failedReasonMsg = ChargingFailedReasonEnum.getMsgByCode(Integer.parseInt(failedReason, 16));
log.info("远程启动充电命令回复-交易流水号:{}, 桩编码:{}, 枪号:{}, 启动结果(00-失败, 01-成功):{}, 失败原因:{}", transactionCode, pileSn, connectorCode, startResult, failedReasonMsg);
// 唤醒 pushStartChargingCommand 中等待应答的线程
String responseKey = transactionCode + "_0x33";
SyncPromise syncPromise = RpcUtil.getSyncPromiseMap().get(responseKey);
if (syncPromise != null) {
String resultMsg = StringUtils.equals(startResult, Constants.ONE)
? "成功"
: "失败(" + failedReasonMsg + ")";
syncPromise.setRpcResult(resultMsg.getBytes(StandardCharsets.UTF_8));
syncPromise.wake();
}
if (StringUtils.equals(startResult, Constants.DOUBLE_ZERO)) {
// 启动失败 2025年4月2日16点39分修改逻辑:启动失败后不退款, 使用支付完成未启动定时任务退款
// orderBasicInfoService.chargingPileFailedToStart(transactionCode, failedReasonMsg);