| @@ -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<String, Object> 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<String,String> 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(); | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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); | |||
| @@ -7,4 +7,7 @@ public class SuperImgParam { | |||
| private String img; | |||
| private Long task_id; | |||
| private String callback_url; | |||
| } | |||