Bläddra i källkod

[功能修复]添加一些日志

liuf 1 år sedan
förälder
incheckning
d347ecd91a

+ 3 - 1
src/main/java/com/tmzn/devicelinkykc/frameMsg/frameType/HeartFrameSend.java

@@ -20,7 +20,7 @@ import java.io.IOException;
 @Slf4j(topic = "HeartFrameSend")
 public class HeartFrameSend {
 
-    public void heartSend(DeviceConnectionMsg deviceConnectionMsg, DeviceStatus device){
+    public boolean heartSend(DeviceConnectionMsg deviceConnectionMsg, DeviceStatus device){
         byte[] send = heartSend(device.getPileCode(), device.getGunPort(), device.getGunStatus()==StatusConstant.FAULT?StatusConstant.HEART_GUNS_STATUS_FAULT:StatusConstant.HEART_GUNS_STATUS_OK);
         //log.info("heartSend>设备心跳消息上送>>>"+DataConversion.bytesToHexString(send));
         byte[] bytes = FrameDataSplicing.spliceing(deviceConnectionMsg.getMessageCount(), DeviceSendYkc.HEART_SEND.getFrameType(), DeviceSendYkc.HEART_SEND.getEncryptFlag(), send, send.length, deviceConnectionMsg.getIs18());
@@ -30,9 +30,11 @@ public class HeartFrameSend {
         } catch (IOException e) {
             log.info("pileCode:"+device.getPileCode()+" ,heart push frame Exception");
             e.printStackTrace();
+            return false;
         }
         deviceConnectionMsg.incrementMessageCount();
         log.info("pileCode:"+device.getPileCode()+" ,heart push frame over");
+        return true;
     }
 
     private   byte[] heartSend(String deviceId , int guns, byte port) {

+ 1 - 1
src/main/java/com/tmzn/devicelinkykc/message/DeviceMsgHandle.java

@@ -746,7 +746,7 @@ public class DeviceMsgHandle {
         redisCache.setCacheMapValue(port == 1 ? RedisConstant.ONLINE_DEVICE_ONE : RedisConstant.ONLINE_DEVICE_TWO, statusServiceOne.getPileCode(), statusServiceOne);
 
         //为啥要过期20分
-        redisCache.expire(port == 1 ? RedisConstant.ONLINE_DEVICE_ONE : RedisConstant.ONLINE_DEVICE_TWO, 60 * 1001 * 20, TimeUnit.MILLISECONDS);
+        redisCache.expire(port == 1 ? RedisConstant.ONLINE_DEVICE_ONE : RedisConstant.ONLINE_DEVICE_TWO, 60 * 1001 * 60*24, TimeUnit.MILLISECONDS);
 
         DeviceConnectionMsg deviceConnectionMsg = socketHandle.getDeviceConnection(statusServiceOne.getPileCode());
         if (deviceConnectionMsg == null || deviceConnectionMsg.getLoginStatus() != Constant.DEVICE_LOGIN_STATUS) {

+ 4 - 0
src/main/java/com/tmzn/devicelinkykc/socket/DeviceConnectionMsg.java

@@ -23,6 +23,7 @@ public class DeviceConnectionMsg {
     private Integer loginStatus;
     private boolean is18;
     private String ver;
+    private long loginTime;
 
     public DeviceConnectionMsg(Socket socket, String deviceId,String imei,String deviceSn,String ver) {
         this.heartTime= 0L;
@@ -40,6 +41,7 @@ public class DeviceConnectionMsg {
         try {
             this.inputStream = new BufferedInputStream(socket.getInputStream()) ;
             this.outputStream =new BufferedOutputStream(socket.getOutputStream()) ;
+            this.loginTime = System.currentTimeMillis();
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -130,4 +132,6 @@ public class DeviceConnectionMsg {
     public void setLoginStatus(Integer loginStatus) {
         this.loginStatus = loginStatus;
     }
+
+    public long getLoginTime(){return loginTime;}
 }

+ 1 - 0
src/main/java/com/tmzn/devicelinkykc/taskQueue/runner/DeviceOnlineRunner.java

@@ -109,6 +109,7 @@ public class DeviceOnlineRunner {
                     }
                     boolean needLogin = false;
                     if (!socketHandle.existDeviceConnection(deviceStatus.getPileCode())) {
+                        logger.info("链接不存在{}",device.getPileCode());
                         needLogin = true;
                     }else{
                         DeviceConnectionMsg deviceConnection = socketHandle.getDeviceConnection(deviceStatus.getPileCode());

+ 30 - 20
src/main/java/com/tmzn/devicelinkykc/taskQueue/runner/MsgHeartRunner.java

@@ -69,24 +69,36 @@ public class MsgHeartRunner {
         String portStatusCacheKey = portId==1?RedisConstant.ONLINE_DEVICE_ONE:RedisConstant.ONLINE_DEVICE_TWO;
         //1:当上一次的心跳和本次的心跳相差大于30秒证明已经3次没收到心跳回复了,进行重新登录
         //2:设备第一次上线时未触发过登录,设备连接集合中初始话的心跳时间还是0,符合该判断,进行登录
-        DeviceStatus oneDs = redisCache.getCacheMapValue(portStatusCacheKey, devicePileCode);
-
 
         if (deviceConnectionMsg.getLoginStatus()== Constant.DEVICE_NOT_LOGIN_STATUS) {
-            if (oneDs != null && oneDs.getOnlineStatus() == DeviceOnlineStatus.ONLINE && (System.currentTimeMillis() - heartTime) > 50 * 1000L) {
-                QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
-                deviceQueryWrapper.eq("pile_code", devicePileCode).eq("disabled", DeviceOnlineStatus.NORMAL);
-                Device device = deviceService.getOne(deviceQueryWrapper);
-                if(device!=null){
-                    loginFrame.loginMsgSend(deviceConnectionMsg,device);
-                }
-                log.info("heartTaskAsyncPool-1>not longin and heart normal>>" + devicePileCode);
+            //刚登录5秒内不发送心跳 避免重复发送LoginMsg
+            if ((System.currentTimeMillis() - deviceConnectionMsg.getLoginTime()) < 8 * 1000) {
                 return;
             }
         }
+
+        DeviceStatus oneDs = redisCache.getCacheMapValue(portStatusCacheKey, devicePileCode);
         if(oneDs==null){
+            log.info("not found ones:{}",devicePileCode);
             return;
         }
+        boolean res = heartFrameSend.heartSend(deviceConnectionMsg, oneDs);
+        if(res){
+           return;
+        }
+
+//        if (deviceConnectionMsg.getLoginStatus()== Constant.DEVICE_NOT_LOGIN_STATUS) {
+//            if (oneDs != null && oneDs.getOnlineStatus() == DeviceOnlineStatus.ONLINE && (System.currentTimeMillis() - heartTime) > 50 * 1000L) {
+//                QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
+//                deviceQueryWrapper.eq("pile_code", devicePileCode).eq("disabled", DeviceOnlineStatus.NORMAL);
+//                Device device = deviceService.getOne(deviceQueryWrapper);
+//                if(device!=null){
+//                   // loginFrame.loginMsgSend(deviceConnectionMsg,device);
+//                }
+//                log.info("heartTaskAsyncPool-1>not longin and heart normal>>" + devicePileCode);
+//                return;
+//            }
+//        }
 
         if (oneDs.getOnlineStatus() == DeviceOnlineStatus.ONLINE && (System.currentTimeMillis() - heartTime) > 50 * 1000L) {
             log.info("pileCode:" + devicePileCode + " loging... ..." + (System.currentTimeMillis() - heartTime));
@@ -95,24 +107,22 @@ public class MsgHeartRunner {
                 //如果登录次数30秒内登三次就算断开
                 a = redisCache.getCacheObject(RedisConstant.DEVICE_LOGIN_YKC + devicePileCode);
                 if (a > 3) {
+                    log.info("30s no heart {} reset",devicePileCode);
                     socketHandle.removeDeviceConnection(devicePileCode);
                 } else {
-                    QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
-                    deviceQueryWrapper.eq("pile_code", devicePileCode).eq("disabled", DeviceOnlineStatus.NORMAL);
-                    Device device = deviceService.getOne(deviceQueryWrapper);
-                    if(device!=null){
-                        loginFrame.loginMsgSend(deviceConnectionMsg, device);
-                    }
+//                    QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
+//                    deviceQueryWrapper.eq("pile_code", devicePileCode).eq("disabled", DeviceOnlineStatus.NORMAL);
+//                    Device device = deviceService.getOne(deviceQueryWrapper);
+//                    if(device!=null){
+////                        loginFrame.loginMsgSend(deviceConnectionMsg, device);
+//                        socketHandle.removeDeviceConnection(devicePileCode);
+//                    }
                 }
                 a++;
                 redisCache.setCacheObject(RedisConstant.DEVICE_LOGIN_YKC + devicePileCode, a,32 * 1000, TimeUnit.MILLISECONDS);
             } else {
                 redisCache.setCacheObject(RedisConstant.DEVICE_LOGIN_YKC + devicePileCode, a, 32 * 1000, TimeUnit.MILLISECONDS);
             }
-        }else {
-            //存在设备在线状态的,上送心跳
-            //  log.info("heartSend-1>>>"+devicePileCode);
-            heartFrameSend.heartSend(deviceConnectionMsg, oneDs);
         }
 
     }