package com.dji.sample.manage.service.impl;
|
|
import com.dji.sample.component.redis.RedisConst;
|
import com.dji.sample.component.redis.RedisOpsUtils;
|
import com.dji.sample.manage.model.dto.CapacityCameraDTO;
|
import com.dji.sample.manage.model.dto.DeviceDictionaryDTO;
|
import com.dji.sample.manage.model.receiver.CapacityCameraReceiver;
|
import com.dji.sample.manage.service.ICameraVideoService;
|
import com.dji.sample.manage.service.ICapacityCameraService;
|
import com.dji.sample.manage.service.IDeviceDictionaryService;
|
import com.dji.sdk.cloudapi.device.DeviceDomainEnum;
|
import com.dji.sdk.cloudapi.device.PayloadIndex;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.Optional;
|
import java.util.UUID;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author sean.zhou
|
* @date 2021/11/19
|
* @version 0.1
|
*/
|
@Service
|
public class CapacityCameraServiceImpl implements ICapacityCameraService {
|
|
@Autowired
|
private ICameraVideoService cameraVideoService;
|
|
@Autowired
|
private IDeviceDictionaryService dictionaryService;
|
|
@Override
|
public List<CapacityCameraDTO> getCapacityCameraByDeviceSn(String deviceSn) {
|
return (List<CapacityCameraDTO>) RedisOpsUtils.hashGet(RedisConst.LIVE_CAPACITY, deviceSn);
|
}
|
|
@Override
|
public Boolean deleteCapacityCameraByDeviceSn(String deviceSn) {
|
return RedisOpsUtils.hashDel(RedisConst.LIVE_CAPACITY, new String[]{deviceSn});
|
}
|
|
@Override
|
public void saveCapacityCameraReceiverList(List<CapacityCameraReceiver> capacityCameraReceivers, String deviceSn) {
|
List<CapacityCameraDTO> capacity = capacityCameraReceivers.stream()
|
.map(this::receiver2Dto).collect(Collectors.toList());
|
RedisOpsUtils.hashSet(RedisConst.LIVE_CAPACITY, deviceSn, capacity);
|
}
|
|
public CapacityCameraDTO receiver2Dto(CapacityCameraReceiver receiver) {
|
CapacityCameraDTO.CapacityCameraDTOBuilder builder = CapacityCameraDTO.builder();
|
if (receiver == null) {
|
return builder.build();
|
}
|
PayloadIndex cameraIndex = receiver.getCameraIndex();
|
// The cameraIndex consists of type and subType and the index of the payload hanging on the drone.
|
// type-subType-index
|
Optional<DeviceDictionaryDTO> dictionaryOpt = dictionaryService.getOneDictionaryInfoByTypeSubType(
|
DeviceDomainEnum.PAYLOAD.getDomain(), cameraIndex.getType().getType(), cameraIndex.getSubType().getSubType());
|
dictionaryOpt.ifPresent(dictionary -> builder.name(dictionary.getDeviceName()));
|
|
return builder
|
.id(UUID.randomUUID().toString())
|
.videosList(receiver.getVideoList()
|
.stream()
|
.map(cameraVideoService::receiver2Dto)
|
.filter(Objects::nonNull)
|
.collect(Collectors.toList()))
|
.index(receiver.getCameraIndex().toString())
|
.build();
|
}
|
}
|