动态头像-mp4-记录po
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package com.accompany.business.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import lombok.Data;
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("media_transfer_record")
|
||||
public class MediaTransferRecord {
|
||||
|
||||
@TableId(type = IdType.INPUT)
|
||||
private String id;
|
||||
|
||||
private Long uid;
|
||||
|
||||
private String provider;
|
||||
|
||||
private String inputPath;
|
||||
|
||||
private String outputPath;
|
||||
|
||||
private String redisKey;
|
||||
|
||||
private Long price;
|
||||
|
||||
private String ip;
|
||||
|
||||
private String deviceId;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private Date updateTime;
|
||||
|
||||
private Byte status; // 0-处理中, 1-成功, 2-失败
|
||||
|
||||
private String errorMsg;
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
package com.accompany.business.mybatismapper;
|
||||
|
||||
import com.accompany.business.model.MediaTransferRecord;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface MediaTransferRecordMapper extends BaseMapper<MediaTransferRecord> {
|
||||
}
|
@@ -1,16 +1,12 @@
|
||||
package com.accompany.business.service;
|
||||
|
||||
import com.accompany.common.config.TencentCosConfig;
|
||||
import com.accompany.business.model.MediaTransferRecord;
|
||||
import com.accompany.business.mybatismapper.MediaTransferRecordMapper;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.redis.RedisKey;
|
||||
import com.accompany.common.utils.EnvComponent;
|
||||
import com.accompany.common.utils.UUIDUtil;
|
||||
import com.accompany.core.base.SpringContextHolder;
|
||||
import com.accompany.core.service.common.JedisService;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.qcloud.cos.COSClient;
|
||||
import com.qcloud.cos.model.ciModel.job.MediaJobObject;
|
||||
import com.qcloud.cos.model.ciModel.job.MediaJobResponse;
|
||||
import com.qcloud.cos.model.ciModel.job.MediaJobsRequest;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -21,51 +17,34 @@ import java.net.URL;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class TencentDataUniverseService {
|
||||
public class MediaTransferService {
|
||||
|
||||
@Autowired
|
||||
private TencentCosConfig tencentCosConfig;
|
||||
@Autowired
|
||||
private COSClient client;
|
||||
private TencentDataInfiniteService tencentDataInfiniteService;
|
||||
@Autowired
|
||||
private EnvComponent envComponent;
|
||||
@Autowired
|
||||
private MediaTransferRecordMapper mediaTransferRecordMapper;
|
||||
|
||||
@SneakyThrows
|
||||
@Async
|
||||
public void transfer2Gif(Long uid, String avatar, String redisKey, Long price, String ip, String deviceId) {
|
||||
|
||||
URL url = new URL(avatar);
|
||||
String inputPath = url.getPath();
|
||||
String outputPath = inputPath.replace(".mp4", ".gif");
|
||||
String outputAvatar = url.getHost() + outputPath;
|
||||
|
||||
//1.创建任务请求对象
|
||||
MediaJobsRequest request = new MediaJobsRequest();
|
||||
//2.添加请求参数 参数详情请见 API 接口文档
|
||||
request.setBucketName(tencentCosConfig.getBucket());
|
||||
request.setTag("Animation");
|
||||
request.getInput().setObject(inputPath);
|
||||
request.getOperation().setTemplateId(tencentCosConfig.getGifJobTemplateId());
|
||||
request.getOperation().getOutput().setBucket(tencentCosConfig.getBucket());
|
||||
request.getOperation().getOutput().setRegion(tencentCosConfig.getRegion());
|
||||
request.getOperation().getOutput().setObject(outputPath);
|
||||
//3.调用接口,获取任务响应对象
|
||||
MediaJobResponse response = client.createMediaJobs(request);
|
||||
log.info("tencent mp4转码gif 任务提交结果: {}", JSON.toJSONString(response));
|
||||
String taskId = tencentDataInfiniteService.transfer2Gif(uid, inputPath, outputPath, redisKey, price, ip, deviceId);
|
||||
|
||||
//正式环境等回调
|
||||
if (!envComponent.getDevOrNativeEnv()){
|
||||
return;
|
||||
}
|
||||
|
||||
String taskId = UUIDUtil.get();
|
||||
SpringContextHolder.getBean(UploadAvatarService.class).cacheReviewAvatar(redisKey, String.valueOf(uid), outputAvatar, price);
|
||||
SpringContextHolder.getBean(JedisService.class).hset(RedisKey.user_avatar_review_task.getKey(), taskId, String.valueOf(uid));
|
||||
|
||||
SpringContextHolder.getBean(UploadAvatarService.class).updateAvatar(outputAvatar, uid, redisKey, taskId);
|
||||
}
|
||||
|
||||
public void handleResult(MediaJobObject jobsDetail) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,93 @@
|
||||
package com.accompany.business.service;
|
||||
|
||||
import com.accompany.business.model.MediaTransferRecord;
|
||||
import com.accompany.business.mybatismapper.MediaTransferRecordMapper;
|
||||
import com.accompany.business.service.netease.YidunCheckUtil;
|
||||
import com.accompany.common.config.TencentCosConfig;
|
||||
import com.accompany.common.constant.Constant;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.qcloud.cos.COSClient;
|
||||
import com.qcloud.cos.model.ciModel.job.MediaJobObject;
|
||||
import com.qcloud.cos.model.ciModel.job.MediaJobResponse;
|
||||
import com.qcloud.cos.model.ciModel.job.MediaJobsRequest;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class TencentDataInfiniteService {
|
||||
|
||||
@Autowired
|
||||
private TencentCosConfig tencentCosConfig;
|
||||
@Autowired
|
||||
private COSClient client;
|
||||
@Autowired
|
||||
private MediaTransferRecordMapper mediaTransferRecordMapper;
|
||||
|
||||
private final String channel = "tencent";
|
||||
|
||||
@SneakyThrows
|
||||
public String transfer2Gif(Long uid, String inputPath, String outputPath, String redisKey, Long price, String ip, String deviceId) {
|
||||
//1.创建任务请求对象
|
||||
MediaJobsRequest request = new MediaJobsRequest();
|
||||
//2.添加请求参数 参数详情请见 API 接口文档
|
||||
request.setBucketName(tencentCosConfig.getBucket());
|
||||
request.setTag("Animation");
|
||||
request.getInput().setObject(inputPath);
|
||||
request.getOperation().setTemplateId(tencentCosConfig.getGifJobTemplateId());
|
||||
request.getOperation().getOutput().setBucket(tencentCosConfig.getBucket());
|
||||
request.getOperation().getOutput().setRegion(tencentCosConfig.getRegion());
|
||||
request.getOperation().getOutput().setObject(outputPath);
|
||||
//3.调用接口,获取任务响应对象
|
||||
MediaJobResponse response = client.createMediaJobs(request);
|
||||
log.info("tencent mp4转码gif 任务提交结果: {}", JSON.toJSONString(response));
|
||||
MediaJobObject jobsDetail = response.getJobsDetail();
|
||||
if (null == jobsDetail || !"Success".equals(jobsDetail.getCode())){
|
||||
throw new ServiceException(BusiStatus.SERVERBUSY);
|
||||
}
|
||||
|
||||
String taskId = jobsDetail.getJobId();
|
||||
String id = String.join("_", taskId, channel);
|
||||
|
||||
// 创建记录实体
|
||||
MediaTransferRecord mediaTransferRecord = new MediaTransferRecord();
|
||||
mediaTransferRecord.setId(id);
|
||||
mediaTransferRecord.setUid(uid);
|
||||
mediaTransferRecord.setProvider(channel); // 默认使用腾讯云
|
||||
mediaTransferRecord.setInputPath(inputPath);
|
||||
mediaTransferRecord.setOutputPath(outputPath);
|
||||
mediaTransferRecord.setRedisKey(redisKey);
|
||||
mediaTransferRecord.setPrice(price);
|
||||
mediaTransferRecord.setIp(ip);
|
||||
mediaTransferRecord.setDeviceId(deviceId);
|
||||
mediaTransferRecord.setStatus(Constant.status.delete); // 处理中
|
||||
mediaTransferRecordMapper.insert(mediaTransferRecord);
|
||||
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void handleResult(MediaJobObject jobsDetail) {
|
||||
if (null == jobsDetail || !"Success".equals(jobsDetail.getCode())){
|
||||
throw new ServiceException(BusiStatus.PARAMERROR);
|
||||
}
|
||||
|
||||
//todo 校验jobsDetail
|
||||
|
||||
String id = String.join("_", jobsDetail.getJobId(), channel);
|
||||
MediaTransferRecord record = mediaTransferRecordMapper.selectById(id);
|
||||
if (null == record){
|
||||
throw new ServiceException(BusiStatus.ALREADY_NOTEXISTS_CONFIG);
|
||||
}
|
||||
|
||||
//todo 失败退钱
|
||||
|
||||
//record.setStatus();
|
||||
mediaTransferRecordMapper.updateById(record);
|
||||
|
||||
YidunCheckUtil.reviewAvatar(record.getUid(), record.getOutputPath(), record.getRedisKey(), record.getPrice(), record.getIp(), record.getDeviceId());
|
||||
}
|
||||
}
|
@@ -30,8 +30,6 @@ import com.accompany.core.model.Users;
|
||||
import com.accompany.core.service.base.BaseService;
|
||||
import com.accompany.core.service.user.UsersBaseService;
|
||||
import com.accompany.core.util.I18NMessageSourceUtil;
|
||||
import com.qcloud.cos.model.ciModel.template.MediaTemplateRequest;
|
||||
import com.qcloud.cos.model.ciModel.template.MediaTemplateResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
@@ -65,7 +63,7 @@ public class UploadAvatarService extends BaseService {
|
||||
|
||||
private final Long gifAvatarGoldPrice = 10000L;
|
||||
@Autowired
|
||||
private TencentDataUniverseService tencentDataUniverseService;
|
||||
private MediaTransferService mediaTransferService;
|
||||
|
||||
public long getGifAvatarGoldPrice(){
|
||||
return gifAvatarGoldPrice;
|
||||
@@ -205,7 +203,7 @@ public class UploadAvatarService extends BaseService {
|
||||
|
||||
public void reviewAvatar(Long uid, String avatar, String redisKey, Long price, String ip, String deviceId) {
|
||||
if (ImageFileUtils.isMp4(avatar)){
|
||||
tencentDataUniverseService.transfer2Gif(uid, avatar, redisKey, price, ip, deviceId);
|
||||
mediaTransferService.transfer2Gif(uid, avatar, redisKey, price, ip, deviceId);
|
||||
return;
|
||||
}
|
||||
YidunCheckUtil.reviewAvatar(uid, avatar, redisKey, price, ip, deviceId);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.accompany.business.controller;
|
||||
|
||||
import com.accompany.business.common.BaseController;
|
||||
import com.accompany.business.service.TencentDataUniverseService;
|
||||
import com.accompany.business.service.TencentDataInfiniteService;
|
||||
import com.accompany.common.result.BusiResult;
|
||||
import com.accompany.common.status.BusiStatus;
|
||||
import com.accompany.core.exception.ServiceException;
|
||||
@@ -28,7 +28,7 @@ import javax.annotation.Resource;
|
||||
public class TencentCosMediaCallbackController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private TencentDataUniverseService service;
|
||||
private TencentDataInfiniteService service;
|
||||
|
||||
@ApiOperation("易盾图片审核结果上报")
|
||||
@PostMapping("/callback")
|
||||
|
Reference in New Issue
Block a user