mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-12 19:29:52 +08:00
预约指令获取返回值
This commit is contained in:
@@ -5,7 +5,9 @@ import com.jsowell.common.constant.CacheConstants;
|
|||||||
import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
|
import com.jsowell.common.core.domain.ykc.YKCDataProtocol;
|
||||||
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
|
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
|
||||||
import com.jsowell.common.core.redis.RedisCache;
|
import com.jsowell.common.core.redis.RedisCache;
|
||||||
|
import com.jsowell.common.protocol.SyncPromise;
|
||||||
import com.jsowell.common.util.BytesUtil;
|
import com.jsowell.common.util.BytesUtil;
|
||||||
|
import com.jsowell.common.util.RpcUtil;
|
||||||
import com.jsowell.common.util.YKCUtils;
|
import com.jsowell.common.util.YKCUtils;
|
||||||
import com.jsowell.netty.factory.YKCOperateFactory;
|
import com.jsowell.netty.factory.YKCOperateFactory;
|
||||||
import com.jsowell.pile.domain.PileReservationInfo;
|
import com.jsowell.pile.domain.PileReservationInfo;
|
||||||
@@ -36,7 +38,7 @@ public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, ChannelHandlerContext channel) {
|
public byte[] supplyProcess(YKCDataProtocol ykcDataProtocol, ChannelHandlerContext ctx) {
|
||||||
// log.info("[====远程更新应答====] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString());
|
// log.info("[====远程更新应答====] param:{}, channel:{}", JSON.toJSONString(ykcDataProtocol), channel.toString());
|
||||||
// 消息体
|
// 消息体
|
||||||
byte[] msgBody = ykcDataProtocol.getMsgBody();
|
byte[] msgBody = ykcDataProtocol.getMsgBody();
|
||||||
@@ -55,7 +57,7 @@ public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
|||||||
String pileSn = BytesUtil.bcd2Str(pileSnByteArr);
|
String pileSn = BytesUtil.bcd2Str(pileSnByteArr);
|
||||||
|
|
||||||
// 保存时间
|
// 保存时间
|
||||||
saveLastTimeAndCheckChannel(pileSn, channel);
|
saveLastTimeAndCheckChannel(pileSn, ctx);
|
||||||
|
|
||||||
// 枪口号
|
// 枪口号
|
||||||
startIndex += length;
|
startIndex += length;
|
||||||
@@ -78,6 +80,18 @@ public class ReservationChargingResponseHandler extends AbstractYkcHandler {
|
|||||||
log.info("0x59预约充电响应, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果:{}, 失败原因:{}",
|
log.info("0x59预约充电响应, 交易流水号:{}, 桩SN:{}, 枪口号:{}, 结果:{}, 失败原因:{}",
|
||||||
transactionCode, pileSn, connectorCode, resultCode, failedReason);
|
transactionCode, pileSn, connectorCode, resultCode, failedReason);
|
||||||
|
|
||||||
|
// 根据请求id,在集合中找到与外部线程通信的SyncPromise对象
|
||||||
|
String msgId = ctx.channel().id().toString() + "_" + YKCFrameTypeCode.RESERVATION_CHARGING_SETUP_CODE.getCode();
|
||||||
|
log.info("同步获取响应数据-收到消息, msgId:{}", msgId);
|
||||||
|
SyncPromise syncPromise = RpcUtil.getSyncPromiseMap().get(msgId);
|
||||||
|
if(syncPromise != null) {
|
||||||
|
// 设置响应结果
|
||||||
|
syncPromise.setRpcResult(ykcDataProtocol.getBytes());
|
||||||
|
// 唤醒外部线程
|
||||||
|
log.info("同步获取响应数据-唤醒外部线程, SyncPromise:{}", JSON.toJSONString(syncPromise));
|
||||||
|
syncPromise.wake();
|
||||||
|
}
|
||||||
|
|
||||||
// 如果收到成功, 从redis取值, 保存到数据库
|
// 如果收到成功, 从redis取值, 保存到数据库
|
||||||
if ("01".equals(resultCode)) {
|
if ("01".equals(resultCode)) {
|
||||||
// 预约成功, 删除redis中的预约信息
|
// 预约成功, 删除redis中的预约信息
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import com.jsowell.common.enums.ykc.PileChannelEntity;
|
|||||||
import com.jsowell.common.util.BytesUtil;
|
import com.jsowell.common.util.BytesUtil;
|
||||||
import com.jsowell.common.util.StringUtils;
|
import com.jsowell.common.util.StringUtils;
|
||||||
import com.jsowell.common.util.YKCUtils;
|
import com.jsowell.common.util.YKCUtils;
|
||||||
import com.jsowell.common.util.RpcUtil;
|
|
||||||
import com.jsowell.common.protocol.SyncPromise;
|
|
||||||
import com.jsowell.netty.service.yunkuaichong.YKCBusinessService;
|
import com.jsowell.netty.service.yunkuaichong.YKCBusinessService;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.*;
|
import io.netty.channel.*;
|
||||||
@@ -136,21 +134,21 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
|
|||||||
String frameType = YKCUtils.frameType2Str(frameTypeBytes);
|
String frameType = YKCUtils.frameType2Str(frameTypeBytes);
|
||||||
|
|
||||||
// 判断该帧类型是否为某请求帧的应答帧
|
// 判断该帧类型是否为某请求帧的应答帧
|
||||||
String requestFrameType = YKCFrameTypeCode.PileAnswersRelation.getRequestFrameType(frameType);
|
// String requestFrameType = YKCFrameTypeCode.PileAnswersRelation.getRequestFrameType(frameType);
|
||||||
// log.info("同步获取响应数据-判断该帧类型是否为某请求帧的应答帧, frameType:{}, requestFrameType:{}", frameType, requestFrameType);
|
// log.info("同步获取响应数据-判断该帧类型是否为某请求帧的应答帧, frameType:{}, requestFrameType:{}", frameType, requestFrameType);
|
||||||
if (StringUtils.isNotBlank(requestFrameType)) {
|
// if (StringUtils.isNotBlank(requestFrameType)) {
|
||||||
// 根据请求id,在集合中找到与外部线程通信的SyncPromise对象
|
// // 根据请求id,在集合中找到与外部线程通信的SyncPromise对象
|
||||||
String msgId = ctx.channel().id().toString() + "_" + requestFrameType;
|
// String msgId = ctx.channel().id().toString() + "_" + requestFrameType;
|
||||||
// log.info("同步获取响应数据-收到消息, msgId:{}", msgId);
|
// // log.info("同步获取响应数据-收到消息, msgId:{}", msgId);
|
||||||
SyncPromise syncPromise = RpcUtil.getSyncPromiseMap().get(msgId);
|
// SyncPromise syncPromise = RpcUtil.getSyncPromiseMap().get(msgId);
|
||||||
if(syncPromise != null) {
|
// if(syncPromise != null) {
|
||||||
// 设置响应结果
|
// // 设置响应结果
|
||||||
syncPromise.setRpcResult(ykcDataProtocol.getBytes());
|
// syncPromise.setRpcResult(ykcDataProtocol.getBytes());
|
||||||
// 唤醒外部线程
|
// // 唤醒外部线程
|
||||||
// log.info("同步获取响应数据-唤醒外部线程, SyncPromise:{}", JSON.toJSONString(syncPromise));
|
// // log.info("同步获取响应数据-唤醒外部线程, SyncPromise:{}", JSON.toJSONString(syncPromise));
|
||||||
syncPromise.wake();
|
// syncPromise.wake();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 获取序列号域
|
// 获取序列号域
|
||||||
int serialNumber = BytesUtil.bytesToIntLittle(ykcDataProtocol.getSerialNumber());
|
int serialNumber = BytesUtil.bytesToIntLittle(ykcDataProtocol.getSerialNumber());
|
||||||
|
|||||||
Reference in New Issue
Block a user