package com.genersoft.iot.vmp.storager.impl;
|
|
import java.util.*;
|
|
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
|
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
|
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
|
import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
|
import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper;
|
import com.genersoft.iot.vmp.storager.dao.PatformChannelMapper;
|
import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
|
import org.springframework.transaction.annotation.Transactional;
|
|
/**
|
* @Description:视频设备数据存储-jdbc实现
|
* @author: swwheihei
|
* @date: 2020年5月6日 下午2:31:42
|
*/
|
@Component
|
public class VideoManagerStoragerImpl implements IVideoManagerStorager {
|
|
@Autowired
|
private DeviceMapper deviceMapper;
|
|
@Autowired
|
private DeviceChannelMapper deviceChannelMapper;
|
|
@Autowired
|
private ParentPlatformMapper platformMapper;
|
|
@Autowired
|
private IRedisCatchStorage redisCatchStorage;
|
|
@Autowired
|
private PatformChannelMapper patformChannelMapper;
|
|
|
|
|
/**
|
* 根据设备ID判断设备是否存在
|
*
|
* @param deviceId 设备ID
|
* @return true:存在 false:不存在
|
*/
|
@Override
|
public boolean exists(String deviceId) {
|
return deviceMapper.getDeviceByDeviceId(deviceId) != null;
|
}
|
|
/**
|
* 视频设备创建
|
*
|
* @param device 设备对象
|
* @return true:创建成功 false:创建失败
|
*/
|
@Override
|
public synchronized boolean create(Device device) {
|
return deviceMapper.add(device) > 0;
|
}
|
|
|
|
/**
|
* 视频设备更新
|
*
|
* @param device 设备对象
|
* @return true:更新成功 false:更新失败
|
*/
|
@Override
|
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 synchronized void updateChannel(String deviceId, DeviceChannel channel) {
|
String channelId = channel.getChannelId();
|
channel.setDeviceId(deviceId);
|
DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId);
|
if (deviceChannel == null) {
|
deviceChannelMapper.add(channel);
|
}else {
|
deviceChannelMapper.update(channel);
|
}
|
}
|
|
@Override
|
public void startPlay(String deviceId, String channelId, String streamId) {
|
deviceChannelMapper.startPlay(deviceId, channelId, streamId);
|
}
|
|
@Override
|
public void stopPlay(String deviceId, String channelId) {
|
deviceChannelMapper.stopPlay(deviceId, channelId);
|
}
|
|
/**
|
* 获取设备
|
*
|
* @param deviceId 设备ID
|
* @return Device 设备对象
|
*/
|
@Override
|
public Device queryVideoDevice(String deviceId) {
|
return deviceMapper.getDeviceByDeviceId(deviceId);
|
}
|
|
@Override
|
public PageInfo queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, int page, int count) {
|
// 获取到所有正在播放的流
|
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) {
|
return deviceChannelMapper.queryChannelsByDeviceId(deviceId, null,null, null, null);
|
}
|
|
@Override
|
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) {
|
return deviceChannelMapper.queryChannel(deviceId, channelId);
|
}
|
|
|
/**
|
* 获取多个设备
|
*
|
* @param page 当前页数
|
* @param count 每页数量
|
* @return PageInfo<Device> 分页设备对象数组
|
*/
|
@Override
|
public PageInfo<Device> queryVideoDeviceList(int page, int count) {
|
PageHelper.startPage(page, count);
|
List<Device> all = deviceMapper.getDevices();
|
return new PageInfo<>(all);
|
}
|
|
/**
|
* 获取多个设备
|
*
|
* @return List<Device> 设备对象数组
|
*/
|
@Override
|
public List<Device> queryVideoDeviceList() {
|
|
List<Device> deviceList = deviceMapper.getDevices();
|
return deviceList;
|
}
|
|
/**
|
* 删除设备
|
*
|
* @param deviceId 设备ID
|
* @return true:删除成功 false:删除失败
|
*/
|
@Override
|
public boolean delete(String deviceId) {
|
int result = deviceMapper.del(deviceId);
|
|
return result > 0;
|
}
|
|
/**
|
* 更新设备在线
|
*
|
* @param deviceId 设备ID
|
* @return true:更新成功 false:更新失败
|
*/
|
@Override
|
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;
|
}
|
|
/**
|
* 更新设备离线
|
*
|
* @param deviceId 设备ID
|
* @return true:更新成功 false:更新失败
|
*/
|
@Override
|
public synchronized boolean outline(String deviceId) {
|
Device device = deviceMapper.getDeviceByDeviceId(deviceId);
|
device.setOnline(0);
|
System.out.println("更新设备离线");
|
return deviceMapper.update(device) > 0;
|
}
|
|
|
@Override
|
public void cleanChannelsForDevice(String deviceId) {
|
int result = deviceChannelMapper.cleanChannelsByDeviceId(deviceId);
|
}
|
|
@Override
|
public boolean addParentPlatform(ParentPlatform parentPlatform) {
|
int result = platformMapper.addParentPlatform(parentPlatform);
|
return result > 0;
|
}
|
|
@Override
|
public boolean updateParentPlatform(ParentPlatform parentPlatform) {
|
int result = 0;
|
ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); // .getDeviceGBId());
|
if ( platformMapper.getParentPlatById(parentPlatform.getServerGBId()) == null) {
|
result = platformMapper.addParentPlatform(parentPlatform);
|
|
if (parentPlatformCatch == null) {
|
parentPlatformCatch = new ParentPlatformCatch();
|
parentPlatformCatch.setParentPlatform(parentPlatform);
|
parentPlatformCatch.setId(parentPlatform.getServerGBId());
|
}
|
}else {
|
result = platformMapper.updateParentPlatform(parentPlatform);
|
}
|
// 更新缓存
|
parentPlatformCatch.setParentPlatform(parentPlatform);
|
redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
|
return result > 0;
|
}
|
|
@Transactional
|
@Override
|
public boolean deleteParentPlatform(ParentPlatform parentPlatform) {
|
int result = platformMapper.delParentPlatform(parentPlatform);
|
// 删除关联的通道
|
patformChannelMapper.cleanChannelForGB(parentPlatform.getDeviceGBId());
|
return result > 0;
|
}
|
|
@Override
|
public PageInfo<ParentPlatform> queryParentPlatformList(int page, int count) {
|
PageHelper.startPage(page, count);
|
List<ParentPlatform> all = platformMapper.getParentPlatformList();
|
return new PageInfo<>(all);
|
}
|
|
@Override
|
public ParentPlatform queryParentPlatById(String platformGbId) {
|
return platformMapper.getParentPlatById(platformGbId);
|
}
|
|
@Override
|
public List<ParentPlatform> queryEnableParentPlatformList(boolean enable) {
|
return platformMapper.getEnableParentPlatformList(enable);
|
}
|
|
@Override
|
public void outlineForAllParentPlatform() {
|
platformMapper.outlineForAllParentPlatform();
|
}
|
|
|
@Override
|
public PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online,
|
Boolean channelType, String platformId, Boolean inPlatform) {
|
PageHelper.startPage(page, count);
|
List<ChannelReduce> all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, inPlatform);
|
return new PageInfo<>(all);
|
}
|
|
@Override
|
public List<ChannelReduce> queryChannelListInParentPlatform(String platformId) {
|
|
return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, true);
|
}
|
|
@Override
|
public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces) {
|
|
Map<String, ChannelReduce> deviceAndChannels = new HashMap<>();
|
for (ChannelReduce channelReduce : channelReduces) {
|
deviceAndChannels.put(channelReduce.getDeviceId() + "_" + channelReduce.getChannelId(), channelReduce);
|
}
|
List<String> deviceAndChannelList = new ArrayList<>(deviceAndChannels.keySet());
|
// 查询当前已经存在的
|
List<String> relatedPlatformchannels = patformChannelMapper.findChannelRelatedPlatform(platformId, deviceAndChannelList);
|
if (relatedPlatformchannels != null) {
|
deviceAndChannelList.removeAll(relatedPlatformchannels);
|
}
|
for (String relatedPlatformchannel : relatedPlatformchannels) {
|
deviceAndChannels.remove(relatedPlatformchannel);
|
}
|
List<ChannelReduce> channelReducesToAdd = new ArrayList<>(deviceAndChannels.values());
|
// 对剩下的数据进行存储
|
int result = 0;
|
if (channelReducesToAdd.size() > 0) {
|
result = patformChannelMapper.addChannels(platformId, channelReducesToAdd);
|
}
|
|
return result;
|
}
|
|
|
@Override
|
public int delChannelForGB(String platformId, List<ChannelReduce> channelReduces) {
|
|
int result = patformChannelMapper.delChannelForGB(platformId, channelReduces);
|
|
return result;
|
}
|
}
|