From 996c4e76ad87dcb66818064bf87c19d3ee5fd6df Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 1 Sep 2023 16:08:42 +0800 Subject: [PATCH] //.. --- .../controller/CallbackSmController.java | 42 +++++++++++++++ .../sm/UserDigitalAvatarPhotoService.java | 4 ++ .../UserDigitalAvatarPhotoServiceImpl.java | 53 ++++++++++++++++--- .../iformall/sm/AiDigitalAvatarHelper.java | 6 ++- .../java/com/iformall/sm/SuperImgParam.java | 3 ++ 5 files changed, 99 insertions(+), 9 deletions(-) diff --git a/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java b/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java index d2955dd..1abb728 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java @@ -6,8 +6,10 @@ import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; import com.iformall.domain.po.sm.*; import com.iformall.enums.EnumDigitalAvatarOrderStatus; +import com.iformall.enums.EnumDigitalAvatarPhotoStatus; import com.iformall.enums.EnumVideoStatus; import com.iformall.service.sm.*; +import com.iformall.utils.Base64Util; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; @@ -16,6 +18,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.InputStream; import java.util.*; @@ -31,6 +34,9 @@ public class CallbackSmController extends BaseController { @Autowired private UserDigitalAvatarOrderService userDigitalAvatarOrderService; + @Autowired + private UserDigitalAvatarPhotoService userDigitalAvatarPhotoService; + @AuthIgnore @ApiOperation("视频回调") @PostMapping(value = "/photo/speak") @@ -147,4 +153,40 @@ public class CallbackSmController extends BaseController { return new ResultData(); } + @AuthIgnore + @ApiOperation("照片超分回调") + @PostMapping(value = "/super/photo") + public ResultData superPhoto(@RequestBody Map paranMap) { + logger.debug("[" + getIpAddr() + "] CallbackSmController::superPhoto"); + + Long task_id = (Long) paranMap.get("task_id");//任务ID + String code = (String) paranMap.get("code");//code + String msg = (String) paranMap.get("msg"); + logger.info("照片超分结果通知{}task_id="+task_id+",code="+code); + + if (task_id == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"任务ID不能为空"); + } + UserDigitalAvatarPhoto userDigitalAvatarPhoto = userDigitalAvatarPhotoService.selectById(task_id); + + if (userDigitalAvatarPhoto == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到任务数据"); + } + + if("3000".equals(code)){ + Map data = (Map) paranMap.get("data"); + String img = data.get("img"); + userDigitalAvatarPhotoService.handleSuperPhoto(userDigitalAvatarPhoto,img); + }else{ + UserDigitalAvatarPhoto updPhoto = new UserDigitalAvatarPhoto(); + updPhoto.setId(userDigitalAvatarPhoto.getId()); + updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.fail.getCode()); + updPhoto.setMsg(msg); + updPhoto.setUpdateDate(new Date()); + userDigitalAvatarPhotoService.updateById(updPhoto); + } + + return new ResultData(); + } + } diff --git a/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java b/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java index 0ac1b58..231cb0f 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/UserDigitalAvatarPhotoService.java @@ -2,6 +2,7 @@ package com.iformall.service.sm; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.po.sm.UserDigitalAvatarOrder; import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; import java.util.List; @@ -16,4 +17,7 @@ public interface UserDigitalAvatarPhotoService { void superPhoto(UserDigitalAvatarPhoto record); + void handleSuperPhoto(UserDigitalAvatarPhoto record, String img); + + void updateById(UserDigitalAvatarPhoto updPhoto); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java index 2df91ee..b958e13 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserDigitalAvatarPhotoServiceImpl.java @@ -1,6 +1,7 @@ package com.iformall.service.sm.impl; import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; import com.iformall.common.ResultData; import com.iformall.domain.po.sm.*; import com.iformall.enums.*; @@ -11,6 +12,7 @@ import com.iformall.service.UserBasicPropertyService; import com.iformall.service.sm.*; import com.iformall.sm.*; import com.iformall.utils.Base64Util; +import com.iformall.utils.RedisLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.framework.AopContext; @@ -37,6 +39,8 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto @Autowired private AliyunOSS aliyunOSS; + @Autowired + RedisLock redisLock; @Override public UserDigitalAvatarPhoto selectById(Long id) { @@ -96,14 +100,10 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto try{ SuperImgParam param = new SuperImgParam(); param.setImg(Base64Util.imageUrlToBase64(record.getImage())); - SuperImgResult result = AiDigitalAvatarHelper.superImg(param); + SuperImgResult result = AiDigitalAvatarHelper.superImg(param,record.getId()); if(result.isSuccess()){ - InputStream inputStream = Base64Util.base2InputStream(result.getImg()); - String img_url = aliyunOSS.upload(record.getTenantId(), ".jpg", inputStream); - - updPhoto.setImageSuper(img_url); - updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.finish.getCode()); - updPhoto.setMsg("success"); + handleSuperPhoto(record,result.getImg()); + return; }else{ updPhoto.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); updPhoto.setMsg(result.getMsg()); @@ -122,4 +122,43 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto userDigitalAvatarPhotoMapper.updateById(updPhoto); } + @Override + public void handleSuperPhoto(UserDigitalAvatarPhoto record, String img) { + String lockKey = "digitalAvatar:superPhoto:"+record.getId(); + long time = System.currentTimeMillis() + 5000; + String timeStr = String.valueOf(time); + try{ + while (!redisLock.lock2(lockKey, timeStr)){ + Thread.sleep(2000); + } + UserDigitalAvatarPhoto userDigitalAvatarPhoto = userDigitalAvatarPhotoMapper.selectById(record.getId()); + if(EnumDigitalAvatarPhotoStatus.finish.getCode().equals(userDigitalAvatarPhoto.getStatus())){ + return; + } + + InputStream inputStream = Base64Util.base2InputStream(img); + String img_url = aliyunOSS.upload(record.getTenantId(), ".jpg", inputStream); + + UserDigitalAvatarPhoto updPhoto = new UserDigitalAvatarPhoto(); + updPhoto.setId(userDigitalAvatarPhoto.getId()); + updPhoto.setImageSuper(img_url); + updPhoto.setStatus(EnumDigitalAvatarPhotoStatus.finish.getCode()); + updPhoto.setMsg("success"); + updPhoto.setUpdateDate(new Date()); + userDigitalAvatarPhotoMapper.updateById(updPhoto); + } catch(MallinkException e){ + throw e; + } catch(Exception e){ + throw new MallinkException(ErrorCode.SYS_SERVER_ERROR); + }finally { + redisLock.unlock(lockKey, timeStr); + } + + } + + @Override + public void updateById(UserDigitalAvatarPhoto updPhoto) { + userDigitalAvatarPhotoMapper.updateById(updPhoto); + } + } diff --git a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java index 8006773..40f5305 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java @@ -116,8 +116,10 @@ public class AiDigitalAvatarHelper { } - public static SuperImgResult superImg(SuperImgParam param) { - + public static SuperImgResult superImg(SuperImgParam param,Long taskId) { + param.setTask_id(taskId); +// param.setCallback_url("https://phototest.metavatar.cc/C/callback/create/photo"); + param.setCallback_url(callbackUrl + "/callback/super/photo"); // log.info("生成照片start request:" + param.getBg_img()); String response = HttpUtil.doAiVideoPost(digital_avatar_hy + "/sr_img", JSONObject.toJSONString(param)); log.info("照片超分end response:"+response); diff --git a/suimangService/src/main/java/com/iformall/sm/SuperImgParam.java b/suimangService/src/main/java/com/iformall/sm/SuperImgParam.java index 231a95e..96c4b19 100644 --- a/suimangService/src/main/java/com/iformall/sm/SuperImgParam.java +++ b/suimangService/src/main/java/com/iformall/sm/SuperImgParam.java @@ -7,4 +7,7 @@ public class SuperImgParam { private String img; + private Long task_id; + private String callback_url; + }