From da14c7f24c61cf9027a02d8e566ab89116136f19 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 25 九月 2020 17:22:22 +0800
Subject: [PATCH] 拆分redis中device与channel的存储方式 支持分页 接口直接返回播放地址

---
 src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java |  182 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 166 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
index d6e4603..8ea9f7e 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -3,6 +3,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.common.PageResult;
+import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.conf.MediaServerConfig;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -21,7 +27,8 @@
 
 	@Autowired
     private RedisUtil redis;
-	
+
+
 	/**   
 	 * 鏍规嵁璁惧ID鍒ゆ柇璁惧鏄惁瀛樺湪
 	 * 
@@ -30,7 +37,7 @@
 	 */ 
 	@Override
 	public boolean exists(String deviceId) {
-		return redis.hasKey(VideoManagerConstants.CACHEKEY_PREFIX+deviceId);
+		return redis.hasKey(VideoManagerConstants.DEVICE_PREFIX+deviceId);
 	}
 
 	/**   
@@ -41,9 +48,11 @@
 	 */ 
 	@Override
 	public boolean create(Device device) {
-		return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device);
+		return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
 	}
-	
+
+
+
 	/**   
 	 * 瑙嗛璁惧鏇存柊
 	 * 
@@ -51,8 +60,26 @@
 	 * @return true锛氭洿鏂版垚鍔�  false锛氭洿鏂板け璐�
 	 */  
 	@Override
-	public boolean update(Device device) {
-		return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device);
+	public boolean updateDevice(Device device) {
+		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + device.getDeviceId() + "_" + "*");
+		// 鏇存柊device涓殑閫氶亾鏁伴噺
+		device.setChannelCount(deviceChannelList.size());
+		// 瀛樺偍device
+		return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
+
+
+	}
+
+	@Override
+	public void updateChannel(String deviceId, DeviceChannel channel) {
+		// 瀛樺偍閫氶亾
+		redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + channel.getChannelId(),
+				channel);
+		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*");
+		// 鏇存柊device涓殑閫氶亾鏁伴噺
+		Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
+		device.setChannelCount(deviceChannelList.size());
+		redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
 	}
 
 	/**   
@@ -63,26 +90,94 @@
 	 */  
 	@Override
 	public Device queryVideoDevice(String deviceId) {
-		return (Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+deviceId);
+		return (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
 	}
 
-	/**   
+	@Override
+	public PageResult queryChannelsByDeviceId(String deviceId, int page, int count) {
+		List<DeviceChannel> result = new ArrayList<>();
+		PageResult pageResult = new PageResult<DeviceChannel>();
+		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*");
+		pageResult.setPage(page);
+		pageResult.setCount(count);
+		pageResult.setTotal(deviceChannelList.size());
+		int maxCount = (page + 1 ) * count;
+		if (deviceChannelList != null && deviceChannelList.size() > 0 ) {
+			for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) {
+				result.add((DeviceChannel)redis.get((String)deviceChannelList.get(i)));
+			}
+			pageResult.setData(result);
+		}
+
+		return pageResult;
+	}
+
+	@Override
+	public List<DeviceChannel> queryChannelsByDeviceId(String deviceId) {
+		List<DeviceChannel> result = new ArrayList<>();
+		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*");
+		if (deviceChannelList != null && deviceChannelList.size() > 0 ) {
+			for (int i = 0; i < deviceChannelList.size(); i++) {
+				result.add((DeviceChannel)redis.get((String)deviceChannelList.get(i)));
+			}
+		}
+		return result;
+	}
+
+	@Override
+	public DeviceChannel queryChannel(String deviceId, String channelId) {
+		return (DeviceChannel)redis.get(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + channelId);
+	}
+
+
+	/**
 	 * 鑾峰彇澶氫釜璁惧
 	 * 
 	 * @param deviceIds 璁惧ID鏁扮粍
 	 * @return List<Device> 璁惧瀵硅薄鏁扮粍
 	 */  
 	@Override
+	public PageResult<Device> queryVideoDeviceList(String[] deviceIds, int page, int count) {
+		List<Device> devices = new ArrayList<>();
+		PageResult pageResult = new PageResult<Device>();
+		pageResult.setPage(page);
+		pageResult.setCount(count);
+
+		if (deviceIds == null || deviceIds.length == 0) {
+
+			List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*");
+			pageResult.setTotal(deviceIdList.size());
+			int maxCount = (page + 1)* count;
+			for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) {
+				devices.add((Device)redis.get((String)deviceIdList.get(i)));
+			}
+		} else {
+			for (int i = 0; i < deviceIds.length; i++) {
+				devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
+			}
+		}
+		pageResult.setData(devices);
+		return pageResult;
+	}
+
+	/**
+	 * 鑾峰彇澶氫釜璁惧
+	 *
+	 * @param deviceIds 璁惧ID鏁扮粍
+	 * @return List<Device> 璁惧瀵硅薄鏁扮粍
+	 */
+	@Override
 	public List<Device> queryVideoDeviceList(String[] deviceIds) {
 		List<Device> devices = new ArrayList<>();
+
 		if (deviceIds == null || deviceIds.length == 0) {
-			List<Object> deviceIdList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX+"*");
+			List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*");
 			for (int i = 0; i < deviceIdList.size(); i++) {
 				devices.add((Device)redis.get((String)deviceIdList.get(i)));
 			}
 		} else {
 			for (int i = 0; i < deviceIds.length; i++) {
-				devices.add((Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+deviceIds[i]));
+				devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
 			}
 		}
 		return devices;
