diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java index 65ef392ad..f5a122802 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/ykc/PileChannelEntity.java @@ -18,11 +18,29 @@ public class PileChannelEntity { */ private static final ConcurrentHashMap manager = new ConcurrentHashMap<>(); - public static void put(String pileSn, Channel channel) { + /** + * 校验channel是否保存 + */ + public static void checkChannel(String pileSn, Channel channel) { if (manager.containsKey(pileSn)) { - log.error("桩编号:【{}】已经是连接状态", pileSn); + // 如果manager中存在pileSn的连接,取出来对比 + Channel sourceChannel = manager.get(pileSn); + if (sourceChannel != null) { + // 两个做对比 + String sourceChannelId = sourceChannel.id().asLongText(); + String channelId = channel.id().asLongText(); + if (!StringUtils.equals(sourceChannelId, channelId)) { + // 不一致则更新 + manager.put(pileSn, channel); + } + } else { + // 为空就put + manager.put(pileSn, channel); + } + } else { + // 如果manager中不存在pileSn的连接,则保存 + manager.put(pileSn, channel); } - manager.put(pileSn, channel); } /** diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/HeartbeatRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/HeartbeatRequestHandler.java index ba6ebae9f..a68a25d91 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/HeartbeatRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/HeartbeatRequestHandler.java @@ -4,12 +4,11 @@ import com.google.common.primitives.Bytes; import com.jsowell.common.constant.Constants; import com.jsowell.common.core.domain.ykc.YKCDataProtocol; import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; -import com.jsowell.common.core.redis.RedisCache; +import com.jsowell.common.enums.ykc.PileChannelEntity; import com.jsowell.common.util.BytesUtil; import com.jsowell.common.util.YKCUtils; import com.jsowell.netty.factory.YKCOperateFactory; import com.jsowell.pile.service.IPileBasicInfoService; -import com.jsowell.pile.service.IPileConnectorInfoService; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,15 +23,9 @@ public class HeartbeatRequestHandler extends AbstractHandler { private final String type = YKCUtils.frameType2Str(YKCFrameTypeCode.HEART_BEAT_CODE.getBytes()); - @Autowired - private RedisCache redisCache; - @Autowired private IPileBasicInfoService pileBasicInfoService; - @Autowired - private IPileConnectorInfoService pileConnectorInfoService; - @Override public void afterPropertiesSet() throws Exception { YKCOperateFactory.register(type, this); @@ -54,6 +47,9 @@ public class HeartbeatRequestHandler extends AbstractHandler { // 保存时间 saveLastTime(pileSn); + // 校验channel + PileChannelEntity.checkChannel(pileSn, channel); + // 枪号 startIndex += length; length = 1; diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java index 7e5eb0e6b..f70afc24d 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/LoginRequestHandler.java @@ -196,7 +196,7 @@ public class LoginRequestHandler extends AbstractHandler { if (pileInfoVO != null) { flag = Constants.zeroByteArray; // 登录成功,保存桩号和channel的关系 - PileChannelEntity.put(pileSn, channel); + PileChannelEntity.checkChannel(pileSn, channel); // 更改桩和该桩下的枪口状态分别为 在线、空闲 公共方法修改状态 pileBasicInfoService.updateStatus(BytesUtil.bcd2Str(ykcDataProtocol.getFrameType()), pileSn, null, null, null); diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java index aff0fd85c..7c254eec4 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/handler/UploadRealTimeMonitorHandler.java @@ -9,6 +9,7 @@ import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum; import com.jsowell.common.enums.ykc.OrderStatusEnum; +import com.jsowell.common.enums.ykc.PileChannelEntity; import com.jsowell.common.enums.ykc.StartModeEnum; import com.jsowell.common.enums.ykc.YKCPileFaultReasonEnum; import com.jsowell.common.util.BytesUtil; @@ -108,6 +109,9 @@ public class UploadRealTimeMonitorHandler extends AbstractHandler { // 保存时间 saveLastTime(pileSn); + // 校验channel + PileChannelEntity.checkChannel(pileSn, channel); + // 枪号 startIndex += length; length = 1;