123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package com.fdkankan.scene.service.impl;
- import cn.hutool.core.exceptions.ExceptionUtil;
- import cn.hutool.core.lang.UUID;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.fyun.face.FYunFileServiceInterface;
- import com.fdkankan.model.constants.ConstantFilePath;
- import com.fdkankan.model.constants.UploadFilePath;
- import com.fdkankan.model.utils.CreateObjUtil;
- import com.fdkankan.rabbitmq.util.RabbitMqProducer;
- import com.fdkankan.scene.entity.DownloadTourVideo;
- import com.fdkankan.scene.mapper.IDownloadTourVideoMapper;
- import com.fdkankan.scene.service.IDownloadTourVideoService;
- import com.fdkankan.scene.vo.DownloadTourVideoVO;
- import com.fdkankan.web.response.ResultData;
- import java.io.File;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Objects;
- import lombok.SneakyThrows;
- import org.apache.http.HttpHeaders;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * <p>
- * 导览视频转换记录表 服务实现类
- * </p>
- *
- * @author
- * @since 2022-10-12
- */
- @Service
- public class DownloadTourVideoServiceImpl extends ServiceImpl<IDownloadTourVideoMapper, DownloadTourVideo> implements IDownloadTourVideoService {
- @Value("${queue.scene.transfer-tour-video}")
- private String downloadTourVideoQueue;
- @Value("${fyun.type}")
- private String type;
- @Value("${fyun.bucket:4dkankan}")
- private String bucket;
- @Autowired
- private RabbitMqProducer rabbitMqProducer;
- @Autowired
- private FYunFileServiceInterface fYunFileService;
- @Override
- public DownloadTourVideo getWaitingByNum(String num) {
- return this.getOne(
- new LambdaQueryWrapper<DownloadTourVideo>().eq(DownloadTourVideo::getNum, num)
- .eq(DownloadTourVideo::getState, 0));
- }
- @Override
- public void removeByNum(String num) {
- this.remove(new LambdaQueryWrapper<DownloadTourVideo>().eq(DownloadTourVideo::getNum, num));
- }
- @Override
- public ResultData uploadTourVideo(String num, MultipartFile file) throws Exception {
- //查询是否有任务正在执行,如果有,直接返回
- DownloadTourVideo waiting = this.getWaitingByNum(num);
- if(Objects.nonNull(waiting)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5064);
- }
- String uuid = UUID.randomUUID().toString();
- String fileName = file.getOriginalFilename();
- String extName = cn.hutool.core.io.FileUtil.extName(fileName);
- String tempFileName = uuid + "." + extName;
- String srcPath = ConstantFilePath.SCENE_V4_PATH + num + "/tour/" + tempFileName;
- File tempFile = new File(srcPath);
- if(!tempFile.getParentFile().exists()){
- tempFile.getParentFile().mkdirs();
- }
- file.transferTo(tempFile);
- //先将旧纪录置为无效
- this.removeByNum(num);
- //写入新记录
- DownloadTourVideo downloadTourVideo = new DownloadTourVideo();
- downloadTourVideo.setNum(num);
- downloadTourVideo.setFileName(fileName);
- downloadTourVideo.setLocalPath(srcPath);
- this.save(downloadTourVideo);
- //发送mq
- rabbitMqProducer.sendByWorkQueue(downloadTourVideoQueue, downloadTourVideo);
- return ResultData.ok();
- }
- @Override
- public void transferTourVideo(DownloadTourVideo downloadTourVideo) {
- String destPath = null;
- try {
- String destFileName = UUID.randomUUID().toString() + ".mp4";
- destPath = ConstantFilePath.SCENE_V4_PATH + downloadTourVideo.getNum() + "tour/" + destFileName;
- File destFile = new File(destPath);
- if(!destFile.getParentFile().exists()){
- destFile.getParentFile().mkdir();
- }
- String srcPath = downloadTourVideo.getLocalPath();
- CreateObjUtil.formatMp4(srcPath, destPath);
- //上传到oss
- String ossPath = String.format(UploadFilePath.DOWNLOADS_TOUR_VIDEO, downloadTourVideo.getNum()) + downloadTourVideo.getFileName();
- Map<String, String> headers = new HashMap<>();
- headers.put(HttpHeaders.CONTENT_TYPE, "application/octet-stream");
- fYunFileService.uploadFile(bucket, destPath, ossPath, headers);
- downloadTourVideo.setDownloadPath(ossPath);
- downloadTourVideo.setState(1);
- this.updateById(downloadTourVideo);
- }catch (Exception e) {
- log.error("导览视频转换失败,num:" + downloadTourVideo.getNum() + "源路径:" + downloadTourVideo.getLocalPath(), e);
- downloadTourVideo.setReason(ExceptionUtil.stacktraceToString(e, 3000));
- downloadTourVideo.setState(2);
- this.updateById(downloadTourVideo);
- }
- }
- @Override
- public ResultData downloadTourVideo(String num) {
- DownloadTourVideoVO result = new DownloadTourVideoVO();
- DownloadTourVideo downloadTourVideo = this.getOne(new LambdaQueryWrapper<DownloadTourVideo>().eq(DownloadTourVideo::getNum, num));
- if(Objects.isNull(downloadTourVideo)){
- result.setStatus(0);
- }else{
- result.setStatus(1);
- result.setTransferStatus(downloadTourVideo.getState());
- result.setPath(downloadTourVideo.getDownloadPath());
- }
- return ResultData.ok(result);
- }
- }
|