From b870b3f8be273f9eefd196609240309bb4ed5148 Mon Sep 17 00:00:00 2001 From: xhxu Date: Tue, 12 Sep 2023 13:37:24 +0800 Subject: [PATCH] //.. --- .../controller/CallbackPayController.java | 66 +++++++- .../controller/CallbackSmController.java | 49 +++++- .../controller/MiniAppUserController.java | 110 +++++++++++-- .../src/main/resources/application-dev.yml | 10 +- .../src/main/resources/application-prod.yml | 10 +- .../src/main/resources/application-dev.yml | 10 +- .../src/main/resources/application-prod.yml | 10 +- .../enums/EnumProductOrderPayVendor.java | 4 +- .../com/iformall/enums/EnumProfitSharing.java | 2 +- .../service/cuser/CUserServiceApapter.java | 2 +- .../cuser/tt/TtCUserServiceAdapter.java | 5 +- .../cuser/wx/WxCUserServiceAdapter.java | 5 +- .../service/impl/WxCVoiceServiceImpl.java | 20 ++- .../miniApp/TtMiniAppPayAdapterService.java | 4 +- .../share/douyin/TtPayShareService.java | 4 +- .../sm/impl/PhotoSpeakVideoServiceImpl.java | 29 +--- .../sm/impl/UserMouldVideoServiceImpl.java | 80 +++++++--- .../service/sm/impl/VoiceInfoServiceImpl.java | 18 ++- .../iformall/sm/AiDigitalAvatarHelper.java | 12 +- .../java/com/iformall/sm/AiVideoHelper.java | 148 ++++++++++-------- .../java/com/iformall/sm/AiVideoParam.java | 3 + .../java/com/iformall/utils/Constant.java | 2 + 22 files changed, 422 insertions(+), 181 deletions(-) diff --git a/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java b/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java index 5ea0d54..87617ce 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java @@ -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 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 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 resource = (Map) 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 _ttNotify(@RequestBody Map paranMap, HttpServletRequest request, HttpServletResponse response) { + logger.debug("[" + getIpAddr() + "] CallbackPayController::_ttNotify"); + Map resultMap = new HashMap<>(); + logger.info("抖音支付回调结果通知{}"+JSONObject.toJSONString(paranMap)); + /** + * ----效验数据来源合法 + */ + try{ + String msg = (String) paranMap.get("msg"); + String type = (String) paranMap.get("type"); + + Map 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; + } + } diff --git a/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java b/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java index 1abb728..f609dac 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/CallbackSmController.java @@ -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 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 data = (Map) paranMap.get("data"); + Map video = (Map) 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 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(),"未找到任务数据"); } diff --git a/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java b/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java index 61d72cb..b5444c1 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/MiniAppUserController.java @@ -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 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 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 map) { - logger.info("dologin >>>>>>>>>>>>>>>>>"+map.toString()); + public ResultData login(@RequestBody Map 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 map) { - logger.info(map.toString()); + public ResultData loginPhone(@RequestBody Map 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 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); + } + } + /** * 获取二维码 * diff --git a/suimangCApi/src/main/resources/application-dev.yml b/suimangCApi/src/main/resources/application-dev.yml index 7b1dd7a..63c7645 100644 --- a/suimangCApi/src/main/resources/application-dev.yml +++ b/suimangCApi/src/main/resources/application-dev.yml @@ -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 diff --git a/suimangCApi/src/main/resources/application-prod.yml b/suimangCApi/src/main/resources/application-prod.yml index 5f9c4e7..8ba888b 100644 --- a/suimangCApi/src/main/resources/application-prod.yml +++ b/suimangCApi/src/main/resources/application-prod.yml @@ -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 diff --git a/suimangSchedule/src/main/resources/application-dev.yml b/suimangSchedule/src/main/resources/application-dev.yml index be089a7..d075af1 100644 --- a/suimangSchedule/src/main/resources/application-dev.yml +++ b/suimangSchedule/src/main/resources/application-dev.yml @@ -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 \ No newline at end of file + callbackUrl: https://test.metavatar.cc/C \ No newline at end of file diff --git a/suimangSchedule/src/main/resources/application-prod.yml b/suimangSchedule/src/main/resources/application-prod.yml index 96d72ce..83e1c3f 100644 --- a/suimangSchedule/src/main/resources/application-prod.yml +++ b/suimangSchedule/src/main/resources/application-prod.yml @@ -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 \ No newline at end of file + callbackUrl: https://metavatar.cc/C \ No newline at end of file diff --git a/suimangService/src/main/java/com/iformall/enums/EnumProductOrderPayVendor.java b/suimangService/src/main/java/com/iformall/enums/EnumProductOrderPayVendor.java index 8011e66..488be99 100644 --- a/suimangService/src/main/java/com/iformall/enums/EnumProductOrderPayVendor.java +++ b/suimangService/src/main/java/com/iformall/enums/EnumProductOrderPayVendor.java @@ -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()) { diff --git a/suimangService/src/main/java/com/iformall/enums/EnumProfitSharing.java b/suimangService/src/main/java/com/iformall/enums/EnumProfitSharing.java index c37682d..4d32dda 100644 --- a/suimangService/src/main/java/com/iformall/enums/EnumProfitSharing.java +++ b/suimangService/src/main/java/com/iformall/enums/EnumProfitSharing.java @@ -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, "已经分账"), ; diff --git a/suimangService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java b/suimangService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java index 3281ba3..22c2314 100644 --- a/suimangService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java +++ b/suimangService/src/main/java/com/iformall/service/cuser/CUserServiceApapter.java @@ -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); diff --git a/suimangService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java b/suimangService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java index 8129a84..b297e90 100644 --- a/suimangService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java +++ b/suimangService/src/main/java/com/iformall/service/cuser/tt/TtCUserServiceAdapter.java @@ -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 diff --git a/suimangService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java b/suimangService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java index 91af9aa..5d1e0e3 100644 --- a/suimangService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java +++ b/suimangService/src/main/java/com/iformall/service/cuser/wx/WxCUserServiceAdapter.java @@ -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 diff --git a/suimangService/src/main/java/com/iformall/service/impl/WxCVoiceServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/WxCVoiceServiceImpl.java index 2d744a8..ecd7609 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/WxCVoiceServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/WxCVoiceServiceImpl.java @@ -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 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); } diff --git a/suimangService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java b/suimangService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java index e727fca..694e182 100644 --- a/suimangService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java +++ b/suimangService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java @@ -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); diff --git a/suimangService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java b/suimangService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java index 2fbf342..395ca9f 100644 --- a/suimangService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java +++ b/suimangService/src/main/java/com/iformall/service/pay/service/share/douyin/TtPayShareService.java @@ -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()); diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java index 44850f6..00f8834 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java @@ -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 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 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 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(); diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/UserMouldVideoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/UserMouldVideoServiceImpl.java index 1bc1308..26b2bed 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/UserMouldVideoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/UserMouldVideoServiceImpl.java @@ -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 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); } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java index fc0d2a6..402df0c 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/VoiceInfoServiceImpl.java @@ -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 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"); diff --git a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java index 350de49..bb90c26 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiDigitalAvatarHelper.java @@ -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; } diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java index cd2fe25..1e622ec 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoHelper.java @@ -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 { diff --git a/suimangService/src/main/java/com/iformall/sm/AiVideoParam.java b/suimangService/src/main/java/com/iformall/sm/AiVideoParam.java index ba611b2..cf1b461 100644 --- a/suimangService/src/main/java/com/iformall/sm/AiVideoParam.java +++ b/suimangService/src/main/java/com/iformall/sm/AiVideoParam.java @@ -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; diff --git a/suimangService/src/main/java/com/iformall/utils/Constant.java b/suimangService/src/main/java/com/iformall/utils/Constant.java index c5df385..a5236ed 100644 --- a/suimangService/src/main/java/com/iformall/utils/Constant.java +++ b/suimangService/src/main/java/com/iformall/utils/Constant.java @@ -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"; + }