From 8b35e17553aa22d54286c3029b14d07107f65340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Sat, 17 May 2025 17:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AE=BE=E5=A4=87=E7=89=A9?= =?UTF-8?q?=E8=81=94=E7=BD=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bst/device/service/DeviceIotService.java | 12 +++- .../service/impl/DeviceIotServiceImpl.java | 55 ++++++++++++------- .../ruoyi/bst/device/utils/DeviceUtil.java | 9 +-- .../service/impl/IotReceiveServiceImpl.java | 4 +- .../iot/service/impl/IotServiceImpl.java | 9 +-- .../ruoyi/web/bst/DeviceIotController.java | 14 +++-- 6 files changed, 65 insertions(+), 38 deletions(-) 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 57a01e7..ca43e14 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 @@ -1,5 +1,6 @@ package com.ruoyi.bst.device.service; +import java.time.LocalDateTime; import java.util.Collections; import java.util.List; @@ -155,11 +156,20 @@ public interface DeviceIotService { */ int updateIot(Device device); + /** + * 更新设备在线状态 + * + * @param mac + * @param onlineStatus + * @param lastOnlineTime + * @return + */ + int updateOnlineStatus(String mac, String onlineStatus, LocalDateTime lastOnlineTime); + /** * 蓝牙上传 * * @param dto - * @return */ int bltUpload(DeviceBltUploadDTO dto); 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 b607741..073a00d 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 @@ -41,6 +41,7 @@ import com.ruoyi.iot.domain.IotDeviceInfo; import com.ruoyi.iot.domain.response.CommandResponse; import com.ruoyi.iot.enums.IotHttpStatus; import com.ruoyi.iot.service.IotService; +import com.ruoyi.iot.service.impl.DeviceOnlineStatus; import com.ruoyi.iot.util.IotUtil; import com.ruoyi.system.operLog.service.OperLogService; @@ -293,24 +294,23 @@ public class DeviceIotServiceImpl implements DeviceIotService { .filter(item -> Objects.equals(item.getMac(), device.getMac())) .findFirst().orElse(null); DeviceUtil.setIotInfo(device, iot); - - this.updateIot(device); } // 异步发送命令,强制设备上报数据 - // scheduledExecutorService.execute(() -> { - // for (DeviceVO device : deviceList) { - // try { - // if (onlineType != null) { - // iotService.getOnlineStatus(device, onlineType); - // } - // } catch (Exception e) { - // log.error("强制设备{}上报数据失败", device.getSn(), e); - // } - // } - // }); + scheduledExecutorService.execute(() -> { + for (DeviceVO device : deviceList) { + try { + if (onlineType != null) { + iotService.getOnlineStatus(device, onlineType); + } + } catch (Exception e) { + log.error("强制设备{}上报数据失败", device.getSn(), e); + } + } + }); } + @Override public int updateIot(Device device) { if (device == null || StringUtils.isBlank(device.getMac())) { return 0; @@ -351,15 +351,9 @@ public class DeviceIotServiceImpl implements DeviceIotService { if (device.getLastLocationTime() != null) { info.setLastLocationTime(device.getLastLocationTime()); } - if (device.getOnlineStatus() != null) { - info.setOnlineStatus(device.getOnlineStatus()); - } if (device.getSoftwareVersion() != null) { info.setSoftwareVersion(device.getSoftwareVersion()); } - if (device.getLastOnlineTime() != null) { - info.setLastOnlineTime(device.getLastOnlineTime()); - } String key = CacheConstants.DEVICE_CACHE_INFO + device.getMac(); redisCache.setCacheObject(key, info); @@ -367,6 +361,29 @@ public class DeviceIotServiceImpl implements DeviceIotService { return 1; } + @Override + public int updateOnlineStatus(String mac, String onlineStatus, LocalDateTime lastOnlineTime) { + if (StringUtils.isBlank(mac)) { + return 0; + } + DeviceCacheInfo info = this.getIotInfo(mac); + if (info == null) { + info = new DeviceCacheInfo(); + } + + if (onlineStatus != null) { + info.setOnlineStatus(onlineStatus); + } + if (DeviceOnlineStatus.ONLINE.getStatus().equals(onlineStatus) && lastOnlineTime != null) { + info.setLastOnlineTime(lastOnlineTime); + } + + String key = CacheConstants.DEVICE_CACHE_INFO + mac; + redisCache.setCacheObject(key, info); + + return 1; + } + @Override public boolean create(String mac) { if (StringUtils.isBlank(mac)) { diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java b/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java index fdf919c..a5370b4 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/utils/DeviceUtil.java @@ -100,10 +100,6 @@ public class DeviceUtil { if (device == null || info == null) { return; } - - if (info.getOnlineStatus() != null) { - device.setOnlineStatus(info.getOnlineStatus()); - } if (info.getVoltage() != null) { device.setVoltage(info.getVoltage()); } @@ -137,6 +133,11 @@ public class DeviceUtil { if (info.getSoftwareVersion() != null) { device.setSoftwareVersion(info.getSoftwareVersion()); } + + // 在线状态 + if (info.getOnlineStatus() != null) { + device.setOnlineStatus(info.getOnlineStatus()); + } if (info.getLastOnlineTime() != null) { device.setLastOnlineTime(info.getLastOnlineTime()); } 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 2ce2186..ce7e9dd 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 @@ -108,8 +108,10 @@ public class IotReceiveServiceImpl implements IotReceiveService { device.setOnlineStatus(DeviceOnlineStatus.ONLINE.getStatus()); device.setLastOnlineTime(at); - // 增加更新频率控制 + // 更新设备信息 deviceIotService.updateIot(device); + // 更新设备在线状态 + deviceIotService.updateOnlineStatus(device.getMac(), DeviceOnlineStatus.ONLINE.getStatus(), at); // 定位无效,不处理 if (device.getLongitude() == null || device.getLatitude() == null) { diff --git a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java index f1277c6..b1b8bef 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/iot/service/impl/IotServiceImpl.java @@ -18,7 +18,6 @@ import com.alibaba.fastjson2.JSONObject; import com.ruoyi.bst.commandLog.domain.CommandLog; import com.ruoyi.bst.commandLog.domain.enums.CommandLogType; import com.ruoyi.bst.commandLog.service.CommandLogService; -import com.ruoyi.bst.device.domain.Device; import com.ruoyi.bst.device.service.DeviceIotService; import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.HttpStatus; @@ -319,13 +318,7 @@ public class IotServiceImpl implements IotService { } private void updateOnlineStatus(String mac, String status) { - Device device = new Device(); - device.setMac(mac); - device.setOnlineStatus(status); - if (DeviceOnlineStatus.ONLINE.getStatus().equals(status)) { - device.setLastOnlineTime(LocalDateTime.now()); - } - deviceIotService.updateIot(device); + deviceIotService.updateOnlineStatus(mac, status, LocalDateTime.now()); } // 新增命令日志 diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/DeviceIotController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/DeviceIotController.java index 04008b3..9fa211c 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/DeviceIotController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/DeviceIotController.java @@ -2,7 +2,6 @@ package com.ruoyi.web.bst; import java.util.function.Supplier; -import com.ruoyi.bst.device.service.DeviceAssembler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PutMapping; @@ -13,6 +12,7 @@ import org.springframework.web.bind.annotation.RestController; import com.ruoyi.bst.areaJoin.domain.enums.AreaJoinPermission; import com.ruoyi.bst.device.domain.DeviceVO; import com.ruoyi.bst.device.domain.enums.DeviceUnLockType; +import com.ruoyi.bst.device.service.DeviceAssembler; import com.ruoyi.bst.device.service.DeviceIotService; import com.ruoyi.bst.device.service.DeviceService; import com.ruoyi.bst.device.service.DeviceValidator; @@ -54,7 +54,8 @@ public class DeviceIotController extends BaseController { /** * 执行带设备锁的操作 - * @param device 设备信息 + * + * @param device 设备信息 * @param operation 具体操作 * @return 操作结果 */ @@ -77,7 +78,8 @@ public class DeviceIotController extends BaseController { @PutMapping("/unlock") public AjaxResult unlock(@RequestParam(required = false) Long id, @RequestParam(required = false) String sn) { DeviceVO device = this.getDevice(id, sn); - return executeWithLock(device, () -> success(deviceIotService.unlock(device, DeviceUnLockType.ADMIN, "管理员开锁", true))); + return executeWithLock(device, + () -> success(deviceIotService.unlock(device, DeviceUnLockType.ADMIN, "管理员开锁", true))); } @PreAuthorize("@ss.hasPermi('bst:device:lock')") @@ -93,7 +95,8 @@ public class DeviceIotController extends BaseController { @PutMapping("/ring") public AjaxResult ring(@RequestParam(required = false) Long id, @RequestParam(required = false) String sn) { DeviceVO device = this.getDevice(id, sn); - return executeWithLock(device, () -> success(deviceIotService.play(device, IotConstants.PLAY_WARNING, "管理员响铃寻车", true))); + return executeWithLock(device, + () -> success(deviceIotService.play(device, IotConstants.PLAY_WARNING, "管理员响铃寻车", true))); } @PreAuthorize("@ss.hasPermi('bst:device:reboot')") @@ -127,7 +130,8 @@ public class DeviceIotController extends BaseController { @PreAuthorize("@ss.hasPermi('bst:device:music')") @Log(title = "管理员设置声音", businessType = BusinessType.OTHER, bizIdName = "arg0", bizType = LogBizType.DEVICE) @PutMapping("/music") - public AjaxResult music(@RequestParam(required = false) Long id, @RequestParam(required = false) String sn, @RequestParam String music) { + public AjaxResult music(@RequestParam(required = false) Long id, @RequestParam(required = false) String sn, + @RequestParam String music) { DeviceVO device = this.getDevice(id, sn); return executeWithLock(device, () -> success(deviceIotService.setMusic(device, music, "管理员设置声音", true))); }