From dcd78a1cfa0c929403d51a347e43414f6aa5f0d8 Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期一, 04 一月 2021 18:30:44 +0800
Subject: [PATCH] 存储部分使用sqlite代替redis-3

---
 src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java |  281 ++++++++------------------------------------------------
 1 files changed, 41 insertions(+), 240 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 1288efc..01ed247 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
@@ -2,19 +2,17 @@
 
 import java.util.*;
 
-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 com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
 import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
-import com.genersoft.iot.vmp.utils.redis.RedisUtil;
 import org.springframework.util.StringUtils;
 
 /**    
@@ -50,7 +48,7 @@
 	 * @return true锛氬垱寤烘垚鍔�  false锛氬垱寤哄け璐�
 	 */
 	@Override
-	public boolean create(Device device) {
+	public synchronized boolean create(Device device) {
 		return deviceMapper.add(device) > 0;
 	}
 
@@ -63,69 +61,26 @@
 	 * @return true锛氭洿鏂版垚鍔�  false锛氭洿鏂板け璐�
 	 */
 	@Override
-	public boolean updateDevice(Device device) {
-//		if (deviceMap.get(device.getDeviceId()) == null) {
-//			deviceMap.put(device.getDeviceId(), new HashMap<String, HashSet<String>>());
-//		}
-		// 鏇存柊device涓殑閫氶亾鏁伴噺
-//		device.setChannelCount(deviceMap.get(device.getDeviceId()).size());
-		int result = deviceMapper.update(device);
-		// 瀛樺偍device
-		return result > 0;
-
+	public synchronized boolean updateDevice(Device device) {
+		Device deviceByDeviceId = deviceMapper.getDeviceByDeviceId(device.getDeviceId());
+		if (deviceByDeviceId == null) {
+			return deviceMapper.add(device) > 0;
+		}else {
+			return deviceMapper.update(device) > 0;
+		}
 
 	}
 
 	@Override
-	public void updateChannel(String deviceId, DeviceChannel channel) {
+	public synchronized void updateChannel(String deviceId, DeviceChannel channel) {
 		String channelId = channel.getChannelId();
 		channel.setDeviceId(deviceId);
-		deviceChannelMapper.update(channel);
-
-//		HashMap<String, HashSet<String>> channelMap = deviceMap.get(deviceId);
-//		if (channelMap == null) return;
-//		// 浣滀负鐖惰澶�, 纭畾鑷繁鐨勫瓙鑺傜偣鏁�
-//		if (channelMap.get(channelId) == null) {
-//			channelMap.put(channelId, new HashSet<String>());
-//		}else if (channelMap.get(channelId).size() > 0) {
-//			channel.setSubCount(channelMap.get(channelId).size());
-//		}
-//
-//		// 瀛樺偍閫氶亾
-//		redis.set(VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
-//						"_" + channel.getChannelId() +
-//						"_" + (channel.getStatus() == 1 ? "on":"off") +
-//						"_" + (channelMap.get(channelId).size() > 0)+
-//						"_" + (StringUtils.isEmpty(channel.getParentId())?null:channel.getParentId()),
-//				channel);
-//		// 鏇存柊device涓殑閫氶亾鏁伴噺
-//		Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
-//		device.setChannelCount(deviceMap.get(deviceId).size());
-//		redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
-//
-//
-//		// 濡傛灉鏈夌埗璁惧,鏇存柊鐖惰澶囧唴瀛愯妭鐐规暟
-//		String parentId = channel.getParentId();
-//		if (!StringUtils.isEmpty(parentId) && !parentId.equals(deviceId)) {
-//
-//			if (channelMap.get(parentId) == null) {
-//				channelMap.put(parentId, new HashSet<String>());
-//			}
-//			channelMap.get(parentId).add(channelId);
-//
-//			DeviceChannel deviceChannel = queryChannel(deviceId, parentId);
-//			if (deviceChannel != null) {
-//				deviceChannel.setSubCount(channelMap.get(parentId).size());
-//				redis.set(VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
-//								"_" + deviceChannel.getChannelId() +
-//								"_" + (deviceChannel.getStatus() == 1 ? "on":"off") +
-//								"_" + (channelMap.get(deviceChannel.getChannelId()).size() > 0)+
-//								"_" + (StringUtils.isEmpty(deviceChannel.getParentId())?null:deviceChannel.getParentId()),
-//						deviceChannel);
-//
-//			}
-//		}
-
+		DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId);
+		if (deviceChannel == null) {
+			deviceChannelMapper.add(channel);
+		}else {
+			deviceChannelMapper.update(channel);
+		}
 	}
 
 	/**
@@ -140,179 +95,45 @@
 	}
 
 	@Override
-	public PageResult queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, String online, int page, int count) {
+	public PageInfo queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, int page, int count) {
 		// 鑾峰彇鍒版墍鏈夋鍦ㄦ挱鏀剧殑娴�
-		List<DeviceChannel> result = new ArrayList<>();
-		PageResult pageResult = new PageResult<DeviceChannel>();
-
-		deviceChannelMapper.queryChannelsByDeviceId(deviceId);
-//		String queryContent = "*";
-//		if (!StringUtils.isEmpty(query)) queryContent = String.format("*%S*",query);
-//		String queryHasSubChannel = "*";
-//		if (hasSubChannel != null) queryHasSubChannel = hasSubChannel?"true":"false";
-//		String queryOnline = "*";
-//		if (!StringUtils.isEmpty(online)) queryOnline = online;
-//		String queryStr = VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
-//				"_" + queryContent + // 鎼滅储缂栧彿鍜屽悕绉�
-//				"_" + queryOnline + // 鎼滅储鏄惁鍦ㄧ嚎
-//				"_" + queryHasSubChannel + // 鎼滅储鏄惁鍚湁瀛愯妭鐐�
-//				"_" + "*";
-//		List<Object> deviceChannelList = redis.scan(queryStr);
-//		//瀵规煡璇㈢粨鏋滄帓搴忥紝閬垮厤鍑虹幇閫氶亾鎺掑垪椤哄簭涔卞簭鐨勬儏鍐�
-//		Collections.sort(deviceChannelList,new Comparator<Object>(){
-//			@Override
-//			public int compare(Object o1, Object o2) {
-//				return o1.toString().compareToIgnoreCase(o2.toString());
-//			}
-//		});
-//		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++) {
-//				DeviceChannel deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(i));
-//				StreamInfo streamInfo = stringStreamInfoMap.get(deviceId + "_" + deviceChannel.getChannelId());
-//				deviceChannel.setPlay(streamInfo != null);
-//				if (streamInfo != null) deviceChannel.setStreamId(streamInfo.getStreamId());
-//				result.add(deviceChannel);
-//			}
-//			pageResult.setData(result);
-//		}
-
-		return pageResult;
+		PageHelper.startPage(page, count);
+		List<DeviceChannel> all = deviceChannelMapper.queryChannelsByDeviceId(deviceId, null, query, hasSubChannel, online);
+		return new PageInfo<>(all);
 	}
 
 
 
 	@Override
 	public List<DeviceChannel> queryChannelsByDeviceId(String deviceId) {
-//		List<DeviceChannel> result = new ArrayList<>();
-////		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*");
-//		List<Object> deviceChannelList = redis.scan(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 deviceChannelMapper.queryChannelsByDeviceId(deviceId);
+		return deviceChannelMapper.queryChannelsByDeviceId(deviceId, null,null, null, null);
 	}
 
 	@Override
-	public PageResult querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, String online, int page, int count) {
-
-		deviceChannelMapper.queryChannelsByDeviceId(deviceId, parentChannelId);
-
-//		List<DeviceChannel> allDeviceChannels = new ArrayList<>();
-//		String queryContent = "*";
-//		if (!StringUtils.isEmpty(query)) queryContent = String.format("*%S*",query);
-//		String queryHasSubChannel = "*";
-//		if (hasSubChannel != null) queryHasSubChannel = hasSubChannel?"true":"false";
-//		String queryOnline = "*";
-//		if (!StringUtils.isEmpty(online)) queryOnline = online;
-//		String queryStr = VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
-//				"_" + queryContent + // 鎼滅储缂栧彿鍜屽悕绉�
-//				"_" + queryOnline + // 鎼滅储鏄惁鍦ㄧ嚎
-//				"_" + queryHasSubChannel + // 鎼滅储鏄惁鍚湁瀛愯妭鐐�
-//				"_" + parentChannelId;
-//
-////		List<Object> deviceChannelList = redis.keys(queryStr);
-//		List<Object> deviceChannelList = redis.scan(queryStr);
-//
-//		if (deviceChannelList != null && deviceChannelList.size() > 0 ) {
-//			for (int i = 0; i < deviceChannelList.size(); i++) {
-//				DeviceChannel deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(i));
-//				if (deviceChannel.getParentId() != null && deviceChannel.getParentId().equals(parentChannelId)) {
-//					allDeviceChannels.add(deviceChannel);
-//				}
-//			}
-//		}
-//		int maxCount = (page + 1 ) * count;
-		PageResult pageResult = new PageResult<DeviceChannel>();
-//		pageResult.setPage(page);
-//		pageResult.setCount(count);
-//		pageResult.setTotal(allDeviceChannels.size());
-//
-//		if (allDeviceChannels.size() > 0) {
-//			pageResult.setData(allDeviceChannels.subList(
-//					page * count, pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal()
-//			));
-//		}
-		return pageResult;
-	}
-
-	public List<DeviceChannel> querySubChannels(String deviceId, String parentChannelId) {
-		List<DeviceChannel> allDeviceChannels = new ArrayList<>();
-//		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*");
-//		List<Object> deviceChannelList = redis.scan(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + "_" + "*");
-//
-//		if (deviceChannelList != null && deviceChannelList.size() > 0 ) {
-//			for (int i = 0; i < deviceChannelList.size(); i++) {
-//				DeviceChannel deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(i));
-//				if (deviceChannel.getParentId() != null && deviceChannel.getParentId().equals(parentChannelId)) {
-//					allDeviceChannels.add(deviceChannel);
-//				}
-//			}
-//		}
-
-		return allDeviceChannels;
+	public PageInfo<DeviceChannel> querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, String online, int page, int count) {
+		PageHelper.startPage(page, count);
+		List<DeviceChannel> all = deviceChannelMapper.queryChannelsByDeviceId(deviceId, parentChannelId, null, null, null);
+		return new PageInfo<>(all);
 	}
 
 	@Override
 	public DeviceChannel queryChannel(String deviceId, String channelId) {
-		DeviceChannel deviceChannel = null;
 		return deviceChannelMapper.queryChannel(deviceId, channelId);
-////		List<Object> deviceChannelList = redis.keys(VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
-//		List<Object> deviceChannelList = redis.scan(VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
-//				"_" + channelId  + "*");
-//		if (deviceChannelList != null && deviceChannelList.size() > 0 ) {
-//			deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(0));
-//		}
-//		return deviceChannel;
 	}
 
 
 	/**
 	 * 鑾峰彇澶氫釜璁惧
 	 *
-	 * @param deviceIds 璁惧ID鏁扮粍
-	 * @return List<Device> 璁惧瀵硅薄鏁扮粍
+	 * @param page 褰撳墠椤垫暟
+	 * @param count 姣忛〉鏁伴噺
+	 * @return PageInfo<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);
-//		Device device = null;
-//
-//		if (deviceIds == null || deviceIds.length == 0) {
-//
-////			List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*");
-//			List<Object> deviceIdList = redis.scan(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)));
-//				device =(Device)redis.get((String)deviceIdList.get(i));
-//				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
-//					// outline(device.getDeviceId());
-//				}
-//				devices.add(device);
-//			}
-//		} else {
-//			for (int i = 0; i < deviceIds.length; i++) {
-//				// devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
-//				device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]);
-//				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
-//					// outline(device.getDeviceId());
-//				}
-//				devices.add(device);
-//			}
-//		}
-//		pageResult.setData(devices);
-		return pageResult;
+	public PageInfo<Device> queryVideoDeviceList(int page, int count) {
+		PageHelper.startPage(page, count);
+		List<Device> all = deviceMapper.getDevices();
+		return new PageInfo<>(all);
 	}
 
 	/**
@@ -322,26 +143,6 @@
 	 */
 	@Override
 	public List<Device> queryVideoDeviceList() {
-
-//		if (deviceIds == null || deviceIds.length == 0) {
-////			List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*");
-//			List<Object> deviceIdList = redis.scan(VideoManagerConstants.DEVICE_PREFIX+"*");
-//			for (int i = 0; i < deviceIdList.size(); i++) {
-//				device =(Device)redis.get((String)deviceIdList.get(i));
-//				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
-//					outline(device.getDeviceId());
-//				}
-//				devices.add(device);
-//			}
-//		} else {
-//			for (int i = 0; i < deviceIds.length; i++) {
-//				device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]);
-//				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
-//					outline(device.getDeviceId());
-//				}
-//				devices.add(device);
-//			}
-//		}
 
 		List<Device> deviceList =  deviceMapper.getDevices();
 		return deviceList;
@@ -367,9 +168,13 @@
 	 * @return true锛氭洿鏂版垚鍔�  false锛氭洿鏂板け璐�
 	 */
 	@Override
-	public boolean online(String deviceId) {
+	public synchronized boolean online(String deviceId) {
 		Device device = deviceMapper.getDeviceByDeviceId(deviceId);
 		device.setOnline(1);
+		System.out.println("鏇存柊璁惧鍦ㄧ嚎");
+		if (device == null) {
+			return false;
+		}
 		return deviceMapper.update(device) > 0;
 	}
 
@@ -380,14 +185,10 @@
 	 * @return true锛氭洿鏂版垚鍔�  false锛氭洿鏂板け璐�
 	 */
 	@Override
-	public boolean outline(String deviceId) {
-//		Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
-//		if (device == null) return false;
-//		device.setOnline(0);
-//		return redis.set(VideoManagerConstants.DEVICE_PREFIX+device.getDeviceId(), device);
-
+	public synchronized boolean outline(String deviceId) {
 		Device device = deviceMapper.getDeviceByDeviceId(deviceId);
 		device.setOnline(0);
+		System.out.println("鏇存柊璁惧绂荤嚎");
 		return deviceMapper.update(device) > 0;
 	}
 

--
Gitblit v1.8.0