优化在线逻辑

This commit is contained in:
磷叶 2025-05-19 10:00:04 +08:00
parent 076b755950
commit 9c830759b3
3 changed files with 33 additions and 14 deletions

View File

@ -294,9 +294,11 @@ public class DeviceIotServiceImpl implements DeviceIotService {
.filter(item -> Objects.equals(item.getMac(), device.getMac())) .filter(item -> Objects.equals(item.getMac(), device.getMac()))
.findFirst().orElse(null); .findFirst().orElse(null);
DeviceUtil.setIotInfo(device, iot); DeviceUtil.setIotInfo(device, iot);
this.updateIot(device);
} }
// 异步发送命令强制设备上报数据 // 异步发送命令强制设备上报数据
if (onlineType != null) {
scheduledExecutorService.execute(() -> { scheduledExecutorService.execute(() -> {
for (DeviceVO device : deviceList) { for (DeviceVO device : deviceList) {
try { try {
@ -309,6 +311,7 @@ public class DeviceIotServiceImpl implements DeviceIotService {
} }
}); });
} }
}
@Override @Override
public int updateIot(Device device) { public int updateIot(Device device) {
@ -319,6 +322,10 @@ public class DeviceIotServiceImpl implements DeviceIotService {
if (info == null) { if (info == null) {
info = new DeviceCacheInfo(); info = new DeviceCacheInfo();
} }
// 若缓存时间大于设备时间则不更新
if (info.getLastTime() != null && device.getLastTime() != null && info.getLastTime().isAfter(device.getLastTime())) {
return 0;
}
info.setMac(device.getMac()); info.setMac(device.getMac());
if (device.getVoltage() != null) { if (device.getVoltage() != null) {

View File

@ -14,6 +14,7 @@ import com.ruoyi.common.utils.MathUtils;
import com.ruoyi.common.utils.map.GpsCoordinateUtils; import com.ruoyi.common.utils.map.GpsCoordinateUtils;
import com.ruoyi.iot.domain.IotDeviceInfo; import com.ruoyi.iot.domain.IotDeviceInfo;
import com.ruoyi.iot.domain.IotDeviceSysInfo; import com.ruoyi.iot.domain.IotDeviceSysInfo;
import com.ruoyi.iot.service.impl.DeviceOnlineStatus;
import com.ruoyi.iot.util.BatUtil; import com.ruoyi.iot.util.BatUtil;
public class DeviceUtil { public class DeviceUtil {
@ -186,4 +187,19 @@ public class DeviceUtil {
public static boolean isLowSatelliteSignal(DeviceVO device) { public static boolean isLowSatelliteSignal(DeviceVO device) {
return device != null && device.getSatellites() != null && device.getSatellites() <= 5; return device != null && device.getSatellites() != null && device.getSatellites() <= 5;
} }
/**
* 根据推送设置设备信息
*
* @param device 设备
* @param sys sys信息
* @param at 时间
* @param setNull 是否设置为空
*/
public static void setIotSysInfoByReceive(DeviceVO device, IotDeviceSysInfo sys, LocalDateTime at, boolean setNull) {
setIotSysInfo(device, sys, at, setNull);
device.setOnlineStatus(DeviceOnlineStatus.ONLINE.getStatus());
device.setLastOnlineTime(at);
}
} }

View File

@ -102,11 +102,7 @@ public class IotReceiveServiceImpl implements IotReceiveService {
log.info("收到sys数据{}", msg.getValue()); log.info("收到sys数据{}", msg.getValue());
IotDeviceSysInfo sys = IotUtil.toSysInfo(msg.getValue()); IotDeviceSysInfo sys = IotUtil.toSysInfo(msg.getValue());
LocalDateTime at = DateUtils.toLocalDateTime(msg.getAt()); LocalDateTime at = DateUtils.toLocalDateTime(msg.getAt());
DeviceUtil.setIotSysInfo(device, sys, at, true); DeviceUtil.setIotSysInfoByReceive(device, sys, at, true);
// 更新设备信息
device.setOnlineStatus(DeviceOnlineStatus.ONLINE.getStatus());
device.setLastOnlineTime(at);
// 更新设备信息 // 更新设备信息
deviceIotService.updateIot(device); deviceIotService.updateIot(device);