diff --git a/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java b/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java index 2df0f27..a204832 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/PersonPhotoController.java @@ -85,23 +85,20 @@ public class PersonPhotoController extends BaseController { } @ApiOperation("图片质量审核接口") - @GetMapping("checkPhoto") - @ApiImplicitParam(name = "material", value = "material", dataType = "String", paramType = "query", required = true) - public ResultData checkPhoto(String material) { + @PostMapping(value = "checkPhoto", consumes = "multipart/*", headers = "content-type=multipart/form-data") + @ApiImplicitParam(name = "file", value = "file", dataType = "MultipartFile", paramType = "query", required = true) + public ResultData checkPhoto(@RequestPart("file") MultipartFile file) { logger.debug("[" + getIpAddr() + "] PersonPhotoController::checkPhoto"); - if (StringUtils.isBlank(material)) { + if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); } - ResultData data = personPhotoService.checkPhoto(material); - if (data.code == 2000) { - return new ResultData(); - } - return new ResultData(data.message); + personPhotoService.checkPhoto(file); + return new ResultData(); } @ApiOperation("百度图片审核接口") @PostMapping(value = "baiduPhoto", consumes = "multipart/*", headers = "content-type=multipart/form-data") - @ApiImplicitParam(name = "material", value = "material", dataType = "String", paramType = "query", required = true) + @ApiImplicitParam(name = "file", value = "file", dataType = "MultipartFile", paramType = "query", required = true) public ResultData baiduCheckPhoto(@RequestPart("file") MultipartFile file) { logger.debug("[" + getIpAddr() + "] PersonPhotoController::baiduCheckPhoto"); if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) { diff --git a/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java b/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java index 6bc51d1..6573978 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/PhotoSpeakVideoController.java @@ -466,7 +466,7 @@ public class PhotoSpeakVideoController extends BaseController { speakVideo.setUpdateDate(new Date()); photoSpeakVideoService.updateById(speakVideo); - photoSpeakVideoService.videoHy(speakVideo,true); + photoSpeakVideoService.videoHy(speakVideo); return new ResultData(); } diff --git a/suimangCApi/src/main/java/com/iformall/controller/SDKController.java b/suimangCApi/src/main/java/com/iformall/controller/SDKController.java index 7757cfb..0d63a8d 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/SDKController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/SDKController.java @@ -17,10 +17,9 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.Date; @@ -43,12 +42,12 @@ public class SDKController extends BaseController { @ApiOperation("图片质量审核接口") @PostMapping("checkPhoto") @ApiImplicitParam(name = "material", value = "material", dataType = "String", paramType = "query", required = true) - public ResultData checkPhoto(String material) { + public ResultData checkPhoto(@RequestPart("file") MultipartFile file) { logger.debug("[" + getIpAddr() + "] SDKController::checkPhoto"); - if (StringUtils.isBlank(material)) { + if (ObjectUtils.isEmpty(file) || file.getSize() <= 0) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "素材为空"); } - ResultData data = personPhotoService.checkPhoto(material); + ResultData data = personPhotoService.checkPhoto(file); if (data.code == 2000) { return new ResultData(); } diff --git a/suimangCApi/src/main/java/com/iformall/controller/VideoCallbackController.java b/suimangCApi/src/main/java/com/iformall/controller/VideoCallbackController.java index 4e8a80c..789b210 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/VideoCallbackController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/VideoCallbackController.java @@ -110,7 +110,12 @@ public class VideoCallbackController extends BaseController { photoSpeakVideo.setUpdateDate(new Date()); photoSpeakVideoService.updateById(photoSpeakVideo); //TODO 用户相关操作 - photoSpeakVideoService.uploadVideo(photoSpeakVideo); + if (sr){ + photoSpeakVideoService.uploadHyVideo(photoSpeakVideo); + }else { + photoSpeakVideoService.uploadVideo(photoSpeakVideo); + } + return new ResultData(); } diff --git a/suimangCApi/src/main/java/com/iformall/utils/HttpUtil.java b/suimangCApi/src/main/java/com/iformall/utils/BaiDuHttpUtil.java similarity index 90% rename from suimangCApi/src/main/java/com/iformall/utils/HttpUtil.java rename to suimangCApi/src/main/java/com/iformall/utils/BaiDuHttpUtil.java index a5552d5..edf9281 100644 --- a/suimangCApi/src/main/java/com/iformall/utils/HttpUtil.java +++ b/suimangCApi/src/main/java/com/iformall/utils/BaiDuHttpUtil.java @@ -11,12 +11,12 @@ import java.util.Map; /** * http 工具类 */ -public class HttpUtil { +public class BaiDuHttpUtil { public static String post(String requestUrl, String accessToken, String params) throws Exception { String contentType = "application/x-www-form-urlencoded"; - return HttpUtil.post(requestUrl, accessToken, contentType, params); + return BaiDuHttpUtil.post(requestUrl, accessToken, contentType, params); } public static String post(String requestUrl, String accessToken, String contentType, String params) @@ -25,13 +25,13 @@ public class HttpUtil { if (requestUrl.contains("nlp")) { encoding = "GBK"; } - return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding); + return BaiDuHttpUtil.post(requestUrl, accessToken, contentType, params, encoding); } public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding) throws Exception { String url = requestUrl + "?access_token=" + accessToken; - return HttpUtil.postGeneralUrl(url, contentType, params, encoding); + return BaiDuHttpUtil.postGeneralUrl(url, contentType, params, encoding); } public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding) diff --git a/suimangCApi/src/main/java/com/iformall/utils/BaiduImageCheckUtil.java b/suimangCApi/src/main/java/com/iformall/utils/BaiduImageCheckUtil.java index b9ebbef..60e3116 100644 --- a/suimangCApi/src/main/java/com/iformall/utils/BaiduImageCheckUtil.java +++ b/suimangCApi/src/main/java/com/iformall/utils/BaiduImageCheckUtil.java @@ -3,7 +3,6 @@ package com.iformall.utils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import okhttp3.*; -import org.apache.commons.lang3.StringUtils; import org.springframework.web.multipart.MultipartFile; import java.io.*; @@ -12,7 +11,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; -import java.util.Base64; /** * 图片质量检查方法 @@ -41,7 +39,7 @@ public class BaiduImageCheckUtil { // Access Token的有效期(秒为单位,有效期30天) // String accessToken = getAuth(); //这里暂时写死 - String result = HttpUtil.post(photo_check_url, access_token, param); + String result = BaiDuHttpUtil.post(photo_check_url, access_token, param); System.out.println(result); JSONObject jsonObject = JSON.parseObject(result); //1:合规,2:不合规,3:疑似,4:审核失败 diff --git a/suimangCApi/src/main/java/com/iformall/utils/UrlCheck.java b/suimangCApi/src/main/java/com/iformall/utils/UrlCheck.java index 9b39af0..e6530fd 100644 --- a/suimangCApi/src/main/java/com/iformall/utils/UrlCheck.java +++ b/suimangCApi/src/main/java/com/iformall/utils/UrlCheck.java @@ -11,7 +11,8 @@ public class UrlCheck { || url.contains("awsImgUpload") || url.contains("getCarStopFee") || url.contains("/video/upload") - || url.contains("/personPhoto/baiduPhoto"); + || url.contains("/personPhoto/baiduPhoto") + || url.contains("/personPhoto/checkPhoto"); } } diff --git a/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java b/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java index 0caf370..1651eb0 100644 --- a/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java +++ b/suimangSchedule/src/main/java/com/iformall/schedule/PhotoSpeakSchedule.java @@ -109,6 +109,22 @@ public class PhotoSpeakSchedule { } } + /** + * 超分上传阿里云 + */ + @Scheduled(cron = "0 */30 * * * *?") // 每半小时检查一次 + public void userVideoHyUploadSchedule() { + List videos = photoSpeakVideoService.getNotHyUploadList(); + if (videos != null && videos.size() > 0) { + for (PhotoSpeakVideo video : videos) { + try { + photoSpeakVideoService.uploadHyVideo(video); + } catch (Exception e) { + logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); + } + } + } + } /** * 获取超分时长和大小 @@ -149,7 +165,7 @@ public class PhotoSpeakSchedule { if (list != null && list.size() > 0) { for (PhotoSpeakVideo video : list) { try { - photoSpeakVideoService.videoHy(video,false); + photoSpeakVideoService.videoHy(video); } catch (Exception e) { logger.error("TtCouponVideoSchedule error.couponVideoSchedule:"+video.getId(),e); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java b/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java index 61e3049..d2fd1a0 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/PersonPhotoService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.sm.MaterialMould; import com.iformall.domain.po.sm.PersonPhoto; +import org.springframework.web.multipart.MultipartFile; public interface PersonPhotoService { @@ -43,5 +44,5 @@ public interface PersonPhotoService { void updateOnline(PersonPhoto record); - ResultData checkPhoto(String material); + ResultData checkPhoto(MultipartFile file); } 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 6dbbb7e..32f4133 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/PhotoSpeakVideoService.java @@ -59,10 +59,12 @@ public interface PhotoSpeakVideoService { int updateById(PhotoSpeakVideo video); - void videoHy(PhotoSpeakVideo speakVideo,Boolean flag); + ResultData videoHy(PhotoSpeakVideo speakVideo); void uploadHyVideo(PhotoSpeakVideo mouldVideo); List getUpLoadHyIngList(); + List getNotHyUploadList(); + } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java index 9756d65..d3bb1a4 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PersonPhotoServiceImpl.java @@ -29,8 +29,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.math.BigDecimal; +import java.net.URLEncoder; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -135,13 +138,20 @@ public class PersonPhotoServiceImpl implements PersonPhotoService { } @Override - public ResultData checkPhoto(String material) { - AiCheckPhotoParam param = new AiCheckPhotoParam(); - param.setImg(Base64Util.imageUrlToBase64(material)); - AiCheckPhotoResult result = AiVideoHelper.checkPhoto(param); - if (result.isSuccess()){ - return new ResultData(); + public ResultData checkPhoto(MultipartFile file) { + try { + byte[] fileBytes = file.getBytes(); + String imgStr = Base64Util.encode(fileBytes); + AiCheckPhotoParam param = new AiCheckPhotoParam(); + param.setImg(imgStr); + AiCheckPhotoResult result = AiVideoHelper.checkPhoto(param); + if (result.isSuccess()) { + return new ResultData(); + } + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), result.getMsg()); + } catch (IOException e) { + e.printStackTrace(); + return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "接口请求异常"); } - return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), result.getMsg()); } } 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 04cbf42..8ea2d0d 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 @@ -231,17 +231,20 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); if (video.isSuccess()) { + photoSpeakVideo.setSaveDir(video.getSaveDir()); + photoSpeakVideo.setVideoPath(video.getUrl()); + this.updateById(photoSpeakVideo); return new ResultData(); } photoSpeakVideo.setVideoStatus(EnumVideoStatus.draft.getCode()); photoSpeakVideo.setVideoMsg(video.getMsg()); - this.saveOrUpdate(photoSpeakVideo); + this.updateById(photoSpeakVideo); return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"接口请求异常"); } catch (Exception e) { e.printStackTrace(); photoSpeakVideo.setVideoStatus(EnumVideoStatus.draft.getCode()); - photoSpeakVideo.setVideoMsg("口请求异常"); - this.saveOrUpdate(photoSpeakVideo); + photoSpeakVideo.setVideoMsg("接口请求异常"); + this.updateById(photoSpeakVideo); return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"接口请求异常"); } } @@ -312,24 +315,33 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { } @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("超分视频生成成功"); - speakVideo.setIsHy(EnumYesOrNo.YES.getCode()); + public ResultData videoHy(PhotoSpeakVideo speakVideo) { + try { + AiVideoHqParam param = new AiVideoHqParam(); + param.setSave_dir(speakVideo.getSaveDir()); + AiVideoHqResult result = AiVideoHelper.videoHq(param); + if (result.isSuccess()) { + speakVideo.setVideoHyStatus(EnumVideoStatus.success.getCode()); + speakVideo.setVideoMsg("超分视频生成成功"); + speakVideo.setVideoPath(result.getUrl()); + speakVideo.setIsHy(EnumYesOrNo.YES.getCode()); + this.updateById(speakVideo); + return new ResultData(); + } + speakVideo.setVideoHyStatus(EnumVideoStatus.draft.getCode()); + speakVideo.setVideoMsg("视频超分失败"); this.updateById(speakVideo); - - this.uploadHyVideo(speakVideo); + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "接口请求异常"); + } catch (Exception e) { + e.printStackTrace(); + speakVideo.setVideoHyStatus(EnumVideoStatus.draft.getCode()); + speakVideo.setVideoMsg("接口请求异常"); + this.updateById(speakVideo); + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "接口请求异常"); } - - speakVideo.setVideoHyStatus(EnumVideoStatus.fail.getCode()); - speakVideo.setVideoMsg("视频超分失败"); - this.updateById(speakVideo); } + @Async @Override public void uploadHyVideo(PhotoSpeakVideo mouldVideo){ if(EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoHyStatus()) @@ -342,6 +354,19 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { videoUpd.setVideoId(result.getVideoId()); videoUpd.setVideoHyStatus(EnumVideoStatus.upload_ing.getCode()); this.saveOrUpdate(videoUpd); + + AtomicInteger integer = new AtomicInteger(30); + while (true){ + String progress = videoFactory.getExcutor(videoType).getVedioUploadProgress(result.getVideoId()); + if (progress.equals("complete")) { + mouldVideo.setVideoHyStatus(EnumVideoStatus.upload_success.getCode()); + this.updateById(mouldVideo); + break; + } + if (integer.getAndDecrement() <= 0){ + break; + } + } } } } @@ -352,4 +377,14 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { umVideoQ.setVideoHyStatus(EnumVideoStatus.upload_ing.getCode()); return photoSpeakVideoMapper.getSortList(umVideoQ); } + + @Override + public List getNotHyUploadList() { + PhotoSpeakVideo umVideoQ = new PhotoSpeakVideo(); + List videoStatuss = new ArrayList<>(); + videoStatuss.add(EnumVideoStatus.success.getCode()); + videoStatuss.add(EnumVideoStatus.upload_fail.getCode()); + umVideoQ.setVideoStatuss(videoStatuss); + return photoSpeakVideoMapper.getSortList(umVideoQ); + } } diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java index 86f0362..8f16042 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java @@ -278,9 +278,9 @@ public class AiVideoHelper { AiPhotoSpeakParam param = new AiPhotoSpeakParam(); param.setGen_txt("人多泰达股份冲冠怒发代发"); - param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/digitalperson/16760216806604820_cSHoijDX_matting.png")); + param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personphoto/16564099737021232.png")); param.setGender("male"); - param.setVoice_id("zh-CN-YunyangNeural"); + param.setVoice_id("yue-CN-YunSongNeural"); param.setVoice_style("default"); param.setUrl("None"); AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param);