From 7e428f823128ec5fdbff3a8f73e9ea1f1a4a23ba Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 04 一月 2022 19:40:01 +0800 Subject: [PATCH] 修复redis配置功能在redis配置了 notify-keyspace-events时无法强制配置的问题 --- src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 74 +++++++++++++++++++++++++++++++++++-- 1 files changed, 70 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java index 35dda13..1d8d83a 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java @@ -110,6 +110,7 @@ */ @Override public synchronized boolean create(Device device) { + redisCatchStorage.updateDevice(device); return deviceMapper.add(device) > 0; } @@ -128,10 +129,13 @@ Device deviceByDeviceId = deviceMapper.getDeviceByDeviceId(device.getDeviceId()); if (deviceByDeviceId == null) { device.setCreateTime(now); + redisCatchStorage.updateDevice(device); return deviceMapper.add(device) > 0; }else { + redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; } + } @@ -152,7 +156,7 @@ } @Override - public void updateChannels(String deviceId, List<DeviceChannel> channels) { + public int updateChannels(String deviceId, List<DeviceChannel> channels) { List<DeviceChannel> addChannels = new ArrayList<>(); List<DeviceChannel> updateChannels = new ArrayList<>(); HashMap<String, DeviceChannel> channelsInStore = new HashMap<>(); @@ -185,13 +189,68 @@ } } } + int limitCount = 300; if (addChannels.size() > 0) { - deviceChannelMapper.batchAdd(addChannels); + if (addChannels.size() > limitCount) { + for (int i = 0; i < addChannels.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > addChannels.size()) { + toIndex = addChannels.size(); + } + deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex)); + } + }else { + deviceChannelMapper.batchAdd(addChannels); + } } if (updateChannels.size() > 0) { - deviceChannelMapper.batchUpdate(updateChannels); + if (updateChannels.size() > limitCount) { + for (int i = 0; i < updateChannels.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > updateChannels.size()) { + toIndex = updateChannels.size(); + } + deviceChannelMapper.batchUpdate(updateChannels.subList(i, toIndex)); + } + }else { + deviceChannelMapper.batchUpdate(updateChannels); + } } } + return addChannels.size() + updateChannels.size(); + } + + @Override + public boolean resetChannels(String deviceId, List<DeviceChannel> deviceChannelList) { + TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); + try { + int cleanChannelsResult = deviceChannelMapper.cleanChannelsByDeviceId(deviceId); + int limitCount = 300; + boolean result = cleanChannelsResult <0; + if (!result && deviceChannelList.size() > 0) { + if (deviceChannelList.size() > limitCount) { + for (int i = 0; i < deviceChannelList.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > deviceChannelList.size()) { + toIndex = deviceChannelList.size(); + } + result = result || deviceChannelMapper.batchAdd(deviceChannelList.subList(i, toIndex)) < 0; + } + }else { + result = result || deviceChannelMapper.batchAdd(deviceChannelList) < 0; + } + } + if (result) { + //浜嬪姟鍥炴粴 + dataSourceTransactionManager.rollback(transactionStatus); + } + dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦 + return true; + }catch (Exception e) { + dataSourceTransactionManager.rollback(transactionStatus); + return false; + } + } @Override @@ -231,6 +290,11 @@ PageHelper.startPage(page, count); List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online); return new PageInfo<>(all); + } + + @Override + public List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit) { + return deviceChannelMapper.queryChannelsByDeviceIdWithStartAndLimit(deviceId, null, query, hasSubChannel, online, start, limit); } @Override @@ -322,6 +386,7 @@ } device.setOnline(1); logger.info("鏇存柊璁惧鍦ㄧ嚎: " + deviceId); + redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; } @@ -337,6 +402,7 @@ Device device = deviceMapper.getDeviceByDeviceId(deviceId); if (device == null) return false; device.setOnline(0); + redisCatchStorage.updateDevice(device); return deviceMapper.update(device) > 0; } @@ -679,7 +745,6 @@ if (streamProxyItems == null) { platformGbStreamMapper.add(streamPushItem); } - } } } @@ -738,4 +803,5 @@ public StreamProxyItem getStreamProxyByAppAndStream(String app, String streamId) { return streamProxyMapper.selectOne(app, streamId); } + } -- Gitblit v1.8.0