@@ -96,7 +191,7 @@
 	 */  
 	@Override
 	public boolean delete(String deviceId) {
-		return redis.del(VideoManagerConstants.CACHEKEY_PREFIX+deviceId);
+		return redis.del(VideoManagerConstants.DEVICE_PREFIX+deviceId);
 	}
 
 	/**   
@@ -107,9 +202,9 @@
 	 */ 
 	@Override
 	public boolean online(String deviceId) {
-		Device device = (Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+deviceId);
+		Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
 		device.setOnline(1);
-		return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device);
+		return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
 	}
 
 	/**   
@@ -120,9 +215,64 @@
 	 */ 
 	@Override
 	public boolean outline(String deviceId) {
-		Device device = (Device)redis.get(VideoManagerConstants.CACHEKEY_PREFIX+deviceId);
+		Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
+		if (device == null) return false;
 		device.setOnline(0);
-		return redis.set(VideoManagerConstants.CACHEKEY_PREFIX+device.getDeviceId(), device);
+		return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
 	}
-	
+
+	/**
+	 * 寮�濮嬫挱鏀炬椂灏嗘祦瀛樺叆redis
+	 *
+	 * @param deviceId 璁惧ID
+	 * @param channelId 閫氶亾ID
+	 * @return
+	 */
+	@Override
+	public boolean startPlay(String deviceId, String channelId, StreamInfo stream) {
+		return redis.set(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId),
+				stream);
+	}
+
+	/**
+	 * 鍋滄鎾斁鏃朵粠redis鍒犻櫎
+	 *
+	 * @param deviceId 璁惧ID
+	 * @param channelId 閫氶亾ID
+	 * @return
+	 */
+	@Override
+	public boolean stopPlay(String deviceId, String channelId) {
+		return redis.del(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId));
+	}
+
+	/**
+	 * 鏌ヨ鎾斁鍒楄〃
+	 * @param deviceId 璁惧ID
+	 * @param channelId 閫氶亾ID
+	 * @return
+	 */
+	@Override
+	public StreamInfo queryPlay(String deviceId, String channelId) {
+		return (StreamInfo)redis.get(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId));
+	}
+
+	/**
+	 * 鏇存柊娴佸獟浣撲俊鎭�
+	 * @param mediaServerConfig
+	 * @return
+	 */
+	@Override
+	public boolean updateMediaInfo(MediaServerConfig mediaServerConfig) {
+		return redis.set(VideoManagerConstants.MEDIA_SERVER_PREFIX,mediaServerConfig);
+	}
+
+	/**
+	 * 鑾峰彇娴佸獟浣撲俊鎭�
+	 * @return
+	 */
+	@Override
+	public MediaServerConfig getMediaInfo() {
+		return (MediaServerConfig)redis.get(VideoManagerConstants.MEDIA_SERVER_PREFIX);
+	}
 }

--
Gitblit v1.8.0