| @@ -8,6 +8,7 @@ import com.iformall.domain.po.sm.MouldPatch; | |||||
| import com.iformall.domain.po.sm.MouldPatchSign; | import com.iformall.domain.po.sm.MouldPatchSign; | ||||
| import com.iformall.domain.po.sm.UserMouldVideo; | import com.iformall.domain.po.sm.UserMouldVideo; | ||||
| import com.iformall.enums.EnumMouldSendType; | import com.iformall.enums.EnumMouldSendType; | ||||
| import com.iformall.enums.EnumVideoStatus; | |||||
| import com.iformall.enums.EnumaMouldPatchStatus; | import com.iformall.enums.EnumaMouldPatchStatus; | ||||
| import com.iformall.service.sm.MouldPatchService; | import com.iformall.service.sm.MouldPatchService; | ||||
| import com.iformall.service.sm.MouldPatchSignService; | import com.iformall.service.sm.MouldPatchSignService; | ||||
| @@ -22,6 +23,7 @@ import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| import java.util.Date; | |||||
| import java.util.List; | import java.util.List; | ||||
| @@ -53,8 +55,11 @@ public class UserMouldVideoController extends BaseController { | |||||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | ||||
| public ResultData findById(Long id) { | public ResultData findById(Long id) { | ||||
| logger.debug("[" + getIpAddr() + "] MouldPatchController::findById"); | logger.debug("[" + getIpAddr() + "] MouldPatchController::findById"); | ||||
| UserMouldVideo userMouldVideo = userMouldVideoService.getById(id); | |||||
| return new ResultData(userMouldVideo); | |||||
| UserMouldVideo mouldVideo = userMouldVideoService.getById(id); | |||||
| if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据"); | |||||
| } | |||||
| return new ResultData(mouldVideo); | |||||
| } | } | ||||
| @ApiOperation("新增接口") | @ApiOperation("新增接口") | ||||
| @@ -76,14 +81,31 @@ public class UserMouldVideoController extends BaseController { | |||||
| if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){ | if(mouldVideo == null || !mouldVideo.getUserId().equals(getMemberId())){ | ||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据"); | return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到用户数据"); | ||||
| } | } | ||||
| if(StringUtils.isEmpty(mouldVideo.getPaperwork())){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未填写视频文案"); | |||||
| } | |||||
| if(EnumVideoStatus.ing.getCode().equals(mouldVideo.getVideoStatus())){ | |||||
| return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"生成视频中"); | |||||
| } | |||||
| UserMouldVideo mouldVideoUpd = new UserMouldVideo(); | UserMouldVideo mouldVideoUpd = new UserMouldVideo(); | ||||
| mouldVideoUpd.setId(record.getId()); | mouldVideoUpd.setId(record.getId()); | ||||
| // mouldVideoUpd.setVideoId(); | |||||
| // mouldVideoUpd.setVideoPath(); | |||||
| // mouldVideoUpd.setVideoTime(); | |||||
| return userMouldVideoService.saveOrUpdate(mouldVideoUpd); | |||||
| mouldVideoUpd.setVideoStatus(EnumVideoStatus.ing.getCode()); | |||||
| mouldVideoUpd.setCreateVideoDate(new Date()); | |||||
| userMouldVideoService.saveOrUpdate(mouldVideoUpd); | |||||
| userMouldVideoService.createVideo(mouldVideo); | |||||
| return new ResultData(); | |||||
| } | |||||
| @ApiOperation("根据id查询接口") | |||||
| @GetMapping("/findVideo") | |||||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | |||||
| public ResultData findVideo(Long id) { | |||||
| logger.debug("[" + getIpAddr() + "] MouldPatchController::findVideo"); | |||||
| UserMouldVideo userMouldVideo = userMouldVideoService.findVideo(id); | |||||
| return new ResultData(userMouldVideo); | |||||
| } | } | ||||
| } | } | ||||
| @@ -62,7 +62,11 @@ public class UserMouldVideo extends TenantEntity { | |||||
| @io.swagger.annotations.ApiModelProperty(value="",name="videoPath") | @io.swagger.annotations.ApiModelProperty(value="",name="videoPath") | ||||
| private String videoPath; | private String videoPath; | ||||
| @io.swagger.annotations.ApiModelProperty(value="视频时长",name="videoTime") | @io.swagger.annotations.ApiModelProperty(value="视频时长",name="videoTime") | ||||
| private Integer videoTime; | |||||
| private float videoTime; | |||||
| @io.swagger.annotations.ApiModelProperty(value="EnumVideoStatus 视频状态",name="videoStatus") | |||||
| private Integer videoStatus; | |||||
| @io.swagger.annotations.ApiModelProperty(value="生成视频信息",name="videoMsg") | |||||
| private String videoMsg; | |||||
| @io.swagger.annotations.ApiModelProperty(value="生成视频时间",name="createVideoDate") | @io.swagger.annotations.ApiModelProperty(value="生成视频时间",name="createVideoDate") | ||||
| private Date createVideoDate; | private Date createVideoDate; | ||||
| @@ -0,0 +1,51 @@ | |||||
| package com.iformall.enums; | |||||
| import java.util.ArrayList; | |||||
| import java.util.List; | |||||
| /** | |||||
| * | |||||
| */ | |||||
| public enum EnumVideoStatus { | |||||
| draft(0, "草稿"), | |||||
| ing(1, "生成视频中"), | |||||
| success(2, "生成视频成功"), | |||||
| fail(3, "生成视频失败"), | |||||
| ; | |||||
| public static EnumVideoStatus getEnum(Integer code) { | |||||
| for (EnumVideoStatus value : values()) { | |||||
| if (value.getCode().equals(code)) { | |||||
| return value; | |||||
| } | |||||
| } | |||||
| return null; | |||||
| } | |||||
| public static List<Integer> getAllCodes(){ | |||||
| List<Integer> codes = new ArrayList<>(); | |||||
| for (EnumVideoStatus value : values()) { | |||||
| codes.add(value.getCode()); | |||||
| } | |||||
| return codes; | |||||
| } | |||||
| private Integer code; | |||||
| private String message; | |||||
| EnumVideoStatus(Integer code, String message) { | |||||
| this.code = code; | |||||
| this.message = message; | |||||
| } | |||||
| public Integer getCode() { | |||||
| return code; | |||||
| } | |||||
| public String getMessage() { | |||||
| return message; | |||||
| } | |||||
| } | |||||
| @@ -19,4 +19,5 @@ public interface UserMouldVideoMapper extends CommonMapper<UserMouldVideo, Long> | |||||
| */ | */ | ||||
| List<UserMouldVideo> findCList(UserMouldVideo record); | List<UserMouldVideo> findCList(UserMouldVideo record); | ||||
| UserMouldVideo findVideo(@Param("id")Long id); | |||||
| } | } | ||||
| @@ -39,4 +39,8 @@ public interface UserMouldVideoService { | |||||
| * @param id | * @param id | ||||
| */ | */ | ||||
| void deleteById(Long id); | void deleteById(Long id); | ||||
| void createVideo(UserMouldVideo mouldVideo); | |||||
| UserMouldVideo findVideo(Long id); | |||||
| } | } | ||||
| @@ -5,11 +5,16 @@ import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.sm.UserMouldVideo; | import com.iformall.domain.po.sm.UserMouldVideo; | ||||
| import com.iformall.enums.EnumVideoStatus; | |||||
| import com.iformall.mapper.UserMouldVideoMapper; | import com.iformall.mapper.UserMouldVideoMapper; | ||||
| import com.iformall.service.sm.UserMouldVideoService; | import com.iformall.service.sm.UserMouldVideoService; | ||||
| import com.iformall.sm.AiVideoHelper; | |||||
| import com.iformall.sm.AiVideoResult; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.scheduling.annotation.Async; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| @@ -61,4 +66,55 @@ public class UserMouldVideoServiceImpl implements UserMouldVideoService { | |||||
| userMouldVideoMapper.deleteById(id); | userMouldVideoMapper.deleteById(id); | ||||
| } | } | ||||
| @Async | |||||
| @Override | |||||
| public void createVideo(UserMouldVideo mouldVideo) { | |||||
| UserMouldVideo videoUpd = new UserMouldVideo(); | |||||
| videoUpd.setId(mouldVideo.getId()); | |||||
| if(StringUtils.isBlank(mouldVideo.getPersonMouldPath())){ | |||||
| videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||||
| videoUpd.setVideoMsg("未找到人物模板数据"); | |||||
| this.saveOrUpdate(videoUpd); | |||||
| return; | |||||
| } | |||||
| if(StringUtils.isBlank(mouldVideo.getPaperwork())){ | |||||
| videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||||
| videoUpd.setVideoMsg("未填写视频文案"); | |||||
| this.saveOrUpdate(videoUpd); | |||||
| return; | |||||
| } | |||||
| try{ | |||||
| AiVideoResult video = AiVideoHelper.createVideo(mouldVideo.getPersonMouldPath(), mouldVideo.getVoiceMouldPath(), mouldVideo.getPaperwork()); | |||||
| if(video.isSuccess()){ | |||||
| videoUpd.setVideoPath(video.getUrl()); | |||||
| videoUpd.setVideoTime(video.getDuration()); | |||||
| videoUpd.setVideoStatus(EnumVideoStatus.success.getCode()); | |||||
| videoUpd.setVideoMsg(video.getMsg()); | |||||
| videoUpd.setCreateVideoDate(new Date()); | |||||
| this.saveOrUpdate(videoUpd); | |||||
| return; | |||||
| } | |||||
| videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||||
| videoUpd.setVideoMsg(video.getMsg()); | |||||
| this.saveOrUpdate(videoUpd); | |||||
| return; | |||||
| }catch(Exception e){ | |||||
| e.printStackTrace(); | |||||
| videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||||
| videoUpd.setVideoMsg(e.getMessage()); | |||||
| this.saveOrUpdate(videoUpd); | |||||
| return; | |||||
| } | |||||
| } | |||||
| @Override | |||||
| public UserMouldVideo findVideo(Long id) { | |||||
| return userMouldVideoMapper.findVideo(id); | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,90 @@ | |||||
| package com.iformall.sm; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.douyin.pay.orderQuery.OrderQueryResult; | |||||
| import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; | |||||
| import com.iformall.douyin.pay.orderQuery.QueryRefundResult; | |||||
| import com.iformall.douyin.pay.orderQuery.QuerySettleResult; | |||||
| import com.iformall.douyin.pay.preOrder.*; | |||||
| import com.iformall.enums.EnumPayStatus; | |||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.utils.HttpUtil; | |||||
| import com.iformall.utils.sign.SignUtils; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import java.nio.charset.StandardCharsets; | |||||
| import java.security.MessageDigest; | |||||
| import java.security.NoSuchAlgorithmException; | |||||
| import java.util.*; | |||||
| @Slf4j | |||||
| public class AiVideoHelper { | |||||
| public static String doPost(String url, Map<String, Object> params) { | |||||
| return HttpUtil.doPost(url,null, JSON.toJSONString(params)); | |||||
| } | |||||
| public static AiVideoResult createVideo(String video_template_id,String voice_id,String gen_txt) { | |||||
| Map<String,Object> params = new HashMap<>(); | |||||
| params.put("video_template_id",video_template_id); | |||||
| if(StringUtils.isBlank(voice_id)){ | |||||
| voice_id = "default"; | |||||
| } | |||||
| params.put("voice_id",voice_id); | |||||
| params.put("gen_txt",gen_txt); | |||||
| String response = doPost("http://222.128.9.132:22266/gen_dh_video", params); | |||||
| log.info("服务端预下单 request:"+params.toString()+" response:"+response); | |||||
| AiVideoResult result = new AiVideoResult(); | |||||
| JSONObject jsonObject = JSON.parseObject(response); | |||||
| JSONObject status = jsonObject.getJSONObject("status"); | |||||
| Integer code = status.getInteger("code"); | |||||
| if(null != code && code.intValue() == 1000){ | |||||
| JSONObject data = jsonObject.getJSONObject("data"); | |||||
| JSONObject video = data.getJSONObject("video"); | |||||
| result.setSuccess(true); | |||||
| result.setMsg("success"); | |||||
| result.setDuration(video.getFloatValue("duration")); | |||||
| result.setUrl(video.getString("url")); | |||||
| }else{ | |||||
| result.setSuccess(false); | |||||
| result.setMsg(status.getString("msg")); | |||||
| } | |||||
| return result; | |||||
| // Integer code = jsonObject.getInteger("err_no"); | |||||
| // if (null != code && code.intValue() == 0 ) { | |||||
| // CreatePreOrderResult result = new CreatePreOrderResult(); | |||||
| // result.setSuccess(true); | |||||
| // result.setOutOrderNo(preOrder.getOutOrderNo()); | |||||
| // JSONObject data = jsonObject.getJSONObject("data"); | |||||
| // if (null != data ) { | |||||
| // result.setOrderId(data.getString("order_id")); | |||||
| // result.setToken(data.getString("order_token")); | |||||
| // }else { | |||||
| // log.error("createPreOrder reponse empity. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response); | |||||
| // result.setSuccess(false); | |||||
| // result.setMsg("createPreOrder reponse empity."+response); | |||||
| // } | |||||
| // return result; | |||||
| // }else { | |||||
| // log.error("createPreOrder reponse error. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response); | |||||
| // CreatePreOrderResult result = new CreatePreOrderResult(); | |||||
| // result.setSuccess(false); | |||||
| // result.setMsg("createPreOrder reponse error."+response); | |||||
| // return result; | |||||
| // } | |||||
| } | |||||
| public static void main(String[] args) { | |||||
| createVideo("16739389169485046_nVi875Ej","default","人们自古以来,在这条路上行走,然而,这条路确实是坎坷不平、逶迤曲折、无边无际的,它具有无数分支,充满着欢乐、痛苦、艰险,但这就是人生的道路。"); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,13 @@ | |||||
| package com.iformall.sm; | |||||
| import lombok.Data; | |||||
| @Data | |||||
| public class AiVideoResult { | |||||
| private boolean success; | |||||
| private String msg; | |||||
| private float duration; | |||||
| private String url; | |||||
| } | |||||
| @@ -18,7 +18,10 @@ | |||||
| <result column="remark" jdbcType="VARCHAR" property="remark"/> | <result column="remark" jdbcType="VARCHAR" property="remark"/> | ||||
| <result column="video_id" jdbcType="VARCHAR" property="videoId"/> | <result column="video_id" jdbcType="VARCHAR" property="videoId"/> | ||||
| <result column="video_path" jdbcType="VARCHAR" property="videoPath"/> | <result column="video_path" jdbcType="VARCHAR" property="videoPath"/> | ||||
| <result column="video_time" jdbcType="INTEGER" property="videoTime"/> | |||||
| <result column="video_time" jdbcType="float" property="videoTime"/> | |||||
| <result column="video_status" jdbcType="INTEGER" property="videoStatus"/> | |||||
| <result column="video_msg" jdbcType="VARCHAR" property="videoMsg"/> | |||||
| <result column="create_video_date" jdbcType="TIMESTAMP" property="createVideoDate"/> | <result column="create_video_date" jdbcType="TIMESTAMP" property="createVideoDate"/> | ||||
| <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | <result column="create_date" jdbcType="TIMESTAMP" property="createDate"/> | ||||
| <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | <result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/> | ||||
| @@ -27,7 +30,7 @@ | |||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| `id`, `tenant_id`, `parent_tenant_id`, `user_id`, `type`, | `id`, `tenant_id`, `parent_tenant_id`, `user_id`, `type`, | ||||
| `person_mould_id`, `person_mould_path`, `voice_mould_id`, `voice_mould_path`, `paperwork`, `background_mould_id`, `background_mould_path`, | `person_mould_id`, `person_mould_path`, `voice_mould_id`, `voice_mould_path`, `paperwork`, `background_mould_id`, `background_mould_path`, | ||||
| `title`, `remark`, `video_id`, `video_path`, `video_time`, `create_video_date`, `create_date`, `update_date` | |||||
| `title`, `remark`, `video_id`, `video_path`, `video_time`, `video_status`, `video_msg`, `create_video_date`, `create_date`, `update_date` | |||||
| </sql> | </sql> | ||||
| <sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||
| @@ -68,6 +71,10 @@ | |||||
| and `title` like concat('%', #{title},'%') | and `title` like concat('%', #{title},'%') | ||||
| </if> | </if> | ||||
| <if test=" null != videoStatus "> | |||||
| and `video_status` = #{videoStatus} | |||||
| </if> | |||||
| <if test=" null != startDate and null!=endDate"> | <if test=" null != startDate and null!=endDate"> | ||||
| and `create_date` between #{startDate} and #{endDate} | and `create_date` between #{startDate} and #{endDate} | ||||
| </if> | </if> | ||||
| @@ -97,9 +104,19 @@ | |||||
| select | select | ||||
| `id`, `type`, | `id`, `type`, | ||||
| `paperwork`, | `paperwork`, | ||||
| `title`, `remark`, `video_id`, `video_path`, `video_time`, `create_video_date`, `create_date`, `update_date` | |||||
| `title`, `remark`, `video_id`, `video_path`, `video_time`,`video_status`, | |||||
| `create_video_date`, `create_date`, `update_date` | |||||
| from user_mould_video | from user_mould_video | ||||
| <include refid="dynamicWhereConditions"/> | <include refid="dynamicWhereConditions"/> | ||||
| </select> | </select> | ||||
| <select id="findVideo" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||||
| select | |||||
| `video_id`, `video_path`, `video_time`,`video_status` | |||||
| from user_mould_video | |||||
| where `id` = #{id} | |||||
| </select> | |||||
| </mapper> | </mapper> | ||||