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