rain
2024-05-22 b35dd737c03ee80d45753939ade49a59f556197f
src/main/java/com/dji/sample/media/service/impl/FileServiceImpl.java
@@ -1,6 +1,12 @@
package com.dji.sample.media.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dji.sample.common.model.Pagination;
import com.dji.sample.common.model.PaginationData;
@@ -10,14 +16,18 @@
import com.dji.sample.manage.model.enums.DeviceDomainEnum;
import com.dji.sample.manage.service.IDeviceDictionaryService;
import com.dji.sample.media.dao.IFileMapper;
import com.dji.sample.media.model.FileUploadDTO;
import com.dji.sample.media.model.MediaFileDTO;
import com.dji.sample.media.model.MediaFileEntity;
import com.dji.sample.media.dao.IMarkMapper;
import com.dji.sample.media.model.*;
import com.dji.sample.media.service.IFileService;
import com.dji.sample.territory.service.impl.TbFjServiceImpl;
import com.dji.sample.territory.utils.WaterMarkUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.time.Instant;
import java.time.LocalDateTime;
@@ -39,15 +49,13 @@
    @Autowired
    private IFileMapper mapper;
    @Autowired
    private IMarkMapper markMapper;
    @Autowired
    private IDeviceDictionaryService deviceDictionaryService;
    @Autowired
    private OssServiceContext ossService;
    @Autowired
    private OssConfiguration configuration;
    private Optional<MediaFileEntity> getMediaByFingerprint(String workspaceId, String fingerprint) {
        MediaFileEntity fileEntity = mapper.selectOne(new LambdaQueryWrapper<MediaFileEntity>()
@@ -75,7 +83,21 @@
        fileEntity.setFileId(UUID.randomUUID().toString());
        return mapper.insert(fileEntity);
    }
        public Integer saveMarkFile(String workspaceId, FileUploadDTO file) throws IOException, FontFormatException {
            MediaFileMarkEntity mediaFileMarkEntity =this.fileUploadConvertToMarkEntity(file);
            String url =  "http://dev.jxpskj.com:9000/cloud-bucket" + file.getObjectKey();
            File file1=TbFjServiceImpl.downloadFile(url);
            File file2= new File(WaterMarkUtil.addWatermark(file1, Long.valueOf(file.getMetadata().getCreatedTime().toString()),file.getMetadata().getPhotoedPosition().getLat(),
                    file.getMetadata().getPhotoedPosition().getLng(),file.getMetadata().getGimbalYawDegree()).toURI());
            mediaFileMarkEntity.setObjectKey(file.getPath());
            mediaFileMarkEntity.setWorkspaceId(workspaceId);
            mediaFileMarkEntity.setFileId(UUID.randomUUID().toString());
            mediaFileMarkEntity.setObjectKey("/mark"+file.getPath()+"/"+file.getName());
            mediaFileMarkEntity.setFileName("mark"+file.getName());
            mediaFileMarkEntity.setFilePath("mark"+file.getPath());
            uploadFile(String.valueOf(file2), mediaFileMarkEntity.getObjectKey());
            return markMapper.insert(mediaFileMarkEntity);
        }
    @Override
    public List<MediaFileDTO> getAllFilesByWorkspaceId(String workspaceId) {
        return mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
@@ -86,28 +108,65 @@
    }
    @Override
    public PaginationData<MediaFileDTO> getJobsPaginationByWorkspaceId(String workspaceId, long page, long pageSize) {
        Page<MediaFileEntity> pageData = mapper.selectPage(
                new Page<MediaFileEntity>(page, pageSize),
                new LambdaQueryWrapper<MediaFileEntity>()
                        .eq(MediaFileEntity::getWorkspaceId, workspaceId)
                        .orderByDesc(MediaFileEntity::getId));
        List<MediaFileDTO> records = pageData.getRecords()
                .stream()
                .map(this::entityConvertToDto)
                .collect(Collectors.toList());
        return new PaginationData<MediaFileDTO>(records, new Pagination(pageData));
    public List<MediaFileEntity> listMediaFileEntity(String workspaceId, String jobId) {
        return mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
                .eq(MediaFileEntity::getWorkspaceId, workspaceId).eq(MediaFileEntity::getJobId,jobId));
    }
    @Override
    public PaginationData<MediaFileEntity> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize, MediaFileQueryParam mediaFileQueryParam) {
//        Page<MediaFileEntity> pageData = mapper.selectPage(
//                new Page<MediaFileEntity>(page, pageSize),
//                new LambdaQueryWrapper<MediaFileEntity>()
//                        .eq(MediaFileEntity::getWorkspaceId, workspaceId)
//                        .orderByDesc(MediaFileEntity::getId));
        Page<MediaFileEntity> pageData = mapper.selectPage(new Page<MediaFileEntity>(page, pageSize), new LambdaQueryWrapper<MediaFileEntity>()
                .eq(MediaFileEntity::getWorkspaceId,workspaceId)
                .orderByDesc(MediaFileEntity::getCreateTime));
        List<MediaFileEntity> records = pageData.getRecords()
                .stream()
                .collect(Collectors.toList());
        return new PaginationData<MediaFileEntity>(records, new Pagination(pageData));
    }
    public int  deleteMedia(String workspaceId, String fileId) {
    int count=mapper.delete(new LambdaUpdateWrapper<MediaFileEntity>().eq(MediaFileEntity::getFileId, fileId)
                .eq(MediaFileEntity::getWorkspaceId, workspaceId));
    return count;
    }
    @Override
    public URL getObjectUrl(String workspaceId, String fileId) {
        Optional<MediaFileEntity> mediaFileOpt = getMediaByFileId(workspaceId, fileId);
        if (mediaFileOpt.isEmpty()) {
            throw new IllegalArgumentException("{} doesn't exist.");
            throw new IllegalArgumentException("{} 不存在");
        }
        return ossService.getObjectUrl(configuration.getBucket(), mediaFileOpt.get().getObjectKey());
        return ossService.getObjectUrl(OssConfiguration.bucket, mediaFileOpt.get().getObjectKey());
    }
    @Override
    public List<MediaFileDTO> getFilesByWorkspaceAndJobId(String workspaceId, String jobId) {
        return mapper.selectList(new LambdaQueryWrapper<MediaFileEntity>()
                .eq(MediaFileEntity::getWorkspaceId, workspaceId)
                .eq(MediaFileEntity::getJobId, jobId))
                .stream()
                .map(this::entityConvertToDto).collect(Collectors.toList());
    }
    @Override
    public Boolean updateMediaFile(String workspaceId, MediaFileEntity mediaFileEntity) {
        /*MediaFileEntity params = new MediaFileEntity();
        params.setFileId(mediaFileEntity.getFileId());
        params.setWorkspaceId(mediaFileEntity.getWorkspaceId());*/
        boolean update1 = new LambdaUpdateChainWrapper<>(mapper).eq(MediaFileEntity::getFileId, mediaFileEntity.getFileId())
                .set(MediaFileEntity::getFileName, mediaFileEntity.getFileName())
                .set(MediaFileEntity::getCollectStatus,mediaFileEntity.getCollectStatus())
                .set(MediaFileEntity::getUserId,mediaFileEntity.getUserId())
                .update();
//        int update = mapper.update(mediaFileEntity, Wrappers.update(params));
        return update1;
    }
    /**
@@ -121,12 +180,13 @@
        if (file != null) {
            builder.fileName(file.getName())
                    .filePath(file.getPath())
                    .isadd(0)
                    .fingerprint(file.getFingerprint())
                    .objectKey(file.getObjectKey())
                    .subFileType(file.getSubFileType())
                    .isOriginal(file.getExt().getIsOriginal())
                    .jobId(file.getExt().getFlightId())
                    .drone(file.getExt().getSn())
                    .drone(file.getExt().getSn()).metadata(file.getMetadata())
                    .tinnyFingerprint(file.getExt().getTinnyFingerprint());
            // domain-type-subType
@@ -140,6 +200,33 @@
        }
        return builder.build();
    }
    private MediaFileMarkEntity fileUploadConvertToMarkEntity(FileUploadDTO file) {
        MediaFileMarkEntity.MediaFileMarkEntityBuilder builder = MediaFileMarkEntity.builder();
        if (file != null) {
            builder.fileName(file.getName())
                    .filePath(file.getPath())
                    .isadd(0)
                    .fingerprint(file.getFingerprint())
                    .objectKey(file.getObjectKey())
                    .subFileType(file.getSubFileType())
                    .isOriginal(file.getExt().getIsOriginal())
                    .jobId(file.getExt().getFlightId())
                    .drone(file.getExt().getSn()).metadata(file.getMetadata())
                    .tinnyFingerprint(file.getExt().getTinnyFingerprint());
            // domain-type-subType
            int[] payloadModel = Arrays.stream(file.getExt().getPayloadModelKey().split("-"))
                    .map(Integer::valueOf)
                    .mapToInt(Integer::intValue)
                    .toArray();
            Optional<DeviceDictionaryDTO> payloadDict = deviceDictionaryService
                    .getOneDictionaryInfoByTypeSubType(DeviceDomainEnum.PAYLOAD.getVal(), payloadModel[1], payloadModel[2]);
            payloadDict.ifPresent(payload -> builder.payload(payload.getDeviceName()));
        }
        return builder.build();
    }
    /**
     * Convert database entity objects into file data transfer object.
@@ -158,13 +245,26 @@
                    .objectKey(entity.getObjectKey())
                    .tinnyFingerprint(entity.getTinnyFingerprint())
                    .payload(entity.getPayload())
                    .metadata(entity.getMetadata())
                    .createTime(LocalDateTime.ofInstant(
                            Instant.ofEpochMilli(entity.getCreateTime()), ZoneId.systemDefault()))
                    .drone(entity.getDrone());
                    .drone(entity.getDrone())
                    .jobId(entity.getJobId());
        }
        return builder.build();
    }
    public void uploadFile(String filePath, String key) {
        OSS ossClient = new OSSClientBuilder().build(OssConfiguration.endpoint, OssConfiguration.accessKey, OssConfiguration.secretKey);
        try {
            File file = new File(filePath);
            PutObjectRequest putObjectRequest = new PutObjectRequest(OssConfiguration.bucket, key, file);
            PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
    }
}