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