代码优化
This commit is contained in:
@@ -33,7 +33,6 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@@ -98,77 +97,92 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
|
|||||||
String expiredKey = message.toString();
|
String expiredKey = message.toString();
|
||||||
if(expiredKey.startsWith("MQTT:")){
|
if(expiredKey.startsWith("MQTT:")){
|
||||||
String nDid = expiredKey.split(":")[1];
|
String nDid = expiredKey.split(":")[1];
|
||||||
String version = csTopicService.getVersion(nDid);
|
executeMainTask(nDid);
|
||||||
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
|
||||||
executeMainTask(scheduler,nDid,version);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//主任务
|
//主任务
|
||||||
//1.装置心跳断连
|
//1.装置心跳断连
|
||||||
//2.MQTT客户端不在线
|
//2.MQTT客户端不在线
|
||||||
private void executeMainTask(ScheduledExecutorService scheduler, String nDid, String version) {
|
private void executeMainTask(String nDid) {
|
||||||
log.info("{}->装置离线", nDid);
|
log.info("{}->装置离线", nDid);
|
||||||
DeviceLogDTO logDto = new DeviceLogDTO();
|
DeviceLogDTO logDto = new DeviceLogDTO();
|
||||||
logDto.setUserName("运维管理员");
|
logDto.setUserName("运维管理员");
|
||||||
logDto.setLoginName("njcnyw");
|
logDto.setLoginName("njcnyw");
|
||||||
//判断mqtt
|
|
||||||
String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
|
|
||||||
boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
|
|
||||||
//心跳异常,但是客户端在线,则发送接入请求
|
|
||||||
if (mqttClient) {
|
|
||||||
csDeviceService.devAccessAskTemplate(nDid,version,1);
|
|
||||||
redisUtil.saveByKey(AppRedisKey.DEVICE_MID + nDid,1);
|
|
||||||
try {
|
|
||||||
Thread.sleep(5000);
|
|
||||||
Object object = redisUtil.getObjectByKey("online" + nDid);
|
|
||||||
if (Objects.nonNull(object)) {
|
|
||||||
scheduler.shutdown();
|
|
||||||
logDto.setOperate(nDid + "客户端在线重连成功");
|
|
||||||
} else {
|
|
||||||
//装置下线
|
//装置下线
|
||||||
csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
||||||
//装置调整为注册状态
|
//装置调整为注册状态
|
||||||
csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode());
|
csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode());
|
||||||
//startScheduledTask(scheduler,nDid,version);
|
|
||||||
//logDto.setOperate(nDid +"客户端离线进入定时任务");
|
|
||||||
logDto.setOperate(nDid +"装置离线");
|
logDto.setOperate(nDid +"装置离线");
|
||||||
sendMessage(nDid);
|
sendMessage(nDid);
|
||||||
|
|
||||||
//记录装置掉线时间
|
//记录装置掉线时间
|
||||||
CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
|
CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
|
||||||
record.setOfflineTime(LocalDateTime.now());
|
record.setOfflineTime(LocalDateTime.now());
|
||||||
onlineLogsService.updateById(record);
|
onlineLogsService.updateById(record);
|
||||||
|
|
||||||
scheduler.shutdown();
|
|
||||||
}
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
scheduler.shutdown();
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
csLogsFeignClient.addUserLog(logDto);
|
csLogsFeignClient.addUserLog(logDto);
|
||||||
}
|
}
|
||||||
//客户端不在线则修改装置状态,进入定时任务
|
|
||||||
else {
|
|
||||||
//装置下线
|
|
||||||
csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
|
||||||
//装置调整为注册状态
|
|
||||||
csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode());
|
|
||||||
logDto.setOperate(nDid +"主任务执行失败,装置下线");
|
|
||||||
//logDto.setOperate(nDid +"主任务执行失败,装置下线,进入定时任务");
|
|
||||||
csLogsFeignClient.addUserLog(logDto);
|
|
||||||
//log.info("客户端离线进入定时任务...");
|
|
||||||
//startScheduledTask(scheduler,nDid,version);
|
|
||||||
sendMessage(nDid);
|
|
||||||
|
|
||||||
//记录装置掉线时间
|
//主任务
|
||||||
CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
|
//1.装置心跳断连
|
||||||
record.setOfflineTime(LocalDateTime.now());
|
//2.MQTT客户端不在线
|
||||||
onlineLogsService.updateById(record);
|
// private void executeMainTask(String nDid, String version) {
|
||||||
|
// ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||||
scheduler.shutdown();
|
// log.info("{}->装置离线", nDid);
|
||||||
}
|
// DeviceLogDTO logDto = new DeviceLogDTO();
|
||||||
}
|
// logDto.setUserName("运维管理员");
|
||||||
|
// logDto.setLoginName("njcnyw");
|
||||||
|
// //判断mqtt
|
||||||
|
// String clientName = "NJCN-" + nDid.substring(nDid.length() - 6);
|
||||||
|
// boolean mqttClient = mqttUtil.judgeClientOnline(clientName);
|
||||||
|
// //心跳异常,但是客户端在线,则发送接入请求
|
||||||
|
// if (mqttClient) {
|
||||||
|
// csDeviceService.devAccessAskTemplate(nDid,version,1);
|
||||||
|
// redisUtil.saveByKey(AppRedisKey.DEVICE_MID + nDid,1);
|
||||||
|
// try {
|
||||||
|
// Thread.sleep(5000);
|
||||||
|
// Object object = redisUtil.getObjectByKey("online" + nDid);
|
||||||
|
// if (Objects.nonNull(object)) {
|
||||||
|
// scheduler.shutdown();
|
||||||
|
// logDto.setOperate(nDid + "客户端在线重连成功");
|
||||||
|
// } else {
|
||||||
|
// //装置下线
|
||||||
|
// csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
||||||
|
// //装置调整为注册状态
|
||||||
|
// csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode());
|
||||||
|
// logDto.setOperate(nDid +"装置离线");
|
||||||
|
// sendMessage(nDid);
|
||||||
|
//
|
||||||
|
// //记录装置掉线时间
|
||||||
|
// CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
|
||||||
|
// record.setOfflineTime(LocalDateTime.now());
|
||||||
|
// onlineLogsService.updateById(record);
|
||||||
|
//
|
||||||
|
// scheduler.shutdown();
|
||||||
|
// }
|
||||||
|
// } catch (InterruptedException e) {
|
||||||
|
// scheduler.shutdown();
|
||||||
|
// throw new RuntimeException(e);
|
||||||
|
// }
|
||||||
|
// csLogsFeignClient.addUserLog(logDto);
|
||||||
|
// }
|
||||||
|
// //客户端不在线则修改装置状态,进入定时任务
|
||||||
|
// else {
|
||||||
|
// //装置下线
|
||||||
|
// csEquipmentDeliveryService.updateRunStatusBynDid(nDid, AccessEnum.OFFLINE.getCode());
|
||||||
|
// //装置调整为注册状态
|
||||||
|
// csEquipmentDeliveryService.updateStatusBynDid(nDid,AccessEnum.REGISTERED.getCode());
|
||||||
|
// logDto.setOperate(nDid +"主任务执行失败,装置下线");
|
||||||
|
// csLogsFeignClient.addUserLog(logDto);
|
||||||
|
// sendMessage(nDid);
|
||||||
|
//
|
||||||
|
// //记录装置掉线时间
|
||||||
|
// CsDeviceOnlineLogs record = onlineLogsService.findLastData(nDid);
|
||||||
|
// record.setOfflineTime(LocalDateTime.now());
|
||||||
|
// onlineLogsService.updateById(record);
|
||||||
|
//
|
||||||
|
// scheduler.shutdown();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
private void startScheduledTask(ScheduledExecutorService scheduler, String nDid, String version) {
|
private void startScheduledTask(ScheduledExecutorService scheduler, String nDid, String version) {
|
||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
|
|||||||
Reference in New Issue
Block a user