@@ -1,8 +1,14 @@ | |||
package com.iformall.controller; | |||
import com.alibaba.fastjson.JSONObject; | |||
import com.github.binarywang.wxpay.v3.util.AesUtils; | |||
import com.iformall.annotation.AuthIgnore; | |||
import com.iformall.domain.po.WxAppinfo; | |||
import com.iformall.domain.po.WxPayAccount; | |||
import com.iformall.enums.EnumAppPlat; | |||
import com.iformall.service.ProductOrderService; | |||
import com.iformall.service.WxAppinfoService; | |||
import com.iformall.service.WxPayAccountService; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
import org.jdom2.JDOMException; | |||
@@ -14,6 +20,7 @@ import org.springframework.web.bind.annotation.*; | |||
import javax.servlet.http.HttpServletRequest; | |||
import javax.servlet.http.HttpServletResponse; | |||
import java.io.IOException; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
@@ -23,19 +30,70 @@ import java.util.Map; | |||
public class CallbackPayController extends BaseController { | |||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
@Autowired | |||
private WxAppinfoService wxAppinfoService; | |||
@Autowired | |||
private WxPayAccountService wxPayAccountService; | |||
@Autowired | |||
private ProductOrderService productOrderService; | |||
@AuthIgnore | |||
@ApiOperation("支付回调") | |||
@PostMapping(value = "/pay/v3") | |||
public void _payV3Notify(@RequestBody Map<String, Object> paranMap, HttpServletRequest request, HttpServletResponse response) throws IOException, JDOMException { | |||
logger.debug("[" + getIpAddr() + "] CallbackPayController::photoSpeak"); | |||
logger.info("支付回调结果通知{}"+JSONObject.toJSONString(paranMap)); | |||
@PostMapping(value = "{project}/pay/v3") | |||
public void _payV3Notify(@PathVariable Integer projectType,@RequestBody Map<String, Object> paranMap, HttpServletResponse response) { | |||
logger.debug("[" + getIpAddr() + "] CallbackPayController::_payV3Notify"); | |||
logger.info("微信支付回调结果通知{}"+JSONObject.toJSONString(paranMap)); | |||
/** | |||
* {"id":"4330b030-788f-5067-8c8a-69ee373d43ad","create_time":"2023-08-28T18:44:56+08:00","resource_type":"encrypt-resource","event_type":"TRANSACTION.SUCCESS","summary":"支付成功","resource":{"original_type":"transaction","algorithm":"AEAD_AES_256_GCM","ciphertext":"PneNTwSVDoirBNQsJstB/yX1dNMupj7uKQVEVfLOoyMSCqKh+KMwIdanidbcs6OnSy1Xmx4MploMaQ5rSg66sFDQ9nDuSVc4S/I3OVflu1l7z9vR+FJiztpTqhr/ekeNz9VivtqPPtn6N3dCyZb6iCEwnXT+TEB8SBZe4bPSPFGhB/MB9w1ZpqP14OvMDUnzKM15mdex6wmAJH6qIbd1aH3jrW/Lv7KeyfXEYrRDljq2Za6476UQxeAcsR3JA6QpWwrhYxpKFQEHuGMdiVC1KvQsP3+JUWOKSiQQ1r5upTACPI8n5B/kOeXJA8MnTgY/7lZiA6ys2dt8jqxzL8IlDracnlwvsiRAuXjRjcX6pYCz4q0HwIYb1nHXE+iRcSGm8h+xFFsnhGgxrhEVz6ARhK6ZtKtibCv7Ll/a/d090FBKtVXzCWB6cLMMmfrIwLQFqiFUtb6zsV/zusAJdwHZt3LmtgGahoV3+UPTnbztEAp5IJGz2imGPTsk7QpvKWQknf5FM/Z1fhr/vb+pZV5NGBZ+6l/mI8isA4HtljzNHU/PuKCGO8uWu6QFevgAftGGww==","associated_data":"transaction","nonce":"Hrcahgdp1eO6"}} | |||
*/ | |||
WxAppinfo appInfo = wxAppinfoService.getProjectCAppInfoFromRedis(projectType, EnumAppPlat.WX.getCode()); | |||
WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); | |||
try{ | |||
Map<String, String> resource = (Map<String, String>) paranMap.get("resource"); | |||
String associatedData = resource.get("associated_data"); | |||
String nonce = resource.get("nonce"); | |||
String ciphertext = resource.get("ciphertext"); | |||
//todo 解密回调数据 | |||
String decryptString = AesUtils.decryptToString(associatedData, nonce, ciphertext, payAccount.getMerchantApiv3Key()); | |||
JSONObject jsonObject = JSONObject.parseObject(decryptString); | |||
String out_order_no = jsonObject.getString("out_trade_no"); | |||
//todo 处理支付数据 | |||
}catch(Exception e){ | |||
} | |||
response.setStatus(200); | |||
} | |||
@AuthIgnore | |||
@ApiOperation("支付回调") | |||
@PostMapping(value = "/ttNotify") | |||
public Map<String,Object> _ttNotify(@RequestBody Map<String, Object> paranMap, HttpServletRequest request, HttpServletResponse response) { | |||
logger.debug("[" + getIpAddr() + "] CallbackPayController::_ttNotify"); | |||
Map<String,Object> resultMap = new HashMap<>(); | |||
logger.info("抖音支付回调结果通知{}"+JSONObject.toJSONString(paranMap)); | |||
/** | |||
* ----效验数据来源合法 | |||
*/ | |||
try{ | |||
String msg = (String) paranMap.get("msg"); | |||
String type = (String) paranMap.get("type"); | |||
Map<String, Object> pMap = JSONObject.parseObject(msg, Map.class); | |||
String appid = (String) pMap.get("app_id"); | |||
if("payment".equals(type)){ | |||
String out_order_no = (String)pMap.get("cp_orderno"); | |||
//todo 处理订单支付状态 | |||
} | |||
}catch(Exception e){ | |||
} | |||
return resultMap; | |||
} | |||
} |
@@ -28,6 +28,9 @@ import java.util.*; | |||
public class CallbackSmController extends BaseController { | |||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
@Autowired | |||
private UserMouldVideoService userMouldVideoService; | |||
@Autowired | |||
private PhotoSpeakVideoService photoSpeakVideoService; | |||
@@ -39,6 +42,50 @@ public class CallbackSmController extends BaseController { | |||
@AuthIgnore | |||
@ApiOperation("视频回调") | |||
@PostMapping(value = "/oral/broadcasting") | |||
public ResultData oralBroadcasting(@RequestBody Map<String, Object> paranMap) { | |||
logger.debug("[" + getIpAddr() + "] CallbackSmController::oralBroadcasting"); | |||
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不能为空"); | |||
} | |||
UserMouldVideo userMouldVideo = userMouldVideoService.getById(task_id); | |||
if (userMouldVideo == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到任务数据"); | |||
} | |||
UserMouldVideo videoUnd = new UserMouldVideo(); | |||
videoUnd.setId(userMouldVideo.getId()); | |||
if("1000".equals(code)){ | |||
Map<String,Object> data = (Map<String, Object>) paranMap.get("data"); | |||
Map<String,Object> video = (Map<String, Object>) data.get("video"); | |||
String url = (String) video.get("url"); | |||
String duration = (String) video.get("duration"); | |||
videoUnd.setVideoStatus(EnumVideoStatus.success.getCode()); | |||
videoUnd.setVideoMsg("success"); | |||
videoUnd.setVideoPath(url); | |||
videoUnd.setVideoTime(duration); | |||
videoUnd.setUpdateDate(new Date()); | |||
userMouldVideoService.updateById(videoUnd); | |||
}else{ | |||
videoUnd.setVideoStatus(EnumVideoStatus.fail.getCode()); | |||
videoUnd.setVideoMsg(msg); | |||
videoUnd.setUpdateDate(new Date()); | |||
userMouldVideoService.updateById(videoUnd); | |||
} | |||
userMouldVideoService.uploadVideo(videoUnd); | |||
return new ResultData(); | |||
} | |||
@AuthIgnore | |||
@ApiOperation("照片说话 视频回调") | |||
@PostMapping(value = "/photo/speak") | |||
public ResultData photoSpeak(@RequestBody Map<String, Object> paranMap) { | |||
logger.debug("[" + getIpAddr() + "] CallbackSmController::photoSpeak"); | |||
@@ -51,7 +98,7 @@ public class CallbackSmController extends BaseController { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"任务ID不能为空"); | |||
} | |||
PhotoSpeakVideo photoSpeakVideo = photoSpeakVideoService.getById(Long.valueOf(task_id)); | |||
PhotoSpeakVideo photoSpeakVideo = photoSpeakVideoService.getById(task_id); | |||
if (photoSpeakVideo == null){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"未找到任务数据"); | |||
} | |||
@@ -13,6 +13,7 @@ import com.iformall.domain.po.sm.InviteCodeInfo; | |||
import com.iformall.enums.*; | |||
import com.iformall.exception.MallinkException; | |||
import com.iformall.service.*; | |||
import com.iformall.service.cuser.CUserServiceApapter; | |||
import com.iformall.service.cuser.CUserServiceFactory; | |||
import com.iformall.service.sm.InviteCodeInfoService; | |||
import com.iformall.service.sm.InviteCodeService; | |||
@@ -57,10 +58,6 @@ public class MiniAppUserController extends BaseController { | |||
@Autowired | |||
private CUserServiceFactory cuserFactory; | |||
@Autowired | |||
@Qualifier("objectCommonRedisTemplate") | |||
RedisTemplate<String, Object> redisTemplate; | |||
@Autowired | |||
private WxCUserBasicInfoService wxCUserBasicInfoService; | |||
@@ -68,7 +65,14 @@ public class MiniAppUserController extends BaseController { | |||
private UserBasicQrcodeService userBasicQrcodeService; | |||
@Autowired | |||
WxAppinfoService wxAppinfoService; | |||
private WxAppinfoService wxAppinfoService; | |||
@Autowired | |||
private WxMsgValidationcodeService wxMsgValidationcodeService; | |||
@Autowired | |||
@Qualifier("objectCommonRedisTemplate") | |||
RedisTemplate<String, Object> redisTemplate; | |||
/** | |||
@@ -82,8 +86,11 @@ public class MiniAppUserController extends BaseController { | |||
@TenantIgnore | |||
@PostMapping("/login") | |||
@ApiOperation(value = "用户登录", notes = "{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\",\"latitude\":\"string\",\"longitude\":\"string\",\"systemInfo\":\"string\"}") | |||
public ResultData userLogin(@RequestBody Map<String, String> map) { | |||
logger.info("dologin >>>>>>>>>>>>>>>>>"+map.toString()); | |||
public ResultData login(@RequestBody Map<String, String> map) { | |||
String ipaddress = getIpAddr(); | |||
logger.debug("[" + ipaddress + "] MiniAppUserController::login"); | |||
logger.info("login >>>>>>>>>>>>>>>>>"+map.toString()); | |||
Map resultMap = new HashMap(); | |||
@@ -135,7 +142,6 @@ public class MiniAppUserController extends BaseController { | |||
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); | |||
// request.setAttribute(Constant.TENANT_ID, wxMall.getTenantId()); | |||
// request.setAttribute(Constant.PARENT_TENANT_ID, wxMall.getParentTenantId()); | |||
String ipaddress = IPUtil.getIpAddr(request); | |||
CUser cUser = new CUser(); | |||
cUser.setAppId(appId); | |||
@@ -167,8 +173,11 @@ public class MiniAppUserController extends BaseController { | |||
@AuthIgnore | |||
@PostMapping("/loginPhone") | |||
@ApiOperation(value = "授权后获取用户的手机号", notes = "{\"encryptedData\":\"string\",\"iv\":\"string\"}") | |||
public ResultData getUserPhone(@RequestBody Map<String, String> map) { | |||
logger.info(map.toString()); | |||
public ResultData loginPhone(@RequestBody Map<String, String> map) { | |||
String ipaddress = getIpAddr(); | |||
logger.debug("[" + ipaddress + "] MiniAppUserController::loginPhone"); | |||
logger.info("loginPhone >>>>>>>>>>>>>>>>>"+map.toString()); | |||
String appId = map.get("appId"); | |||
String openId = map.get("openId"); | |||
String encryptedData = map.get("encryptedData"); | |||
@@ -205,7 +214,7 @@ public class MiniAppUserController extends BaseController { | |||
UserBasicFrom from = new UserBasicFrom(); | |||
from.setPlat(appPlat.getCode()); | |||
from.setFromProject(EnumProject.PROJECT_5.getCode()); | |||
from.setFromProject(wxAppinfo.getProjectType()); | |||
if(StringUtils.isNotBlank(uid)){ | |||
try { | |||
from.setFromUserId(Long.parseLong(uid)); | |||
@@ -237,6 +246,85 @@ public class MiniAppUserController extends BaseController { | |||
return new ResultData(resultMap); | |||
} | |||
@AuthIgnore | |||
@ApiOperation(value = "手机验证码授权登录", notes = "{\"phone\",\"string\",\"code\",\"string\"}") | |||
@PostMapping("/loginPhoneCode") | |||
public ResultData loginPhoneCode(@RequestBody Map<String, String> map, HttpServletResponse response) { | |||
String ipaddress = getIpAddr(); | |||
logger.debug("[" + ipaddress + "] MiniAppUserController::loginPhoneCode"); | |||
logger.info("loginPhoneCode >>>>>>>>>>>>>>>>>"+map.toString()); | |||
// String phone,String code,String pwd | |||
String appId = map.get("appId"); | |||
String openId = map.get("openId"); | |||
String phone = map.get("phone"); | |||
String code = map.get("code"); | |||
if(StringUtils.isBlank(appId)){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId 不能为空"); | |||
} | |||
if(StringUtils.isBlank(openId)){ | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "openId 不能为空"); | |||
} | |||
WxAppinfo wxAppinfo = wxAppinfoService.getOnlyByAppIdFromRedis(appId); | |||
if(wxAppinfo == null){ | |||
return new ResultData(ErrorCode.APP_ID_NOT_FOUND); | |||
} | |||
if(!wxAppinfo.getEnable().equals(EnumEnableType.Enable.getCode())){ | |||
return new ResultData(ErrorCode.APP_ID_NOT_ENABLE); | |||
} | |||
EnumAppPlat appPlat = EnumAppPlat.getByCode(wxAppinfo.getPlat()); | |||
if(appPlat == null){ | |||
return new ResultData(ErrorCode.APP_PLAT_ERROR); | |||
} | |||
if (StringUtils.isBlank(phone)) { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "手机号不能为空"); | |||
} | |||
if (StringUtils.isBlank(code)) { | |||
return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); | |||
} | |||
// check 验证码正确 | |||
boolean isValidCode = false; | |||
try { | |||
isValidCode = wxMsgValidationcodeService.checkCodeValid(phone, code); | |||
} catch (Exception e) { | |||
return new ResultData(Result.ERROR, e.getMessage()); | |||
} | |||
if (isValidCode) { | |||
String uid = map.get("uid"); | |||
UserBasicFrom from = new UserBasicFrom(); | |||
from.setPlat(appPlat.getCode()); | |||
from.setFromProject(wxAppinfo.getProjectType()); | |||
if(StringUtils.isNotBlank(uid)){ | |||
try { | |||
from.setFromUserId(Long.parseLong(uid)); | |||
from.setFromType(EnumUserBasicFrom.FROM_3.getCode()); | |||
}catch(Exception e){} | |||
} | |||
CUserServiceApapter cUserService = cuserFactory.getCUserService(appPlat); | |||
CUser user = cUserService.getByOpenId(openId, getTenantInfo().getTenantId()); | |||
if (user == null) { | |||
return new ResultData(ErrorCode.USER_IS_EMPTY); | |||
} | |||
WxCUserBasicInfo basicInfo = cUserService.savePhoneToBasicInfo(user, phone,from); | |||
wxCUserBasicInfoService.handleLoginUser(basicInfo); | |||
Map resultMap = new HashMap(); | |||
// resultMap.put("phone", basicInfo.getPhone()); | |||
resultMap.put("token", basicInfo.getToken()); | |||
return new ResultData(resultMap); | |||
} else { | |||
return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); | |||
} | |||
} | |||
/** | |||
* 获取二维码 | |||
* | |||
@@ -188,10 +188,10 @@ logging: | |||
com.iformall: debug | |||
path: ./logs/c | |||
photo: | |||
url: http://111.198.0.15:22299 | |||
hy_url: http://111.198.0.15:22288 | |||
talk: http://nas.pucao.cn:2001 | |||
suimang: | |||
oral_broadcasting: http://nas.pucao.cn:2001 | |||
photo_speak: http://111.198.0.15:22299 | |||
photo_speak_hy: http://111.198.0.15:22288 | |||
digital_avatar: http://111.198.0.15:22200 | |||
digital_avatar_hy: http://nas.pucao.cn:2003 | |||
callbackUrl: https://phototest.metavatar.cc/C | |||
callbackUrl: https://test.metavatar.cc/C |
@@ -143,10 +143,10 @@ logging: | |||
com.iformall: debug | |||
path: ./logs/c | |||
photo: | |||
url: http://111.198.0.15:22299 | |||
hy_url: http://111.198.0.15:22288 | |||
talk: http://111.198.0.15:22266 | |||
suimang: | |||
oral_broadcasting: http://111.198.0.15:22266 | |||
photo_speak: http://111.198.0.15:22299 | |||
photo_speak_hy: http://111.198.0.15:22288 | |||
digital_avatar: http://111.198.0.15:22200 | |||
digital_avatar_hy: http://nas.pucao.cn:2003 | |||
callbackUrl: https://photo.metavatar.cc/C | |||
callbackUrl: https://metavatar.cc/C |
@@ -191,10 +191,10 @@ logging: | |||
com.iformall.mapper: debug | |||
path: ./logs/s | |||
photo: | |||
url: http://111.198.0.15:22299 | |||
hy_url: http://111.198.0.15:22288 | |||
talk: http://nas.pucao.cn:2001 | |||
suimang: | |||
oral_broadcasting: http://nas.pucao.cn:2001 | |||
photo_speak: http://111.198.0.15:22299 | |||
photo_speak_hy: http://111.198.0.15:22288 | |||
digital_avatar: http://111.198.0.15:22200 | |||
digital_avatar_hy: http://nas.pucao.cn:2003 | |||
callbackUrl: https://phototest.metavatar.cc/C | |||
callbackUrl: https://test.metavatar.cc/C |
@@ -147,10 +147,10 @@ logging: | |||
path: ./logs/s | |||
photo: | |||
url: http://111.198.0.15:22299 | |||
hy_url: http://111.198.0.15:22288 | |||
talk: http://111.198.0.15:22266 | |||
suimang: | |||
oral_broadcasting: http://111.198.0.15:22266 | |||
photo_speak: http://111.198.0.15:22299 | |||
photo_speak_hy: http://111.198.0.15:22288 | |||
digital_avatar: http://111.198.0.15:22200 | |||
digital_avatar_hy: http://nas.pucao.cn:2003 | |||
callbackUrl: https://photo.metavatar.cc/C | |||
callbackUrl: https://metavatar.cc/C |
@@ -5,11 +5,11 @@ package com.iformall.enums; | |||
*/ | |||
public enum EnumProductOrderPayVendor { | |||
PAY_WAY_WECHAT(1, "微信小程序",EnumAppPlat.WX.getCode(),EnumProfitSharing.PROFIT_SHARING.getCode()), | |||
PAY_WAY_WECHAT(1, "微信小程序",EnumAppPlat.WX.getCode(),EnumProfitSharing.PROFIT_SHARING_NO.getCode()), | |||
PAY_WAY_WECHAT_WAP(2, "微信H5",null,null), | |||
PAY_WAY_ALIPAY(3, "支付宝小程序",null,null), | |||
PAY_WAY_ALIPAY_WAP(4, "支付宝H5",null,null), | |||
PAY_WAY_TT(5, "抖音小程序",EnumAppPlat.TOUTIAO.getCode(),EnumProfitSharing.PROFIT_SHARING_MAST.getCode()), | |||
PAY_WAY_TT(5, "抖音小程序",EnumAppPlat.TOUTIAO.getCode(),EnumProfitSharing.PROFIT_SHARING_NO.getCode()), | |||
; | |||
public static EnumProductOrderPayVendor getEnum(Integer code) { | |||
for (EnumProductOrderPayVendor value : values()) { | |||
@@ -4,7 +4,7 @@ package com.iformall.enums; | |||
* Created by Stormeye on 2018/08/09. | |||
*/ | |||
public enum EnumProfitSharing { | |||
PROFIT_SHARING(0, "无需分账"), | |||
PROFIT_SHARING_NO(0, "无需分账"), | |||
PROFIT_SHARING_MAST(1, "需要分账"), | |||
PROFIT_SHARING_FINISH(2, "已经分账"), | |||
; | |||
@@ -26,7 +26,7 @@ public interface CUserServiceApapter { | |||
WxCUserBasicInfo decryptPhoneNoInfo(String encryptedData, String iv, CUser cuser, WxAppinfo wxAppinfo, boolean isFmOpen, UserBasicFrom from); | |||
void savePhoneToBasicInfo(CUser user, String phone); | |||
WxCUserBasicInfo savePhoneToBasicInfo(CUser user, String phone, UserBasicFrom from); | |||
CUser handleLoginUser(CUser cUser); | |||
@@ -179,20 +179,21 @@ public class TtCUserServiceAdapter extends BasicCUserService implements CUserSer | |||
} | |||
@Override | |||
public void savePhoneToBasicInfo(CUser user, String phone) { | |||
public WxCUserBasicInfo savePhoneToBasicInfo(CUser user, String phone, UserBasicFrom from) { | |||
TtCUser updateUser = new TtCUser(); | |||
updateUser.setId(user.getId()); | |||
updateUser.updateTenantInfo(user); | |||
updateUser.setPhone(phone); | |||
// 更新到basicinfo | |||
WxCUserBasicInfo basicInfo = saveToBasicInfoByCUser(updateUser,null); | |||
WxCUserBasicInfo basicInfo = saveToBasicInfoByCUser(updateUser,from); | |||
updateUser.setUserId(basicInfo.getId()); | |||
updateUser.setUpdateDate(new Date()); | |||
ttCUserMapper.updateById(updateUser); | |||
ttCUserMapper.delForUserIdOnly(updateUser.getId(),updateUser.getUserId(),updateUser.getTenantId()); | |||
return basicInfo; | |||
} | |||
@Override | |||
@@ -192,19 +192,20 @@ public class WxCUserServiceAdapter extends BasicCUserService implements CUserSer | |||
} | |||
@Override | |||
public void savePhoneToBasicInfo(CUser user, String phone) { | |||
public WxCUserBasicInfo savePhoneToBasicInfo(CUser user, String phone, UserBasicFrom from) { | |||
WxCUser updateUser = new WxCUser(); | |||
updateUser.setId(user.getId()); | |||
updateUser.updateTenantInfo(user); | |||
updateUser.setPhone(phone); | |||
WxCUserBasicInfo basicInfo = saveToBasicInfoByCUser(updateUser,null); | |||
WxCUserBasicInfo basicInfo = saveToBasicInfoByCUser(updateUser,from); | |||
updateUser.setUserId(basicInfo.getId()); | |||
updateUser.setUpdateDate(new Date()); | |||
wxCUserMapper.updateById(updateUser); | |||
wxCUserMapper.delForUserIdOnly(updateUser.getId(),updateUser.getUserId(),updateUser.getTenantId()); | |||
return basicInfo; | |||
} | |||
@Override | |||
@@ -11,12 +11,14 @@ import com.iformall.domain.po.sm.VoiceInfo; | |||
import com.iformall.domain.vo.VoiceInfoVo; | |||
import com.iformall.enums.EnumClassType; | |||
import com.iformall.enums.EnumSpeakType; | |||
import com.iformall.file.aliyun.bean.AliyunOSSConfig; | |||
import com.iformall.mapper.VoiceMapper; | |||
import com.iformall.mapper.WxCVoiceMapper; | |||
import com.iformall.service.WxCVoiceService; | |||
import com.iformall.sm.AiPreviewParam; | |||
import com.iformall.sm.AiPreviewResult; | |||
import com.iformall.sm.AiVideoHelper; | |||
import com.iformall.utils.Constant; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -33,9 +35,11 @@ public class WxCVoiceServiceImpl implements WxCVoiceService { | |||
@Autowired | |||
VoiceMapper voiceMapper; | |||
private final static String str = "\uD83D\uDD57"; | |||
private final static String url = "https://suimang.oss-accelerate.aliyuncs.com/builtin/tts_all_sample/"; | |||
private final static String end = ".wav"; | |||
@Autowired | |||
private AliyunOSSConfig aliyunOSSConfig; | |||
private final String demoDirectory = "/builtin/tts_all_sample/"; | |||
private final String demoSuffix = ".wav"; | |||
@Override | |||
@@ -68,7 +72,7 @@ public class WxCVoiceServiceImpl implements WxCVoiceService { | |||
HashMap<String, Object> style = new HashMap<>(); | |||
style.put("stylename", y); | |||
style.put("displayname", EnumSpeakType.getEnum(y).getMessage()); | |||
style.put("styledemo", url + wxCVoiceTable.getMouldSmId() + "_" + y + end); | |||
style.put("styledemo", aliyunOSSConfig.getFiledomain() + demoDirectory + wxCVoiceTable.getMouldSmId() + "_" + y + demoSuffix); | |||
styleList.add(style); | |||
} | |||
voice.put("styleList", styleList); | |||
@@ -95,7 +99,7 @@ public class WxCVoiceServiceImpl implements WxCVoiceService { | |||
return status; | |||
} | |||
AiPreviewParam param = new AiPreviewParam(); | |||
param.setGen_txt(aiPreviewParam.getGen_txt().replaceAll(str, "[*]")); | |||
param.setGen_txt(aiPreviewParam.getGen_txt().replaceAll(Constant.text_pause, "[*]")); | |||
param.setVoice_id(voiceInfo.getMouldSmId()); | |||
param.setVoice_style(StringUtils.isBlank(aiPreviewParam.getVoice_style()) ? EnumSpeakType.default_0.getMessage() : aiPreviewParam.getVoice_style()); | |||
param.setGender(voiceInfo.getSex() == 1 ? "male" : "female"); | |||
@@ -123,12 +127,12 @@ public class WxCVoiceServiceImpl implements WxCVoiceService { | |||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
infoVo.setName(EnumSpeakType.getEnum(y).getMessage()); | |||
infoVo.setEngName(y); | |||
infoVo.setUrl(url + x.getMouldSmId() + "_" + y + end); | |||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + y + demoSuffix); | |||
list.add(infoVo); | |||
}); | |||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||
infoVo.setUrl(url + x.getMouldSmId() + "_" + "default" + end); | |||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + "default" + demoSuffix); | |||
infoVo.setEngName("default"); | |||
list.add(infoVo); | |||
x.setStyle(list); | |||
@@ -137,7 +141,7 @@ public class WxCVoiceServiceImpl implements WxCVoiceService { | |||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||
infoVo.setEngName("default"); | |||
infoVo.setUrl(url + x.getMouldSmId() + "_" + "default" + end); | |||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + "default" + demoSuffix); | |||
list.add(infoVo); | |||
x.setStyle(list); | |||
} | |||
@@ -229,7 +229,7 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||
DouYinCreatePreOrder preOrder = new DouYinCreatePreOrder(); | |||
preOrder.setAppId(appInfo.getAppId()); | |||
preOrder.setSercrect(appInfo.getSecret()); | |||
preOrder.setSalt(payAccount.getApiKey()); | |||
preOrder.setSalt(payAccount.getMerchantApiKey()); | |||
preOrder.setOutOrderNo(order.getOrderNumber()); | |||
preOrder.setTotalAmount(order.getOrderPrice()); | |||
preOrder.setSubject(appInfo.getName()+"-"+order.getProductTitle()); | |||
@@ -256,7 +256,7 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||
@Override | |||
public PayQueryAdapterResult queryPayStatus(ProductOrder order, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { | |||
OrderQueryResult orderQueryResult = DouYinPayHelper.orderQuery(appInfo.getAppId(), payAccount.getApiKey(), order.getOrderNumber(), null); | |||
OrderQueryResult orderQueryResult = DouYinPayHelper.orderQuery(appInfo.getAppId(), payAccount.getMerchantApiKey(), order.getOrderNumber(), null); | |||
int code = DouYinPayHelper.getPayStatusFromOrderQueryResult(orderQueryResult,order.getOrderNumber()); | |||
PayQueryAdapterResult result = new PayQueryAdapterResult(); | |||
result.setCode(code); | |||
@@ -225,7 +225,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ | |||
@Override | |||
public PayShareQueryResult shareQuery(WxAppinfo appInfo, WxPayAccount payAccount, ProductOrderSharing record) throws MallinkException { | |||
QuerySettleResult querySettleResult = DouYinPayHelper.settleQuery(appInfo.getAppId(), payAccount.getApiKey(), record.getOutSettleNo(), null); | |||
QuerySettleResult querySettleResult = DouYinPayHelper.settleQuery(appInfo.getAppId(), payAccount.getMerchantApiKey(), record.getOutSettleNo(), null); | |||
if(querySettleResult == null){ | |||
throw new MallinkException(ErrorCode.PROFIT_SHARING_QUERY_REQUEST_FAILED.getCode(), "分账查询异常"); | |||
} | |||
@@ -362,7 +362,7 @@ public class TtPayShareService extends PayShareBaseAdapterService{ | |||
Settle settle = new Settle(); | |||
settle.setAppId(appInfo.getAppId()); | |||
settle.setSalt(payAccount.getApiKey()); | |||
settle.setSalt(payAccount.getMerchantApiKey()); | |||
settle.setOutSettleNo(record.getOutSettleNo()); | |||
settle.setOutOrderNo(record.getOutOrderId()); | |||
settle.setSettleDesc(record.getSettleDesc()); | |||
@@ -16,6 +16,7 @@ import com.iformall.mapper.PhotoSpeakVideoMapper; | |||
import com.iformall.service.sm.*; | |||
import com.iformall.sm.*; | |||
import com.iformall.utils.Base64Util; | |||
import com.iformall.utils.Constant; | |||
import com.iformall.utils.DateUtils; | |||
import com.iformall.video.VideoFactory; | |||
import com.iformall.video.entity.VideUploadResult; | |||
@@ -82,19 +83,6 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
@Qualifier("objectCommonRedisTemplate") | |||
RedisTemplate<String, Object> redisTemplate; | |||
@Value("${photo.url}") | |||
private String url; | |||
@Value("${photo.hy_url}") | |||
private String hy_url; | |||
@Value("${photo.talk}") | |||
private String talk_url; | |||
//停顿符 | |||
private final static String str = "\uD83D\uDD57"; | |||
@Value("${photo.callbackUrl}") | |||
private String callbackUrl; | |||
@Override | |||
public PageInfo<PhotoSpeakVideo> listAsPage(PhotoSpeakVideo record, Integer pageIndex, Integer pageSize) { | |||
return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> photoSpeakVideoMapper.findList(record)); | |||
@@ -202,8 +190,6 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
speakVideoUpd.setId(photoSpeakVideo.getId()); | |||
try { | |||
AiPhotoSpeakParam param = new AiPhotoSpeakParam(); | |||
param.setTask_id(photoSpeakVideo.getId()); | |||
param.setCallback_url(callbackUrl + "/callback/photo/speak"); | |||
param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl())); | |||
Map<String,Object> subtitleMap = new HashMap<>(); | |||
if(photoSpeakVideo.getSubtitleEnabled() == null){ | |||
@@ -237,7 +223,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
Integer voiceFrom = photoSpeakVideo.getVoiceFrom(); | |||
String voiceMaterialUrl = photoSpeakVideo.getVoiceMaterialUrl(); | |||
if (EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)) { | |||
param.setGen_txt(photoSpeakVideo.getPaperwork().replaceAll(str, "[*]")); | |||
param.setGen_txt(photoSpeakVideo.getPaperwork().replaceAll(Constant.text_pause, "[*]")); | |||
if (sex == 1){ | |||
param.setGender("male"); | |||
}else if (sex == 2){ | |||
@@ -257,7 +243,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
} | |||
try { | |||
AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); | |||
AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param,photoSpeakVideo.getId()); | |||
if (video.isSuccess()) { | |||
// speakVideoUpd.setSaveDir(video.getSaveDir()); | |||
// speakVideoUpd.setAudioPath(video.getAudioPath()); | |||
@@ -289,7 +275,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
@Override | |||
public void uploadVideo(PhotoSpeakVideo mouldVideo){ | |||
if(EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoStatus())){ | |||
String url1 = url + mouldVideo.getVideoPath(); | |||
String url1 = AiVideoHelper.photo_speak + mouldVideo.getVideoPath(); | |||
VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoPath(mouldVideo.getTitle(), url1); | |||
if(result.isSuccess()){ | |||
PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); | |||
@@ -378,10 +364,9 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
AiVideoHqParam param = new AiVideoHqParam(); | |||
param.setSave_dir(speakVideo.getSaveDir()); | |||
param.setAudio_path(speakVideo.getAudioPath()); | |||
param.setTask_id(speakVideo.getId()); | |||
param.setCallback_url(callbackUrl + "/callback/photo/speak"); | |||
try { | |||
AiVideoHqResult result = AiVideoHelper.videoHq(param); | |||
AiVideoHqResult result = AiVideoHelper.videoHq(param,speakVideo.getId()); | |||
if (result.isSuccess()) { | |||
// speakVideoUpd.setVideoStatus(EnumVideoStatus.hy_success.getCode()); | |||
// speakVideoUpd.setVideoMsg("超分视频生成成功"); | |||
@@ -416,7 +401,7 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { | |||
@Override | |||
public void uploadHyVideo(PhotoSpeakVideo mouldVideo){ | |||
if(EnumVideoStatus.hy_success.getCode().equals(mouldVideo.getVideoStatus())){ | |||
String url = hy_url + mouldVideo.getVideoPath(); | |||
String url = AiVideoHelper.photo_speak_hy + mouldVideo.getVideoPath(); | |||
VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoPath(mouldVideo.getTitle(), url); | |||
if(result.isSuccess()){ | |||
PhotoSpeakVideo videoUpd = new PhotoSpeakVideo(); | |||
@@ -16,6 +16,8 @@ import com.iformall.sm.AiVideoHelper; | |||
import com.iformall.sm.AiVideoParam; | |||
import com.iformall.sm.AiVideoResult; | |||
import com.iformall.utils.Base64Util; | |||
import com.iformall.utils.Constant; | |||
import com.iformall.utils.RedisLock; | |||
import com.iformall.video.VideoFactory; | |||
import com.iformall.video.entity.VideUploadResult; | |||
import org.apache.commons.lang3.StringUtils; | |||
@@ -26,6 +28,8 @@ import org.springframework.beans.factory.annotation.Value; | |||
import org.springframework.scheduling.annotation.Async; | |||
import org.springframework.scheduling.annotation.AsyncResult; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.transaction.annotation.Propagation; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import java.net.URL; | |||
import java.util.*; | |||
@@ -57,15 +61,8 @@ public class UserMouldVideoServiceImpl implements UserMouldVideoService { | |||
@Autowired | |||
String videoType; | |||
@Value("${photo.url}") | |||
private String url; | |||
@Value("${photo.hy_url}") | |||
private String hy_url; | |||
@Value("${photo.talk}") | |||
private String talk_url; | |||
//停顿符 | |||
private final static String str = "\uD83D\uDD57"; | |||
@Autowired | |||
RedisLock redisLock; | |||
@Override | |||
public PageInfo<UserMouldVideo> listAsPage(UserMouldVideo record, Integer pageIndex, Integer pageSize) { | |||
@@ -352,7 +349,7 @@ public class UserMouldVideoServiceImpl implements UserMouldVideoService { | |||
try{ | |||
AiVideoParam videoParam = new AiVideoParam(); | |||
videoParam.setGen_txt(paperwork.replaceAll(str, "[*]")); | |||
videoParam.setGen_txt(paperwork.replaceAll(Constant.text_pause, "[*]")); | |||
videoParam.setVideo_template_id(personMouldSmId); | |||
videoParam.setSubtitle(subtitleMap); | |||
videoParam.setVoice_id(voiceMouldSmId); | |||
@@ -394,7 +391,7 @@ public class UserMouldVideoServiceImpl implements UserMouldVideoService { | |||
} | |||
videoParam.setVideo_files(videoFiles); | |||
AiVideoResult video = AiVideoHelper.createVideo(videoParam); | |||
AiVideoResult video = AiVideoHelper.createVideo(videoParam,mouldVideo.getId()); | |||
if(video.isSuccess()){ | |||
videoUpd.setVideoPath(video.getUrl()); | |||
// videoUpd.setVideoTime(video.getDuration()+""); | |||
@@ -423,19 +420,60 @@ public class UserMouldVideoServiceImpl implements UserMouldVideoService { | |||
} | |||
@Async | |||
@Override | |||
public void uploadVideo(UserMouldVideo mouldVideo){ | |||
if(EnumVideoStatus.success.getCode().equals(mouldVideo.getVideoStatus()) | |||
|| EnumVideoStatus.upload_fail.getCode().equals(mouldVideo.getVideoStatus())){ | |||
String url = talk_url + mouldVideo.getVideoPath(); | |||
VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoPath(mouldVideo.getTitle(), url); | |||
if(result.isSuccess()){ | |||
UserMouldVideo videoUpd = new UserMouldVideo(); | |||
videoUpd.setId(mouldVideo.getId()); | |||
videoUpd.setVideoId(result.getVideoId()); | |||
videoUpd.setVideoStatus(EnumVideoStatus.upload_ing.getCode()); | |||
this.saveOrUpdate(videoUpd); | |||
String lockKey = "oralBroadcasting:handleVideo:"+mouldVideo.getId(); | |||
long time = System.currentTimeMillis() + 30000; | |||
String timeStr = String.valueOf(time); | |||
if(!redisLock.lock2(lockKey, timeStr)){ | |||
return; | |||
} | |||
try{ | |||
UserMouldVideo userMouldVideo = this.getById(mouldVideo.getId()); | |||
if(EnumVideoStatus.success.getCode().equals(userMouldVideo.getVideoStatus()) | |||
|| EnumVideoStatus.upload_fail.getCode().equals(userMouldVideo.getVideoStatus())){ | |||
String url = AiVideoHelper.oral_broadcasting + mouldVideo.getVideoPath(); | |||
VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoPath(mouldVideo.getTitle(), url); | |||
if(result.isSuccess()){ | |||
UserMouldVideo videoUpd = new UserMouldVideo(); | |||
videoUpd.setId(userMouldVideo.getId()); | |||
videoUpd.setVideoId(result.getVideoId()); | |||
videoUpd.setVideoStatus(EnumVideoStatus.upload_ing.getCode()); | |||
this.saveOrUpdate(videoUpd); | |||
//实时判断上传状态 | |||
for (int i = 0;i <= 30; i++){ | |||
try { | |||
Thread.sleep(1000); | |||
} catch (InterruptedException e) { | |||
e.printStackTrace(); | |||
} | |||
String progress = videoFactory.getExcutor(videoType).getVedioUploadProgress(result.getVideoId()); | |||
if (progress.equals("complete")) { | |||
VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(result.getVideoId(),true); | |||
if (videoDetail.isSuccess()){ | |||
videoUpd = new UserMouldVideo(); | |||
videoUpd.setId(userMouldVideo.getId()); | |||
videoUpd.setCoverImg(videoDetail.getCoverURL()); | |||
videoUpd.setVideoPlayUrl(videoDetail.getVideoUrl()); | |||
videoUpd.setVideoTime(videoDetail.getDuration()); | |||
videoUpd.setVideoSize(videoDetail.getSize()); | |||
videoUpd.setVideoStatus(EnumVideoStatus.upload_success.getCode()); | |||
videoUpd.setVideoMsg("视频上传成功"); | |||
videoUpd.setUpdateDate(new Date()); | |||
this.updateById(videoUpd); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
}catch(Exception e){ | |||
}finally{ | |||
redisLock.unlock(lockKey, timeStr); | |||
} | |||
} | |||
@@ -11,9 +11,11 @@ import com.iformall.domain.po.sm.VoiceInfo; | |||
import com.iformall.domain.vo.VoiceInfoVo; | |||
import com.iformall.enums.EnumSex; | |||
import com.iformall.enums.EnumSpeakType; | |||
import com.iformall.file.aliyun.bean.AliyunOSSConfig; | |||
import com.iformall.mapper.VoiceMapper; | |||
import com.iformall.service.sm.VoiceInfoService; | |||
import com.iformall.sm.*; | |||
import com.iformall.utils.Constant; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -28,9 +30,11 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||
@Autowired | |||
private VoiceMapper voiceMapper; | |||
private final static String str = "\uD83D\uDD57"; | |||
private final static String url = "https://suimang.oss-accelerate.aliyuncs.com/builtin/tts_all_sample/"; | |||
private final static String end = ".wav"; | |||
@Autowired | |||
private AliyunOSSConfig aliyunOSSConfig; | |||
private final String demoDirectory = "/builtin/tts_all_sample/"; | |||
private final String demoSuffix = ".wav"; | |||
@Override | |||
public List<VoiceInfo> chooseType(Long id) { | |||
@@ -44,13 +48,13 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
infoVo.setName(EnumSpeakType.getEnum(y).getMessage()); | |||
infoVo.setEngName(y); | |||
infoVo.setUrl(url + x.getMouldSmId() + "_" + y + end); | |||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + y + demoSuffix); | |||
list.add(infoVo); | |||
}); | |||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||
infoVo.setUrl(url + x.getMouldSmId() + "_" + "default" + end); | |||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + "default" + demoSuffix); | |||
infoVo.setEngName("default"); | |||
list.add(infoVo); | |||
x.setStyle(list); | |||
@@ -59,7 +63,7 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||
infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||
infoVo.setEngName("default"); | |||
infoVo.setUrl(url + x.getMouldSmId() + "_" + "default" + end); | |||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + "default" + demoSuffix); | |||
list.add(infoVo); | |||
x.setStyle(list); | |||
} | |||
@@ -79,7 +83,7 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||
return new ResultData(ErrorCode.SYS_SERVER_ERROR.getCode(), "声音信息不存在"); | |||
} | |||
AiPreviewParam param = new AiPreviewParam(); | |||
param.setGen_txt(aiPreviewParam.getGen_txt().replaceAll(str,"[*]")); | |||
param.setGen_txt(aiPreviewParam.getGen_txt().replaceAll(Constant.text_pause,"[*]")); | |||
param.setVoice_id(voiceInfo.getMouldSmId()); | |||
param.setVoice_style(StringUtils.isBlank(aiPreviewParam.getVoice_style()) ? EnumSpeakType.default_0.getMessage() : aiPreviewParam.getVoice_style()); | |||
param.setGender(voiceInfo.getSex() == 1 ? "male" : "female"); | |||
@@ -19,20 +19,20 @@ import java.util.List; | |||
@Component | |||
public class AiDigitalAvatarHelper { | |||
private static String digital_avatar; | |||
@Value("${photo.digital_avatar}") | |||
public static String digital_avatar; | |||
@Value("${suimang.digital_avatar}") | |||
public void setDigitalAvatar(String digital_avatar){ | |||
this.digital_avatar = digital_avatar; | |||
} | |||
private static String digital_avatar_hy; | |||
@Value("${photo.digital_avatar_hy}") | |||
public static String digital_avatar_hy; | |||
@Value("${suimang.digital_avatar_hy}") | |||
public void setDigitalAvatarHy(String digital_avatar_hy){ | |||
this.digital_avatar_hy = digital_avatar_hy; | |||
} | |||
private static String callbackUrl; | |||
@Value("${photo.callbackUrl}") | |||
public static String callbackUrl; | |||
@Value("${suimang.callbackUrl}") | |||
public void setCallbackUrl(String callbackUrl){ | |||
this.callbackUrl = callbackUrl; | |||
} | |||
@@ -31,39 +31,43 @@ import java.util.*; | |||
@Component | |||
public class AiVideoHelper { | |||
private static String url; | |||
@Value("${photo.url}") | |||
public void setUrl(String url){ | |||
this.url = url; | |||
public static String oral_broadcasting; | |||
@Value("${suimang.oral_broadcasting}") | |||
public void setOralBroadcasting(String oral_broadcasting){ | |||
this.oral_broadcasting = oral_broadcasting; | |||
} | |||
private static String hy_url; | |||
@Value("${photo.hy_url}") | |||
public void setHyUrl(String hyUrl){ | |||
this.hy_url = hyUrl; | |||
public static String photo_speak; | |||
@Value("${suimang.photo_speak}") | |||
public void setPhotoSpeak(String photo_speak){ | |||
this.photo_speak = photo_speak; | |||
} | |||
private static String talk_url; | |||
@Value("${photo.talk}") | |||
public void setTalkUrl(String talkUrl){ | |||
this.talk_url = talkUrl; | |||
public static String photo_speak_hy; | |||
@Value("${suimang.photo_speak_hy}") | |||
public void setPhotoSpeakHy(String photo_speak_hy){ | |||
this.photo_speak_hy = photo_speak_hy; | |||
} | |||
public static String callbackUrl; | |||
@Value("${suimang.callbackUrl}") | |||
public void setCallbackUrl(String callbackUrl){ | |||
this.callbackUrl = callbackUrl; | |||
} | |||
public static String photo_speak_suffix = "/img_talking"; | |||
public static String image_quality_suffix = "/image_qualit"; | |||
public static String voice_preview = "/tts_wav"; | |||
public static String video_hq = "/video_hq"; | |||
public static String doPost(String url, String params) { | |||
return HttpUtil.doAiVideoPost(url,params); | |||
} | |||
public static AiVideoResult createVideo(AiVideoParam videoParam) { | |||
public static AiVideoResult createVideo(AiVideoParam videoParam,Long taskId) { | |||
videoParam.setTask_id(taskId); | |||
videoParam.setCallback_url(callbackUrl + "/callback/oral/broadcasting"); | |||
log.info("生成视频start request:" + videoParam.neglectImgString()); | |||
String response = doPost(talk_url+"/gen_dh_video", JSONObject.toJSONString(videoParam)); | |||
String response = doPost(oral_broadcasting+"/gen_dh_video", JSONObject.toJSONString(videoParam)); | |||
log.info("生成视频end response:"+response); | |||
AiVideoResult result = new AiVideoResult(); | |||
@@ -119,53 +123,11 @@ public class AiVideoHelper { | |||
// return result; | |||
// } | |||
} | |||
public static AiPhotoSpeakResult createPhotoSpeakVideo(AiPhotoSpeakParam videoParam) { | |||
log.info("生成视频start request:" + videoParam.neglectImgString()); | |||
String response = doPost(url + photo_speak_suffix, JSONObject.toJSONString(videoParam)); | |||
log.info("生成视频end response:" + response); | |||
AiPhotoSpeakResult result = new AiPhotoSpeakResult(); | |||
if (StringUtils.isBlank(response)) { | |||
result.setSuccess(false); | |||
result.setMsg("(MetaService empty)服务被Avatar攻击..."); | |||
return result; | |||
} | |||
JSONObject jsonObject = JSON.parseObject(response); | |||
JSONObject status = jsonObject.getJSONObject("status"); | |||
Integer code = status.getInteger("code"); | |||
String msg = status.getString("msg"); | |||
if (code == null) { | |||
result.setSuccess(false); | |||
result.setMsg("(MetaService code empty)服务被Avatar攻击..."); | |||
return result; | |||
} | |||
if (code.intValue() == 4000) { | |||
JSONObject data = jsonObject.getJSONObject("data"); | |||
String videoUrl = data.getString("url"); | |||
String saveDir = data.getString("save_dir"); | |||
String audioPath = data.getString("audio_path"); | |||
result.setSuccess(true); | |||
result.setUrl(videoUrl); | |||
result.setSaveDir(saveDir); | |||
result.setCode(code); | |||
result.setAudioPath(audioPath); | |||
String resultMsg = result.getMsgInfo(code, msg); | |||
result.setMsg(resultMsg); | |||
} else { | |||
result.setSuccess(false); | |||
result.setCode(code); | |||
String resultMsg = result.getMsgInfo(code, msg); | |||
result.setMsg(resultMsg); | |||
} | |||
return result; | |||
} | |||
public static AiCheckPhotoResult checkPhoto(AiCheckPhotoParam param) { | |||
// String response = doPost("http://111.198.0.15:22299" + image_quality_suffix, JSONObject.toJSONString(param)); | |||
String response = doPost(url + image_quality_suffix, JSONObject.toJSONString(param)); | |||
// String response = doPost("http://111.198.0.15:22299" + "/image_qualit", JSONObject.toJSONString(param)); | |||
String response = doPost(photo_speak + "/image_qualit", JSONObject.toJSONString(param)); | |||
log.info("图片质量审核 end response:" + response); | |||
log.info("图片质量审核 IP:" + url + image_quality_suffix); | |||
AiCheckPhotoResult result = new AiCheckPhotoResult(); | |||
if (StringUtils.isBlank(response)) { | |||
@@ -197,9 +159,8 @@ public class AiVideoHelper { | |||
} | |||
public static AiPreviewResult voicePreview(AiPreviewParam param) { | |||
String response = doPost(url + voice_preview, JSONObject.toJSONString(param)); | |||
String response = doPost(photo_speak + "/tts_wav", JSONObject.toJSONString(param)); | |||
log.info("TTS音色预览 end response:" + response); | |||
log.info("TTS音色预览 IP:" + url + voice_preview); | |||
AiPreviewResult result = new AiPreviewResult(); | |||
if (StringUtils.isBlank(response)) { | |||
@@ -227,7 +188,7 @@ public class AiVideoHelper { | |||
if (code.intValue() == 3000) { | |||
result.setCode(200); | |||
result.setSuccess(true); | |||
result.setUrl(url + strURL); | |||
result.setUrl(photo_speak + strURL); | |||
result.setTime(Double.valueOf(time)); | |||
String resultMsg = result.getMsgInfo(code, msg); | |||
result.setMsg(resultMsg); | |||
@@ -240,10 +201,59 @@ public class AiVideoHelper { | |||
return result; | |||
} | |||
public static AiVideoHqResult videoHq(AiVideoHqParam param) { | |||
String response = doPost(hy_url + video_hq, JSONObject.toJSONString(param)); | |||
public static AiPhotoSpeakResult createPhotoSpeakVideo(AiPhotoSpeakParam videoParam,Long taskId) { | |||
videoParam.setTask_id(taskId); | |||
videoParam.setCallback_url(callbackUrl + "/callback/photo/speak"); | |||
log.info("生成视频start request:" + videoParam.neglectImgString()); | |||
String response = doPost(photo_speak + "/img_talking", JSONObject.toJSONString(videoParam)); | |||
log.info("生成视频end response:" + response); | |||
AiPhotoSpeakResult result = new AiPhotoSpeakResult(); | |||
if (StringUtils.isBlank(response)) { | |||
result.setSuccess(false); | |||
result.setMsg("(MetaService empty)服务被Avatar攻击..."); | |||
return result; | |||
} | |||
JSONObject jsonObject = JSON.parseObject(response); | |||
JSONObject status = jsonObject.getJSONObject("status"); | |||
Integer code = status.getInteger("code"); | |||
String msg = status.getString("msg"); | |||
if (code == null) { | |||
result.setSuccess(false); | |||
result.setMsg("(MetaService code empty)服务被Avatar攻击..."); | |||
return result; | |||
} | |||
if (code.intValue() == 4000) { | |||
JSONObject data = jsonObject.getJSONObject("data"); | |||
String videoUrl = data.getString("url"); | |||
String saveDir = data.getString("save_dir"); | |||
String audioPath = data.getString("audio_path"); | |||
result.setSuccess(true); | |||
result.setUrl(videoUrl); | |||
result.setSaveDir(saveDir); | |||
result.setCode(code); | |||
result.setAudioPath(audioPath); | |||
String resultMsg = result.getMsgInfo(code, msg); | |||
result.setMsg(resultMsg); | |||
} else { | |||
result.setSuccess(false); | |||
result.setCode(code); | |||
String resultMsg = result.getMsgInfo(code, msg); | |||
result.setMsg(resultMsg); | |||
} | |||
return result; | |||
} | |||
public static AiVideoHqResult videoHq(AiVideoHqParam param,Long taskId) { | |||
param.setTask_id(taskId); | |||
param.setCallback_url(callbackUrl + "/callback/photo/speak"); | |||
String response = doPost(photo_speak_hy + "/video_hq", JSONObject.toJSONString(param)); | |||
log.info("视频超分 end response:" + response); | |||
log.info("视频超分 IP:" + hy_url + video_hq); | |||
AiVideoHqResult result = new AiVideoHqResult(); | |||
if (StringUtils.isBlank(response)) { | |||
@@ -269,7 +279,7 @@ public class AiVideoHelper { | |||
if (code.intValue() == 5000) { | |||
result.setCode(200); | |||
result.setSuccess(true); | |||
result.setUrl(url + strURL); | |||
result.setUrl(strURL); | |||
String resultMsg = result.getMsgInfo(code, msg); | |||
result.setMsg(resultMsg); | |||
} else { | |||
@@ -32,6 +32,9 @@ public class AiVideoParam { | |||
* | +++ ratio | 是 | float32 | 相对于原素材图片大小的缩放比例,如0.5表示宽高均变为原来的一半 | | |||
*/ | |||
private Long task_id; | |||
private String callback_url; | |||
private String gen_txt; | |||
private String video_template_id; | |||
private String voice_id; | |||
@@ -118,4 +118,6 @@ public class Constant { | |||
public static final Integer wiwideOldPlat = 0;//老平台 | |||
public static final Integer wiwideNewPlat = 1;//新平台 | |||
public static final String text_pause = "\uD83D\uDD57"; | |||
} |