diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/DeviceIotService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/DeviceIotService.java index 3e043b7..5d9850f 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/DeviceIotService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/DeviceIotService.java @@ -122,6 +122,12 @@ public interface DeviceIotService { */ void monitor(List ids); + /** + * 监控设备 + * @param mac 设备mac地址 + */ + void monitor(String mac); + /** * 设置声音 * @param device 设备 @@ -131,4 +137,5 @@ public interface DeviceIotService { * @return 结果 */ DeviceIotVO setMusic(DeviceVO device, String music, String reason, boolean requiredIot); + } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java index 37a1d4f..994897c 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/service/impl/DeviceIotServiceImpl.java @@ -21,6 +21,7 @@ import com.ruoyi.bst.device.domain.enums.DeviceUnLockType; import com.ruoyi.bst.device.domain.vo.DeviceIotVO; import com.ruoyi.bst.device.mapper.DeviceMapper; import com.ruoyi.bst.device.service.DeviceIotService; +import com.ruoyi.bst.device.service.DeviceService; import com.ruoyi.bst.device.utils.DeviceUtil; import com.ruoyi.bst.orderDevice.domain.enums.OrderDeviceStatus; import com.ruoyi.common.constants.ServiceCode; @@ -51,6 +52,9 @@ public class DeviceIotServiceImpl implements DeviceIotService { @Autowired private DeviceMapper deviceMapper; + @Autowired + private DeviceService deviceService; + @Autowired private ScheduledExecutorService scheduledExecutorService; @@ -352,20 +356,8 @@ public class DeviceIotServiceImpl implements DeviceIotService { scheduledExecutorService.schedule(() -> { // 获取设备最新信息 DeviceVO device = deviceMapper.selectDeviceById(deviceId); - if (device == null) { - return; - } - // 刷新信息 this.refresh(device, null); - - // 判断电门与设备锁状态是否一致,不一致则发送命令 - if (DeviceLockStatus.OPEN.getCode().equals(device.getLockStatus()) && !DeviceQuality.OPEN.getCode().equals(device.getQuality())) { - iotService.unlock(device, SUB_FAST, "【设备监控】电门异常未开启"); - } - if (DeviceLockStatus.CLOSE.getCode().equals(device.getLockStatus()) && !DeviceQuality.CLOSE.getCode().equals(device.getQuality())) { - iotService.lock(device, SUB_SLOW, "【设备监控】电门异常未关闭"); - } - + this.monitor(device); },0, TimeUnit.SECONDS); } catch (Exception e) { log.error("监控设备id={}出错:{}", deviceId, e.getMessage()); @@ -373,6 +365,26 @@ public class DeviceIotServiceImpl implements DeviceIotService { } } + private void monitor(DeviceVO device) { + if (device == null) { + return; + } + // 判断电门与设备锁状态是否一致,不一致则发送命令 + if (DeviceLockStatus.OPEN.getCode().equals(device.getLockStatus()) && !DeviceQuality.OPEN.getCode().equals(device.getQuality())) { + iotService.unlock(device, SUB_FAST, "【设备监控】电门异常未开启"); + } + if (DeviceLockStatus.CLOSE.getCode().equals(device.getLockStatus()) && !DeviceQuality.CLOSE.getCode().equals(device.getQuality())) { + iotService.lock(device, SUB_SLOW, "【设备监控】电门异常未关闭"); + } + } + + @Override + public void monitor(String mac) { + DeviceVO device = deviceService.selectByMac(mac); + this.refresh(device, null); + this.monitor(device); + } + private void asyncMonitorCount(Long deviceId, int count) { scheduledExecutorService.schedule(() -> { if (count > 0) { diff --git a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java index 32e11a5..2c7a98e 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotReceiveServiceImpl.java @@ -87,7 +87,7 @@ public class IotReceiveServiceImpl implements IotReceiveService { LocalDateTime at = DateUtils.toLocalDateTime(msg.getAt()); // 处理设备定位BUG,若出现BUG则重启设备 - int handle = this.handleDeviceReboot(device, sys, at); + int handle = this.handleDeviceLocationBug(device, sys, at); if (handle == 1) { return; } @@ -108,16 +108,28 @@ public class IotReceiveServiceImpl implements IotReceiveService { this.handleLocationLog(device); } } - // 生命周期 + // 生命周期(暂时不做,需要测试) else if (ReceiveType.DEVICE_STATUS.getType().equals(msg.getType())) { + // this.handleReboot(msg); } } /** * 处理设备重启 + */ + private void handleReboot(ReceiveMsg msg) { + if (msg == null || StringUtils.isBlank(msg.getDevName())) { + return; + } + // 同步一次设备状态 + deviceIotService.monitor(msg.getDevName()); + } + + /** + * 处理设备定位BUG * @param device */ - private int handleDeviceReboot(DeviceVO device, IotDeviceSysInfo sys, LocalDateTime at) { + private int handleDeviceLocationBug(DeviceVO device, IotDeviceSysInfo sys, LocalDateTime at) { if (device == null || StringUtils.isBlank(device.getMac()) || device.getLastLocationTime() == null || at == null) { return 0; }