From 693a20c3138920390841f14e7d4d008730143599 Mon Sep 17 00:00:00 2001 From: lrh <1585126058@qq.com> Date: Thu, 29 Jun 2023 16:31:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B6=85=E5=88=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V202306291619_voice_info.sql | 5 ++ .../controller/PhotoSpeakVideoController.java | 43 +++++++++++++++++ .../iformall/schedule/PhotoSpeakSchedule.java | 48 +++++++++++++++++++ .../domain/po/sm/PhotoSpeakVideo.java | 2 + .../com/iformall/domain/po/sm/VoiceInfo.java | 4 ++ .../service/sm/PhotoSpeakVideoService.java | 6 +++ .../sm/impl/PhotoSpeakVideoServiceImpl.java | 40 ++++++++++++++++ .../service/sm/impl/VoiceInfoServiceImpl.java | 1 + .../java/com/iformall/sm/AiVideoHelper.java | 2 +- 9 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql diff --git a/suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql b/suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql new file mode 100644 index 0000000..8f70769 --- /dev/null +++ b/suimangAdmin/src/main/resources/db/migration/V202306291619_voice_info.sql @@ -0,0 +1,5 @@ +ALTER TABLE `mallink_suimang_test`.`photo_speak_video` + ADD COLUMN `video_hy_status` smallint NULL COMMENT '视频超分状态' AFTER `video_status`; + +ALTER TABLE `mallink_suimang_test`.`voice_info` + ADD COLUMN `age_type` smallint NULL COMMENT '年纪类型 EnumAgeType' AFTER `sex`; \ No newline at end of file diff --git a/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java b/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java index 6796529..293c50d 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java @@ -363,4 +363,47 @@ public class PhotoSpeakVideoController extends BaseController { return new ResultData(); } + @ApiOperation("视频超分") + @GetMapping("/videoHy") + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) + public ResultData videoHy(Long id) { + logger.debug("[" + getIpAddr() + "] PersonPhotoController::videoHy"); + if(id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"参数为空"); + } + PhotoSpeakVideo speakVideo = photoSpeakVideoService.getById(id); + if(speakVideo == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到数据"); + } + if (StringUtils.isEmpty(speakVideo.getSaveDir())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"save_dir为空"); + } + if(!speakVideo.getUserId().equals(getMemberId())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未找到用户数据"); + } + + if(!EnumVideoStatus.upload_success.getCode().equals(speakVideo.getVideoStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"原始视频生成未完成"); + } + + if(EnumVideoStatus.ing.getCode().equals(speakVideo.getVideoHyStatus()) + || EnumVideoStatus.success.getCode().equals(speakVideo.getVideoHyStatus()) + || EnumVideoStatus.upload_ing.getCode().equals(speakVideo.getVideoHyStatus()) + || EnumVideoStatus.upload_fail.getCode().equals(speakVideo.getVideoHyStatus())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"高清晰度视频生成中"); + } + if(EnumVideoStatus.upload_success.getCode().equals(speakVideo.getVideoHyStatus())){ + //上传阿里云状态 生成成功 + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"高清晰度视频已生成完成"); + } + + speakVideo.setVideoStatus(EnumVideoStatus.ing.getCode()); + speakVideo.setVideoMsg(""); + speakVideo.setUpdateDate(new Date()); + photoSpeakVideoService.updateById(speakVideo); + + photoSpeakVideoService.videoHy(speakVideo,true); + return new ResultData(); + } + } diff --git a/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java b/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java index 319ae96..a7d01f8 100644 --- a/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java +++ b/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java @@ -109,4 +109,52 @@ public class PhotoSpeakSchedule { } } } + + + /** + * 获取超分时长和大小 + */ + @Scheduled(cron = "0 1/5 * * * *?") // 每五分钟检查一次 + public void userVideoHyDetailSchedule() { + List videos = photoSpeakVideoService.getUpLoadHyIngList(); + if (videos != null && videos.size() > 0) { + for (PhotoSpeakVideo video : videos) { + try { + VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(video.getVideoId()); + if (videoDetail.isSuccess() + && StringUtils.isNotBlank(videoDetail.getDuration()) + && !"0.0".equals(videoDetail.getDuration())) { + video.setCoverImg(videoDetail.getCoverURL()); + video.setVideoPlayUrl(videoDetail.getVideoUrl()); + video.setVideoTime(videoDetail.getDuration()); + video.setVideoSize(videoDetail.getSize()); + video.setVideoHyStatus(EnumVideoStatus.upload_success.getCode()); + photoSpeakVideoService.updateById(video); + } + } catch (Exception e) { + logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); + } + } + } + } + + /** + * 超分生成视频 + */ + @Scheduled(cron = "0 20/30 * * * *?") // 每半小时检查一次 + public void photoSpeakCreateHySchedule() { + PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); + videoUpd.setVideoStartDate(DateUtils.getHourDateBefore(2,new Date())); + videoUpd.setVideoHyStatus(EnumVideoStatus.fail.getCode()); + List list = photoSpeakVideoService.findList(videoUpd); + if (list != null && list.size() > 0) { + for (PhotoSpeakVideo video : list) { + try { + photoSpeakVideoService.videoHy(video,false); + } catch (Exception e) { + logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); + } + } + } + } } \ No newline at end of file diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java index 544b8ef..9491f82 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/PhotoSpeakVideo.java @@ -154,5 +154,7 @@ public class PhotoSpeakVideo extends TenantEntity { private Long musicId; private String saveDir; + + private Integer videoHyStatus; } diff --git a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java index a1438a5..2c99ba0 100644 --- a/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java +++ b/suimangService/src/main/java/com/iformall/domain/po/sm/VoiceInfo.java @@ -73,4 +73,8 @@ public class VoiceInfo extends TenantEntity { * 是否删除1是0否 */ private Integer isDel; + /** + * 年纪类型 EnumAgeType + */ + private Integer ageType; } diff --git a/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java b/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java index 5cde9e4..b2e4d1c 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java @@ -59,4 +59,10 @@ public interface PhotoSpeakVideoService { int updateById(PhotoSpeakVideo video); + void videoHy(PhotoSpeakVideo speakVideo,Boolean flag); + + void uploadHyVideo(PhotoSpeakVideo mouldVideo); + + List getUpLoadHyIngList(); + } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java index d716328..9e1cb6b 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java @@ -491,4 +491,44 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { return photoSpeakVideoMapper.updateById(video); } + @Override + public void videoHy(PhotoSpeakVideo speakVideo,Boolean flag) { + AiVideoHqParam param = new AiVideoHqParam(); + param.setSave_dir(speakVideo.getSaveDir()); + AiVideoHqResult result = AiVideoHelper.videoHq(param); + if(result.isSuccess()){ + speakVideo.setVideoHyStatus(EnumVideoStatus.success.getCode()); + speakVideo.setVideoMsg("超分视频生成成功"); + this.updateById(speakVideo); + + this.uploadHyVideo(speakVideo); + } + + speakVideo.setVideoHyStatus(EnumVideoStatus.fail.getCode()); + speakVideo.setVideoMsg("超分视频失败"); + this.updateById(speakVideo); + } + + @Override + public void uploadHyVideo(PhotoSpeakVideo mouldVideo){ + if(EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoHyStatus()) + || EnumVideoStatus.upload_fail.getCode().equals(mouldVideo.getVideoHyStatus())){ + String url = mouldVideo.getPhotoSpeakPathUri() + mouldVideo.getVideoPath(); + VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoPath(mouldVideo.getTitle(), url); + if(result.isSuccess()){ + PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); + videoUpd.setId(mouldVideo.getId()); + videoUpd.setVideoId(result.getVideoId()); + videoUpd.setVideoHyStatus(EnumVideoStatus.upload_ing.getCode()); + this.saveOrUpdate(videoUpd); + } + } + } + + @Override + public List getUpLoadHyIngList() { + PhotoSpeakVideo umVideoQ = new PhotoSpeakVideo(); + umVideoQ.setVideoHyStatus(EnumVideoStatus.upload_ing.getCode()); + return photoSpeakVideoMapper.getSortList(umVideoQ); + } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java index 7fc31e9..5453578 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java @@ -42,6 +42,7 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { x.setStyle(list); } else { x.setStyle(Lists.newArrayList()); + } }); return voiceInfos; diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java index b55bc4f..86f0362 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java @@ -301,7 +301,7 @@ public class AiVideoHelper { // AiVideoHqParam param = new AiVideoHqParam(); // param.setSave_dir(); -// AiPreviewResult result = AiVideoHelper.voicePreview(param); +// AiVideoHqResult result = AiVideoHelper.videoHq(param); // System.out.println(result); }