diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java b/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java index dd4c817..7f0677b 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java @@ -75,6 +75,7 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene //判断失效的key是否为MQTT消费端存入的 String expiredKey = message.toString(); if(expiredKey.startsWith("MQTT:")){ + String nDid = expiredKey.split(":")[1]; //装置下线 csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode()); @@ -94,13 +95,16 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene Thread.sleep(1000); Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); if (!Objects.isNull(status) && Objects.equals(status,AccessEnum.OFFLINE.getCode())){ + final int[] mid = {2}; ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); ScheduledFuture runnableFuture = executor.scheduleAtFixedRate(() -> { log.info("定时发送接入请求..."); - csDeviceService.devAccess(nDid, version); + csDeviceService.devAccessMid(nDid,version, mid[0]); Integer status2 = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); if (Objects.equals(status2,AccessEnum.ONLINE.getCode())){ throw new BusinessException(CommonResponseEnum.SUCCESS); + } else { + mid[0] = mid[0] + 1; } //记录日志 logDto.setOperate("装置掉线,定时发送接入请求,装置为:" + nDid + ",请求的时间戳为:" + System.currentTimeMillis()); diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java index d91efa7..3098996 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java @@ -367,6 +367,17 @@ public class CsDeviceServiceImpl implements ICsDeviceService { publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false); } + public void devAccessMid(String nDid,String version,Integer mid) { + ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req(); + reqAndResParam.setMid(mid); + reqAndResParam.setDid(0); + reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode()); + reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_5.getCode())); + reqAndResParam.setExpire(-1); + logger.info("设备接入报文为:" + new Gson().toJson(reqAndResParam)); + publisher.send("/Pfm/DevCmd/"+version+"/"+nDid, new Gson().toJson(reqAndResParam),1,false); + } + /** * 平台对设备发起主题询问命令 */