package com.iformall.controller; import com.alibaba.fastjson.JSONObject; import com.iformall.annotation.AuthIgnore; 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.EnumVideoStatus; import com.iformall.service.sm.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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.*; import java.util.*; @RestController @RequestMapping("/callback") @Api(description = "视频回调") public class CallbackSmController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private PhotoSpeakVideoService photoSpeakVideoService; @Autowired private UserDigitalAvatarOrderService userDigitalAvatarOrderService; @AuthIgnore @ApiOperation("视频回调") @PostMapping(value = "/photo/speak") public ResultData photoSpeak(@RequestBody Map paranMap) { logger.debug("[" + getIpAddr() + "] CallbackSmController::photoSpeak"); logger.info("照片生成视频结果通知{}"+JSONObject.toJSONString(paranMap)); Long task_id = (Long) paranMap.get("task_id");//任务ID String code = (String) paranMap.get("code");//code String msg = (String) paranMap.get("msg"); if (task_id == null){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"任务ID不能为空"); } PhotoSpeakVideo photoSpeakVideo = photoSpeakVideoService.getById(Long.valueOf(task_id)); if (photoSpeakVideo == null){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到任务数据"); } Object data = paranMap.get("data"); String jsonString = JSONObject.toJSONString(data); Map dataMap = JSONObject.parseObject(jsonString,Map.class); Boolean sr = (Boolean) dataMap.get("sr");//判断 sr=True 就是超分的, False 是没超分的 String url = (String) dataMap.get("url"); String save_dir = null; String audio_path = null; if(sr){ if(!EnumVideoStatus.hy_ing.getCode().equals(photoSpeakVideo.getVideoStatus())){ return new ResultData(); } }else{ if(!EnumVideoStatus.ing.getCode().equals(photoSpeakVideo.getVideoStatus())){ return new ResultData(); } save_dir = (String) dataMap.get("save_dir"); audio_path = (String) dataMap.get("audio_path"); } if (StringUtils.isEmpty(url)){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"视频URL不能为空"); } PhotoSpeakVideo speakVideoUpd = new PhotoSpeakVideo(); speakVideoUpd.setId(photoSpeakVideo.getId()); if("4000".equals(code)){ if (sr){ speakVideoUpd.setVideoStatus(EnumVideoStatus.hy_success.getCode()); }else { speakVideoUpd.setVideoStatus(EnumVideoStatus.success.getCode()); speakVideoUpd.setSaveDir(save_dir); speakVideoUpd.setAudioPath(audio_path); } speakVideoUpd.setVideoPath(url); speakVideoUpd.setVideoMsg("视频生成成功"); }else{ if (sr){ speakVideoUpd.setVideoStatus(EnumVideoStatus.hy_fail.getCode()); }else { speakVideoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); } speakVideoUpd.setVideoMsg("(MetaService)"+msg); } speakVideoUpd.setUpdateDate(new Date()); photoSpeakVideoService.updateById(speakVideoUpd); //TODO 用户相关操作 if (sr){ photoSpeakVideoService.uploadHyVideo(speakVideoUpd); }else { photoSpeakVideoService.uploadVideo(speakVideoUpd); } return new ResultData(); } @AuthIgnore @ApiOperation("生成照片回调") @PostMapping(value = "/create/photo") public ResultData createPhoto(@RequestBody Map paranMap) { logger.debug("[" + getIpAddr() + "] CallbackSmController::photoSpeak"); 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不能为空"); } UserDigitalAvatarOrder userDigitalAvatarOrder = userDigitalAvatarOrderService.selectById(task_id); if (userDigitalAvatarOrder == null){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到任务数据"); } if("2000".equals(code)){ Map data = (Map) paranMap.get("data"); List imgList = new ArrayList<>(); imgList.add(data.get("img_0")); imgList.add(data.get("img_1")); imgList.add(data.get("img_2")); imgList.add(data.get("img_3")); userDigitalAvatarOrderService.handlePhoto(userDigitalAvatarOrder,imgList); }else{ UserDigitalAvatarOrder updOrder = new UserDigitalAvatarOrder(); updOrder.setId(userDigitalAvatarOrder.getId()); updOrder.setStatus(EnumDigitalAvatarOrderStatus.fail.getCode()); updOrder.setMsg(msg); updOrder.setUpdateDate(new Date()); userDigitalAvatarOrderService.updateById(updOrder); } return new ResultData(); } }