package com.ruoyi.device.channel.service.impl;
|
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
import com.ruoyi.common.utils.uuid.IdUtils;
|
import com.ruoyi.device.camera.domain.ArdCameras;
|
import com.ruoyi.device.camera.factory.CameraSDK;
|
import com.ruoyi.device.camera.factory.CameraSDKFactory;
|
import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
|
import com.ruoyi.media.mapper.VtduMapper;
|
import com.ruoyi.media.service.IVtduService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import com.ruoyi.device.channel.mapper.ArdChannelMapper;
|
import com.ruoyi.device.channel.domain.ArdChannel;
|
import com.ruoyi.device.channel.service.IArdChannelService;
|
|
import javax.annotation.Resource;
|
|
/**
|
* 通道管理Service业务层处理
|
*
|
* @author ard
|
* @date 2023-08-19
|
*/
|
@Service
|
public class ArdChannelServiceImpl implements IArdChannelService {
|
@Resource
|
private ArdChannelMapper ardChannelMapper;
|
@Resource
|
private CameraSDKFactory cameraSDKFactory;
|
@Resource
|
private IVtduService vtduService;
|
/**
|
* 查询通道管理
|
*
|
* @param id 通道管理主键
|
* @return 通道管理
|
*/
|
@Override
|
public ArdChannel selectArdChannelById(String id) {
|
return ardChannelMapper.selectArdChannelById(id);
|
}
|
|
/**
|
* 查询通道管理列表
|
*
|
* @param ardChannel 通道管理
|
* @return 通道管理
|
*/
|
@Override
|
public List<ArdChannel> selectArdChannelList(ArdChannel ardChannel) {
|
return ardChannelMapper.selectArdChannelList(ardChannel);
|
}
|
|
/**
|
* 新增通道管理
|
*
|
* @param ardChannel 通道管理
|
* @return 结果
|
*/
|
@Override
|
public int insertArdChannel(ArdChannel ardChannel) {
|
ardChannel.setId(IdUtils.simpleUUID());
|
return ardChannelMapper.insertArdChannel(ardChannel);
|
}
|
|
/**
|
* 修改通道管理
|
*
|
* @param ardChannel 通道管理
|
* @return 结果
|
*/
|
@Override
|
public int updateArdChannel(ArdChannel ardChannel) {
|
return ardChannelMapper.updateArdChannel(ardChannel);
|
}
|
|
/**
|
* 批量删除通道管理
|
*
|
* @param ids 需要删除的通道管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdChannelByIds(String[] ids) {
|
return ardChannelMapper.deleteArdChannelByIds(ids);
|
}
|
|
/**
|
* 删除通道管理信息
|
*
|
* @param id 通道管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdChannelById(String id) {
|
return ardChannelMapper.deleteArdChannelById(id);
|
}
|
|
/**
|
* 删除通道管理信息
|
*
|
* @param deviceId 所属设备ID
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdChannelByDeviceId(String deviceId) {
|
return ardChannelMapper.deleteArdChannelByDeviceId(deviceId);
|
}
|
|
@Override
|
public void asyncChannel(ArdCameras ardCameras,List<ArdChannel> oldArrayList, List<ArdChannel> newArrayList) {
|
// 将列表转换为映射以提高性能
|
Map<Integer, ArdChannel> oldMap = oldArrayList.stream()
|
.collect(Collectors.toMap(ArdChannel::getChanNo, channel -> channel));
|
Map<Integer, ArdChannel> newMap = newArrayList.stream()
|
.collect(Collectors.toMap(ArdChannel::getChanNo, channel -> channel));
|
|
// 需要更新的数据
|
newArrayList.stream()
|
.filter(channel -> {
|
ArdChannel oldChannel = oldMap.get(channel.getChanNo());
|
return oldChannel != null && !oldChannel.getName().equals(channel.getName());
|
})
|
.forEach(channel -> {
|
ArdChannel oldChannel = oldMap.get(channel.getChanNo());
|
channel.setId(oldChannel.getId());
|
updateArdChannel(channel);
|
});
|
|
// 需要删除的数据
|
oldArrayList.stream()
|
.filter(channel -> !newMap.containsKey(channel.getChanNo()))
|
.forEach(channel -> {
|
deleteArdChannelById(channel.getId());
|
vtduService.deleteVtduByName(channel.getDeviceId() + "_" + channel.getChanNo());
|
});
|
|
// 需要新增的数据
|
newArrayList.stream()
|
.filter(channel -> !oldMap.containsKey(channel.getChanNo()))
|
.forEach(channel -> {
|
insertArdChannel(channel);
|
vtduService.addChanToVtdu(ardCameras, channel);
|
});
|
}
|
}
|