| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.dji.sample.common.model.Pagination; |
| | | import com.dji.sample.common.model.PaginationData; |
| | | import com.dji.sample.component.oss.model.AliyunOSSConfiguration; |
| | | import com.dji.sample.component.oss.model.MinIOConfiguration; |
| | | import com.dji.sample.component.oss.service.IOssService; |
| | | import com.dji.sample.component.oss.service.impl.AliyunOssServiceImpl; |
| | | import com.dji.sample.component.oss.service.impl.MinIOServiceImpl; |
| | | import com.dji.sample.component.oss.model.OssConfiguration; |
| | | import com.dji.sample.component.oss.service.impl.OssServiceContext; |
| | | import com.dji.sample.wayline.dao.IWaylineFileMapper; |
| | | import com.dji.sample.wayline.model.WaylineFileDTO; |
| | | import com.dji.sample.wayline.model.WaylineFileEntity; |
| | | import com.dji.sample.wayline.model.WaylineQueryParam; |
| | | import com.dji.sample.wayline.model.dto.WaylineFileDTO; |
| | | import com.dji.sample.wayline.model.entity.WaylineFileEntity; |
| | | import com.dji.sample.wayline.model.param.WaylineQueryParam; |
| | | import com.dji.sample.wayline.service.IWaylineFileService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.DigestUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.net.URL; |
| | | import java.sql.SQLException; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import java.util.UUID; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | */ |
| | | @Service |
| | | @Transactional |
| | | @Slf4j |
| | | public class WaylineFileServiceImpl implements IWaylineFileService { |
| | | |
| | | @Autowired |
| | | private IWaylineFileMapper mapper; |
| | | |
| | | private IOssService ossService; |
| | | @Autowired |
| | | private OssServiceContext ossService; |
| | | |
| | | @Autowired |
| | | private void setOssService(@Autowired(required = false) AliyunOssServiceImpl aliyunOssService, |
| | | @Autowired(required = false) MinIOServiceImpl minIOService) { |
| | | if (AliyunOSSConfiguration.enable) { |
| | | this.ossService = aliyunOssService; |
| | | return; |
| | | } |
| | | if (MinIOConfiguration.enable) { |
| | | this.ossService = minIOService; |
| | | return; |
| | | } |
| | | log.error("ossService is null."); |
| | | } |
| | | private OssConfiguration configuration; |
| | | |
| | | @Override |
| | | public PaginationData<WaylineFileDTO> getWaylinesByParam(String workspaceId, WaylineQueryParam param) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public WaylineFileDTO getWaylineByWaylineId(String workspaceId, String waylineId) { |
| | | return this.entityConvertToDTO( |
| | | public Optional<WaylineFileDTO> getWaylineByWaylineId(String workspaceId, String waylineId) { |
| | | return Optional.ofNullable( |
| | | this.entityConvertToDTO( |
| | | mapper.selectOne( |
| | | new LambdaQueryWrapper<WaylineFileEntity>() |
| | | .eq(WaylineFileEntity::getWorkspaceId, workspaceId) |
| | | .eq(WaylineFileEntity::getWaylineId, waylineId))); |
| | | .eq(WaylineFileEntity::getWaylineId, waylineId)))); |
| | | } |
| | | |
| | | @Override |
| | | public URL getObjectUrl(String bucket, String objectKey) { |
| | | return ossService.getObjectUrl(bucket, objectKey); |
| | | public URL getObjectUrl(String workspaceId, String waylineId) throws SQLException { |
| | | Optional<WaylineFileDTO> waylineOpt = this.getWaylineByWaylineId(workspaceId, waylineId); |
| | | if (waylineOpt.isEmpty()) { |
| | | throw new SQLException(waylineId + " does not exist."); |
| | | } |
| | | return ossService.getObjectUrl(configuration.getBucket(), waylineOpt.get().getObjectKey()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | file.setWaylineId(UUID.randomUUID().toString()); |
| | | file.setWorkspaceId(workspaceId); |
| | | |
| | | byte[] object = ossService.getObject(configuration.getBucket(), metadata.getObjectKey()); |
| | | if (object.length == 0) { |
| | | throw new RuntimeException("The file " + metadata.getObjectKey() + |
| | | " does not exist in the bucket[" + configuration.getBucket() + "]."); |
| | | } |
| | | |
| | | file.setSign(DigestUtils.md5DigestAsHex(object)); |
| | | int insertId = mapper.insert(file); |
| | | return insertId > 0 ? file.getId() : insertId; |
| | | } |
| | |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean deleteByWaylineId(String workspaceId, String waylineId) { |
| | | Optional<WaylineFileDTO> waylineOpt = this.getWaylineByWaylineId(workspaceId, waylineId); |
| | | if (waylineOpt.isEmpty()) { |
| | | return true; |
| | | } |
| | | WaylineFileDTO wayline = waylineOpt.get(); |
| | | boolean isDel = mapper.delete(new LambdaUpdateWrapper<WaylineFileEntity>() |
| | | .eq(WaylineFileEntity::getWorkspaceId, workspaceId) |
| | | .eq(WaylineFileEntity::getWaylineId, waylineId)) |
| | | > 0; |
| | | if (!isDel) { |
| | | return false; |
| | | } |
| | | return ossService.deleteObject(configuration.getBucket(), wayline.getObjectKey()); |
| | | } |
| | | |
| | | /** |
| | | * Convert database entity objects into wayline data transfer object. |
| | | * @param entity |
| | | * @return |
| | | */ |
| | | private WaylineFileDTO entityConvertToDTO(WaylineFileEntity entity) { |
| | | WaylineFileDTO.WaylineFileDTOBuilder builder = WaylineFileDTO.builder(); |
| | | |
| | | if (entity != null) { |
| | | builder.droneModelKey(entity.getDroneModelKey()) |
| | | if (entity == null) { |
| | | return null; |
| | | } |
| | | return WaylineFileDTO.builder() |
| | | .droneModelKey(entity.getDroneModelKey()) |
| | | .favorited(entity.getFavorited()) |
| | | .name(entity.getName()) |
| | | .payloadModelKeys(entity.getPayloadModelKeys() != null ? |
| | |
| | | .collect(Collectors.toList())) |
| | | .username(entity.getUsername()) |
| | | .objectKey(entity.getObjectKey()) |
| | | .sign(entity.getSign()) |
| | | .updateTime(entity.getUpdateTime()) |
| | | .waylineId(entity.getWaylineId()); |
| | | } |
| | | .waylineId(entity.getWaylineId()) |
| | | .build(); |
| | | |
| | | return builder.build(); |
| | | } |
| | | |
| | | /** |