From 98ea5846fec525ec234c5fbf07c53c0d8aff03ba Mon Sep 17 00:00:00 2001
From: lin <648540858@qq.com>
Date: Tue, 10 Jun 2025 09:45:02 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BF=83=E8=B7=B3=E5=85=A5=E5=BA=93=20?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=B9=E9=87=8F=E5=85=A5=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../iot/vmp/gb28181/dao/DeviceMapper.java | 32 +++++++++++++++++
.../vmp/gb28181/service/IDeviceService.java | 4 +++
.../service/impl/DeviceServiceImpl.java | 36 +++++++++++++++++--
.../cmd/KeepaliveNotifyMessageHandler.java | 6 +++-
4 files changed, 75 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java
index 6627985f4..f99f50eeb 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java
@@ -426,4 +426,36 @@ public interface DeviceMapper {
" #{item.id}" +
" "})
void offlineByList(List offlineDevices);
+
+
+ @Update({""})
+ void batchUpdate(List devices);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java
index 28b7f61c5..ca65e352a 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java
@@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.service.bean.ErrorCallback;
import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import com.github.pagehelper.PageInfo;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@@ -117,6 +118,9 @@ public interface IDeviceService {
*/
void updateDevice(Device device);
+ @Transactional
+ void updateDeviceList(List deviceList);
+
/**
* 检查设备编号是否已经存在
* @param deviceId 设备编号
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java
index 17630e3a3..a55e903f6 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java
@@ -729,8 +729,6 @@ public class DeviceServiceImpl implements IDeviceService, CommandLineRunner {
@Override
public void updateDevice(Device device) {
- String now = DateUtil.getNow();
- device.setUpdateTime(now);
device.setCharset(device.getCharset() == null ? "" : device.getCharset().toUpperCase());
device.setUpdateTime(DateUtil.getNow());
if (deviceMapper.update(device) > 0) {
@@ -738,6 +736,40 @@ public class DeviceServiceImpl implements IDeviceService, CommandLineRunner {
}
}
+ @Transactional
+ @Override
+ public void updateDeviceList(List deviceList) {
+ if (deviceList.isEmpty()){
+ log.info("[批量更新设备] 列表为空,更细失败");
+ return;
+ }
+ if (deviceList.size() == 1) {
+ updateDevice(deviceList.get(0));
+ }else {
+ for (Device device : deviceList) {
+ device.setCharset(device.getCharset() == null ? "" : device.getCharset().toUpperCase());
+ device.setUpdateTime(DateUtil.getNow());
+ }
+ int limitCount = 300;
+ if (!deviceList.isEmpty()) {
+ if (deviceList.size() > limitCount) {
+ for (int i = 0; i < deviceList.size(); i += limitCount) {
+ int toIndex = i + limitCount;
+ if (i + limitCount > deviceList.size()) {
+ toIndex = deviceList.size();
+ }
+ deviceMapper.batchUpdate(deviceList.subList(i, toIndex));
+ }
+ }else {
+ deviceMapper.batchUpdate(deviceList);
+ }
+ for (Device device : deviceList) {
+ redisCatchStorage.updateDevice(device);
+ }
+ }
+ }
+ }
+
@Override
public boolean isExist(String deviceId) {
return getDeviceByDeviceIdFromDb(deviceId) != null;
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
index 7b273debd..f6c7681ae 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
@@ -87,6 +87,7 @@ public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent imp
if (handlerCatchDataList.isEmpty()) {
return;
}
+ List deviceListForUpdate = new ArrayList<>();
for (SipMsgInfo sipMsgInfo : handlerCatchDataList) {
if (sipMsgInfo == null) {
continue;
@@ -113,7 +114,7 @@ public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent imp
device.setKeepaliveTime(DateUtil.getNow());
if (device.isOnLine()) {
- deviceService.updateDevice(device);
+ deviceListForUpdate.add(device);
long expiresTime = Math.min(device.getExpires(), device.getHeartBeatInterval() * device.getHeartBeatCount()) * 1000L;
if (statusTaskRunner.containsKey(device.getDeviceId())) {
statusTaskRunner.updateDelay(device.getDeviceId(), expiresTime + System.currentTimeMillis());
@@ -125,6 +126,9 @@ public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent imp
}
}
}
+ if (!deviceListForUpdate.isEmpty()) {
+ deviceService.updateDeviceList(deviceListForUpdate);
+ }
}
@Override