@@ -6,8 +6,10 @@ import com.iformall.common.ErrorCode; | |||||
import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
import com.iformall.domain.po.sm.*; | import com.iformall.domain.po.sm.*; | ||||
import com.iformall.enums.EnumDigitalAvatarOrderStatus; | import com.iformall.enums.EnumDigitalAvatarOrderStatus; | ||||
import com.iformall.enums.EnumDigitalAvatarPhotoStatus; | |||||
import com.iformall.enums.EnumVideoStatus; | import com.iformall.enums.EnumVideoStatus; | ||||
import com.iformall.service.sm.*; | import com.iformall.service.sm.*; | ||||
import com.iformall.utils.Base64Util; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
@@ -16,6 +18,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.io.InputStream; | |||||
import java.util.*; | import java.util.*; | ||||
@@ -31,6 +34,9 @@ public class CallbackSmController extends BaseController { | |||||
@Autowired | @Autowired | ||||
private UserDigitalAvatarOrderService userDigitalAvatarOrderService; | private UserDigitalAvatarOrderService userDigitalAvatarOrderService; | ||||
@Autowired | |||||
private UserDigitalAvatarPhotoService userDigitalAvatarPhotoService; | |||||
@AuthIgnore | @AuthIgnore | ||||
@ApiOperation("视频回调") | @ApiOperation("视频回调") | ||||
@PostMapping(value = "/photo/speak") | @PostMapping(value = "/photo/speak") | ||||
@@ -147,4 +153,40 @@ public class CallbackSmController extends BaseController { | |||||
return new ResultData(); | 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.github.pagehelper.PageInfo; | ||||
import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
import com.iformall.domain.po.sm.UserDigitalAvatarOrder; | |||||
import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; | import com.iformall.domain.po.sm.UserDigitalAvatarPhoto; | ||||
import java.util.List; | import java.util.List; | ||||
@@ -16,4 +17,7 @@ public interface UserDigitalAvatarPhotoService { | |||||
void superPhoto(UserDigitalAvatarPhoto record); | void superPhoto(UserDigitalAvatarPhoto record); | ||||
void handleSuperPhoto(UserDigitalAvatarPhoto record, String img); | |||||
void updateById(UserDigitalAvatarPhoto updPhoto); | |||||
} | } |
@@ -1,6 +1,7 @@ | |||||
package com.iformall.service.sm.impl; | package com.iformall.service.sm.impl; | ||||
import com.iformall.common.ErrorCode; | import com.iformall.common.ErrorCode; | ||||
import com.iformall.common.IdWorker; | |||||
import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
import com.iformall.domain.po.sm.*; | import com.iformall.domain.po.sm.*; | ||||
import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
@@ -11,6 +12,7 @@ import com.iformall.service.UserBasicPropertyService; | |||||
import com.iformall.service.sm.*; | import com.iformall.service.sm.*; | ||||
import com.iformall.sm.*; | import com.iformall.sm.*; | ||||
import com.iformall.utils.Base64Util; | import com.iformall.utils.Base64Util; | ||||
import com.iformall.utils.RedisLock; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import org.springframework.aop.framework.AopContext; | import org.springframework.aop.framework.AopContext; | ||||
@@ -37,6 +39,8 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||||
@Autowired | @Autowired | ||||
private AliyunOSS aliyunOSS; | private AliyunOSS aliyunOSS; | ||||
@Autowired | |||||
RedisLock redisLock; | |||||
@Override | @Override | ||||
public UserDigitalAvatarPhoto selectById(Long id) { | public UserDigitalAvatarPhoto selectById(Long id) { | ||||
@@ -96,14 +100,10 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||||
try{ | try{ | ||||
SuperImgParam param = new SuperImgParam(); | SuperImgParam param = new SuperImgParam(); | ||||
param.setImg(Base64Util.imageUrlToBase64(record.getImage())); | param.setImg(Base64Util.imageUrlToBase64(record.getImage())); | ||||
SuperImgResult result = AiDigitalAvatarHelper.superImg(param); | |||||
SuperImgResult result = AiDigitalAvatarHelper.superImg(param,record.getId()); | |||||
if(result.isSuccess()){ | 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{ | }else{ | ||||
updPhoto.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | updPhoto.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); | ||||
updPhoto.setMsg(result.getMsg()); | updPhoto.setMsg(result.getMsg()); | ||||
@@ -122,4 +122,43 @@ public class UserDigitalAvatarPhotoServiceImpl implements UserDigitalAvatarPhoto | |||||
userDigitalAvatarPhotoMapper.updateById(updPhoto); | 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()); | // log.info("生成照片start request:" + param.getBg_img()); | ||||
String response = HttpUtil.doAiVideoPost(digital_avatar_hy + "/sr_img", JSONObject.toJSONString(param)); | String response = HttpUtil.doAiVideoPost(digital_avatar_hy + "/sr_img", JSONObject.toJSONString(param)); | ||||
log.info("照片超分end response:"+response); | log.info("照片超分end response:"+response); | ||||
@@ -7,4 +7,7 @@ public class SuperImgParam { | |||||
private String img; | private String img; | ||||
private Long task_id; | |||||
private String callback_url; | |||||
} | } |