| @@ -6,16 +6,15 @@ import io.swagger.annotations.ApiModelProperty; | |||||
| import lombok.Data; | import lombok.Data; | ||||
| /** | /** | ||||
| * 请求参数 | |||||
| * { | |||||
| * 参数示例: | |||||
| * { | |||||
| * "paperwork": "文案", | * "paperwork": "文案", | ||||
| * "voiceId": "zh-CN-XiaomengNeural", | * "voiceId": "zh-CN-XiaomengNeural", | ||||
| * "voiceStyle": "default", | |||||
| * "gender": "male" | |||||
| * "voiceStyle": "default" | |||||
| * } | * } | ||||
| * | * | ||||
| * @author xmzhao71 | * @author xmzhao71 | ||||
| * @date 2023-10-27 | |||||
| * @date 2023-10-23 | |||||
| */ | */ | ||||
| @ApiModel(value = "预览视频请求参数") | @ApiModel(value = "预览视频请求参数") | ||||
| @Data | @Data | ||||
| @@ -28,7 +28,7 @@ public class AiVideoServiceImpl implements AiVideoService { | |||||
| private ServiceVideoRecordService serviceVideoRecordService; | private ServiceVideoRecordService serviceVideoRecordService; | ||||
| @Override | @Override | ||||
| public AiPreviewResult previewVideo(AiPreviewParam aiPreviewParam) { | |||||
| public AiPreviewResult previewVideo(AiPreviewParam aiPreviewParam) { | |||||
| return AiVideoHelper.voicePreview(aiPreviewParam); | return AiVideoHelper.voicePreview(aiPreviewParam); | ||||
| } | } | ||||
| @@ -21,6 +21,9 @@ import com.iformall.service.sm.MouldPatchService; | |||||
| import com.iformall.service.sm.MouldPatchSignService; | import com.iformall.service.sm.MouldPatchSignService; | ||||
| import com.iformall.service.sm.UserMouldVideoService; | import com.iformall.service.sm.UserMouldVideoService; | ||||
| import com.iformall.service.sm.VoiceInfoService; | import com.iformall.service.sm.VoiceInfoService; | ||||
| import com.iformall.smsdk.SmGenerateVideoDTO; | |||||
| import com.iformall.smsdk.SmPreviewVideoDTO; | |||||
| import com.iformall.smsdk.SmSdkUtils; | |||||
| import com.iformall.video.VideoFactory; | import com.iformall.video.VideoFactory; | ||||
| import com.iformall.video.entity.VideUploadResult; | import com.iformall.video.entity.VideUploadResult; | ||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| @@ -154,6 +157,13 @@ public class UserMouldVideoController extends BaseController { | |||||
| return userMouldVideoService.saveOrUpdate(record); | return userMouldVideoService.saveOrUpdate(record); | ||||
| } | } | ||||
| /** | |||||
| * 私有化部署不使用该接口 | |||||
| * | |||||
| * @param record | |||||
| * @return {@link ResultData} | |||||
| */ | |||||
| @ApiOperation("慧影项目生成视频") | @ApiOperation("慧影项目生成视频") | ||||
| @PostMapping("createVideo") | @PostMapping("createVideo") | ||||
| public ResultData create(@RequestBody UserMouldVideo record) { | public ResultData create(@RequestBody UserMouldVideo record) { | ||||
| @@ -201,6 +211,14 @@ public class UserMouldVideoController extends BaseController { | |||||
| return new ResultData(); | return new ResultData(); | ||||
| } | } | ||||
| // @AuthIgnore | |||||
| // @ApiOperation("生成视频") | |||||
| // @PostMapping("createVideo") | |||||
| // public ResultData createVideo(@RequestBody UserMouldVideo record) { | |||||
| // SmSdkUtils.generateVideo(SmGenerateVideoDTO.mapping(record)); | |||||
| // return new ResultData(); | |||||
| // } | |||||
| @ApiOperation("根据id查询接口") | @ApiOperation("根据id查询接口") | ||||
| @GetMapping("/findVideo") | @GetMapping("/findVideo") | ||||
| @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true) | ||||
| @@ -14,6 +14,8 @@ import com.iformall.language.LanguageDetect; | |||||
| import com.iformall.service.WxCVoiceService; | import com.iformall.service.WxCVoiceService; | ||||
| import com.iformall.service.sm.*; | import com.iformall.service.sm.*; | ||||
| import com.iformall.sm.AiPreviewParam; | import com.iformall.sm.AiPreviewParam; | ||||
| import com.iformall.smsdk.SmPreviewVideoDTO; | |||||
| import com.iformall.smsdk.SmSdkUtils; | |||||
| import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | import io.swagger.annotations.ApiImplicitParam; | ||||
| import io.swagger.annotations.ApiImplicitParams; | import io.swagger.annotations.ApiImplicitParams; | ||||
| @@ -174,6 +176,4 @@ public class VoiceMouldController extends BaseController { | |||||
| logger.debug("[" + getIpAddr() + "] MouldPatchController::voicePreview"); | logger.debug("[" + getIpAddr() + "] MouldPatchController::voicePreview"); | ||||
| return new ResultData(voiceInfoService.previewVoice(aiPreviewParam)); | return new ResultData(voiceInfoService.previewVoice(aiPreviewParam)); | ||||
| } | } | ||||
| } | } | ||||
| @@ -190,13 +190,16 @@ logging: | |||||
| suimang: | suimang: | ||||
| oral_broadcasting: http://111.198.0.15:22266 | oral_broadcasting: http://111.198.0.15:22266 | ||||
| video_tts: http://111.198.0.15:22222 | |||||
| photo_speak: http://111.198.0.15:22299 | |||||
| photo_speak_hy: http://111.198.0.15:22288 | |||||
| digital_avatar: http://nas.pucao.cn:2005 | |||||
| digital_avatar_hy: http://nas.pucao.cn:2003 | |||||
| callbackUrl: https://mtest.metavatar.cc/C | callbackUrl: https://mtest.metavatar.cc/C | ||||
| video_tts: xxx | |||||
| photo_speak: xxx | |||||
| photo_speak_hy: xxx | |||||
| digital_avatar: xxx | |||||
| digital_avatar_hy: xxx | |||||
| sdk: | |||||
| sm: | |||||
| base-url: https://mtest.metavatar.cc/public | |||||
| swagger: | swagger: | ||||
| base-package: com.iformall.controller | base-package: com.iformall.controller | ||||
| title: 遂芒_metavatar_接口文档 | title: 遂芒_metavatar_接口文档 | ||||
| @@ -0,0 +1,197 @@ | |||||
| spring: | |||||
| profiles: | |||||
| #include: aliyunRocketMQ | |||||
| include: rabbitMQ | |||||
| # JDBC | |||||
| datasource: | |||||
| url: jdbc:mysql://182.92.151.30:3306/mallink_suimang_test?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true | |||||
| username: root | |||||
| password: sm2023@ms | |||||
| type: com.alibaba.druid.pool.DruidDataSource | |||||
| driver-class-name: com.mysql.cj.jdbc.Driver | |||||
| filters: stat | |||||
| maxActive: 20 | |||||
| initialSize: 1 | |||||
| maxWait: 60000 | |||||
| minIdle: 1 | |||||
| timeBetweenEvictionRunsMillis: 28000 | |||||
| minEvictableIdleTimeMillis: 28000 | |||||
| validationQuery: select 'x' | |||||
| testWhileIdle: true | |||||
| testOnBorrow: false | |||||
| testOnReturn: false | |||||
| poolPreparedStatements: true | |||||
| maxOpenPreparedStatements: 20 | |||||
| #jackson: | |||||
| #date-format: yyyy-MM-dd HH:mm:ss | |||||
| # REDIS | |||||
| redis: | |||||
| host: 101.200.130.134 | |||||
| port: 6379 | |||||
| password: iF0rm@2l2ol9 | |||||
| timeout: 3600 | |||||
| expire: 1800 #30分钟 | |||||
| database: 5 | |||||
| jedis: | |||||
| pool: | |||||
| max-active: 200 | |||||
| max-idle: 100 | |||||
| max-wait: -1 | |||||
| min-idle: 0 | |||||
| # SMS | |||||
| aliyun: | |||||
| sms: | |||||
| accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
| accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
| product: Dysmsapi | |||||
| domain: dysmsapi.aliyuncs.com | |||||
| regionId: cn-hangzhou | |||||
| dateFormat: yyyyMMdd | |||||
| endpointName: cn-hangzhou | |||||
| oss: | |||||
| endpoint: oss-cn-beijing.aliyuncs.com | |||||
| keyid: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
| keysecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
| bucketname: suimang | |||||
| filehost: capi | |||||
| filedomain: https://suimang.oss-accelerate.aliyuncs.com | |||||
| mail: | |||||
| host: smtp.exmail.qq.com | |||||
| username: zhengfangyuan@iformall.com | |||||
| password: 2hSeppFRaw7KZZyf # 授权密码 | |||||
| properties: | |||||
| mail: | |||||
| smtp: | |||||
| auth: true | |||||
| starttls: | |||||
| enable: true | |||||
| socketFactory: | |||||
| port: 465 | |||||
| class: javax.net.ssl.SSLSocketFactory | |||||
| # ROCKETMQ | |||||
| rocketmq: | |||||
| nameServer: 127.0.0.1:9876 | |||||
| producer: | |||||
| retry-times-when-send-async-failed: 0 | |||||
| send-msg-timeout: 300000 | |||||
| compress-msg-body-over-howmuch: 4096 | |||||
| max-message-size: 4194304 | |||||
| retry-another-broker-when-not-store-ok: false | |||||
| retry-times-when-send-failed: 2 | |||||
| # RABBITMQ | |||||
| rabbitmq: | |||||
| host: 127.0.0.1 | |||||
| port: 5672 | |||||
| username: fumao | |||||
| password: f9l98 | |||||
| publisher-confirms: true | |||||
| publisher-returns: false | |||||
| virtual-host: / | |||||
| aliyunRocketmq: | |||||
| accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V" | |||||
| accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry" | |||||
| groupId: "GID_P_1" | |||||
| namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | |||||
| aws: | |||||
| clientRegion: cn-northwest-1 | |||||
| bucketName: iformall-net | |||||
| access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) | |||||
| secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) | |||||
| #wechat: | |||||
| # open: | |||||
| # componentAppId: "wxdfc8fb4e62d6b52b" | |||||
| # componentSecret: "98daa62b316dd6feabaad708327ce233" | |||||
| # componentToken: "formall2018" | |||||
| # componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" | |||||
| # redis: | |||||
| # host: 101.201.103.81 | |||||
| # port: 6379 | |||||
| # password: ENC(xPFDlgd6v8zUhJMbcKc0KmmQiqs9qHtk) | |||||
| # timeout: 3600 | |||||
| # expire: 1800 #30分钟 | |||||
| # database: 2 | |||||
| # defaultExpiration: 2592000 # 默认生命周期30天 | |||||
| # jedis: | |||||
| # pool: | |||||
| # max-active: 100 | |||||
| # max-idle: 500 | |||||
| # max-wait: -1 | |||||
| # min-idle: 10 | |||||
| wechat: | |||||
| web: | |||||
| appId: "wx091907dd0bfd3f6b" | |||||
| secret: "2a2ca10738998b9ef92c1fe8a4d366a6" | |||||
| url: "https://admintest.malls.iformall.com" | |||||
| open: | |||||
| componentAppId: wxdfc8fb4e62d6b52b | |||||
| componentSecret: 98daa62b316dd6feabaad708327ce233 | |||||
| componentToken: formall2018 | |||||
| componentAesKey: htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN | |||||
| redis: | |||||
| host: 101.200.130.134 | |||||
| port: 6379 | |||||
| password: iF0rm@2l2ol9 | |||||
| timeout: 3600 | |||||
| expire: 1800 #30分钟 | |||||
| database: 2 | |||||
| defaultExpiration: 2592000 # 默认生命周期30天 | |||||
| jedis: | |||||
| pool: | |||||
| max-active: 100 | |||||
| max-idle: 100 | |||||
| max-wait: -1 | |||||
| min-idle: 10 | |||||
| alipay: | |||||
| open: | |||||
| appId: 2021002137663024 | |||||
| appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCUfymV5J73QQMG52PVIGUbowkloYCO4B7TQoKbrTZf2YeYsg/To/o4PiXPMNwEUfEUU8NYQ6WwNhCd2fa1ei8WFXJUf3bfgswtBk1aOmHLeY9yoXFxIKMTQ9RcobnmBzKQZlaAPMTSr7t1QtKZKPuc2gEHGRFYKO/ZuL8gIpnsVidVtmi52yd7hzao/pI3ThLA0lreg4L3rYP5ESQZRytxIPgUQ4KI11pZxFgbe+uy28AGDYIQscSIb+SWOHPYKLvOEqqepIZ8M18w/U0lZzpzepzi/V/llekvXJ6UEf1lzl7x/4UIA3WPN1B40+NzbD/OxEGTuM0UctOG6ZTd4Te9AgMBAAECggEAPYksnHbvARspu/SrRCh2fatkIPn6Ijrxyy3mnch7neCw9i/jqxpqmF/4nxFqO0gRlRDZBHyT7p+Y5zDpsW5+kLI2fJmNkzXKkmXoLBnBaOZo8WHBdtXFfjg/iltig9Y7t+cQtXd5QK2eCwuz5dA75FXa0ywqKdRdAGY0nYZ5LpwrHVU8RXheUDCJyhKNj2+W6lIaSKDxLZU3laO1oBrv1agcy7Crd5E2ndb8O3Enga+z7wSz2h7A1BasC/Yl/Ro0Y21wLCH3s/R6qA0Paq12+WEF+xdodM7SrP43CCTVFGbC1TfEOdanJfixop8QuYsIp7pHrL925+vP4eY9RfckgQKBgQDQqLdpDzzU7Ot/L9Vc/r8d4iwXXbX8+HwVFV4oBuausgFyv8eJJpfrI+IlEoB1ubJcPpJBFqfmeYTW6/v6ioFljJAlWfFvesUVt/HszBMIOsU0Bzt7ex6WlwKOagb0q0ZPA4T0OY0K0lg0loaaaR8ZTr4ivDymaGBtTBYhslpc7QKBgQC2MBznGEc5r2dhyENvdPOR20PnXQcevGnPdqSus8m0VmDcHE72RVcckcZtwczsb3NaLSqmjAcWTn51/VFmlvhB3F34FcFTPZGq6sj7fWK8HuFq7l7mu5OzYuVr73zy9ggsUuaw10IqvvwIVxszNAF0hiRnSGH3z27CoRmz3s+8EQKBgQCK3o7atBJ3X4rIJiypbL4DhIB1uJ+jUjk6yvLUTut+fufp1+tTw0S+cS5UIAEw2Lr1G4u5F/v8rwmTBJG6SC4gSLGyui6uVBYRA1BWmedcxchzfRDAeMt9y9kesUAZ3Fe5xIzbAeZ1ulKMBVZmM+pHrJlsgr0Wv0bV1xqvqITtbQKBgBIsIGXopQoa9dvqBtfyOW1eCprkS5aEQqWf9vM6Ga90QjsSU8n6xqKh48IE57TZtQ7UnIF6TCasc66/MsRh4KdpHLJnMR5lcMc0nhF/wz5ychehaTPol+X3wlyOyc7OPah2KG6ROhdbb3ZBggQMduyxiKYIsUTvmuOtAAxR+DSRAoGADtuDzGQDOJYWiO2uuP6FpA5IJaiwlSfu3xncJVfhO8SVr6VBJFg88igbIB3w6nk/sv7j9VTXqXre9HMvp1flxaaLsdxM4HcTSALS9q6t/ajaveqte6S5kAtWx0WW8C6PtgWXHbxcD7LXARSsKLoEl2JXXyUVS/m2l/RzHBQ8GJI= | |||||
| appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002137663024.crt | |||||
| alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt | |||||
| alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt | |||||
| callback: https://callbacktest.malls.iformall.com/api/alipay/notify/callback | |||||
| video: | |||||
| aliyun: | |||||
| accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
| accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
| regionId: cn-beijing | |||||
| endPoint: https://oss-cn-beijing.aliyuncs.com | |||||
| corePoolSize: 6 | |||||
| maxPoolSize: 20 | |||||
| queueCapacity: 1000 | |||||
| namePrefix: aliyun-video-upload | |||||
| jasypt: | |||||
| encryptor: | |||||
| password: oRqdnDbK5pj3eMmB | |||||
| fm: | |||||
| exception: true | |||||
| exception_emails: xuxiaohu@iformall.com | |||||
| deploy: 1 | |||||
| open: false | |||||
| upload_dir: /home/test/server/uploads/ | |||||
| ocr_data: /root/ocr_data/ | |||||
| videoType: aliyun | |||||
| logging: | |||||
| level: | |||||
| com.iformall: debug | |||||
| path: ./logs/c | |||||
| 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://test.metavatar.cc/C | |||||
| @@ -145,9 +145,11 @@ logging: | |||||
| suimang: | suimang: | ||||
| oral_broadcasting: http://111.198.0.15:22266 | oral_broadcasting: http://111.198.0.15:22266 | ||||
| video_tts: http://111.198.0.15:22222 | |||||
| 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://metavatar.cc/C | callbackUrl: https://metavatar.cc/C | ||||
| photo_speak: xxx | |||||
| photo_speak_hy: xxx | |||||
| digital_avatar: xxx | |||||
| digital_avatar_hy: xxx | |||||
| sdk: | |||||
| sm: | |||||
| base-url: https://neuver.metavatar.cc/public | |||||
| @@ -0,0 +1,152 @@ | |||||
| spring: | |||||
| profiles: | |||||
| include: aliyunRocketMQ | |||||
| # JDBC | |||||
| datasource: | |||||
| url: jdbc:mysql://182.92.151.30:3306/mallink_suimang?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true | |||||
| username: root | |||||
| password: sm2023@ms | |||||
| type: com.alibaba.druid.pool.DruidDataSource | |||||
| driver-class-name: com.mysql.cj.jdbc.Driver | |||||
| filters: stat | |||||
| maxActive: 200 | |||||
| initialSize: 1 | |||||
| maxWait: 60000 | |||||
| minIdle: 1 | |||||
| timeBetweenEvictionRunsMillis: 28000 | |||||
| minEvictableIdleTimeMillis: 28000 | |||||
| validationQuery: select 'x' | |||||
| testWhileIdle: true | |||||
| testOnBorrow: false | |||||
| testOnReturn: false | |||||
| poolPreparedStatements: true | |||||
| maxOpenPreparedStatements: 20 | |||||
| # REDIS | |||||
| redis: | |||||
| host: 182.92.151.30 | |||||
| port: 6379 | |||||
| password: sm2023@rd | |||||
| timeout: 3600 | |||||
| expire: 1800 #30分钟 | |||||
| database: 1 | |||||
| defaultExpiration: 2592000 # 默认生命周期30天 | |||||
| jedis: | |||||
| pool: | |||||
| max-active: 100 | |||||
| max-idle: 100 | |||||
| max-wait: -1 | |||||
| min-idle: 10 | |||||
| # SMS | |||||
| aliyun: | |||||
| sms: | |||||
| accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
| accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
| product: Dysmsapi | |||||
| domain: dysmsapi.aliyuncs.com | |||||
| regionId: cn-hangzhou | |||||
| dateFormat: yyyyMMdd | |||||
| endpointName: cn-hangzhou | |||||
| oss: | |||||
| endpoint: oss-cn-beijing.aliyuncs.com | |||||
| keyid: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
| keysecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
| bucketname: suimang | |||||
| filehost: capi | |||||
| filedomain: https://suimang.oss-accelerate.aliyuncs.com | |||||
| mail: | |||||
| host: smtp.exmail.qq.com | |||||
| username: system@metavatar.com.cn | |||||
| password: 2bKGhFaKKjhQFeka # 授权密码 | |||||
| properties: | |||||
| mail: | |||||
| smtp: | |||||
| auth: true | |||||
| starttls: | |||||
| enable: true | |||||
| socketFactory: | |||||
| port: 465 | |||||
| class: javax.net.ssl.SSLSocketFactory | |||||
| # RABBITMQ | |||||
| rabbitmq: | |||||
| host: 127.0.0.1 | |||||
| port: 5672 | |||||
| username: ENC(lRmLd6EzgeY1RT5ktcHv9g==) | |||||
| password: ENC(gBI8mCjr3OC0v57jcnSb660Ux7mW03K2oePgvohhg7w=) | |||||
| publisher-confirms: true | |||||
| publisher-returns: false | |||||
| virtual-host: / | |||||
| aliyunRocketmq: | |||||
| accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V" | |||||
| accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry" | |||||
| groupId: "GID_P_1" | |||||
| namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | |||||
| aws: | |||||
| clientRegion: cn-northwest-1 | |||||
| bucketName: iformall-net | |||||
| access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) | |||||
| secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) | |||||
| wechat: | |||||
| open: | |||||
| componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) | |||||
| componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) | |||||
| componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | |||||
| componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | |||||
| redis: | |||||
| host: 182.92.151.30 | |||||
| port: 6379 | |||||
| password: sm2023@rd | |||||
| timeout: 3600 | |||||
| expire: 1800 #30分钟 | |||||
| database: 2 | |||||
| defaultExpiration: 2592000 # 默认生命周期30天 | |||||
| jedis: | |||||
| pool: | |||||
| max-active: 100 | |||||
| max-idle: 100 | |||||
| max-wait: -1 | |||||
| min-idle: 10 | |||||
| alipay: | |||||
| open: | |||||
| appId: 2021002140616334 | |||||
| appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCEJmHIlS0luIH7zJRRVlypCcgiSkqpSlnmgyCEM7nu8IerV8Yf7dMBitBklTpJB+4URV1bW+q6Ijzo8RsCyjm1Kx+EFiKf1PiJXlT0h1+bF3fYdDr6r5GK0/TtB8O80p774NcRD3HgbzUS8AEe/GcBvhiXbDRgJh7yAngW9vxl9u1o5UcaxOXVLWDrjlQGF6qyXUlycCNIdPXj3LduP3PBK5daVZwJm33Pr7kmSI0agZvV267HaTpSKaiXI7Zwo+nFMqx9g9kpzmYRfOgHx3DWpQUFI646IB8nEpLpQp3/0eDocuqiHXYgEpLpPoFKoVE228v74YSFh3Y4fFGX+qtjAgMBAAECggEAIJK9Y42xtSyHjaNdo7bf3CK3HAyn3pafFjyYFT4SxJyxNEDMay5Z5nVq7IAD/+BehMycOFqtvveVf+1+NO/XzZo1iH9URYVfRazkz+lWXYopVkdACm6gN1ILeymAy9g2q+s918ywyxteP668+ABK+5j5wsk/F7wNwKVvKGn0yMT7DP0FAL1e0KWndZCZlF79VnFpBLscDJq28GqRzqYop4CWqHHTA6DBvIqkfQV4U3IzqnzOsxNLEMBwhnbK08XfYZ3DxCPH0jQdA2Jj/aABrntq2EpWjzW5H9iZqrVo33rmsNHUSQvla/333RkbpwGyNhI6kcPBRq4cVSAa3y7dMQKBgQDVfyDUPWKXVwIJUgO1my8WIUu2p6nhuT7Mfnpk4X7ewdFaRVjb/r0KvhLgoz2/KOwkqtWTlEvNaCDDycpLXk+V5ZH833kYsDEmxY7ikOUjCcrfYJgT7P77//cZ4Kx8a5X45SiKAZT2GQv7BTtIfNhrfTUj6AQx/3MP3sa2QAWeNQKBgQCedWoF7t+qyck2hctqtTFC7fRkEk7RNJVph1ZOeTqOIAKhmhkwaOE3joxQ/VqHDy212YdW4hI0BWUzbEdMy0Idz2G3y9ERVD84hZehf5GGRdiSrY9EEQgHlcI6Qb8/AnDdpy1DlKUMwTYjVNzkDL3AzeWn61JS1XQaOzZBsJy2NwKBgFa+pJQXrOtYytcGn8M2Hlebh6vbS8cPAVkNOqWqiWXw0iMfcg9Q3XZz7C+hpAD7m5b6YnToGDSJTma+opck5qk88agRFJ7XV+Es+/VKcg9edzNzh9bwwFmbksbM5shW3kSWt3X7Vo73dkqzwXaeY0CpSuIf7zRxWkrkdVCvipjRAoGAMcJlPN+6VQNwsDJromKryXy31gT5wzBkCvN44sOm46KhsOWXK2CD+NJGtdgZaXgWvphEq7/qP3PCR9ekvDTH2lyZLwJN8Mcn4zPwXcKVjDi6vbTK3HEMuHUKvQiQadT2ZGRvDl3LRqoVuhqYEvT9UWJWz9hRzblB8ErPyukPDRkCgYB7bMv2iflpaGE1J3gkTlVJB+2QSfnAXaUDMLWsZN4gYjwEBVCEJ+mhWL1/GeEIBjSs5/qZIeRsYzlxGEcnsJzRfog6ITBF14AeZ+xNkHq83ja87OGVKMypiccGwRehijDhJi6tgMJ0u0w6PiqcJvh0SX4jBhDDPjuWzK2XD+lx8A== | |||||
| appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002140616334.crt | |||||
| alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt | |||||
| alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt | |||||
| callback: https://callback.malls.iformall.com/api/alipay/notify/callback | |||||
| video: | |||||
| aliyun: | |||||
| accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
| accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
| regionId: cn-beijing | |||||
| endPoint: https://oss-cn-beijing.aliyuncs.com | |||||
| corePoolSize: 6 | |||||
| maxPoolSize: 20 | |||||
| queueCapacity: 1000 | |||||
| namePrefix: aliyun-video-upload | |||||
| fm: | |||||
| exception: true | |||||
| exception_emails: houtaikaifa@iformall.com | |||||
| deploy: 3 | |||||
| open: true | |||||
| upload_dir: /root/uploads/ | |||||
| ocr_data: /root/ocr_data/ | |||||
| videoType: aliyun | |||||
| logging: | |||||
| level: | |||||
| com.iformall: debug | |||||
| path: ./logs/c | |||||
| 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://metavatar.cc/C | |||||
| @@ -0,0 +1,14 @@ | |||||
| package com.iformall.config; | |||||
| import org.springframework.context.annotation.Bean; | |||||
| import org.springframework.context.annotation.Configuration; | |||||
| import org.springframework.web.client.RestTemplate; | |||||
| @Configuration | |||||
| public class RestTemplateConfig { | |||||
| @Bean | |||||
| public RestTemplate restTemplate() { | |||||
| return new RestTemplate(); | |||||
| } | |||||
| } | |||||
| @@ -10,6 +10,7 @@ import com.iformall.common.IdWorker; | |||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.sm.*; | import com.iformall.domain.po.sm.*; | ||||
| import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
| import com.iformall.enums.sm.EnumThirdPartyType; | |||||
| import com.iformall.mapper.UserMouldVideoMapper; | import com.iformall.mapper.UserMouldVideoMapper; | ||||
| import com.iformall.service.WxCUserBasicInfoService; | import com.iformall.service.WxCUserBasicInfoService; | ||||
| import com.iformall.service.project.ProjectFactory; | import com.iformall.service.project.ProjectFactory; | ||||
| @@ -18,6 +19,8 @@ import com.iformall.service.sm.*; | |||||
| import com.iformall.sm.AiVideoHelper; | import com.iformall.sm.AiVideoHelper; | ||||
| import com.iformall.sm.AiVideoParam; | import com.iformall.sm.AiVideoParam; | ||||
| import com.iformall.sm.AiVideoResult; | import com.iformall.sm.AiVideoResult; | ||||
| import com.iformall.smsdk.SmGenerateVideoDTO; | |||||
| import com.iformall.smsdk.SmSdkUtils; | |||||
| import com.iformall.utils.Base64Util; | import com.iformall.utils.Base64Util; | ||||
| import com.iformall.utils.Constant; | import com.iformall.utils.Constant; | ||||
| import com.iformall.utils.RedisLock; | import com.iformall.utils.RedisLock; | ||||
| @@ -401,7 +404,8 @@ public class UserMouldVideoServiceImpl implements UserMouldVideoService { | |||||
| } | } | ||||
| videoParam.setVideo_files(videoFiles); | videoParam.setVideo_files(videoFiles); | ||||
| AiVideoResult video = AiVideoHelper.createVideo(videoParam); | |||||
| // AiVideoResult video = AiVideoHelper.createVideo(videoParam,mouldVideo.getId()); | |||||
| AiVideoResult video = SmSdkUtils.generateVideo(videoParam); | |||||
| if(video.isSuccess()){ | if(video.isSuccess()){ | ||||
| videoUpd.setVideoPath(video.getUrl()); | videoUpd.setVideoPath(video.getUrl()); | ||||
| // videoUpd.setVideoTime(video.getDuration()+""); | // videoUpd.setVideoTime(video.getDuration()+""); | ||||
| @@ -14,6 +14,8 @@ import com.iformall.file.aliyun.bean.AliyunOSSConfig; | |||||
| import com.iformall.mapper.VoiceMapper; | import com.iformall.mapper.VoiceMapper; | ||||
| import com.iformall.service.sm.VoiceInfoService; | import com.iformall.service.sm.VoiceInfoService; | ||||
| import com.iformall.sm.*; | import com.iformall.sm.*; | ||||
| import com.iformall.smsdk.SmPreviewVideoDTO; | |||||
| import com.iformall.smsdk.SmSdkUtils; | |||||
| import com.iformall.utils.Constant; | import com.iformall.utils.Constant; | ||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| @@ -87,7 +89,8 @@ public class VoiceInfoServiceImpl implements VoiceInfoService { | |||||
| param.setVoice_id(voiceInfo.getMouldSmId()); | param.setVoice_id(voiceInfo.getMouldSmId()); | ||||
| param.setVoice_style(StringUtils.isBlank(aiPreviewParam.getVoice_style()) ? EnumSpeakType.default_0.getMessage() : aiPreviewParam.getVoice_style()); | param.setVoice_style(StringUtils.isBlank(aiPreviewParam.getVoice_style()) ? EnumSpeakType.default_0.getMessage() : aiPreviewParam.getVoice_style()); | ||||
| param.setGender(voiceInfo.getSex() == 1 ? "male" : "female"); | param.setGender(voiceInfo.getSex() == 1 ? "male" : "female"); | ||||
| AiPreviewResult result = AiVideoHelper.voicePreview(param); | |||||
| // AiPreviewResult result = AiVideoHelper.voicePreview(param); | |||||
| AiPreviewResult result = SmSdkUtils.preview(SmPreviewVideoDTO.mapping(param)); | |||||
| if (result.isSuccess()){ | if (result.isSuccess()){ | ||||
| PreviewVoiceVO vo = new PreviewVoiceVO(); | PreviewVoiceVO vo = new PreviewVoiceVO(); | ||||
| vo.setTime(result.getTime()); | vo.setTime(result.getTime()); | ||||
| @@ -0,0 +1,23 @@ | |||||
| package com.iformall.smsdk; | |||||
| import com.iformall.domain.po.sm.UserMouldVideo; | |||||
| import com.iformall.sm.AiVideoParam; | |||||
| import io.swagger.annotations.ApiModel; | |||||
| import io.swagger.annotations.ApiModelProperty; | |||||
| import lombok.Data; | |||||
| @ApiModel(value = "生成视频请求参数") | |||||
| @Data | |||||
| public class SmGenerateVideoDTO { | |||||
| @ApiModelProperty(value = "类型") | |||||
| private Integer type; | |||||
| @ApiModelProperty(value = "生成视频参数") | |||||
| private AiVideoParam aiVideoParam; | |||||
| public static SmGenerateVideoDTO build(AiVideoParam aiVideoParam, Integer type) { | |||||
| SmGenerateVideoDTO dto = new SmGenerateVideoDTO(); | |||||
| dto.setType(type); | |||||
| dto.setAiVideoParam(aiVideoParam); | |||||
| return dto; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,25 @@ | |||||
| package com.iformall.smsdk; | |||||
| import com.iformall.sm.AiPreviewParam; | |||||
| import io.swagger.annotations.ApiModel; | |||||
| import io.swagger.annotations.ApiModelProperty; | |||||
| import lombok.Data; | |||||
| @ApiModel(value = "预览视频请求参数") | |||||
| @Data | |||||
| public class SmPreviewVideoDTO { | |||||
| @ApiModelProperty("文案") | |||||
| private String paperwork; | |||||
| @ApiModelProperty("声音id") | |||||
| private String voiceId; | |||||
| @ApiModelProperty("声音风格名称") | |||||
| private String voiceStyle; | |||||
| public static SmPreviewVideoDTO mapping(AiPreviewParam aiPreviewParam) { | |||||
| SmPreviewVideoDTO dto = new SmPreviewVideoDTO(); | |||||
| dto.setPaperwork(aiPreviewParam.getGen_txt()); | |||||
| dto.setVoiceId(aiPreviewParam.getVoice_id()); | |||||
| dto.setVoiceStyle(aiPreviewParam.getVoice_style()); | |||||
| return dto; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,32 @@ | |||||
| package com.iformall.smsdk; | |||||
| /** | |||||
| * 遂芒sdk常量 | |||||
| * | |||||
| * @author xmzhao71 | |||||
| * @date 2023-10-19 | |||||
| */ | |||||
| public interface SmSdkConstant { | |||||
| /** | |||||
| * 请求头参数 | |||||
| */ | |||||
| String APP_KEY = "appKey"; | |||||
| String SIGN = "sign"; | |||||
| /** | |||||
| * 请求参数,必填 | |||||
| */ | |||||
| String TIMESTAMP = "timeStamp"; | |||||
| /** | |||||
| * 预览视频 | |||||
| */ | |||||
| String PREVIEW_VIDEO = "/api/video/previewVideo"; | |||||
| /** | |||||
| * 生成视频 | |||||
| */ | |||||
| String GENERATE_VIDEO = "/api/video/generateVideo"; | |||||
| } | |||||
| @@ -0,0 +1,21 @@ | |||||
| package com.iformall.smsdk; | |||||
| import lombok.Data; | |||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
| import org.springframework.stereotype.Component; | |||||
| /** | |||||
| * 遂芒sdk调用凭证 | |||||
| * | |||||
| * @author xmzhao71 | |||||
| * @date 2023-10-20 | |||||
| */ | |||||
| @Data | |||||
| @Component | |||||
| @ConfigurationProperties(prefix = "sdk.sm") | |||||
| public class SmSdkProperties { | |||||
| /** | |||||
| * 域名 | |||||
| */ | |||||
| private String baseUrl; | |||||
| } | |||||
| @@ -0,0 +1,58 @@ | |||||
| package com.iformall.smsdk; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.alibaba.fastjson.JSONObject; | |||||
| import com.iformall.sm.AiPreviewResult; | |||||
| import com.iformall.sm.AiVideoParam; | |||||
| import com.iformall.sm.AiVideoResult; | |||||
| import com.iformall.utils.JsonUtil; | |||||
| import lombok.extern.slf4j.Slf4j; | |||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.http.HttpEntity; | |||||
| import org.springframework.http.HttpMethod; | |||||
| import org.springframework.http.ResponseEntity; | |||||
| import org.springframework.stereotype.Component; | |||||
| import org.springframework.web.client.RestTemplate; | |||||
| import javax.annotation.PostConstruct; | |||||
| import javax.annotation.Resource; | |||||
| import java.util.Map; | |||||
| @Slf4j | |||||
| @Component | |||||
| public class SmSdkUtils { | |||||
| private static SmSdkUtils smSdkUtils; | |||||
| @Resource(name = "restTemplate") | |||||
| private RestTemplate restTemplate; | |||||
| @Autowired | |||||
| private SmSdkProperties smSdkProperties; | |||||
| @PostConstruct | |||||
| public void init() { | |||||
| smSdkUtils = this; | |||||
| } | |||||
| public static AiPreviewResult preview(SmPreviewVideoDTO dto) { | |||||
| String url = smSdkUtils.smSdkProperties.getBaseUrl() + SmSdkConstant.PREVIEW_VIDEO; | |||||
| log.info("(遂芒api)【预览视频】接口的请求参数:{}", JSON.toJSON(dto)); | |||||
| ResponseEntity<String> response = smSdkUtils.restTemplate.exchange(url, HttpMethod.POST, SmUtils.getHttpEntity(JSON.parseObject(JSON.toJSONString(dto), Map.class)), String.class); | |||||
| log.info("(遂芒api)【预览视频】接口的响应数据:{}", JSON.toJSON(response.getBody())); | |||||
| JSONObject resultObject = JSON.parseObject(response.getBody()); | |||||
| String data = resultObject.getString("data"); | |||||
| return StringUtils.isNotBlank(data) ? JSON.parseObject(data, AiPreviewResult.class) : new AiPreviewResult(); | |||||
| } | |||||
| public static AiVideoResult generateVideo(AiVideoParam aiVideoParam) { | |||||
| String url = smSdkUtils.smSdkProperties.getBaseUrl() + SmSdkConstant.GENERATE_VIDEO; | |||||
| // log.info("(遂芒api)【生成视频】接口的请求参数:{}", JSON.toJSONString(dto)); | |||||
| log.info("(遂芒api)【生成视频】接口的请求参数:{}", JSON.toJSON(aiVideoParam.getTask_id())); | |||||
| ResponseEntity<String> response = smSdkUtils.restTemplate.exchange(url, HttpMethod.POST, SmUtils.getHttpEntity(JSON.parseObject(JSON.toJSONString(aiVideoParam), Map.class)), String.class); | |||||
| log.info("(遂芒api)【生成视频】接口的响应数据:{}", JSON.toJSON(response.getBody())); | |||||
| JSONObject resultObject = JSON.parseObject(response.getBody()); | |||||
| String data = resultObject.getString("data"); | |||||
| return StringUtils.isNotBlank(data) ? JSON.parseObject(data, AiVideoResult.class) : new AiVideoResult(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,49 @@ | |||||
| package com.iformall.smsdk; | |||||
| import com.alibaba.fastjson.JSON; | |||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||||
| import com.iformall.common.CommonConstants; | |||||
| import com.iformall.domain.po.WxThirdPartyApi; | |||||
| import com.iformall.mapper.WxThirdPartyApiMapper; | |||||
| import com.iformall.utils.sign.SignUtils; | |||||
| import org.apache.http.protocol.HTTP; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.http.HttpEntity; | |||||
| import org.springframework.http.HttpHeaders; | |||||
| import org.springframework.stereotype.Component; | |||||
| import javax.annotation.PostConstruct; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| @Component | |||||
| public class SmUtils { | |||||
| public static SmUtils smUtils; | |||||
| @Autowired | |||||
| private SmSdkProperties smSdkProperties; | |||||
| @Autowired | |||||
| private WxThirdPartyApiMapper wxThirdPartyApiMapper; | |||||
| @PostConstruct | |||||
| public void init() { | |||||
| smUtils = this; | |||||
| } | |||||
| public static HttpEntity<Map<String, Object>> getHttpEntity(Map<String, Object> paramMap) { | |||||
| paramMap.put(SmSdkConstant.TIMESTAMP, System.currentTimeMillis()); | |||||
| WxThirdPartyApi apiConfig = getApiConfig(); | |||||
| HttpHeaders httpHeaders = new HttpHeaders(); | |||||
| httpHeaders.set(SmSdkConstant.APP_KEY, apiConfig.getAppId() + "&" + apiConfig.getAppKey()); | |||||
| String sign = SignUtils.getSign(apiConfig.getSignKey(), paramMap, "MD5"); | |||||
| httpHeaders.set(SmSdkConstant.SIGN, sign); | |||||
| return new HttpEntity<>(paramMap, httpHeaders); | |||||
| } | |||||
| public static WxThirdPartyApi getApiConfig() { | |||||
| List<WxThirdPartyApi> wxThirdPartyApis = smUtils.wxThirdPartyApiMapper.selectList(new LambdaQueryWrapper<WxThirdPartyApi>() | |||||
| .eq(WxThirdPartyApi::getStatus, CommonConstants.STATUS_NORMAL)); | |||||
| return wxThirdPartyApis.get(0); | |||||
| } | |||||
| } | |||||