From 66336eeed4f7c3493e75761c9fd96d6cb9e7f9b8 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: Fri, 16 May 2025 13:49:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E4=BD=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/bst/device/mapper/DeviceMapper.xml | 4 +- .../service/impl/DeviceIotServiceImpl.java | 39 ++++++++++++------- .../locationLog/domain/LocationLogQuery.java | 3 ++ .../locationLog/mapper/LocationLogMapper.xml | 6 +++ .../service/impl/LocationLogServiceImpl.java | 1 + .../service/impl/IotReceiveServiceImpl.java | 2 +- .../iot/service/impl/IotServiceImpl.java | 2 +- 7 files changed, 38 insertions(+), 19 deletions(-) diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml index 6d8735d..14acc6d 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/device/mapper/DeviceMapper.xml @@ -128,8 +128,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bm.name like concat('%', #{query.modelName}, '%') and suo.nick_name like concat('%', #{query.orderUserName}, '%') and suo.user_name like concat('%', #{query.orderUserPhone}, '%') - and bd.last_location_time <= #{query.lastTimeEnd} - and bd.last_location_time >= #{query.lastTimeStart} + and bd.last_time <= #{query.lastTimeEnd} + and bd.last_time >= #{query.lastTimeStart} and bd.location_type = #{query.locationType} and ( 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 c151583..b43fe00 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 @@ -32,6 +32,7 @@ import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constants.ServiceCode; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.core.redis.RedisLock; +import com.ruoyi.common.core.redis.enums.RedisLockKey; import com.ruoyi.common.utils.MathUtils; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.StringUtils; @@ -287,17 +288,17 @@ public class DeviceIotServiceImpl implements DeviceIotService { } // 异步发送命令,强制设备上报数据 - 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); + // } + // } + // }); } private void setOnlineStatus(DeviceVO device, String onlineStatus) { @@ -455,17 +456,25 @@ public class DeviceIotServiceImpl implements DeviceIotService { // 更新设备信息 DeviceUtil.setIotSysInfo(device, dto.getSys(), LocalDateTime.now(), true, DeviceLocationType.PHONE); - int rows = this.updateIot(device); + + boolean lock = redisLock.lock(RedisLockKey.DEVICE_UPDATE_IOT_LOCK, device.getMac(), 60L); + if (lock) { + int update = this.updateIot(device); + if (update != 1) { + log.error("更新设备信息失败: {}", device.getMac()); + } + } else { + log.info("设备{}更新太频繁,跳过本次更新", device.getMac()); + } // 创建定位日志 - if (rows > 0) { - device.setLastLocationTime(LocalDateTime.now()); + if (DeviceUtil.validLocation(device.getLongitude(), device.getLatitude())) { LocationLog locationLog = locationLogConverter.toPo(device); if (locationLog != null) { redisCache.rightPush(CacheConstants.LOCATION_LOG_QUEUE, locationLog); } } - return rows; + return 1; } } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/domain/LocationLogQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/domain/LocationLogQuery.java index da2bc6f..9334eb6 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/domain/LocationLogQuery.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/domain/LocationLogQuery.java @@ -31,4 +31,7 @@ public class LocationLogQuery extends LocationLogVO { @ApiModelProperty("订单ID列表") private List orderIds; + + @ApiModelProperty("定位是否有效") + private Boolean valid; } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/mapper/LocationLogMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/mapper/LocationLogMapper.xml index 093f1ca..f5145cc 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/mapper/LocationLogMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/mapper/LocationLogMapper.xml @@ -66,6 +66,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{item} + + and bll.longitude is not null + and bll.latitude is not null + and bll.longitude != 0 + and bll.latitude != 0 + ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope) .userSetAlias("su.user_id,su.agent_id,bo.area_user_id,bo.area_agent_id,bod.device_mch_id") .areaAlias("bo.area_id", query.areaPermissions) diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/service/impl/LocationLogServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/service/impl/LocationLogServiceImpl.java index 52124cb..5184296 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/service/impl/LocationLogServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/locationLog/service/impl/LocationLogServiceImpl.java @@ -116,6 +116,7 @@ public class LocationLogServiceImpl implements LocationLogService } LocationLogQuery query = new LocationLogQuery(); query.setOrderId(orderId); + query.setValid(true); return locationLogMapper.selectPositionList(query); } } 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 5c51e2b..274c2e5 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 @@ -152,7 +152,7 @@ public class IotReceiveServiceImpl implements IotReceiveService { * @param device */ private void updateDeviceIot(DeviceVO device) { - boolean lock = redisLock.lock(RedisLockKey.DEVICE_UPDATE_IOT_LOCK, device.getMac(), 20L); + boolean lock = redisLock.lock(RedisLockKey.DEVICE_UPDATE_IOT_LOCK, device.getMac(), 60L); if (lock) { int update = deviceIotService.updateIot(device); if (update != 1) { 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 0694f01..3e92e5e 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 @@ -291,7 +291,7 @@ public class IotServiceImpl implements IotService { redisCache.setCacheObject(this.getOnlineCacheKey(deviceName), status, 10, TimeUnit.SECONDS); // 异步更新设备在线状态 - boolean lock = redisLock.lock(RedisLockKey.DEVICE_UPDATE_IOT_LOCK, deviceName, 20L); + boolean lock = redisLock.lock(RedisLockKey.DEVICE_UPDATE_IOT_LOCK, deviceName, 60L); if (lock ) { scheduledExecutorService.execute(() -> { int update = deviceService.updateOnlineStatusByMac(deviceName, status);