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);