@@ -1,13 +1,17 @@ | |||
package com.iformall.schedule; | |||
import com.iformall.domain.po.sm.UserMouldVideo; | |||
import com.iformall.domain.po.sm.VideoTrans; | |||
import com.iformall.domain.po.tt.TtCoupon; | |||
import com.iformall.enums.EnumVideoStatus; | |||
import com.iformall.enums.EnumaVideoTransStatus; | |||
import com.iformall.mapper.TtCouponMapper; | |||
import com.iformall.mapper.VideoTransMapper; | |||
import com.iformall.service.sm.UserMouldVideoService; | |||
import com.iformall.utils.DateUtils; | |||
import com.iformall.video.VideoFactory; | |||
import com.iformall.video.aliyun.sdk.server.UploadCacheHelper; | |||
import com.iformall.video.entity.VideTransResult; | |||
import com.iformall.video.entity.VideUploadResult; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.slf4j.Logger; | |||
@@ -30,6 +34,9 @@ public class VideoSchedule { | |||
@Autowired | |||
private UserMouldVideoService userMouldVideoService; | |||
@Autowired | |||
private VideoTransMapper videoTransMapper; | |||
@Autowired | |||
VideoFactory videoFactory; | |||
@@ -99,4 +106,63 @@ public class VideoSchedule { | |||
} | |||
} | |||
/** | |||
* 转码 | |||
*/ | |||
@Scheduled(cron = "0 10/30 * * * *?") // 每半小时检查一次 | |||
public void videoTransSchedule() { | |||
VideoTrans videoTransQ = new VideoTrans(); | |||
videoTransQ.setStatus(EnumaVideoTransStatus.draft.getCode()); | |||
List<VideoTrans> videos = videoTransMapper.findList(videoTransQ); | |||
if (videos != null && videos.size() > 0) { | |||
for (VideoTrans video : videos) { | |||
try { | |||
VideTransResult videTransResult = videoFactory.getExcutor(videoType).transVideo(video.getVideoId(), video.getTransTemplateId()); | |||
if(videTransResult.isSuccess()){ | |||
VideoTrans upd = new VideoTrans(); | |||
upd.setId(video.getId()); | |||
upd.setTaskId(videTransResult.getTaskId()); | |||
upd.setStatus(EnumaVideoTransStatus.ing.getCode()); | |||
upd.setMsg("ing"); | |||
upd.setUpdateDate(new Date()); | |||
videoTransMapper.updateById(upd); | |||
} | |||
} catch (Exception e) { | |||
logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* 转码结果 | |||
*/ | |||
@Scheduled(cron = "0 20/30 * * * *?") // 每半小时检查一次 | |||
public void videoTransResultSchedule() { | |||
VideoTrans videoTransQ = new VideoTrans(); | |||
videoTransQ.setStatus(EnumaVideoTransStatus.ing.getCode()); | |||
List<VideoTrans> videos = videoTransMapper.findList(videoTransQ); | |||
if (videos != null && videos.size() > 0) { | |||
for (VideoTrans video : videos) { | |||
try { | |||
VideTransResult transVideoResult = videoFactory.getExcutor(videoType).getTransVideoResult(video.getVideoId(), video.getTaskId()); | |||
VideoTrans upd = new VideoTrans(); | |||
upd.setId(video.getId()); | |||
if (transVideoResult.isSuccess()){ | |||
upd.setStatus(EnumaVideoTransStatus.success.getCode()); | |||
upd.setMsg("success"); | |||
}else{ | |||
upd.setStatus(EnumaVideoTransStatus.fail.getCode()); | |||
upd.setMsg(transVideoResult.getMsg()); | |||
} | |||
upd.setUpdateDate(new Date()); | |||
videoTransMapper.updateById(upd); | |||
} catch (Exception e) { | |||
logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -54,7 +54,9 @@ public class UserMouldVideo extends TenantEntity { | |||
* "videoType":, | |||
* "title":, | |||
* "mouldSmId":, | |||
* "material": | |||
* "material":, | |||
* "backgroundId:, | |||
* "backgroundMaterial": | |||
* } | |||
*/ | |||
@io.swagger.annotations.ApiModelProperty(value="人物模板",name="personMouldSm") | |||
@@ -73,8 +75,10 @@ public class UserMouldVideo extends TenantEntity { | |||
* "mouldSmId":, | |||
* "personId":, | |||
* "personType":, | |||
* "personTypeStr":, | |||
* "speakId":, | |||
* "speakType": | |||
* "speakType":, | |||
* "speakTypeStr": | |||
* } | |||
*/ | |||
@io.swagger.annotations.ApiModelProperty(value="声音模板",name="voiceMouldSm") | |||
@@ -0,0 +1,55 @@ | |||
package com.iformall.domain.po.sm; | |||
import cn.afterturn.easypoi.excel.annotation.Excel; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.baomidou.mybatisplus.annotation.TableField; | |||
import com.baomidou.mybatisplus.annotation.TableName; | |||
import com.iformall.common.SortColumn; | |||
import com.iformall.domain.po.base.TenantEntity; | |||
import com.iformall.enums.EnumAgeType; | |||
import com.iformall.enums.EnumPersonType; | |||
import com.iformall.enums.EnumSex; | |||
import com.iformall.enums.EnumSpeakType; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.ToString; | |||
import org.apache.commons.lang3.StringUtils; | |||
import java.math.BigDecimal; | |||
import java.util.Date; | |||
import java.util.List; | |||
@TableName(value = "video_trans") | |||
@Data | |||
@ToString(callSuper = true) | |||
@EqualsAndHashCode(callSuper = true) | |||
public class VideoTrans extends TenantEntity { | |||
protected Long id; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="查询-起始时间",name="startDate") | |||
private Date startDate; | |||
@TableField(exist = false) | |||
@io.swagger.annotations.ApiModelProperty(value="查询-结束时间",name="endDate") | |||
private Date endDate; | |||
@io.swagger.annotations.ApiModelProperty(value="videoid",name="videoId") | |||
private String videoId; | |||
@io.swagger.annotations.ApiModelProperty(value="转码模板",name="transTemplateId") | |||
private String transTemplateId; | |||
@io.swagger.annotations.ApiModelProperty(value="任务id",name="taskId") | |||
private String taskId; | |||
@io.swagger.annotations.ApiModelProperty(value="",name="msg") | |||
private String msg; | |||
@io.swagger.annotations.ApiModelProperty(value="EnumaVideoTransStatus ",name="status") | |||
private Integer status; | |||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||
private Date createDate; | |||
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||
private Date updateDate; | |||
} |
@@ -0,0 +1,39 @@ | |||
package com.iformall.enums; | |||
/** | |||
* | |||
*/ | |||
public enum EnumaVideoTransStatus { | |||
// | |||
draft(0, "已保存"), | |||
ing(1, "转码中"), | |||
success(2, "转码成功"), | |||
fail(3, "转码失败"), | |||
; | |||
public static EnumaVideoTransStatus getEnum(Integer code) { | |||
for (EnumaVideoTransStatus value : values()) { | |||
if (value.getCode().equals(code)) { | |||
return value; | |||
} | |||
} | |||
return null; | |||
} | |||
private Integer code; | |||
private String message; | |||
EnumaVideoTransStatus(Integer code, String message) { | |||
this.code = code; | |||
this.message = message; | |||
} | |||
public Integer getCode() { | |||
return code; | |||
} | |||
public String getMessage() { | |||
return message; | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
package com.iformall.mapper; | |||
import com.iformall.common.CommonMapper; | |||
import com.iformall.domain.po.sm.VideoTrans; | |||
import com.iformall.domain.po.sm.VoiceMould; | |||
import org.apache.ibatis.annotations.Param; | |||
import java.util.List; | |||
public interface VideoTransMapper extends CommonMapper<VideoTrans, Long> { | |||
List<VideoTrans> findList(VideoTrans record); | |||
int deleteById(@Param("id")Long id); | |||
} |
@@ -0,0 +1,57 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
<mapper namespace="com.iformall.mapper.VideoTransMapper"> | |||
<resultMap id="BaseResultMap" type="com.iformall.domain.po.sm.VideoTrans"> | |||
<id column="id" jdbcType="BIGINT" property="id"/> | |||
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/> | |||
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" /> | |||
<result column="video_id" jdbcType="VARCHAR" property="videoId"/> | |||
<result column="trans_template_id" jdbcType="VARCHAR" property="transTemplateId"/> | |||
<result column="task_id" jdbcType="VARCHAR" property="taskId"/> | |||
<result column="msg" jdbcType="VARCHAR" property="msg"/> | |||
<result column="status" jdbcType="INTEGER" property="status"/> | |||
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | |||
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | |||
</resultMap> | |||
<sql id="allColumns"> | |||
`id`, `tenant_id`, `parent_tenant_id`, `video_id`, `trans_template_id`, `task_id`, | |||
`status`,`msg`, `create_date`, `update_date` | |||
</sql> | |||
<sql id="dynamicWhereConditions"> | |||
where `is_del` = 0 | |||
<if test=" null != status"> | |||
and `status` = #{status} | |||
</if> | |||
<if test=" null != startDate "> | |||
and create_date >= #{startDate} | |||
</if> | |||
<if test=" null != endDate"> | |||
and create_date < #{endDate} | |||
</if> | |||
<if test=" null != ids "> | |||
and id in | |||
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
#{idItem} | |||
</foreach> | |||
</if> | |||
<if test=" null != sortColumns">order by ${sortColumns}</if> | |||
</sql> | |||
<select id="findList" parameterType="com.iformall.domain.po.sm.VoiceMould" resultMap="BaseResultMap"> | |||
select | |||
<include refid="allColumns"/> | |||
from video_trans | |||
<include refid="dynamicWhereConditions"/> | |||
</select> | |||
<delete id="deleteById" parameterType="java.util.HashMap"> | |||
update video_trans set is_del = 1,update_date = now() where id = #{id} | |||
</delete> | |||
</mapper> |
@@ -29,7 +29,7 @@ public interface VideoExcutor { | |||
VideUploadResult getVideoDetailFromApi(String videoId); | |||
public VideTransResult transVideo(String videoId); | |||
public VideTransResult transVideo(String videoId,String transTemplateId); | |||
public VideTransResult getTransVideoResult(String videoId, String taskId); | |||
} |
@@ -197,14 +197,14 @@ public class AliyunVideoExcutor implements VideoExcutor { | |||
} | |||
@Override | |||
public VideTransResult transVideo(String videoId) { | |||
public VideTransResult transVideo(String videoId,String transTemplateId) { | |||
VideTransResult result = new VideTransResult(); | |||
//解码 | |||
if ((!StringUtils.isBlank(videoId)) && (!StringUtils.isBlank(config.getTransTemplateId()))) { | |||
if ((!StringUtils.isBlank(videoId)) && (!StringUtils.isBlank(transTemplateId))) { | |||
result.setVideoId(videoId); | |||
SubmitTranscodeJobsResponse transResponse = new SubmitTranscodeJobsResponse(); | |||
try { | |||
transResponse = AliyunVedioServer.submitTranscodeJobs(config, videoId, config.getTransTemplateId()); | |||
transResponse = AliyunVedioServer.submitTranscodeJobs(config, videoId, transTemplateId); | |||
//任务ID | |||
//System.out.println("JobId = " + transResponse.getTranscodeJobs().get(0).getJobId()); | |||
result.setTaskId(transResponse.getTranscodeTaskId()); | |||
@@ -13,6 +13,6 @@ public class AliyunVideoConfig { | |||
private String accessKeySecret; | |||
private String regionId;//cn-shanghai 点播服务接入区域 | |||
private String endPoint;//以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com | |||
private String transTemplateId;//转码的模板编号 | |||
// private String transTemplateId;//转码的模板编号 | |||
private String autoTrans; | |||
} |