|
|
@@ -26,7 +26,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* @author skyline
|
|
|
@@ -89,21 +88,24 @@ public class EnNotifyServiceImpl implements EnNotifyService {
|
|
|
.setType(2)
|
|
|
.setOfflineStatus(connectorStatusInfo.getStatus());
|
|
|
monitorLogService.save(monitorLog);
|
|
|
- redisTemplate.opsForValue().set(RedisKeys.OFFLINE.concat(connectorStatusInfo.getConnectorId()), "", 1, TimeUnit.DAYS);
|
|
|
- // TODO: 2023-09-14 通知后面改队列处理,统计站点离线总数量
|
|
|
- MailUtil.send(notifyEmail, "【设备离线通知】", "站点:%s,设备%s离线"
|
|
|
- .formatted(kymCache.getStationName(monitorLog.getStationId()), kymCache.getShortId(monitorLog.getSn())), false);
|
|
|
+
|
|
|
+ // 离线设备放入队列,5分钟之后如果还未恢复则放入长时间离线设备集合中并发送提醒,上线后发送提醒
|
|
|
+ redisTemplate.opsForZSet().add(RedisKeys.OFFLINE, connectorStatusInfo.getConnectorId(), System.currentTimeMillis() + 5 * 60 * 1000);
|
|
|
+
|
|
|
+// MailUtil.send(notifyEmail, "【设备离线通知】", "站点:%s,设备%s离线"
|
|
|
+// .formatted(kymCache.getStationName(monitorLog.getStationId()), kymCache.getShortId(monitorLog.getSn())), false);
|
|
|
} else {
|
|
|
- // 查询redis是否有记录,则是之前离线的机器上线了,有就删除并更新数据库恢复时间
|
|
|
- var exist = redisTemplate.hasKey(RedisKeys.OFFLINE.concat(connectorStatusInfo.getConnectorId()));
|
|
|
- if (Boolean.TRUE.equals(exist)) {
|
|
|
- monitorLogService.lambdaUpdate()
|
|
|
- .eq(MonitorLog::getSn, connectorStatusInfo.getConnectorId())
|
|
|
- .eq(MonitorLog::getIsRecover, MonitorLog.IS_RECOVER_未恢复) // 未恢复的记录
|
|
|
- .set(MonitorLog::getRecoverTime, LocalDateTime.now())
|
|
|
- .set(MonitorLog::getIsRecover, MonitorLog.IS_RECOVER_已恢复) // 设置为已恢复
|
|
|
- .update();
|
|
|
- redisTemplate.delete(RedisKeys.OFFLINE.concat(connectorStatusInfo.getConnectorId()));
|
|
|
+ // 先删除离线设备队列的记录,再删除离线超时队列中的记录
|
|
|
+ redisTemplate.opsForZSet().remove(RedisKeys.OFFLINE, connectorStatusInfo.getConnectorId());
|
|
|
+ var exist = redisTemplate.opsForSet().remove(RedisKeys.OFFLINE_EXPIRED.formatted(connectorStatusInfo.getConnectorId()));
|
|
|
+ // 更新设备监控表
|
|
|
+ monitorLogService.lambdaUpdate()
|
|
|
+ .eq(MonitorLog::getSn, connectorStatusInfo.getConnectorId())
|
|
|
+ .eq(MonitorLog::getIsRecover, MonitorLog.IS_RECOVER_未恢复) // 未恢复的记录
|
|
|
+ .set(MonitorLog::getRecoverTime, LocalDateTime.now())
|
|
|
+ .set(MonitorLog::getIsRecover, MonitorLog.IS_RECOVER_已恢复) // 设置为已恢复
|
|
|
+ .update();
|
|
|
+ if (exist != null && exist > 0) {
|
|
|
MailUtil.send(notifyEmail, "【设备上线通知】", "站点:%s,设备%s恢复上线"
|
|
|
.formatted(kymCache.getStationNameByConnectorId(connectorStatusInfo.getConnectorId()), kymCache.getShortId(connectorStatusInfo.getConnectorId())), false);
|
|
|
}
|