rain
2024-06-14 8d9a2d656e4ae007590c622e5f7c228adacdca49
src/main/java/com/dji/sample/manage/service/impl/CapacityCameraServiceImpl.java
@@ -1,11 +1,9 @@
package com.dji.sample.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dji.sample.manage.dao.ICapacityCameraMapper;
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.CapacityVideoDTO;
import com.dji.sample.manage.model.dto.DeviceDictionaryDTO;
import com.dji.sample.manage.model.entity.CapacityCameraEntity;
import com.dji.sample.manage.model.enums.DeviceDomainEnum;
import com.dji.sample.manage.model.receiver.CapacityCameraReceiver;
import com.dji.sample.manage.service.ICameraVideoService;
@@ -13,11 +11,11 @@
import com.dji.sample.manage.service.IDeviceDictionaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
/**
@@ -26,11 +24,8 @@
 * @version 0.1
 */
@Service
@Transactional
//@Transactional
public class CapacityCameraServiceImpl implements ICapacityCameraService {
    @Autowired
    private ICapacityCameraMapper mapper;
    @Autowired
    private ICameraVideoService cameraVideoService;
@@ -40,93 +35,24 @@
    @Override
    public List<CapacityCameraDTO> getCapacityCameraByDeviceSn(String deviceSn) {
        List<CapacityCameraDTO> capacityCamerasList = mapper.selectList(
                new LambdaQueryWrapper<CapacityCameraEntity>()
                        .eq(CapacityCameraEntity::getDeviceSn, deviceSn))
                .stream()
                .map(this::entityConvertToDto)
                .collect(Collectors.toList());
        capacityCamerasList.forEach(capacityCamera -> {
            // Set the lens data for this camera.
            capacityCamera.setVideosList(
                    cameraVideoService.getCameraVideosByCameraId(capacityCamera.getId()));
        });
        return capacityCamerasList;
    }
    @Override
    public Boolean checkExist(String deviceSn, String cameraIndex) {
        return mapper.selectOne(
                new LambdaQueryWrapper<CapacityCameraEntity>()
                        .eq(CapacityCameraEntity::getDeviceSn, deviceSn)
                        .eq(CapacityCameraEntity::getCameraIndex, cameraIndex)
                        .last(" limit 1")) != null;
        return (List<CapacityCameraDTO>) RedisOpsUtils.hashGet(RedisConst.LIVE_CAPACITY, deviceSn);
    }
    @Override
    public Boolean deleteCapacityCameraByDeviceSn(String deviceSn) {
        List<CapacityCameraDTO> capacityCamerasList = this.getCapacityCameraByDeviceSn(deviceSn);
        // Return directly if no data exists in the database.
        if (capacityCamerasList.isEmpty()) {
            return true;
        }
        List<Integer> cameraIds = capacityCamerasList
                .stream()
                .map(CapacityCameraDTO::getId)
                .collect(Collectors.toList());
        List<Integer> videoIds = capacityCamerasList
                .stream()
                .flatMap(camera -> camera.getVideosList().stream())
                .map(CapacityVideoDTO::getId)
                .collect(Collectors.toList());
        return mapper.deleteBatchIds(cameraIds) > 0 && cameraVideoService.deleteCameraVideosById(videoIds);
        return RedisOpsUtils.hashDel(RedisConst.LIVE_CAPACITY, new String[]{deviceSn});
    }
    @Override
    public Boolean saveCapacityCameraReceiverList(List<CapacityCameraReceiver> capacityCameraReceivers, String deviceSn) {
        for (CapacityCameraReceiver cameraDTO : capacityCameraReceivers) {
            CapacityCameraEntity cameraEntity = receiverConvertToEntity(cameraDTO);
            cameraEntity.setDeviceSn(deviceSn);
            int cameraId = this.saveOneCapacityCameraEntity(cameraEntity);
            if (cameraId <= 0) {
                continue;
            }
            boolean saveVideo = cameraVideoService.saveCameraVideoDTOList(
                    cameraDTO.getVideosList(), cameraId);
            if (!saveVideo) {
                return false;
            }
        }
        return true;
    public void saveCapacityCameraReceiverList(List<CapacityCameraReceiver> capacityCameraReceivers, String deviceSn, Long timestamp) {
        List<CapacityCameraDTO> capacity = capacityCameraReceivers.stream()
                .map(this::receiver2Dto).collect(Collectors.toList());
        RedisOpsUtils.hashSet(RedisConst.LIVE_CAPACITY, deviceSn, capacity);
    }
    /**
     * Save the camera live capability data of the device.
     * @param cameraEntity
     * @return
     */
    private Integer saveOneCapacityCameraEntity(CapacityCameraEntity cameraEntity) {
        boolean exist = checkExist(
                cameraEntity.getDeviceSn(), cameraEntity.getCameraIndex());
        if (exist) {
            return -1;
        }
        return mapper.insert(cameraEntity) > 0 ? cameraEntity.getId() : 0;
    }
    /**
     *  Convert the received camera capability object into a database entity object.
     * @param receiver
     * @return
     */
    private CapacityCameraEntity receiverConvertToEntity(CapacityCameraReceiver receiver) {
        CapacityCameraEntity.CapacityCameraEntityBuilder builder = CapacityCameraEntity.builder();
    @Override
    public CapacityCameraDTO receiver2Dto(CapacityCameraReceiver receiver) {
        CapacityCameraDTO.CapacityCameraDTOBuilder builder = CapacityCameraDTO.builder();
        if (receiver == null) {
            return builder.build();
        }
@@ -138,35 +64,17 @@
        // type-subType-index
        if (indexArr.length == 3) {
            Optional<DeviceDictionaryDTO> dictionaryOpt = dictionaryService
                    .getOneDictionaryInfoByDomainTypeSubType(
                            DeviceDomainEnum.PAYLOAD.getVal(), indexArr[0], indexArr[1]);
                    .getOneDictionaryInfoByTypeSubType(DeviceDomainEnum.PAYLOAD.getVal(), indexArr[0], indexArr[1]);
            dictionaryOpt.ifPresent(dictionary ->
                    builder.name(dictionary.getDeviceName()));
        }
        return builder
                .availableVideoNumber(receiver.getAvailableVideoNumber())
                .coexistVideoNumberMax(receiver.getCoexistVideoNumberMax())
                .cameraIndex(receiver.getCameraIndex())
                .id(UUID.randomUUID().toString())
                .videosList(receiver.getVideosList()
                        .stream()
                        .map(cameraVideoService::receiver2Dto)
                        .collect(Collectors.toList()))
                .index(receiver.getCameraIndex())
                .build();
    }
    /**
     * Convert database entity objects into camera data transfer object.
     * @param entity
     * @return
     */
    private CapacityCameraDTO entityConvertToDto(CapacityCameraEntity entity) {
        CapacityCameraDTO.CapacityCameraDTOBuilder builder = CapacityCameraDTO.builder();
        if (entity != null) {
            builder
                .id(entity.getId())
                .name(entity.getName())
                .description(entity.getDescription())
                .deviceSn(entity.getDeviceSn())
                .index(entity.getCameraIndex())
                .build();
        }
        return builder.build();
    }
}