@@ -12,10 +12,10 @@ | |||||
<modules> | <modules> | ||||
<module>yqzj-mybatis</module> | <module>yqzj-mybatis</module> | ||||
<module>yqzjVideo</module> | |||||
<module>yqzjService</module> | <module>yqzjService</module> | ||||
<module>yqzjAdmin</module> | <module>yqzjAdmin</module> | ||||
<module>yqzjCApi</module> | <module>yqzjCApi</module> | ||||
<module>yqzjSchedule</module> | |||||
<module>yqzj-swagger</module> | <module>yqzj-swagger</module> | ||||
</modules> | </modules> | ||||
@@ -23,6 +23,11 @@ | |||||
<artifactId>yqzjService</artifactId> | <artifactId>yqzjService</artifactId> | ||||
<version>1.0</version> | <version>1.0</version> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>com.iformall</groupId> | |||||
<artifactId>yqzjVideo</artifactId> | |||||
<version>1.0</version> | |||||
</dependency> | |||||
<dependency> | <dependency> | ||||
<groupId>commons-fileupload</groupId> | <groupId>commons-fileupload</groupId> | ||||
<artifactId>commons-fileupload</artifactId> | <artifactId>commons-fileupload</artifactId> | ||||
@@ -0,0 +1,165 @@ | |||||
package com.iformall.controller.basic; | |||||
import com.alibaba.fastjson.JSONArray; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.github.pagehelper.PageInfo; | |||||
import com.iformall.annotation.SystemControllerLog; | |||||
import com.iformall.annotation.UserDataRuleAnnotation; | |||||
import com.iformall.common.ErrorCode; | |||||
import com.iformall.common.Result; | |||||
import com.iformall.common.ResultData; | |||||
import com.iformall.controller.base.BaseController; | |||||
import com.iformall.domain.po.MallUserInfo; | |||||
import com.iformall.domain.po.WxBillProperty; | |||||
import com.iformall.domain.po.WxMallBuilding; | |||||
import com.iformall.domain.po.WxMallFloor; | |||||
import com.iformall.domain.po.WxMerchant; | |||||
import com.iformall.domain.po.WxPropertyContract; | |||||
import com.iformall.domain.po.WxRentContract; | |||||
import com.iformall.domain.po.WxShop; | |||||
import com.iformall.domain.po.base.TenantEntity; | |||||
import com.iformall.domain.po.base.BaseEntity.SortField; | |||||
import com.iformall.enums.EnumContractOperationType; | |||||
import com.iformall.enums.EnumContractType; | |||||
import com.iformall.enums.EnumFlowContractType; | |||||
import com.iformall.enums.EnumFlowKey; | |||||
import com.iformall.enums.EnumIsPreview; | |||||
import com.iformall.enums.EnumRentContractAppStatus; | |||||
import com.iformall.enums.EnumRentContractStatus; | |||||
import com.iformall.enums.EnumRentShopType; | |||||
import com.iformall.enums.EnumRentStartType; | |||||
import com.iformall.exception.MallinkException; | |||||
import com.iformall.mapper.WxPropertyContractMapper; | |||||
import com.iformall.service.WxBillPropertyService; | |||||
import com.iformall.service.WxMallBuildingService; | |||||
import com.iformall.service.WxMallFloorService; | |||||
import com.iformall.service.WxPropertyContractService; | |||||
import com.iformall.service.WxRentPropertyContractService; | |||||
import com.iformall.service.WxShopService; | |||||
import com.iformall.video.VideoFactory; | |||||
import com.iformall.video.entity.VideUploadResult; | |||||
import io.swagger.annotations.ApiImplicitParam; | |||||
import io.swagger.annotations.ApiImplicitParams; | |||||
import io.swagger.annotations.ApiOperation; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.web.bind.annotation.*; | |||||
import org.springframework.web.multipart.MultipartFile; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import javax.servlet.http.HttpServletResponse; | |||||
import java.util.ArrayList; | |||||
import java.util.Date; | |||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* @author gongbiao | |||||
*/ | |||||
@RestController | |||||
@RequestMapping("video") | |||||
public class VideoController extends BaseController { | |||||
private Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
@Autowired | |||||
VideoFactory videoFactory; | |||||
@Autowired | |||||
String videoType; | |||||
/** | |||||
* 上传视频 | |||||
* | |||||
* @param multiReq | |||||
* @return | |||||
* @throws Exception | |||||
*/ | |||||
@PostMapping(value = "/upload", consumes = "multipart/*", headers = "content-type=multipart/form-data") | |||||
@ApiOperation("上传视频") | |||||
public ResultData upload(@RequestParam("file") MultipartFile multiReq,@RequestParam Map<String, String> param) { | |||||
try { | |||||
long size = multiReq.getSize(); | |||||
String title = param.get("title"); | |||||
int dot = multiReq.getOriginalFilename().lastIndexOf('.'); | |||||
String fileFormat = ""; | |||||
if (dot >= 0) { | |||||
fileFormat = multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length()); | |||||
if(StringUtils.isBlank(title)){ | |||||
title = multiReq.getOriginalFilename().substring(0,dot); | |||||
} | |||||
} | |||||
if(!fileFormat.endsWith("mp4") && !fileFormat.endsWith("mp3")){ | |||||
return new ResultData(ErrorCode.PICTURE_ENDWIDTH_ERROR); | |||||
} | |||||
VideUploadResult result = videoFactory.getExcutor(videoType).uploadVideoStream(title, multiReq.getInputStream(),fileFormat); | |||||
result.setSize(size); | |||||
return new ResultData(result); | |||||
} catch (Exception e) { | |||||
logger.error(e.getMessage()); | |||||
return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
} | |||||
} | |||||
/** | |||||
* 上传视频 | |||||
* | |||||
* @param | |||||
* @return | |||||
* @throws Exception | |||||
*/ | |||||
@GetMapping(value = "/uploadProgress") | |||||
@ApiOperation("上传视频进度") | |||||
@ApiImplicitParams({ | |||||
@ApiImplicitParam(name = "videoId", value = "视频编号", dataType = "String", paramType = "query", required = true)}) | |||||
public ResultData uploadProgress(String videoId) { | |||||
try { | |||||
String result = videoFactory.getExcutor(videoType).getVedioUploadProgress(videoId); | |||||
return new ResultData(result); | |||||
} catch (Exception e) { | |||||
logger.error(e.getMessage()); | |||||
return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
} | |||||
} | |||||
/** | |||||
* 上传视频 | |||||
* | |||||
* @param | |||||
* @return | |||||
* @throws Exception | |||||
*/ | |||||
@GetMapping(value = "/videoContentLength") | |||||
@ApiOperation("上传视频进度") | |||||
@ApiImplicitParams({ | |||||
@ApiImplicitParam(name = "videoId", value = "视频编号", dataType = "String", paramType = "query", required = true)}) | |||||
public ResultData videoContentLength(String videoId) { | |||||
try { | |||||
String result = videoFactory.getExcutor(videoType).getVedioContentLength(videoId); | |||||
return new ResultData(result); | |||||
} catch (Exception e) { | |||||
logger.error(e.getMessage()); | |||||
return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
} | |||||
} | |||||
@GetMapping(value = "/videoDetial") | |||||
@ApiOperation("视频详情") | |||||
@ApiImplicitParams({ | |||||
@ApiImplicitParam(name = "videoId", value = "视频编号", dataType = "String", paramType = "query", required = true)}) | |||||
public ResultData videoDetial(String videoId) { | |||||
try { | |||||
VideUploadResult videoDetail = videoFactory.getExcutor(videoType).getVideoDetailWithCache(videoId,true); | |||||
return new ResultData(videoDetail); | |||||
} catch (Exception e) { | |||||
logger.error(e.getMessage()); | |||||
return new ResultData(ErrorCode.PICTURE_ANALYZING_ERROR); | |||||
} | |||||
} | |||||
} |
@@ -18,7 +18,6 @@ import com.iformall.annotation.SystemControllerLog; | |||||
import com.iformall.service.*; | import com.iformall.service.*; | ||||
import com.iformall.shiro.UserSession; | import com.iformall.shiro.UserSession; | ||||
import com.iformall.shiro.UseriFormallToken; | import com.iformall.shiro.UseriFormallToken; | ||||
import com.iformall.sm.AiVideoHelper; | |||||
import com.iformall.utils.Constant; | import com.iformall.utils.Constant; | ||||
import com.iformall.utils.RedisCacheUtils; | import com.iformall.utils.RedisCacheUtils; | ||||
import com.iformall.utils.ShiroUtils; | import com.iformall.utils.ShiroUtils; | ||||
@@ -131,9 +130,4 @@ public class HomeController extends MallUserInfoBaseController { | |||||
return new ResultData(version); | return new ResultData(version); | ||||
} | } | ||||
@ApiOperation("是否本地化部署") | |||||
@GetMapping("/localDeploy") | |||||
public ResultData localDeploy() { | |||||
return new ResultData(AiVideoHelper.localDeploy); | |||||
} | |||||
} | } |
@@ -4,9 +4,9 @@ spring: | |||||
include: rabbitMQ | include: rabbitMQ | ||||
# JDBC | # JDBC | ||||
datasource: | datasource: | ||||
url: jdbc:mysql://182.92.151.30:3306/mallink_suimang_test?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true&allowMultiQueries=true | |||||
username: root | |||||
password: sm2023@ms | |||||
url: jdbc:mysql://rm-2zelxn28n1kr4093q.mysql.rds.aliyuncs.com/home?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true&allowMultiQueries=true | |||||
username: yqzjroot | |||||
password: yqzj@2023ABC | |||||
type: com.alibaba.druid.pool.DruidDataSource | type: com.alibaba.druid.pool.DruidDataSource | ||||
driver-class-name: com.mysql.cj.jdbc.Driver | driver-class-name: com.mysql.cj.jdbc.Driver | ||||
filters: stat | filters: stat | ||||
@@ -27,9 +27,9 @@ spring: | |||||
#date-format: yyyy-MM-dd HH:mm:ss | #date-format: yyyy-MM-dd HH:mm:ss | ||||
# REDIS | # REDIS | ||||
redis: | redis: | ||||
host: 101.200.130.134 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: iF0rm@2l2ol9 | |||||
password: sm2023@rd | |||||
timeout: 3600 | timeout: 3600 | ||||
expire: 1800 #30分钟 | expire: 1800 #30分钟 | ||||
database: 5 | database: 5 | ||||
@@ -44,26 +44,26 @@ spring: | |||||
aliyun: | aliyun: | ||||
sms: | sms: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
product: Dysmsapi | |||||
domain: dysmsapi.aliyuncs.com | |||||
accessKeyId: ss | |||||
accessKeySecret: ss | |||||
product: ss | |||||
domain: ss.aliyuncs.com | |||||
regionId: cn-hangzhou | regionId: cn-hangzhou | ||||
dateFormat: yyyyMMdd | dateFormat: yyyyMMdd | ||||
endpointName: cn-hangzhou | endpointName: cn-hangzhou | ||||
oss: | oss: | ||||
endpoint: oss-cn-beijing.aliyuncs.com | endpoint: oss-cn-beijing.aliyuncs.com | ||||
keyid: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
keysecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
bucketname: suimang | |||||
filehost: admin | |||||
filedomain: https://suimang.oss-accelerate.aliyuncs.com | |||||
keyid: ss | |||||
keysecret: ss | |||||
bucketname: ss | |||||
filehost: ss | |||||
filedomain: https://ss.ss-ss.aliyuncs.com | |||||
mail: | mail: | ||||
host: smtp.exmail.qq.com | host: smtp.exmail.qq.com | ||||
username: zhengfangyuan@iformall.com | |||||
password: 2hSeppFRaw7KZZyf # 授权密码 | |||||
username: ss@iformall.com | |||||
password: ss # 授权密码 | |||||
properties: | properties: | ||||
mail: | mail: | ||||
smtp: | smtp: | ||||
@@ -88,16 +88,16 @@ spring: | |||||
rabbitmq: | rabbitmq: | ||||
host: 127.0.0.1 | host: 127.0.0.1 | ||||
port: 5672 | port: 5672 | ||||
username: fumao | |||||
password: f9l98 | |||||
username: ss | |||||
password: ss | |||||
publisher-confirms: true | publisher-confirms: true | ||||
publisher-returns: false | publisher-returns: false | ||||
virtual-host: / | virtual-host: / | ||||
aliyunRocketmq: | aliyunRocketmq: | ||||
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V" | |||||
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry" | |||||
groupId: "GID_P_1" | |||||
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | |||||
accessKeyId: "ss" | |||||
accessKeySecret: "ss" | |||||
groupId: "ss" | |||||
namesrvAddr: "http://MQ_Isssiyuncs.com:8080" | |||||
flyway: | flyway: | ||||
enabled: false | enabled: false | ||||
@@ -107,45 +107,20 @@ aws: | |||||
access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) | access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) | ||||
secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) | secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) | ||||
#wechat: | |||||
# web: | |||||
# appId: "wxe31beafbfd8295ba" | |||||
# secret: "c689fabf3c4c9f5b6424ff2a36a26727" | |||||
# url: "https://mall.youlane.cn" | |||||
# open: | |||||
# componentAppId: "wx897e4673286c915d" | |||||
# componentSecret: "cdfdfda65c45689beb6766c4c427eed2" | |||||
# componentToken: "formall2018" | |||||
# componentAesKey: "htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN" | |||||
# redis: | |||||
# host: 202.165.179.86 | |||||
# port: 6379 | |||||
# password: iF0rm@2l2ol9 | |||||
# 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: | wechat: | ||||
web: | web: | ||||
appId: "wx091907dd0bfd3f6b" | |||||
secret: "2a2ca10738998b9ef92c1fe8a4d366a6" | |||||
url: "https://admintest.malls.iformall.com" | |||||
appId: "ss" | |||||
secret: "ss" | |||||
url: "https://ss.ss.ss.com" | |||||
open: | open: | ||||
componentAppId: wxdfc8fb4e62d6b52b | |||||
componentSecret: 98daa62b316dd6feabaad708327ce233 | |||||
componentToken: formall2018 | |||||
componentAesKey: htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN | |||||
componentAppId: ss | |||||
componentSecret: ss | |||||
componentToken: ss | |||||
componentAesKey: ss | |||||
redis: | redis: | ||||
host: 101.200.130.134 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: iF0rm@2l2ol9 | |||||
password: sm2023@rd | |||||
timeout: 3600 | timeout: 3600 | ||||
expire: 1800 #30分钟 | expire: 1800 #30分钟 | ||||
database: 2 | database: 2 | ||||
@@ -159,17 +134,17 @@ wechat: | |||||
alipay: | alipay: | ||||
open: | 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 | |||||
appId: ss | |||||
appPrivateKey: ss/To/s/ZuL8gIpnsVidVtmi52yd7hzao/ss+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/ss.crt | |||||
alipayCertPath: /opt/isss.crt | |||||
alipayRootCertPath: /optsss.crt | |||||
callback: https://ssssllback | |||||
video: | video: | ||||
aliyun: | aliyun: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
accessKeyId: ss | |||||
accessKeySecret: ss | |||||
regionId: cn-beijing | regionId: cn-beijing | ||||
endPoint: https://oss-cn-beijing.aliyuncs.com | endPoint: https://oss-cn-beijing.aliyuncs.com | ||||
corePoolSize: 6 | corePoolSize: 6 | ||||
@@ -183,8 +158,8 @@ jasypt: | |||||
password: oRqdnDbK5pj3eMmB | password: oRqdnDbK5pj3eMmB | ||||
fm: | fm: | ||||
exception: true | |||||
exception_emails: xuxiaohu@iformall.com | |||||
exception: false | |||||
exception_emails: ss@iformall.com | |||||
deploy: 1 | deploy: 1 | ||||
open: true | open: true | ||||
upload_dir: /home/test/server/uploads/ | upload_dir: /home/test/server/uploads/ | ||||
@@ -202,31 +177,19 @@ logging: | |||||
com.iformall: debug | com.iformall: debug | ||||
path: ./logs/admin | path: ./logs/admin | ||||
suimang: | |||||
oral_broadcasting: http://nas.pucao.cn:50014 | |||||
video_path: http://nas.pucao.cn:50014 | |||||
callbackUrl: https://mtest.metavatar.cc/C | |||||
video_tts: http://111.198.0.15:22299 | |||||
huibo_tts_wav: http://111.198.0.15:22222 | |||||
photo_speak: http://nas.pucao.cn:50015 | |||||
photo_speak_hy: http://nas.pucao.cn:50013 | |||||
digital_avatar: http://nas.pucao.cn:2005 | |||||
digital_avatar_hy: http://nas.pucao.cn:2003 | |||||
local_deploy: true | |||||
token: fm2023 | |||||
sdk: | sdk: | ||||
sm: | sm: | ||||
base-url: https://mtest.metavatar.cc/public | |||||
base-url: https://xxx/publicx | |||||
swagger: | swagger: | ||||
base-package: com.iformall.controller | base-package: com.iformall.controller | ||||
title: 遂芒_metavatar_接口文档 | title: 遂芒_metavatar_接口文档 | ||||
description: 前后端联调 | description: 前后端联调 | ||||
version: 1.0 | version: 1.0 | ||||
license: Apache | license: Apache | ||||
license-url: https://mtest.metavatar.cc/ | |||||
terms-of-service-url: https://mtest.metavatar.cc/ | |||||
license-url: https://ss.ss.cc/ | |||||
terms-of-service-url: https://ss.ss.cc/ | |||||
host: localhost:8888 | host: localhost:8888 | ||||
contact: | contact: | ||||
name: 张三 | name: 张三 | ||||
url: https://mtest.metavatar.cc/ | |||||
url: https://sss.sss.cc/ | |||||
email: zhangsan@163.com | email: zhangsan@163.com |
@@ -3,9 +3,9 @@ spring: | |||||
include: aliyunRocketMQ | include: aliyunRocketMQ | ||||
# JDBC | # JDBC | ||||
datasource: | datasource: | ||||
url: jdbc:mysql://182.92.151.30:3306/mallink_suimang?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowMultiQueries=true | |||||
username: root | |||||
password: sm2023@ms | |||||
url: jdbc:mysql://rm-2zelxn28n1kr4093q.mysql.rds.aliyuncs.com/matavatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowMultiQueries=true | |||||
username: yqzjroot | |||||
password: yqzj@2023ABC | |||||
type: com.alibaba.druid.pool.DruidDataSource | type: com.alibaba.druid.pool.DruidDataSource | ||||
driver-class-name: com.mysql.cj.jdbc.Driver | driver-class-name: com.mysql.cj.jdbc.Driver | ||||
filters: stat | filters: stat | ||||
@@ -24,7 +24,7 @@ spring: | |||||
connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=60000" | connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=60000" | ||||
# REDIS | # REDIS | ||||
redis: | redis: | ||||
host: 182.92.151.30 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: sm2023@rd | password: sm2023@rd | ||||
timeout: 3600 | timeout: 3600 | ||||
@@ -41,20 +41,20 @@ spring: | |||||
# SMS | # SMS | ||||
aliyun: | aliyun: | ||||
sms: | sms: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
product: Dysmsapi | |||||
domain: dysmsapi.aliyuncs.com | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
product: dysmsapi.aliyuncs.com | |||||
domain: ss.aliyuncs.com | |||||
regionId: cn-hangzhou | regionId: cn-hangzhou | ||||
dateFormat: yyyyMMdd | dateFormat: yyyyMMdd | ||||
endpointName: cn-hangzhou | endpointName: cn-hangzhou | ||||
oss: | oss: | ||||
endpoint: oss-cn-beijing.aliyuncs.com | endpoint: oss-cn-beijing.aliyuncs.com | ||||
keyid: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
keysecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
bucketname: suimang | |||||
filehost: admin | |||||
filedomain: https://suimang.oss-accelerate.aliyuncs.com | |||||
keyid: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
keysecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
bucketname: yuanqizhijia | |||||
filehost: homea | |||||
filedomain: https://yuanqizhijia.oss-accelerate.aliyuncs.com | |||||
mail: | mail: | ||||
host: smtp.exmail.qq.com | host: smtp.exmail.qq.com | ||||
@@ -80,8 +80,8 @@ spring: | |||||
virtual-host: / | virtual-host: / | ||||
# | # | ||||
aliyunRocketmq: | aliyunRocketmq: | ||||
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V" | |||||
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry" | |||||
accessKeyId: "xx" | |||||
accessKeySecret: "xx" | |||||
groupId: "GID_P_1" | groupId: "GID_P_1" | ||||
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | ||||
flyway: | flyway: | ||||
@@ -95,16 +95,16 @@ aws: | |||||
wechat: | wechat: | ||||
web: | web: | ||||
appId: "wx9cc4ca09eb20fe03" | |||||
secret: "af1d7f7a1268022a73cb4ce0b9cf0985" | |||||
url: "https://admin.malls.iformall.com" | |||||
appId: "sss" | |||||
secret: "sss" | |||||
url: "https://sssll.com" | |||||
open: | open: | ||||
componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) | componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) | ||||
componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) | componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) | ||||
componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | ||||
componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | ||||
redis: | redis: | ||||
host: 182.92.151.30 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: sm2023@rd | password: sm2023@rd | ||||
timeout: 3600 | timeout: 3600 | ||||
@@ -120,8 +120,8 @@ wechat: | |||||
alipay: | alipay: | ||||
open: | 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== | |||||
appId: ss | |||||
appPrivateKey: ss+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 | appPublicKeyCertPath: /opt/iformall/service/alipay/appCertPublicKey_2021002140616334.crt | ||||
alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt | alipayCertPath: /opt/iformall/service/alipay/alipayCertPublicKey_RSA2.crt | ||||
alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt | alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt | ||||
@@ -129,8 +129,8 @@ alipay: | |||||
video: | video: | ||||
aliyun: | aliyun: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
regionId: cn-beijing | regionId: cn-beijing | ||||
endPoint: https://oss-cn-beijing.aliyuncs.com | endPoint: https://oss-cn-beijing.aliyuncs.com | ||||
corePoolSize: 6 | corePoolSize: 6 | ||||
@@ -139,8 +139,8 @@ video: | |||||
namePrefix: aliyun-video-upload | namePrefix: aliyun-video-upload | ||||
fm: | fm: | ||||
exception: true | |||||
exception_emails: houtaikaifa@iformall.com | |||||
exception: false | |||||
exception_emails: xx@iformall.com | |||||
deploy: 3 | deploy: 3 | ||||
open: true | open: true | ||||
upload_dir: /root/uploads/ | upload_dir: /root/uploads/ | ||||
@@ -158,18 +158,6 @@ logging: | |||||
com.iformall.mapper: debug | com.iformall.mapper: debug | ||||
path: ./logs/admin | path: ./logs/admin | ||||
suimang: | |||||
oral_broadcasting: http://111.198.0.15:22266 | |||||
video_path: http://111.198.0.15:22266 | |||||
callbackUrl: https://neuver.metavatar.cc/C | |||||
video_tts: http://111.198.0.15:22299 | |||||
huibo_tts_wav: 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://*****:2003 | |||||
local_deploy: false | |||||
token: fm2023 | |||||
sdk: | sdk: | ||||
sm: | sm: | ||||
base-url: https://openapi8.metavatar.cc/public | |||||
base-url: https://xxxxx/publicx |
@@ -1,175 +0,0 @@ | |||||
spring: | |||||
profiles: | |||||
include: aliyunRocketMQ | |||||
# JDBC | |||||
datasource: | |||||
url: jdbc:mysql://rm-2zelxn28n1kr4093q.mysql.rds.aliyuncs.com/matavatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true&allowMultiQueries=true | |||||
username: yqzjroot | |||||
password: yqzj@2023ABC | |||||
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 | |||||
connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=60000" | |||||
# REDIS | |||||
redis: | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | |||||
password: sm2023@rd | |||||
timeout: 3600 | |||||
expire: 1800 #30分钟 | |||||
database: 1 | |||||
defaultExpiration: 2592000 # 默认生命周期30天 | |||||
jedis: | |||||
pool: | |||||
max-active: 100 | |||||
max-idle: 20 | |||||
max-wait: -1 | |||||
min-idle: 0 | |||||
# SMS | |||||
aliyun: | |||||
sms: | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
product: Dysmsapi | |||||
domain: dysmsapi.aliyuncs.com | |||||
regionId: cn-hangzhou | |||||
dateFormat: yyyyMMdd | |||||
endpointName: cn-hangzhou | |||||
oss: | |||||
endpoint: oss-cn-beijing.aliyuncs.com | |||||
keyid: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
keysecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
bucketname: yuanqizhijia | |||||
filehost: admin | |||||
filedomain: https://yuanqizhijia.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: "xxx" | |||||
accessKeySecret: "xxxx" | |||||
groupId: "GID_P_1" | |||||
namesrvAddr: "http://xxxx2is.cn-beijing.mq-internal.aliyuncs.com:8080" | |||||
flyway: | |||||
enabled: false | |||||
aws: | |||||
clientRegion: cn-northwest-1 | |||||
bucketName: iformall-net | |||||
access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) | |||||
secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) | |||||
wechat: | |||||
web: | |||||
appId: "xxxx" | |||||
secret: "xxxx" | |||||
url: "https://xxxx" | |||||
open: | |||||
componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) | |||||
componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) | |||||
componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | |||||
componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | |||||
redis: | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
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: 2021011111616334 | |||||
appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBxxxxRRVlypCcgiSkqpSlnmgyCEM7nu8IerV8Yf7dMBitBklTpJB+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/service/alipay/appCertPublicKey_2021002140616334.crt | |||||
alipayCertPath: /opt/service/alipay/alipayCertPublicKey_RSA2.crt | |||||
alipayRootCertPath: /opt/service/alipay/alipayRootCert.crt | |||||
callback: https://xx.com/api/alipay/notify/callback | |||||
video: | |||||
aliyun: | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
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 | |||||
ueditor: | |||||
config: config.json | |||||
unified: true | |||||
upload-path: ./upload/ | |||||
url-prefix: "" | |||||
logging: | |||||
level: | |||||
com.iformall.mapper: debug | |||||
path: ./logs/admin | |||||
suimang: | |||||
oral_broadcasting: x.x.x.x | |||||
video_path: http://111.198.0.15:22266 | |||||
callbackUrl: https://neuver.meta-autotv.com/C/callback/oral/broadcasting | |||||
video_tts: x.x.x.x | |||||
huibo_tts_wav: x.x.x.x | |||||
photo_speak: x.x.x.x | |||||
photo_speak_hy: x.x.x.x | |||||
digital_avatar: x.x.x.x | |||||
digital_avatar_hy: x.x.x.x | |||||
local_deploy: true | |||||
token: x | |||||
sdk: | |||||
sm: | |||||
base-url: https://openapi8.metavatar.cc/public |
@@ -17,7 +17,11 @@ | |||||
<artifactId>yqzjService</artifactId> | <artifactId>yqzjService</artifactId> | ||||
<version>1.0</version> | <version>1.0</version> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>com.iformall</groupId> | |||||
<artifactId>yqzjVideo</artifactId> | |||||
<version>1.0</version> | |||||
</dependency> | |||||
<dependency> | <dependency> | ||||
<groupId>com.github.axet</groupId> | <groupId>com.github.axet</groupId> | ||||
<artifactId>kaptcha</artifactId> | <artifactId>kaptcha</artifactId> | ||||
@@ -4,8 +4,8 @@ spring: | |||||
include: rabbitMQ | include: rabbitMQ | ||||
# JDBC | # JDBC | ||||
datasource: | 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 | |||||
url: jdbc:mysql://rm-2zelxn28n1kr4093q.mysql.rds.aliyuncs.com/matavatar?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useUnicode=true&useSSL=false&useAffectedRows=true | |||||
username: yqzjroot | |||||
password: sm2023@ms | password: sm2023@ms | ||||
type: com.alibaba.druid.pool.DruidDataSource | type: com.alibaba.druid.pool.DruidDataSource | ||||
driver-class-name: com.mysql.cj.jdbc.Driver | driver-class-name: com.mysql.cj.jdbc.Driver | ||||
@@ -27,9 +27,9 @@ spring: | |||||
# REDIS | # REDIS | ||||
redis: | redis: | ||||
host: 101.200.130.134 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: iF0rm@2l2ol9 | |||||
password: sm2023@rd | |||||
timeout: 3600 | timeout: 3600 | ||||
expire: 1800 #30分钟 | expire: 1800 #30分钟 | ||||
database: 5 | database: 5 | ||||
@@ -43,8 +43,8 @@ spring: | |||||
# SMS | # SMS | ||||
aliyun: | aliyun: | ||||
sms: | sms: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
product: Dysmsapi | product: Dysmsapi | ||||
domain: dysmsapi.aliyuncs.com | domain: dysmsapi.aliyuncs.com | ||||
regionId: cn-hangzhou | regionId: cn-hangzhou | ||||
@@ -53,11 +53,11 @@ spring: | |||||
oss: | oss: | ||||
endpoint: oss-cn-beijing.aliyuncs.com | endpoint: oss-cn-beijing.aliyuncs.com | ||||
keyid: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
keysecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
bucketname: suimang | |||||
filehost: capi | |||||
filedomain: https://suimang.oss-accelerate.aliyuncs.com | |||||
keyid: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
keysecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
bucketname: yuanqizhijia | |||||
filehost: homec | |||||
filedomain: https://yuanqizhijia.oss-accelerate.aliyuncs.com | |||||
mail: | mail: | ||||
@@ -93,8 +93,8 @@ spring: | |||||
publisher-returns: false | publisher-returns: false | ||||
virtual-host: / | virtual-host: / | ||||
aliyunRocketmq: | aliyunRocketmq: | ||||
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V" | |||||
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry" | |||||
accessKeyId: "ss" | |||||
accessKeySecret: "ss" | |||||
groupId: "GID_P_1" | groupId: "GID_P_1" | ||||
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | ||||
@@ -104,37 +104,16 @@ aws: | |||||
access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) | access: ENC(3gx5ghDFBqGrEhO3Wf8aYmXsnwHO7Cj3HNKJGOeUj0o=) | ||||
secret: ENC(HVKIJwCJKVXLlUpGlQPwNqJOlnpxn4xYuy91SH0seTSm2uAttIQHvA49fXWWax90v5wloIk0QuU=) | 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: | wechat: | ||||
web: | web: | ||||
appId: "wx091907dd0bfd3f6b" | |||||
secret: "2a2ca10738998b9ef92c1fe8a4d366a6" | |||||
url: "https://admintest.malls.iformall.com" | |||||
appId: "ss" | |||||
secret: "ss" | |||||
url: "https://ss.ss.ss.com" | |||||
open: | open: | ||||
componentAppId: wxdfc8fb4e62d6b52b | |||||
componentSecret: 98daa62b316dd6feabaad708327ce233 | |||||
componentToken: formall2018 | |||||
componentAesKey: htKq8EjBMPNndfZQK9JiFojFaqFwFpw42VfeWFtx7HN | |||||
componentAppId: ss | |||||
componentSecret: ss | |||||
componentToken: ss | |||||
componentAesKey: ss | |||||
redis: | redis: | ||||
host: 101.200.130.134 | host: 101.200.130.134 | ||||
port: 6379 | port: 6379 | ||||
@@ -152,17 +131,17 @@ wechat: | |||||
alipay: | alipay: | ||||
open: | 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 | |||||
appId: ss | |||||
appPrivateKey: ss/To/ss/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: /opss.crt | |||||
alipayCertPath: /opt/ss.crt | |||||
alipayRootCertPath: /opt/ss.crt | |||||
callback: https://ssssllback | |||||
video: | video: | ||||
aliyun: | aliyun: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
regionId: cn-beijing | regionId: cn-beijing | ||||
endPoint: https://oss-cn-beijing.aliyuncs.com | endPoint: https://oss-cn-beijing.aliyuncs.com | ||||
corePoolSize: 6 | corePoolSize: 6 | ||||
@@ -175,8 +154,8 @@ jasypt: | |||||
password: oRqdnDbK5pj3eMmB | password: oRqdnDbK5pj3eMmB | ||||
fm: | fm: | ||||
exception: true | |||||
exception_emails: xuxiaohu@iformall.com | |||||
exception: false | |||||
exception_emails: xx@iformall.com | |||||
deploy: 1 | deploy: 1 | ||||
open: false | open: false | ||||
upload_dir: /home/test/server/uploads/ | upload_dir: /home/test/server/uploads/ | ||||
@@ -188,21 +167,9 @@ logging: | |||||
com.iformall: debug | com.iformall: debug | ||||
path: ./logs/c | path: ./logs/c | ||||
suimang: | |||||
oral_broadcasting: http://nas.pucao.cn:50014 | |||||
video_path: http://nas.pucao.cn:50014 | |||||
callbackUrl: https://mtest.metavatar.cc/C | |||||
video_tts: http://111.198.0.15:22299 | |||||
huibo_tts_wav: http://111.198.0.15:22222 | |||||
photo_speak: http://nas.pucao.cn:50015 | |||||
photo_speak_hy: http://nas.pucao.cn:50013 | |||||
digital_avatar: http://nas.pucao.cn:2005 | |||||
digital_avatar_hy: http://nas.pucao.cn:2003 | |||||
local_deploy: true | |||||
token: fm2023 | |||||
sdk: | sdk: | ||||
sm: | sm: | ||||
base-url: https://mtest.metavatar.cc/public | |||||
base-url: https://xxxx/publicx | |||||
swagger: | swagger: | ||||
base-package: com.iformall.controller | base-package: com.iformall.controller | ||||
title: 遂芒_metavatar_接口文档 | title: 遂芒_metavatar_接口文档 | ||||
@@ -3,9 +3,9 @@ spring: | |||||
include: aliyunRocketMQ | include: aliyunRocketMQ | ||||
# JDBC | # JDBC | ||||
datasource: | 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 | |||||
url: jdbc:mysql://rm-2zelxn28n1kr4093q.mysql.rds.aliyuncs.com/matavatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true | |||||
username: yqzjroot | |||||
password: yqzj@2023ABC | |||||
type: com.alibaba.druid.pool.DruidDataSource | type: com.alibaba.druid.pool.DruidDataSource | ||||
driver-class-name: com.mysql.cj.jdbc.Driver | driver-class-name: com.mysql.cj.jdbc.Driver | ||||
filters: stat | filters: stat | ||||
@@ -23,7 +23,7 @@ spring: | |||||
maxOpenPreparedStatements: 20 | maxOpenPreparedStatements: 20 | ||||
# REDIS | # REDIS | ||||
redis: | redis: | ||||
host: 182.92.151.30 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: sm2023@rd | password: sm2023@rd | ||||
timeout: 3600 | timeout: 3600 | ||||
@@ -39,8 +39,8 @@ spring: | |||||
# SMS | # SMS | ||||
aliyun: | aliyun: | ||||
sms: | sms: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
product: Dysmsapi | product: Dysmsapi | ||||
domain: dysmsapi.aliyuncs.com | domain: dysmsapi.aliyuncs.com | ||||
regionId: cn-hangzhou | regionId: cn-hangzhou | ||||
@@ -48,11 +48,11 @@ spring: | |||||
endpointName: cn-hangzhou | endpointName: cn-hangzhou | ||||
oss: | oss: | ||||
endpoint: oss-cn-beijing.aliyuncs.com | endpoint: oss-cn-beijing.aliyuncs.com | ||||
keyid: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
keysecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
bucketname: suimang | |||||
filehost: capi | |||||
filedomain: https://suimang.oss-accelerate.aliyuncs.com | |||||
keyid: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
keysecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
bucketname: yuanqizhijia | |||||
filehost: homec | |||||
filedomain: https://yuanqizhijia.oss-accelerate.aliyuncs.com | |||||
mail: | mail: | ||||
@@ -78,8 +78,8 @@ spring: | |||||
publisher-returns: false | publisher-returns: false | ||||
virtual-host: / | virtual-host: / | ||||
aliyunRocketmq: | aliyunRocketmq: | ||||
accessKeyId: "LTAI4G7ixY4AhvM35F8o3W3V" | |||||
accessKeySecret: "VfWqGb83qIQrS9us45utskl8itd7ry" | |||||
accessKeyId: "ss" | |||||
accessKeySecret: "ss" | |||||
groupId: "GID_P_1" | groupId: "GID_P_1" | ||||
namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | namesrvAddr: "http://MQ_INST_1796289517488555_Bcqaq2is.cn-beijing.mq-internal.aliyuncs.com:8080" | ||||
aws: | aws: | ||||
@@ -95,7 +95,7 @@ wechat: | |||||
componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | ||||
componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | ||||
redis: | redis: | ||||
host: 182.92.151.30 | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
port: 6379 | port: 6379 | ||||
password: sm2023@rd | password: sm2023@rd | ||||
timeout: 3600 | timeout: 3600 | ||||
@@ -111,17 +111,17 @@ wechat: | |||||
alipay: | alipay: | ||||
open: | 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 | |||||
appId: ss | |||||
appPrivateKey: ss+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: /oss.crt | |||||
alipayCertPath: /opt/ss.crt | |||||
alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt | alipayRootCertPath: /opt/iformall/service/alipay/alipayRootCert.crt | ||||
callback: https://callback.malls.iformall.com/api/alipay/notify/callback | callback: https://callback.malls.iformall.com/api/alipay/notify/callback | ||||
video: | video: | ||||
aliyun: | aliyun: | ||||
accessKeyId: LTAI5tQs4MBjzLFbiQLjsMYy | |||||
accessKeySecret: nYmnexFJxrsBu0AGVIOSbUaSaweJu7 | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
regionId: cn-beijing | regionId: cn-beijing | ||||
endPoint: https://oss-cn-beijing.aliyuncs.com | endPoint: https://oss-cn-beijing.aliyuncs.com | ||||
corePoolSize: 6 | corePoolSize: 6 | ||||
@@ -130,8 +130,8 @@ video: | |||||
namePrefix: aliyun-video-upload | namePrefix: aliyun-video-upload | ||||
fm: | fm: | ||||
exception: true | |||||
exception_emails: houtaikaifa@iformall.com | |||||
exception: false | |||||
exception_emails: xx@iformall.com | |||||
deploy: 3 | deploy: 3 | ||||
open: true | open: true | ||||
upload_dir: /root/uploads/ | upload_dir: /root/uploads/ | ||||
@@ -143,18 +143,6 @@ logging: | |||||
com.iformall: debug | com.iformall: debug | ||||
path: ./logs/c | path: ./logs/c | ||||
suimang: | |||||
oral_broadcasting: http://111.198.0.15:22266 | |||||
video_path: http://111.198.0.15:22266 | |||||
callbackUrl: https://neuver.metavatar.cc/C | |||||
video_tts: http://111.198.0.15:22299 | |||||
huibo_tts_wav: 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://****:2003 | |||||
local_deploy: false | |||||
token: fm2023 | |||||
sdk: | sdk: | ||||
sm: | sm: | ||||
base-url: https://openapi8.metavatar.cc/public | |||||
base-url: https://xxxx/publicx |
@@ -1,168 +0,0 @@ | |||||
spring: | |||||
profiles: | |||||
include: aliyunRocketMQ | |||||
# JDBC | |||||
datasource: | |||||
url: jdbc:mysql://rm-2zelxn28n1kr4093q.mysql.rds.aliyuncs.com/matavatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false&useAffectedRows=true | |||||
username: yqzjroot | |||||
password: yqzj@2023ABC | |||||
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: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
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: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
product: Dysmsapi | |||||
domain: dysmsapi.aliyuncs.com | |||||
regionId: cn-hangzhou | |||||
dateFormat: yyyyMMdd | |||||
endpointName: cn-hangzhou | |||||
oss: | |||||
endpoint: oss-cn-beijing.aliyuncs.com | |||||
keyid: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
keysecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
bucketname: yuanqizhijia | |||||
filehost: capi | |||||
filedomain: https://yuanqizhijia.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: "xxx" | |||||
accessKeySecret: "xxxx" | |||||
groupId: "GID_P_1" | |||||
namesrvAddr: "http://xxxx2is.cn-beijing.mq-internal.aliyuncs.com:8080" | |||||
flyway: | |||||
enabled: false | |||||
aws: | |||||
clientRegion: cn-northwest-1 | |||||
bucketName: iformall-net | |||||
access: ENC(a6SN1sZ1enNL49ypiOXkg/pPPAnZD8H4buQFTTKN08s=) | |||||
secret: ENC(5P5ff4bTMJUbXVR4ZsM03UHzOKZ4+Zg5Iutcdkyp/Quny/oXg+A4KpfwEyGarlLu3vQMJahGP5M=) | |||||
wechat: | |||||
web: | |||||
appId: "xxxx" | |||||
secret: "xxxx" | |||||
url: "https://xxxx" | |||||
open: | |||||
componentAppId: ENC(b3JG0MUZgQfz5Zj+DC2ZM1zDeLOiGTmmeokfe2O8kaM=) | |||||
componentSecret: ENC(QVyc4BPGdnSjXGs2ivgpDBE1v8wPWHLLRMYI7Vv8uYwC0SiZHQz0QpyyQV/b48Pb) | |||||
componentToken: ENC(rkxj0733WxFFDLgA9x01m2s5Fi2L+0PC) | |||||
componentAesKey: ENC(EIbJUBpbYOrLb4YQ/HXLQmxlxgAqIp2ZmpnGICC8pu5xiTz3Cqfkbwd2S8raCcK/IvYcX2GmedI=) | |||||
redis: | |||||
host: r-2zeb1syt5wyw757yf4.redis.rds.aliyuncs.com | |||||
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: 2021011111616334 | |||||
appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBxxxxRRVlypCcgiSkqpSlnmgyCEM7nu8IerV8Yf7dMBitBklTpJB+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/service/alipay/appCertPublicKey_2021002140616334.crt | |||||
alipayCertPath: /opt/service/alipay/alipayCertPublicKey_RSA2.crt | |||||
alipayRootCertPath: /opt/service/alipay/alipayRootCert.crt | |||||
callback: https://xx.com/api/alipay/notify/callback | |||||
video: | |||||
aliyun: | |||||
accessKeyId: LTAI5tNkUMtFoWH4L7vh7Tzp | |||||
accessKeySecret: 1oXCcfK8paG454VxO6VdsqyRQpgboW | |||||
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: x.x.x.x | |||||
video_path: http://111.198.0.15:22266 | |||||
callbackUrl: https://neuver.meta-autotv.com/C/callback/oral/broadcasting | |||||
video_tts: x.x.x.x | |||||
huibo_tts_wav: x.x.x.x | |||||
photo_speak: x.x.x.x | |||||
photo_speak_hy: x.x.x.x | |||||
digital_avatar: x.x.x.x | |||||
digital_avatar_hy: x.x.x.x | |||||
local_deploy: true | |||||
token: x | |||||
sdk: | |||||
sm: | |||||
base-url: https://openapi8.metavatar.cc/public |
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
import com.iformall.enums.EnumUserAdmin; | import com.iformall.enums.EnumUserAdmin; | ||||
import com.iformall.enums.EnumUserWechat; | import com.iformall.enums.EnumUserWechat; | ||||
import com.iformall.sm.AiVideoHelper; | |||||
import com.iformall.utils.Constant; | import com.iformall.utils.Constant; | ||||
import lombok.Data; | import lombok.Data; | ||||
import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
@@ -1,157 +0,0 @@ | |||||
package com.iformall.domain.po.sm; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.iformall.domain.po.base.TenantEntity; | |||||
import com.iformall.enums.EnumPersonType; | |||||
import com.iformall.enums.EnumSpeakType; | |||||
import com.iformall.sm.AiVideoHelper; | |||||
import lombok.Data; | |||||
import lombok.EqualsAndHashCode; | |||||
import lombok.ToString; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import java.util.Date; | |||||
import java.util.List; | |||||
@TableName(value = "photo_speak_video") | |||||
@Data | |||||
@ToString(callSuper = true) | |||||
@EqualsAndHashCode(callSuper = true) | |||||
public class PhotoSpeakVideo extends TenantEntity { | |||||
protected Long id; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-创建起始时间",name="startDate") | |||||
private Date startDate; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-创建结束时间",name="endDate") | |||||
private Date endDate; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-生成视频起始时间",name="videoStartDate") | |||||
private Date videoStartDate; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-生成视频结束时间",name="videoEndDate") | |||||
private Date videoEndDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="用户Id",name="userId") | |||||
private Long userId; | |||||
@io.swagger.annotations.ApiModelProperty(value="照片ID",name="personPhotoId") | |||||
private Long personPhotoId; | |||||
@io.swagger.annotations.ApiModelProperty(value="照片",name="personPhotoUrl") | |||||
private String personPhotoUrl; | |||||
@TableField(exist = false) | |||||
private PersonPhoto personPhoto; | |||||
@io.swagger.annotations.ApiModelProperty(value="字幕开关",name="subtitleEnabled") | |||||
private Integer subtitleEnabled; | |||||
@io.swagger.annotations.ApiModelProperty(value="字幕参数",name="subtitleParams") | |||||
private String subtitleParams; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumVoiceFrom 声音来源",name="voiceFrom") | |||||
private Integer voiceFrom; | |||||
// @TableField(exist = false) | |||||
// private List<Long> voiceMouldIds; | |||||
@io.swagger.annotations.ApiModelProperty(value="声音模板ID",name="voiceMouldId") | |||||
private Long voiceMouldId; | |||||
@TableField(exist = false) | |||||
private String speakTypeStr; | |||||
/** | |||||
* { | |||||
* "title":, | |||||
* "languages":, | |||||
* "sex":, | |||||
* "mouldSmId":, | |||||
* "personId":, | |||||
* "personType":, | |||||
* "personTypeStr":, | |||||
* "speakId":, | |||||
* "speakType":, | |||||
* "speakTypeStr": | |||||
* } | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="声音模板",name="voiceMouldSm") | |||||
private String voiceMouldSm; | |||||
@TableField(exist = false) | |||||
private VoiceInfo voiceInfo; | |||||
public String getSpeakTypeStr(){ | |||||
if(StringUtils.isBlank(this.speakTypeStr) && StringUtils.isNotBlank(this.voiceMouldSm)){ | |||||
try{ | |||||
JSONObject personMouldObject = JSONObject.parseObject(this.voiceMouldSm); | |||||
Integer speakType = personMouldObject.getInteger("speakType"); | |||||
this.speakTypeStr = EnumSpeakType.getEnum(speakType).getMessage(); | |||||
}catch(Exception e){} | |||||
} | |||||
return speakTypeStr; | |||||
} | |||||
@io.swagger.annotations.ApiModelProperty(value="文案",name="paperwork") | |||||
private String paperwork; | |||||
@io.swagger.annotations.ApiModelProperty(value="用户上传的声音素材",name="voiceMaterialId") | |||||
private Long voiceMaterialId; | |||||
@io.swagger.annotations.ApiModelProperty(value="用户上传的声音素材",name="voiceMaterialUrl") | |||||
private String voiceMaterialUrl; | |||||
@TableField(exist = false) | |||||
private VoiceMaterial voiceMaterial; | |||||
@io.swagger.annotations.ApiModelProperty(value="名称",name="title") | |||||
private String title; | |||||
@io.swagger.annotations.ApiModelProperty(value="封面图",name="coverImg") | |||||
private String coverImg; | |||||
@io.swagger.annotations.ApiModelProperty(value="备注",name="remark") | |||||
private String remark; | |||||
@io.swagger.annotations.ApiModelProperty(value="视频文件",name="videoId") | |||||
private String videoId; | |||||
@io.swagger.annotations.ApiModelProperty(value="",name="videoPath") | |||||
private String videoPath; | |||||
@io.swagger.annotations.ApiModelProperty(value="播放地址",name="videoPlayUrl") | |||||
private String videoPlayUrl; | |||||
@io.swagger.annotations.ApiModelProperty(value="视频时长(秒)",name="videoTime") | |||||
private String videoTime; | |||||
@io.swagger.annotations.ApiModelProperty(value="视频大小(byte)",name="videoSize") | |||||
private Long videoSize; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumVideoStatus 视频状态",name="videoStatus") | |||||
private Integer videoStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="生成视频信息",name="videoMsg") | |||||
private String videoMsg; | |||||
@io.swagger.annotations.ApiModelProperty(value="生成视频时间",name="createVideoDate") | |||||
private Date createVideoDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||||
private Date createDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||||
private Date updateDate; | |||||
@TableField(exist = false) | |||||
private List<Integer> videoStatuss; | |||||
private String audioPath; | |||||
private Long musicId; | |||||
private String saveDir; | |||||
private Integer videoHyStatus; | |||||
private Integer isHy;//是否超分(1、是,0、否) | |||||
} |
@@ -1,216 +0,0 @@ | |||||
package com.iformall.domain.po.sm; | |||||
import cn.afterturn.easypoi.excel.annotation.Excel; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.iformall.common.SortColumn; | |||||
import com.iformall.domain.po.base.TenantEntity; | |||||
import com.iformall.enums.EnumSpeakType; | |||||
import com.iformall.enums.EnumVideoStatus; | |||||
import com.iformall.sm.AiVideoHelper; | |||||
import lombok.Data; | |||||
import lombok.EqualsAndHashCode; | |||||
import lombok.ToString; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import java.math.BigDecimal; | |||||
import java.util.Date; | |||||
import java.util.List; | |||||
@TableName(value = "user_mould_video") | |||||
@Data | |||||
@ToString(callSuper = true) | |||||
@EqualsAndHashCode(callSuper = true) | |||||
public class UserMouldVideo extends TenantEntity { | |||||
protected Long id; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-创建起始时间",name="startDate") | |||||
private Date startDate; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-创建结束时间",name="endDate") | |||||
private Date endDate; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-生成视频起始时间",name="videoStartDate") | |||||
private Date videoStartDate; | |||||
@TableField(exist = false) | |||||
@io.swagger.annotations.ApiModelProperty(value="查询-生成视频结束时间",name="videoEndDate") | |||||
private Date videoEndDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="用户Id",name="userId") | |||||
private Long userId; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumVideoType",name="videoType") | |||||
private Integer videoType; | |||||
@io.swagger.annotations.ApiModelProperty(value="人物模板ID",name="personMouldId") | |||||
private Long personMouldId; | |||||
/** | |||||
* { | |||||
* "id":, | |||||
* "videoType":, | |||||
* "title":, | |||||
* "mouldSmId":, | |||||
* "material": | |||||
* } | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="人物模板",name="personMouldSm") | |||||
private String personMouldSm; | |||||
/** | |||||
* { | |||||
* "id":, | |||||
* "type":, | |||||
* "material":, | |||||
* "x":, | |||||
* "y":, | |||||
* "z":, | |||||
* "w":, | |||||
* "h": | |||||
* } | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="人物模板",name="personJson") | |||||
private String personJson; | |||||
@TableField(exist = false) | |||||
private PersonMould personMould; | |||||
@io.swagger.annotations.ApiModelProperty(value="字幕开关",name="subtitleEnabled") | |||||
private Integer subtitleEnabled; | |||||
@io.swagger.annotations.ApiModelProperty(value="字幕参数",name="subtitleParams") | |||||
private String subtitleParams; | |||||
// @TableField(exist = false) | |||||
// private List<Long> voiceMouldIds; | |||||
@io.swagger.annotations.ApiModelProperty(value="声音模板ID",name="voiceMouldId") | |||||
private Long voiceMouldId; | |||||
/** | |||||
* { | |||||
* "title":, | |||||
* "languages":, | |||||
* "mouldSmId":, | |||||
* "personId":, | |||||
* "personType":, | |||||
* "personTypeStr":, | |||||
* "speakId":, | |||||
* "speakType":, | |||||
* "speakTypeStr": | |||||
* } | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="声音模板",name="voiceMouldSm") | |||||
private String voiceMouldSm; | |||||
@TableField(exist = false) | |||||
private String speakTypeStr; | |||||
// @TableField(exist = false) | |||||
// private VoiceMould voiceMould; | |||||
@TableField(exist = false) | |||||
private VoiceInfo voiceInfo; | |||||
public String getSpeakTypeStr(){ | |||||
if(StringUtils.isBlank(this.speakTypeStr) && StringUtils.isNotBlank(this.voiceMouldSm)){ | |||||
try{ | |||||
JSONObject personMouldObject = JSONObject.parseObject(this.voiceMouldSm); | |||||
Integer speakType = personMouldObject.getInteger("speakType"); | |||||
this.speakTypeStr = EnumSpeakType.getEnum(speakType).getMessage(); | |||||
}catch(Exception e){} | |||||
} | |||||
return speakTypeStr; | |||||
} | |||||
@io.swagger.annotations.ApiModelProperty(value="文案",name="paperwork") | |||||
private String paperwork; | |||||
/** | |||||
* 后期从表中获取 | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumLanguages",name="languages") | |||||
private Long languages; | |||||
@io.swagger.annotations.ApiModelProperty(value="背景模板ID",name="backgroundId") | |||||
private Long backgroundId; | |||||
/** | |||||
* { | |||||
* "id":, | |||||
* "title":, | |||||
* "material": | |||||
* } | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="背景模板",name="backgroundSm") | |||||
private String backgroundSm; | |||||
@TableField(exist = false) | |||||
private MaterialMould backgroundMould; | |||||
/** | |||||
* List<Long> | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="素材",name="materialIds") | |||||
private String materialIds; | |||||
/** | |||||
* [{ | |||||
* "id":, | |||||
* "type":, | |||||
* "material":, | |||||
* "x":, | |||||
* "y":, | |||||
* "z":, | |||||
* "w":, | |||||
* "h": | |||||
* },... | |||||
* ] | |||||
*/ | |||||
@io.swagger.annotations.ApiModelProperty(value="素材层级",name="materialAllJson") | |||||
private String materialAllJson; | |||||
@io.swagger.annotations.ApiModelProperty(value="名称",name="title") | |||||
private String title; | |||||
@io.swagger.annotations.ApiModelProperty(value="封面图",name="coverImg") | |||||
private String coverImg; | |||||
@io.swagger.annotations.ApiModelProperty(value="备注",name="remark") | |||||
private String remark; | |||||
@io.swagger.annotations.ApiModelProperty(value="视频文件",name="videoId") | |||||
private String videoId; | |||||
@io.swagger.annotations.ApiModelProperty(value="",name="videoPath") | |||||
private String videoPath; | |||||
@io.swagger.annotations.ApiModelProperty(value="播放地址",name="videoPlayUrl") | |||||
private String videoPlayUrl; | |||||
@io.swagger.annotations.ApiModelProperty(value="视频时长(秒)",name="videoTime") | |||||
private String videoTime; | |||||
@io.swagger.annotations.ApiModelProperty(value="视频大小(byte)",name="videoSize") | |||||
private Long videoSize; | |||||
@io.swagger.annotations.ApiModelProperty(value="EnumVideoStatus 视频状态",name="videoStatus") | |||||
private Integer videoStatus; | |||||
@io.swagger.annotations.ApiModelProperty(value="生成视频信息",name="videoMsg") | |||||
private String videoMsg; | |||||
@io.swagger.annotations.ApiModelProperty(value="生成视频时间",name="createVideoDate") | |||||
private Date createVideoDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") | |||||
private Date createDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | |||||
private Date updateDate; | |||||
@io.swagger.annotations.ApiModelProperty(value="消耗金币",name="costPoints") | |||||
private Integer costPoints; | |||||
@io.swagger.annotations.ApiModelProperty(value="消耗金币明细",name="costPointsDetail") | |||||
private String costPointsDetail; | |||||
@io.swagger.annotations.ApiModelProperty(value="isDel",name="isDel") | |||||
private Integer isDel; | |||||
@TableField(exist = false) | |||||
private List<Integer> videoStatuss; | |||||
@TableField(exist = false) | |||||
private String phone; | |||||
@TableField(exist = false) | |||||
private List<Long> cUserIds; | |||||
} |
@@ -1,29 +0,0 @@ | |||||
package com.iformall.mapper; | |||||
import com.iformall.common.CommonMapper; | |||||
import com.iformall.domain.po.sm.PhotoSpeakVideo; | |||||
import org.apache.ibatis.annotations.Param; | |||||
import java.util.List; | |||||
public interface PhotoSpeakVideoMapper extends CommonMapper<PhotoSpeakVideo, Long> { | |||||
List<PhotoSpeakVideo> findList(PhotoSpeakVideo record); | |||||
int deleteById(@Param("id")Long id); | |||||
/** | |||||
* c端列表查询,尽量减少字段 | |||||
* @param record | |||||
* @return | |||||
*/ | |||||
List<PhotoSpeakVideo> findCList(PhotoSpeakVideo record); | |||||
PhotoSpeakVideo findVideo(@Param("id")Long id); | |||||
List<PhotoSpeakVideo> getSortList(PhotoSpeakVideo record); | |||||
Integer checkVideoStatus(@Param("userId") Long userId, @Param("list") List<Long> list); | |||||
List<PhotoSpeakVideo> getNotHaveUrl(PhotoSpeakVideo umVideoQ); | |||||
} |
@@ -1,30 +0,0 @@ | |||||
package com.iformall.mapper; | |||||
import com.iformall.common.CommonMapper; | |||||
import com.iformall.domain.po.sm.UserMouldVideo; | |||||
import org.apache.ibatis.annotations.Param; | |||||
import java.util.List; | |||||
public interface UserMouldVideoMapper extends CommonMapper<UserMouldVideo, Long> { | |||||
List<UserMouldVideo> findList(UserMouldVideo record); | |||||
int deleteById(@Param("id")Long id); | |||||
/** | |||||
* c端列表查询,尽量减少字段 | |||||
* @param record | |||||
* @return | |||||
*/ | |||||
List<UserMouldVideo> findCList(UserMouldVideo record); | |||||
UserMouldVideo findVideo(@Param("id")Long id); | |||||
List<UserMouldVideo> getSortList(UserMouldVideo record); | |||||
List<UserMouldVideo> getNotHaveUrl(UserMouldVideo record); | |||||
Integer checkVideoStatus(@Param("userId") Long userId, @Param("list") List<Long> list); | |||||
} |
@@ -1,169 +0,0 @@ | |||||
package com.iformall.service.impl; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.google.common.collect.Lists; | |||||
import com.iformall.common.ErrorCode; | |||||
import com.iformall.common.ResultData; | |||||
import com.iformall.domain.po.WxCVideoTable; | |||||
import com.iformall.domain.po.WxCVoiceTable; | |||||
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.AiTtsHelper; | |||||
import com.iformall.sm.AiVideoHelper; | |||||
import com.iformall.utils.Constant; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import org.springframework.util.ObjectUtils; | |||||
import java.util.*; | |||||
@Service | |||||
public class WxCVoiceServiceImpl implements WxCVoiceService { | |||||
private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
@Autowired | |||||
WxCVoiceMapper wxCVoiceMapper; | |||||
@Autowired | |||||
VoiceMapper voiceMapper; | |||||
@Autowired | |||||
private AliyunOSSConfig aliyunOSSConfig; | |||||
private final String demoDirectory = "/builtin/tts_all_sample/"; | |||||
private final String demoSuffix = ".wav"; | |||||
@Override | |||||
public Map<String, Object> getById(Long userId) { | |||||
HashMap<String, Object> data = new HashMap<>(); | |||||
List<WxCVoiceTable> resultList = wxCVoiceMapper.getById(userId); | |||||
data.put("current_time", new Date(System.currentTimeMillis() / 1000)); | |||||
// List audioList = new ArrayList(); | |||||
Map<Long,Map<String, Object>> audioList = new HashMap(); | |||||
for (WxCVoiceTable wxCVoiceTable : resultList) { | |||||
Map<String, Object> audio = audioList.get(wxCVoiceTable.getLanguageId()); | |||||
if(audio == null){ | |||||
audio = new HashMap<>(); | |||||
audio.put("LocaleName", wxCVoiceTable.getLocalelName()); | |||||
audio.put("displayname", wxCVoiceTable.getLocalDisPlayName()); | |||||
audio.put("TrialText", wxCVoiceTable.getTrialText()); | |||||
audioList.put(wxCVoiceTable.getLanguageId(),audio); | |||||
} | |||||
List<Map<String, Object>> voiceList = (List<Map<String, Object>>) audio.get("voiceList"); | |||||
if(voiceList == null){ | |||||
voiceList = new ArrayList<>(); | |||||
} | |||||
HashMap<String, Object> voice = new HashMap<>(); | |||||
voiceList.add(voice); | |||||
audio.put("voiceList", voiceList); | |||||
voice.put("voiceid", wxCVoiceTable.getVoiceId()); | |||||
voice.put("expire_time", wxCVoiceTable.getExpireTime().getTime() / 1000); | |||||
voice.put("voicename", wxCVoiceTable.getVoiceName()); | |||||
voice.put("voicetype", EnumClassType.SHARE.getCode()); | |||||
voice.put("displayname", wxCVoiceTable.getVoiceDisplayName()); | |||||
voice.put("gender", wxCVoiceTable.getGender()); | |||||
List styleList = new ArrayList(); | |||||
if(StringUtils.isBlank(wxCVoiceTable.getStyleList())){ | |||||
HashMap<String, Object> style = new HashMap<>(); | |||||
style.put("stylename", "default"); | |||||
style.put("displayname", EnumSpeakType.getEnum("default").getMessage()); | |||||
style.put("styledemo", aliyunOSSConfig.getFiledomain() + demoDirectory + wxCVoiceTable.getMouldSmId() + "_" + "default" + demoSuffix); | |||||
styleList.add(style); | |||||
voice.put("styleList", styleList); | |||||
}else{ | |||||
HashMap<String, Object> style = new HashMap<>(); | |||||
style.put("stylename", "default"); | |||||
style.put("displayname", EnumSpeakType.getEnum("default").getMessage()); | |||||
style.put("styledemo", aliyunOSSConfig.getFiledomain() + demoDirectory + wxCVoiceTable.getMouldSmId() + "_" + "default" + demoSuffix); | |||||
styleList.add(style); | |||||
List<String> strings = JSON.parseArray(wxCVoiceTable.getStyleList(), String.class); | |||||
for (String y : strings) { | |||||
style = new HashMap<>(); | |||||
style.put("stylename", y); | |||||
style.put("displayname", EnumSpeakType.getEnum(y).getMessage()); | |||||
style.put("styledemo", aliyunOSSConfig.getFiledomain() + demoDirectory + wxCVoiceTable.getMouldSmId() + "_" + y + demoSuffix); | |||||
styleList.add(style); | |||||
} | |||||
voice.put("styleList", styleList); | |||||
} | |||||
} | |||||
data.put("audioList", new ArrayList<>(audioList.values())); | |||||
return data; | |||||
} | |||||
@Override | |||||
public List<VoiceInfo> chooseType(Long id) { | |||||
List<VoiceInfo> voiceInfos = voiceMapper.selectList( | |||||
new LambdaQueryWrapper<VoiceInfo>().eq(VoiceInfo::getLanguageId, id).orderByAsc(VoiceInfo::getAgeType).orderByAsc(VoiceInfo::getDisplayName)); | |||||
voiceInfos.forEach(x -> { | |||||
if (StringUtils.isNotEmpty(x.getStyleList())) { | |||||
List<String> strings = JSON.parseArray(x.getStyleList(), String.class); | |||||
List<VoiceInfoVo> list = new ArrayList<>(); | |||||
strings.forEach(y -> { | |||||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||||
infoVo.setName(EnumSpeakType.getEnum(y).getMessage()); | |||||
infoVo.setEngName(y); | |||||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + y + demoSuffix); | |||||
list.add(infoVo); | |||||
}); | |||||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||||
infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + "default" + demoSuffix); | |||||
infoVo.setEngName("default"); | |||||
list.add(infoVo); | |||||
x.setStyle(list); | |||||
} else { | |||||
List<VoiceInfoVo> list = Lists.newArrayList(); | |||||
VoiceInfoVo infoVo = new VoiceInfoVo(); | |||||
infoVo.setName(EnumSpeakType.getEnum(0).getMessage()); | |||||
infoVo.setEngName("default"); | |||||
infoVo.setUrl(aliyunOSSConfig.getFiledomain() + demoDirectory + x.getMouldSmId() + "_" + "default" + demoSuffix); | |||||
list.add(infoVo); | |||||
x.setStyle(list); | |||||
} | |||||
}); | |||||
return voiceInfos; | |||||
} | |||||
@Override | |||||
public Map<String, Object> voicePreview(Long voiceId, String voiceStyle, String text, Integer speed) { | |||||
VoiceInfo voiceInfo = voiceMapper.selectById(voiceId); | |||||
if(voiceInfo == null){ | |||||
logger.error("未查询到声音{}"+voiceId); | |||||
return null; | |||||
} | |||||
AiPreviewParam param = new AiPreviewParam(); | |||||
param.setVoice_id(voiceInfo.getMouldSmId()); | |||||
param.setVoice_style(StringUtils.isBlank(voiceStyle) ? EnumSpeakType.default_0.getMessage() : voiceStyle); | |||||
param.setGen_txt(text.replaceAll(Constant.text_pause, "[*]")); | |||||
param.setSpeed(speed==null?100:speed); | |||||
AiPreviewResult aiTtsResult = AiTtsHelper.voicePreview(param); | |||||
if(!aiTtsResult.isSuccess()){ | |||||
logger.error("tts 预览失败{}"+aiTtsResult.getMsg()); | |||||
return null; | |||||
} | |||||
Map<String, Object> data = new HashMap<>(); | |||||
data.put("ttsurl", aiTtsResult.getUrl()); | |||||
return data; | |||||
} | |||||
} |
@@ -1,394 +0,0 @@ | |||||
package com.iformall.sm; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.JSONArray; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.iformall.common.ErrorCode; | |||||
import com.iformall.douyin.pay.orderQuery.OrderQueryResult; | |||||
import com.iformall.douyin.pay.orderQuery.QueryMerchantResult; | |||||
import com.iformall.douyin.pay.orderQuery.QueryRefundResult; | |||||
import com.iformall.douyin.pay.orderQuery.QuerySettleResult; | |||||
import com.iformall.douyin.pay.preOrder.*; | |||||
import com.iformall.enums.EnumMouldPatchType; | |||||
import com.iformall.enums.EnumPayStatus; | |||||
import com.iformall.enums.EnumVideoType; | |||||
import com.iformall.exception.MallinkException; | |||||
import com.iformall.utils.Base64Util; | |||||
import com.iformall.utils.HttpUtil; | |||||
import com.iformall.utils.sign.SignUtils; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.stereotype.Component; | |||||
import sun.net.www.content.audio.wav; | |||||
import java.nio.charset.StandardCharsets; | |||||
import java.security.MessageDigest; | |||||
import java.security.NoSuchAlgorithmException; | |||||
import java.util.*; | |||||
@Slf4j | |||||
@Component | |||||
public class AiVideoHelper { | |||||
public static String oral_broadcasting; | |||||
@Value("${suimang.oral_broadcasting}") | |||||
public void setOralBroadcasting(String oral_broadcasting){ | |||||
this.oral_broadcasting = oral_broadcasting; | |||||
} | |||||
public static String video_path; | |||||
@Value("${suimang.video_path}") | |||||
public void setVideoPath(String video_path){ | |||||
this.video_path = video_path; | |||||
} | |||||
public static String video_tts; | |||||
@Value("${suimang.video_tts}") | |||||
public void setVideoTts(String video_tts) { | |||||
this.video_tts = video_tts; | |||||
} | |||||
public static String photo_speak; | |||||
@Value("${suimang.photo_speak}") | |||||
public void setPhotoSpeak(String photo_speak){ | |||||
this.photo_speak = photo_speak; | |||||
} | |||||
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 boolean localDeploy;//是否是私有化部署 | |||||
@Value("${suimang.local_deploy}") | |||||
public void setLocalDeploy(boolean localDeploy) { | |||||
this.localDeploy = localDeploy; | |||||
} | |||||
public static String token;//跟遂芒唯一验证 | |||||
@Value("${suimang.token}") | |||||
public void setToken(String token) { | |||||
this.token = token; | |||||
} | |||||
public static String doPost(String url, String params) { | |||||
return HttpUtil.doAiVideoPost(url,params); | |||||
} | |||||
//慧影生成视频 | |||||
public static AiVideoResult createVideo(AiVideoParam videoParam) { | |||||
// videoParam.setTask_id(taskId); | |||||
if (StringUtils.isNotBlank(videoParam.getCallback_url())) { | |||||
videoParam.setCallback_url(videoParam.getCallback_url()); | |||||
} else { | |||||
videoParam.setCallback_url(callbackUrl + "/callback/oral/broadcasting"); | |||||
} | |||||
videoParam.setToken(token); | |||||
log.info("生成视频start request:" + videoParam.toSimpelJson()); | |||||
String response = doPost(oral_broadcasting+"/gen_dh_video", JSONObject.toJSONString(videoParam)); | |||||
log.info("生成视频end response:"+response); | |||||
AiVideoResult result = new AiVideoResult(); | |||||
if(StringUtils.isBlank(response)){ | |||||
result.setSuccess(false); | |||||
result.setMsg("请求生成视频异常,请稍后重试"); | |||||
return result; | |||||
} | |||||
JSONObject jsonObject = JSON.parseObject(response); | |||||
JSONObject status = jsonObject.getJSONObject("status"); | |||||
Integer code = status.getInteger("code"); | |||||
if(code == null){ | |||||
result.setSuccess(false); | |||||
result.setMsg("请求生成视频异常,请稍后重试"); | |||||
return result; | |||||
} | |||||
if(code.intValue() == 1000){ | |||||
JSONObject data = jsonObject.getJSONObject("data"); | |||||
JSONObject video = data.getJSONObject("video"); | |||||
result.setSuccess(true); | |||||
result.setMsg("success"); | |||||
result.setDuration(video.getFloatValue("duration")); | |||||
result.setUrl(video.getString("url")); | |||||
}else{ | |||||
result.setSuccess(false); | |||||
result.setMsg(status.getString("msg")); | |||||
} | |||||
return result; | |||||
// Integer code = jsonObject.getInteger("err_no"); | |||||
// if (null != code && code.intValue() == 0 ) { | |||||
// CreatePreOrderResult result = new CreatePreOrderResult(); | |||||
// result.setSuccess(true); | |||||
// result.setOutOrderNo(preOrder.getOutOrderNo()); | |||||
// JSONObject data = jsonObject.getJSONObject("data"); | |||||
// if (null != data ) { | |||||
// result.setOrderId(data.getString("order_id")); | |||||
// result.setToken(data.getString("order_token")); | |||||
// }else { | |||||
// log.error("createPreOrder reponse empity. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response); | |||||
// result.setSuccess(false); | |||||
// result.setMsg("createPreOrder reponse empity."+response); | |||||
// } | |||||
// return result; | |||||
// }else { | |||||
// log.error("createPreOrder reponse error. request: "+JSON.toJSONString(preOrder.toRequestMap())+" response:"+response); | |||||
// CreatePreOrderResult result = new CreatePreOrderResult(); | |||||
// result.setSuccess(false); | |||||
// result.setMsg("createPreOrder reponse error."+response); | |||||
// return result; | |||||
// } | |||||
} | |||||
//慧语(照片说话)图片质量检查 | |||||
public static AiCheckPhotoResult checkPhoto(AiCheckPhotoParam param) { | |||||
// String response = doPost("http://111.198.0.15:22299" + "/image_qualit", JSONObject.toJSONString(param)); | |||||
param.setToken(token); | |||||
String response = doPost(photo_speak + "/image_qualit", JSONObject.toJSONString(param)); | |||||
log.info("图片质量审核 end response:" + response); | |||||
AiCheckPhotoResult result = new AiCheckPhotoResult(); | |||||
if (StringUtils.isBlank(response)) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService)图片质量审核失败,请稍后重试"); | |||||
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)请求图片质量检查失败,请稍后重试"); | |||||
return result; | |||||
} | |||||
if (code.intValue() == 2000) { | |||||
result.setCode(code); | |||||
result.setSuccess(true); | |||||
String resultMsg = result.getMsgInfo(code, msg); | |||||
result.setMsg(resultMsg); | |||||
} else { | |||||
result.setCode(code); | |||||
result.setSuccess(false); | |||||
String resultMsg = result.getMsgInfo(code, msg); | |||||
result.setMsg(resultMsg); | |||||
} | |||||
return result; | |||||
} | |||||
//慧语(照片说话)+慧影 预览 | |||||
public static AiPreviewResult voicePreview(AiPreviewParam param) { | |||||
param.setToken(token); | |||||
log.info("TTS音色预览 start request:" + JSONObject.toJSONString(param)); | |||||
String response = doPost(video_tts + "/tts_wav", JSONObject.toJSONString(param)); | |||||
log.info("TTS音色预览 end response:" + response); | |||||
AiPreviewResult result = new AiPreviewResult(); | |||||
if (StringUtils.isBlank(response)) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService) no result"); | |||||
return result; | |||||
} | |||||
JSONObject jsonObject = JSON.parseObject(response); | |||||
JSONObject status = jsonObject.getJSONObject("status"); | |||||
JSONObject data = jsonObject.getJSONObject("data"); | |||||
String strURL = null; | |||||
String time = null; | |||||
if (data != null){ | |||||
strURL = data.getString("url"); | |||||
time = data.getString("time"); | |||||
} | |||||
Integer code = status.getInteger("code"); | |||||
String msg = status.getString("msg"); | |||||
if (code == null) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService) error,"+msg); | |||||
return result; | |||||
} | |||||
if (code.intValue() == 3000) { | |||||
result.setCode(200); | |||||
result.setSuccess(true); | |||||
result.setUrl(video_tts + strURL); | |||||
result.setTime(Double.valueOf(time)); | |||||
result.setMsg("(MetaService) error,"+msg); | |||||
} else { | |||||
result.setCode(code); | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService) error,"+msg); | |||||
} | |||||
return result; | |||||
} | |||||
//慧语(照片说话)生成 | |||||
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) not result"); | |||||
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) error."+msg); | |||||
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); | |||||
result.setMsg("(MetaService) error."+msg); | |||||
} else { | |||||
result.setSuccess(false); | |||||
result.setCode(code); | |||||
result.setMsg("(MetaService) error."+msg); | |||||
} | |||||
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); | |||||
AiVideoHqResult result = new AiVideoHqResult(); | |||||
if (StringUtils.isBlank(response)) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService)视频超分失败,请稍后重试"); | |||||
return result; | |||||
} | |||||
JSONObject jsonObject = JSON.parseObject(response); | |||||
JSONObject status = jsonObject.getJSONObject("status"); | |||||
JSONObject data = jsonObject.getJSONObject("data"); | |||||
String strURL = null; | |||||
if (data != null){ | |||||
strURL = data.getString("url"); | |||||
} | |||||
Integer code = status.getInteger("code"); | |||||
String msg = status.getString("msg"); | |||||
if (code == null) { | |||||
result.setSuccess(false); | |||||
result.setMsg("(MetaService)视频超分异常,请稍后重试"); | |||||
return result; | |||||
} | |||||
if (code.intValue() == 5000) { | |||||
result.setCode(200); | |||||
result.setSuccess(true); | |||||
result.setUrl(strURL); | |||||
String resultMsg = result.getMsgInfo(code, msg); | |||||
result.setMsg(resultMsg); | |||||
} else { | |||||
result.setCode(code); | |||||
result.setSuccess(false); | |||||
String resultMsg = result.getMsgInfo(code, msg); | |||||
result.setMsg(resultMsg); | |||||
} | |||||
return result; | |||||
} | |||||
public static void main(String[] args) { | |||||
// AiVideoParam videoParam = new AiVideoParam(); | |||||
// videoParam.setGen_txt("我写了一篇小说,你帮我看看。"); | |||||
// videoParam.setVideo_template_id("16776650495633934_PgNAW8Sm"); | |||||
// videoParam.setVoice_id("zh-CN-XiaohanNeural"); | |||||
// videoParam.setVoice_style("default"); | |||||
// AiVideoParam.VideoFiles videoFiles = new AiVideoParam.VideoFiles(); | |||||
// AiVideoParam.BackGround backGround = new AiVideoParam.BackGround(); | |||||
// backGround.setType("vertical"); | |||||
// backGround.setImage(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/background/grace/1080.jpg")); | |||||
// videoFiles.setBack_ground(backGround); | |||||
// AiVideoParam.Material digitalHuman = new AiVideoParam.Material(); | |||||
// int[] digitalHumanCoord = new int[]{0,0}; | |||||
// digitalHuman.setCoord(digitalHumanCoord); | |||||
// digitalHuman.setLevel(0); | |||||
// digitalHuman.setRatio(1.0f); | |||||
// videoFiles.setDigital_human(digitalHuman); | |||||
// videoParam.setVideo_files(videoFiles); | |||||
// | |||||
// AiVideoResult video = AiVideoHelper.createVideo(videoParam); | |||||
// | |||||
// AiPhotoSpeakParam param = new AiPhotoSpeakParam(); | |||||
// param.setGen_txt("道可道,非常道。名可名,非常名。无名天地之始;有名万物之母。故常无欲,以观其妙;常有欲,以观其徼。此两者,同出而异名,同谓之玄。玄之又玄,众妙之门"); | |||||
// param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personphoto/165640997370212321.png")); | |||||
// param.setGender("female"); | |||||
// param.setVoice_id("zh-CN-XiaoqiuNeural"); | |||||
// param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak"); | |||||
// param.setTask_id(837169827124269056L); | |||||
// param.setVoice_style("default"); | |||||
// param.setUrl("None"); | |||||
// AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); | |||||
// AiPhotoSpeakParam param = new AiPhotoSpeakParam(); | |||||
// param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak"); | |||||
// param.setTask_id(836805079248850944L); | |||||
// param.setGen_txt("None"); | |||||
// param.setImg(Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/capi/2023-06-07/6da595fe12ef405bb6434f31e6bad4ec.png")); | |||||
// param.setGender("None"); | |||||
// param.setVoice_id("default"); | |||||
// param.setVoice_style("default"); | |||||
// param.setUrl("https://video.metavatar.cc/sv/262b03bd-18929af12fd/262b03bd-18929af12fd.mp3"); | |||||
// AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); | |||||
AiCheckPhotoParam param = new AiCheckPhotoParam(); | |||||
String img = Base64Util.imageUrlToBase64("https://suimang.oss-accelerate.aliyuncs.com/builtin/personmould/16760216806604820_cSHoijDX_grace_1080.jpg"); | |||||
param.setImg(img); | |||||
AiCheckPhotoResult result = AiVideoHelper.checkPhoto(param); | |||||
System.out.println(result); | |||||
// | |||||
// AiPreviewParam param = new AiPreviewParam(); | |||||
// param.setGen_txt("今天是个好日子"); | |||||
// param.setVoice_id("ar-DZ-AminaNeural"); | |||||
// param.setVoice_style("default"); | |||||
// param.setGender("female"); | |||||
// AiPreviewResult result = AiVideoHelper.voicePreview(param); | |||||
// System.out.println(result); | |||||
// AiVideoHqParam param = new AiVideoHqParam(); | |||||
// param.setSave_dir("static/tts/2023-07-07/16886958135060428.wav.mp4"); | |||||
// param.setAudio_path("static/tts/2023-07-07/16886958135060428.wav"); | |||||
// param.setCallback_url("https://phototest.metavatar.cc/C/callback/photo/speak"); | |||||
// param.setTask_id(836541377936281600L); | |||||
// AiVideoHqResult result = AiVideoHelper.videoHq(param); | |||||
// System.out.println(result); | |||||
} | |||||
} |
@@ -1,23 +0,0 @@ | |||||
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,65 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" | |||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
<parent> | |||||
<artifactId>yqzj</artifactId> | |||||
<groupId>com.iformall</groupId> | |||||
<version>1.0</version> | |||||
</parent> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<artifactId>yqzjVideo</artifactId> | |||||
<repositories> | |||||
<repository> | |||||
<id>sonatype-nexus-staging</id> | |||||
<name>Sonatype Nexus Staging</name> | |||||
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> | |||||
<releases> | |||||
<enabled>true</enabled> | |||||
</releases> | |||||
<snapshots> | |||||
<enabled>true</enabled> | |||||
</snapshots> | |||||
</repository> | |||||
</repositories> | |||||
<dependencies> | |||||
<dependency> | |||||
<groupId>com.aliyun</groupId> | |||||
<artifactId>aliyun-java-sdk-core</artifactId> | |||||
<version>4.5.1</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.aliyun</groupId> | |||||
<artifactId>aliyun-java-sdk-vod</artifactId> | |||||
<version>2.15.11</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.alibaba</groupId> | |||||
<artifactId>fastjson</artifactId> | |||||
<version>1.2.62</version> | |||||
</dependency> | |||||
<!-- <dependency>--> | |||||
<!-- <groupId>com.optimaize.languagedetector</groupId>--> | |||||
<!-- <artifactId>language-detector</artifactId>--> | |||||
<!-- <version>0.6</version>--> | |||||
<!-- </dependency>--> | |||||
<!-- https://mvnrepository.com/artifact/com.cybozu.labs/langdetect --> | |||||
<dependency> | |||||
<groupId>com.cybozu.labs</groupId> | |||||
<artifactId>langdetect</artifactId> | |||||
<version>1.1-20120112</version> | |||||
</dependency> | |||||
<!-- https://mvnrepository.com/artifact/net.arnx/jsonic --> | |||||
<dependency> | |||||
<groupId>net.arnx</groupId> | |||||
<artifactId>jsonic</artifactId> | |||||
<version>1.3.10</version> | |||||
</dependency> | |||||
</dependencies> | |||||
</project> |
@@ -0,0 +1,52 @@ | |||||
package com.iformall.constant; | |||||
/** | |||||
* 地区语言列表(具体到地区语言) | |||||
* 主要用来做默认语言常量 | |||||
* | |||||
* @author xmzhao71 | |||||
* @date 2023-10-13 | |||||
*/ | |||||
public enum LanguageEnums { | |||||
en_US("en", "US", "en-US", "英语(美国)"), | |||||
zh_CN("zh", "CN", "zh-CN", "中文(普通话,简体)"), | |||||
; | |||||
LanguageEnums(String language, String country, String local, String desc) { | |||||
this.language = language; | |||||
this.country = country; | |||||
this.local = local; | |||||
this.desc = desc; | |||||
} | |||||
private String language; | |||||
private String country; | |||||
private String local; | |||||
private String desc; | |||||
public String getLanguage() { | |||||
return language; | |||||
} | |||||
public String getCountry() { | |||||
return country; | |||||
} | |||||
public String getLocal() { | |||||
return local; | |||||
} | |||||
public String getDesc() { | |||||
return desc; | |||||
} | |||||
public static LanguageEnums getEnum(String language) { | |||||
for (LanguageEnums value : values()) { | |||||
if (value.getLanguage().equals(language)) { | |||||
return value; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} |
@@ -0,0 +1,114 @@ | |||||
package com.iformall.language; | |||||
import com.cybozu.labs.langdetect.Detector; | |||||
import com.cybozu.labs.langdetect.DetectorFactory; | |||||
import com.cybozu.labs.langdetect.LangDetectException; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.apache.commons.io.IOUtils; | |||||
import org.springframework.core.io.Resource; | |||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
@Slf4j | |||||
public class LanguageDetect { | |||||
private static Detector initDetector() { | |||||
try { | |||||
List<String> profile = new ArrayList<>(); | |||||
try { | |||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); | |||||
Resource[] resources = resolver.getResources("classpath:profiles/*"); | |||||
for (Resource resource : resources) { | |||||
InputStream inputStream = resource.getInputStream(); | |||||
String str = new String(IOUtils.toByteArray(inputStream)); | |||||
profile.add(str); | |||||
} | |||||
} catch (IOException e) { | |||||
e.printStackTrace(); | |||||
} | |||||
if (!profile.isEmpty()) { | |||||
DetectorFactory.clear(); | |||||
DetectorFactory.loadProfile(profile); | |||||
return DetectorFactory.create(); | |||||
} | |||||
} catch (LangDetectException e) { | |||||
e.printStackTrace(); | |||||
log.error("语言检测初始化错误。" + e.getMessage()); | |||||
} | |||||
return null; | |||||
} | |||||
public static String detect(String str) { | |||||
Detector detector = initDetector(); | |||||
if (detector == null) { | |||||
return null; | |||||
} | |||||
detector.append(str); | |||||
try { | |||||
String language = detector.detect(); | |||||
log.info("语种识别(" + str + ")-----" + language); | |||||
return language; | |||||
} catch (LangDetectException e) { | |||||
log.error("语言检测错误", e); | |||||
} | |||||
return null; | |||||
} | |||||
private static void test() { | |||||
// 测试用方法 | |||||
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); | |||||
Resource[] resources = new Resource[0]; | |||||
try { | |||||
resources = resolver.getResources("classpath:profiles/*"); | |||||
} catch (IOException e) { | |||||
e.printStackTrace(); | |||||
} | |||||
for (Resource resource : resources) { | |||||
System.out.println(resource.getFilename()); | |||||
try { | |||||
byte[] bytes = new byte[0]; | |||||
bytes = new byte[resource.getInputStream().available()]; | |||||
resource.getInputStream().read(bytes); | |||||
String str = new String(bytes); | |||||
System.out.println(str); | |||||
} catch (IOException e) { | |||||
e.printStackTrace(); | |||||
} | |||||
} | |||||
System.out.println(detect("科技公司")); | |||||
System.out.println(detect("科技公司有哪几家做的还不错呢,其中就有我们这一家")); | |||||
System.out.println(detect("中国科技还行吧")); | |||||
System.out.println(detect("中国")); | |||||
System.out.println(detect("梦想")); | |||||
System.out.println(detect("I am a teacher")); | |||||
System.out.println(detect("I am a 老师")); | |||||
System.out.println(detect("行人從非機動車道變換車道到機動車道,激動的叫起來了")); | |||||
System.out.println(detect("おはよう")); | |||||
System.out.println("======================================="); | |||||
String regex = ".*[\u4e00-\u9fa5]+.*"; | |||||
// String regex2 = "\b.*[a-zA-Z]+.*\b"; | |||||
String regex3 = ".*-.*"; | |||||
System.out.println("I am a 老师".matches(regex)); | |||||
System.out.println("I am a teacher".matches(regex)); | |||||
System.out.println("I am a 我們".matches(regex)); | |||||
System.out.println("行人從非機動車道變換車道到機動車道,激動的叫起來了".matches(regex)); | |||||
System.out.println("======================================="); | |||||
// System.out.println("I am a 老师".matches(regex2)); | |||||
// System.out.println("I am a teacher".matches(regex2)); | |||||
// System.out.println("abcdefg".matches(regex2)); | |||||
// System.out.println("abc d e fg".matches(regex2)); | |||||
System.out.println("======================================="); | |||||
System.out.println("abc".matches(regex3)); | |||||
System.out.println("a-bc".matches(regex3)); | |||||
} | |||||
} |
@@ -0,0 +1,60 @@ | |||||
//package com.iformall.language; | |||||
// | |||||
//import com.google.common.base.Optional; | |||||
//import com.optimaize.langdetect.LanguageDetector; | |||||
//import com.optimaize.langdetect.LanguageDetectorBuilder; | |||||
//import com.optimaize.langdetect.i18n.LdLocale; | |||||
//import com.optimaize.langdetect.ngram.NgramExtractors; | |||||
//import com.optimaize.langdetect.profiles.LanguageProfile; | |||||
//import com.optimaize.langdetect.profiles.LanguageProfileReader; | |||||
//import com.optimaize.langdetect.text.CommonTextObjectFactories; | |||||
//import com.optimaize.langdetect.text.TextObject; | |||||
//import com.optimaize.langdetect.text.TextObjectFactory; | |||||
//import lombok.extern.slf4j.Slf4j; | |||||
// | |||||
//import java.io.IOException; | |||||
//import java.util.List; | |||||
// | |||||
//@Slf4j | |||||
//public class LanguageExcutor { | |||||
// | |||||
// private static LanguageDetector languageDetector = null; | |||||
// | |||||
// private static void initLanguageDetector(){ | |||||
// List<LanguageProfile> languageProfiles = null; | |||||
// try { | |||||
// //加载所有内置语种 | |||||
// languageProfiles = new LanguageProfileReader().readAllBuiltIn(); | |||||
// // 创建识别器 | |||||
// languageDetector = LanguageDetectorBuilder.create(NgramExtractors.standard()).withProfiles(languageProfiles).build(); | |||||
// } catch (IOException e) { | |||||
// e.printStackTrace(); | |||||
// } | |||||
// } | |||||
// | |||||
// public static String detect(String str){ | |||||
// if(languageDetector == null){ | |||||
// initLanguageDetector(); | |||||
// } | |||||
// if(languageDetector == null){ | |||||
// return null; | |||||
// } | |||||
// // 创建文本对象工厂 | |||||
// TextObjectFactory textObjectFactory = CommonTextObjectFactories.forDetectingOnLargeText(); | |||||
// TextObject textObject = textObjectFactory.forText(str); | |||||
// Optional<LdLocale> lang = languageDetector.detect(textObject); | |||||
// if (!lang.isPresent()) { | |||||
// log.error("语种识别失败,可能文本太短或混合了多国语言"); | |||||
// } | |||||
// return lang.get().toString(); | |||||
// } | |||||
// | |||||
// | |||||
// | |||||
// public static void main(String[] args) { | |||||
// | |||||
// String res = detect("how old are you,think you"); | |||||
// | |||||
// System.out.println(res); | |||||
// } | |||||
//} |
@@ -0,0 +1,45 @@ | |||||
package com.iformall.util; | |||||
import com.iformall.constant.LanguageEnums; | |||||
import java.util.regex.Matcher; | |||||
import java.util.regex.Pattern; | |||||
/** | |||||
* 语种检测类 | |||||
* | |||||
* @author xmzhao71 | |||||
* @date 2023-10-13 | |||||
*/ | |||||
public class DetectUtils { | |||||
/** | |||||
* 检测语言是否包含指定语种 | |||||
* | |||||
* @param text 文案 | |||||
* @return {@link String} 指定地区语种 | |||||
*/ | |||||
public static String detectLanguage(String text) { | |||||
String zhCNRegex = ".*[\u4e00-\u9fa5]+.*"; | |||||
if (text.matches(zhCNRegex)) { | |||||
return LanguageEnums.zh_CN.getLocal(); | |||||
} | |||||
return null; | |||||
} | |||||
/** | |||||
* 获取地区语言 | |||||
* | |||||
* @param detectLanguage 检测语言 | |||||
* @return {@link String} 指定地区语言 | |||||
*/ | |||||
public static String getLocalLanguage(String detectLanguage) { | |||||
if (detectLanguage == null) { | |||||
return null; | |||||
} | |||||
if (detectLanguage.equalsIgnoreCase(LanguageEnums.en_US.getLanguage())) { | |||||
return LanguageEnums.en_US.getLocal(); | |||||
} | |||||
return detectLanguage; | |||||
} | |||||
} |
@@ -0,0 +1,33 @@ | |||||
package com.iformall.video; | |||||
import java.io.InputStream; | |||||
import com.iformall.video.entity.VideTransResult; | |||||
import com.iformall.video.entity.VideUploadResult; | |||||
public interface VideoExcutor { | |||||
/** | |||||
* 上传视频 | |||||
* title:视频标题 | |||||
*/ | |||||
public VideUploadResult uploadVideoStream(String title,InputStream inputStream,String ex); | |||||
/** | |||||
* 上传视频 | |||||
* title:视频标题 | |||||
*/ | |||||
public VideUploadResult uploadVideoPath(String title, String url); | |||||
public String getVedioUploadProgress(String videoId); | |||||
public String getVedioContentLength(String videoId); | |||||
VideUploadResult getVideoDetailWithCache(String videoId,Boolean flag); | |||||
VideUploadResult getVideoDetailFromApi(String videoId); | |||||
public VideTransResult transVideo(String videoId,String transTemplateId); | |||||
public VideTransResult getTransVideoResult(String videoId, String taskId); | |||||
} |
@@ -0,0 +1,35 @@ | |||||
package com.iformall.video; | |||||
import java.util.Map; | |||||
import java.util.concurrent.ConcurrentHashMap; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.beans.factory.annotation.Qualifier; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import org.springframework.stereotype.Service; | |||||
import com.iformall.video.aliyun.AliyunVideoExcutor; | |||||
@Service | |||||
public class VideoFactory { | |||||
private Map<String,VideoExcutor> excutorMap = null; | |||||
@Autowired | |||||
AliyunVideoExcutor aliyunExcutor; | |||||
private Map<String,VideoExcutor> getExcutorMap() { | |||||
if (null == excutorMap) { | |||||
excutorMap = new ConcurrentHashMap<String,VideoExcutor>(); | |||||
excutorMap.put("aliyun", aliyunExcutor); | |||||
} | |||||
return excutorMap; | |||||
} | |||||
public VideoExcutor getExcutor(String type) { | |||||
VideoExcutor service = getExcutorMap().get(type); | |||||
return service; | |||||
} | |||||
} |
@@ -0,0 +1,258 @@ | |||||
package com.iformall.video.aliyun; | |||||
import java.io.File; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.net.URL; | |||||
import java.net.URLConnection; | |||||
import java.util.List; | |||||
import java.util.UUID; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | |||||
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; | |||||
import com.aliyuncs.vod.model.v20170321.GetTranscodeTaskResponse; | |||||
import com.aliyuncs.vod.model.v20170321.SubmitTranscodeJobsResponse; | |||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker; | |||||
import com.iformall.video.entity.VideTransResult; | |||||
import org.apache.commons.io.FileUtils; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.beans.factory.annotation.Qualifier; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import org.springframework.stereotype.Component; | |||||
import com.aliyuncs.DefaultAcsClient; | |||||
import com.aliyuncs.exceptions.ClientException; | |||||
import com.aliyuncs.profile.DefaultProfile; | |||||
import com.iformall.video.VideoExcutor; | |||||
import com.iformall.video.aliyun.config.AliyunVideoConfig; | |||||
import com.iformall.video.aliyun.sdk.server.AliyunVedioServer; | |||||
import com.iformall.video.aliyun.sdk.server.UploadCacheHelper; | |||||
import com.iformall.video.aliyun.thread.AliyunVideoUploadThread; | |||||
import com.iformall.video.entity.VideUploadResult; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
@Component | |||||
@Slf4j | |||||
public class AliyunVideoExcutor implements VideoExcutor { | |||||
private String videoStatus = "Normal";//正常的视频状态 | |||||
@Autowired | |||||
AliyunVideoConfig config; | |||||
@Autowired | |||||
AliyunVideoUploadThread thread; | |||||
@Autowired | |||||
@Qualifier("objectCommonRedisTemplate") | |||||
RedisTemplate<String, Object> redisTemplate; | |||||
private String getUrlByVeidoId(String videoId) { | |||||
try { | |||||
return AliyunVedioServer.getVedioUrl(config, videoId); | |||||
} catch (ClientException e) { | |||||
log.error("aliyun getUrlByVeidoId error",e); | |||||
} | |||||
return null; | |||||
} | |||||
public DefaultAcsClient initVodClient() throws ClientException { | |||||
String regionId = config.getRegionId(); // 点播服务接入区域 | |||||
DefaultProfile profile = DefaultProfile.getProfile(regionId, config.getAccessKeyId(), config.getAccessKeySecret()); | |||||
DefaultAcsClient client = new DefaultAcsClient(profile); | |||||
return client; | |||||
} | |||||
/** | |||||
* https://help.aliyun.com/document_detail/61063.html?spm=a2c4g.11186623.6.1036.2f81d418ydqsX8 | |||||
* https://help.aliyun.com/document_detail/55407.htm?spm=a2c4g.11186623.2.12.77aad4180Hg9y0#doc-api-vod-CreateUploadVideo | |||||
*/ | |||||
@Override | |||||
public VideUploadResult uploadVideoStream(String title,InputStream inputStream,String ex) { | |||||
VideUploadResult result = new VideUploadResult(); | |||||
try { | |||||
//该接口不会真正上传视频文件,您需要获得上传地址和凭证后,对其进行Base64解码,再调用OSS SDK将视频文件上传至指定的bucket中。详细操作,请参见基于OSS原生SDK上传视频到点播 | |||||
File folder = new File ("/video/upload/temp/aliyun") ; | |||||
if (!folder.exists()) { | |||||
folder.mkdirs(); | |||||
} | |||||
String _tempfilepath = "/video/upload/temp/aliyun/"+IdWorker.get32UUID()+ex; | |||||
File targetFile = new File(_tempfilepath); | |||||
FileUtils.copyInputStreamToFile(inputStream, targetFile); | |||||
CreateUploadVideoResponse response =AliyunVedioServer.createUploadVideo(config, title, _tempfilepath); | |||||
result.setVideoId(response.getVideoId()); | |||||
if((!StringUtils.isBlank(config.getAutoTrans())) && ("Y".equals(config.getAutoTrans()) || "y".equals(config.getAutoTrans()))) { | |||||
result.setAutoTrans(true); | |||||
}else { | |||||
result.setAutoTrans(false); | |||||
} | |||||
//result.setVideoUrl(getUrlByVeidoId(response.getVideoId())); | |||||
result.setSuccess(true); | |||||
//TODO 线程池的方式 | |||||
thread.executeAysncTask(config,response, _tempfilepath,redisTemplate); | |||||
} catch (Exception e) { | |||||
log.error("aliyun uploadLocalVideo error",e); | |||||
result.setSuccess(false); | |||||
result.setMsg(e.getLocalizedMessage()); | |||||
} | |||||
return result; | |||||
} | |||||
@Override | |||||
public VideUploadResult uploadVideoPath(String title, String url) { | |||||
VideUploadResult result = new VideUploadResult(); | |||||
if(StringUtils.isBlank(title)){ | |||||
title = "无标题"; | |||||
} | |||||
try { | |||||
InputStream inputStream = new URL(url).openStream(); | |||||
return this.uploadVideoStream(title,inputStream,".mp4"); | |||||
} catch (Exception e) { | |||||
log.error("aliyun uploadLocalVideo error",e); | |||||
result.setSuccess(false); | |||||
result.setMsg(e.getLocalizedMessage()); | |||||
} | |||||
return result; | |||||
} | |||||
private void setVideUploadResult(VideUploadResult result,String videoId) throws ClientException { | |||||
result.setVideoId(videoId); | |||||
GetPlayInfoResponse response = AliyunVedioServer.getPlayInfoResponse(config, videoId); | |||||
if(response != null){ | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
result.setVideoUrl(playInfo.getPlayURL()); | |||||
break; | |||||
} | |||||
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase(); | |||||
result.setDuration(videoBase.getDuration()); | |||||
result.setCoverURL(videoBase.getCoverURL()); | |||||
result.setTitle(videoBase.getTitle()); | |||||
} | |||||
} | |||||
@Override | |||||
public String getVedioUploadProgress(String videoId) { | |||||
return UploadCacheHelper.getUploadProgress(redisTemplate, videoId); | |||||
} | |||||
@Override | |||||
public VideUploadResult getVideoDetailWithCache(String videoId,Boolean flag) { | |||||
VideUploadResult videoDetail = null; | |||||
if (flag){ | |||||
videoDetail = UploadCacheHelper.getVideoDetail(redisTemplate, videoId); | |||||
} | |||||
if(videoDetail != null){ | |||||
return videoDetail; | |||||
}else{ | |||||
VideUploadResult result = getVideoDetailFromApi(videoId); | |||||
if(this.videoStatus.equals(result.getStatus())){ | |||||
if(StringUtils.isNotBlank(result.getVideoUrl())){ | |||||
UploadCacheHelper.cacheVideoDetail(redisTemplate, videoId,result); | |||||
} | |||||
// if(StringUtils.isNotBlank(result.getDuration()) && !"0.0".equals(result.getDuration())){ | |||||
// UploadCacheHelper.cacheVideoDetail(redisTemplate, videoId,result); | |||||
// } | |||||
}else{ | |||||
//还不能播放 | |||||
result.setSuccess(false); | |||||
} | |||||
return result; | |||||
} | |||||
} | |||||
@Override | |||||
public VideUploadResult getVideoDetailFromApi(String videoId) { | |||||
VideUploadResult result = new VideUploadResult(); | |||||
result.setVideoId(videoId); | |||||
try { | |||||
GetPlayInfoResponse response = AliyunVedioServer.getPlayInfoResponse(config, videoId); | |||||
log.info("shipin---Detail{}"+JSON.toJSONString(response)); | |||||
if(response != null){ | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
result.setStatus(playInfo.getStatus()); | |||||
result.setVideoUrl(playInfo.getPlayURL()); | |||||
result.setHeight(playInfo.getHeight()); | |||||
result.setWidth(playInfo.getWidth()); | |||||
result.setSize(playInfo.getSize()); | |||||
break; | |||||
} | |||||
GetPlayInfoResponse.VideoBase videoBase = response.getVideoBase(); | |||||
result.setDuration(videoBase.getDuration()); | |||||
result.setCoverURL(videoBase.getCoverURL()); | |||||
result.setTitle(videoBase.getTitle()); | |||||
result.setSuccess(true); | |||||
}else{ | |||||
result.setSuccess(false); | |||||
result.setMsg("未获取到视频"); | |||||
} | |||||
} catch (ClientException e) { | |||||
result.setSuccess(false); | |||||
result.setMsg("获取视频请求异常"); | |||||
} | |||||
return result; | |||||
} | |||||
@Override | |||||
public String getVedioContentLength(String videoId) { | |||||
return UploadCacheHelper.getContentLength(redisTemplate, videoId); | |||||
} | |||||
@Override | |||||
public VideTransResult transVideo(String videoId,String transTemplateId) { | |||||
VideTransResult result = new VideTransResult(); | |||||
//解码 | |||||
if ((!StringUtils.isBlank(videoId)) && (!StringUtils.isBlank(transTemplateId))) { | |||||
result.setVideoId(videoId); | |||||
SubmitTranscodeJobsResponse transResponse = new SubmitTranscodeJobsResponse(); | |||||
try { | |||||
transResponse = AliyunVedioServer.submitTranscodeJobs(config, videoId, transTemplateId); | |||||
//任务ID | |||||
//System.out.println("JobId = " + transResponse.getTranscodeJobs().get(0).getJobId()); | |||||
result.setTaskId(transResponse.getTranscodeTaskId()); | |||||
result.setSuccess(true); | |||||
return result; | |||||
}catch(Exception e) { | |||||
log.error(" aliyun uploadVideo trans error."+ videoId,e); | |||||
result.setSuccess(false); | |||||
result.setMsg(e.getLocalizedMessage()); | |||||
return result; | |||||
} | |||||
}else { | |||||
result.setSuccess(false); | |||||
result.setMsg("videoId或者转码模板编号为空"); | |||||
return result; | |||||
} | |||||
} | |||||
@Override | |||||
public VideTransResult getTransVideoResult(String videoId,String taskId) { | |||||
VideTransResult result = new VideTransResult(); | |||||
try { | |||||
GetTranscodeTaskResponse response = AliyunVedioServer.getTransTask(config, taskId); | |||||
if (null != response && "CompleteAllSucc".equals(response.getTranscodeTask().getTaskStatus())) { | |||||
result.setSuccess(true); | |||||
result.setTaskId(taskId); | |||||
result.setVideoId(videoId); | |||||
}else { | |||||
result.setSuccess(false); | |||||
result.setTaskId(taskId); | |||||
result.setVideoId(videoId); | |||||
result.setMsg(response.getTranscodeTask().getTaskStatus()); | |||||
} | |||||
} catch (Exception e) { | |||||
log.error(" aliyun uploadVideo getTransVideoResult error."+ videoId,e); | |||||
result.setSuccess(false); | |||||
result.setMsg(e.getLocalizedMessage()); | |||||
return result; | |||||
} | |||||
return result; | |||||
} | |||||
} |
@@ -0,0 +1,18 @@ | |||||
package com.iformall.video.aliyun.config; | |||||
import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import lombok.Data; | |||||
@Data | |||||
@Configuration | |||||
@ConfigurationProperties(prefix = "video.aliyun") | |||||
public class AliyunVideoConfig { | |||||
private String accessKeyId; | |||||
private String accessKeySecret; | |||||
private String regionId;//cn-shanghai 点播服务接入区域 | |||||
private String endPoint;//以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com | |||||
// private String transTemplateId;//转码的模板编号 | |||||
private String autoTrans; | |||||
} |
@@ -0,0 +1,260 @@ | |||||
package com.iformall.video.aliyun.sdk.server; | |||||
import java.io.File; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.io.UnsupportedEncodingException; | |||||
import java.net.MalformedURLException; | |||||
import java.net.URL; | |||||
import java.util.Base64; | |||||
import java.util.List; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.aliyun.oss.OSS; | |||||
import com.aliyun.oss.OSSClient; | |||||
import com.aliyun.oss.OSSClientBuilder; | |||||
import com.aliyun.oss.model.PutObjectRequest; | |||||
import com.aliyun.oss.model.PutObjectResult; | |||||
import com.aliyuncs.DefaultAcsClient; | |||||
import com.aliyuncs.profile.DefaultProfile; | |||||
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest; | |||||
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | |||||
import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest; | |||||
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse; | |||||
import com.aliyuncs.vod.model.v20170321.GetTranscodeTaskRequest; | |||||
import com.aliyuncs.vod.model.v20170321.GetTranscodeTaskResponse; | |||||
import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoRequest; | |||||
import com.aliyuncs.vod.model.v20170321.RefreshUploadVideoResponse; | |||||
import com.aliyuncs.vod.model.v20170321.SubmitTranscodeJobsRequest; | |||||
import com.aliyuncs.vod.model.v20170321.SubmitTranscodeJobsResponse; | |||||
import com.iformall.video.aliyun.config.AliyunVideoConfig; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import com.aliyuncs.exceptions.ClientException; | |||||
import com.aliyuncs.exceptions.ServerException; | |||||
import com.aliyuncs.http.FormatType; | |||||
@Slf4j | |||||
public class AliyunVedioServer { | |||||
private static DefaultAcsClient initVodClient(AliyunVideoConfig config) throws ClientException { | |||||
DefaultProfile profile = DefaultProfile.getProfile(config.getRegionId(), config.getAccessKeyId(), config.getAccessKeySecret()); | |||||
DefaultAcsClient client = new DefaultAcsClient(profile); | |||||
return client; | |||||
} | |||||
/** | |||||
* 获取视频上传地址和凭证 | |||||
* @param | |||||
* @return CreateUploadVideoResponse 获取视频上传地址和凭证响应数据 | |||||
* @throws Exception | |||||
*/ | |||||
public static CreateUploadVideoResponse createUploadVideo(AliyunVideoConfig config,String title,String fileName) throws Exception { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
CreateUploadVideoRequest request = new CreateUploadVideoRequest(); | |||||
request.setTitle(title); | |||||
request.setFileName(fileName); | |||||
//UserData,用户自定义设置参数,用户需要单独回调URL及数据透传时设置(非必须) | |||||
//JSONObject userData = new JSONObject(); | |||||
//UserData回调部分设置 | |||||
//JSONObject messageCallback = new JSONObject(); | |||||
//messageCallback.put("CallbackURL", "http://192.168.0.0/16"); | |||||
//messageCallback.put("CallbackType", "http"); | |||||
//userData.put("MessageCallback", messageCallback.toJSONString()); | |||||
//UserData透传数据部分设置 | |||||
//JSONObject extend = new JSONObject(); | |||||
//extend.put("MyId", "user-defined-id"); | |||||
//userData.put("Extend", extend.toJSONString()); | |||||
//request.setUserData(userData.toJSONString()); | |||||
return client.getAcsResponse(request); | |||||
} | |||||
private static String toLanEndpoint(String bucket) { | |||||
// return bucket; | |||||
return bucket.replace(".aliyuncs.com", "-internal.aliyuncs.com"); | |||||
} | |||||
private static OssUploadClient initOssClient(CreateUploadVideoResponse response) throws UnsupportedEncodingException { | |||||
final Base64.Decoder decoder = Base64.getDecoder(); | |||||
String uploadAddressStr = new String(decoder.decode(response.getUploadAddress().getBytes("UTF-8"))); | |||||
String uploadAuthStr = new String(decoder.decode(response.getUploadAuth().getBytes("UTF-8"))); | |||||
JSONObject uploadAuth = JSON.parseObject(uploadAuthStr); | |||||
JSONObject uploadAddress = JSON.parseObject(uploadAddressStr); | |||||
String bucket = uploadAddress.getString("Bucket"); | |||||
String endpoint = uploadAddress.getString("Endpoint"); | |||||
String fileName = uploadAddress.getString("FileName"); | |||||
String accessKeyId = uploadAuth.getString("AccessKeyId"); | |||||
String accessKeySecret = uploadAuth.getString("AccessKeySecret"); | |||||
String securityToken = uploadAuth.getString("SecurityToken"); | |||||
OSS client = new OSSClientBuilder().build(toLanEndpoint(endpoint), accessKeyId, accessKeySecret,securityToken); | |||||
return new OssUploadClient(bucket, toLanEndpoint(endpoint), fileName, client); | |||||
} | |||||
private static OssUploadClient initOssClient(RefreshUploadVideoResponse response) throws UnsupportedEncodingException { | |||||
final Base64.Decoder decoder = Base64.getDecoder(); | |||||
String uploadAddressStr = new String(decoder.decode(response.getUploadAddress().getBytes("UTF-8"))); | |||||
String uploadAuthStr = new String(decoder.decode(response.getUploadAuth().getBytes("UTF-8"))); | |||||
JSONObject uploadAuth = JSON.parseObject(uploadAuthStr); | |||||
JSONObject uploadAddress = JSON.parseObject(uploadAddressStr); | |||||
String bucket = uploadAddress.getString("Bucket"); | |||||
String endpoint = uploadAddress.getString("Endpoint"); | |||||
String fileName = uploadAddress.getString("FileName"); | |||||
String accessKeyId = uploadAuth.getString("AccessKeyId"); | |||||
String accessKeySecret = uploadAuth.getString("AccessKeySecret"); | |||||
String securityToken = uploadAuth.getString("SecurityToken"); | |||||
OSS client = new OSSClientBuilder().build(toLanEndpoint(endpoint), accessKeyId, accessKeySecret,securityToken); | |||||
return new OssUploadClient(bucket, toLanEndpoint(endpoint), fileName, client); | |||||
} | |||||
public static void uploadVideo(AliyunVideoConfig config,CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws UnsupportedEncodingException { | |||||
OssUploadClient ossClient = initOssClient(response); | |||||
// 创建PutObjectRequest对象。 | |||||
// 填写Bucket名称、Object完整路径和本地文件的完整路径。Object完整路径中不能包含Bucket名称。 | |||||
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 | |||||
//PutObjectRequest putObjectRequest = new PutObjectRequest(ossClient.getBucket(), ossClient.getFileName(), new File(localFile)); | |||||
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。 | |||||
// ObjectMetadata metadata = new ObjectMetadata(); | |||||
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); | |||||
// metadata.setObjectAcl(CannedAccessControlList.Private); | |||||
// putObjectRequest.setMetadata(metadata); | |||||
// 上传文件。 | |||||
String videoId = response.getVideoId(); | |||||
try { | |||||
PutObjectResult result = ossClient.getOssClient().putObject(new PutObjectRequest(ossClient.getBucket(), ossClient.getFileName(), new File(localFile)). | |||||
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,response.getVideoId(),localFile))); | |||||
}catch(Exception e) { | |||||
String msg = e.getLocalizedMessage(); | |||||
if (msg.contains("InvalidAccessKeyId")) { | |||||
OssUploadClient ossClient1 = null; | |||||
try { | |||||
RefreshUploadVideoResponse refrshResoponse = refreshUploadVideo(config,response.getVideoId()); | |||||
ossClient1 = initOssClient(refrshResoponse); | |||||
ossClient1.getOssClient().putObject(new PutObjectRequest(ossClient1.getBucket(), ossClient1.getFileName(), new File(localFile)). | |||||
<PutObjectRequest>withProgressListener(new PutObjectProgressListener(redisTemplate,refrshResoponse.getVideoId(),localFile))); | |||||
videoId = refrshResoponse.getVideoId(); | |||||
} catch (Exception e1) { | |||||
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | |||||
log.error(" aliyun uploadVideo error."+ response.getVideoId(),e); | |||||
videoId = ""; | |||||
} | |||||
if (null != ossClient1) { | |||||
ossClient1.getOssClient().shutdown(); | |||||
} | |||||
}else { | |||||
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | |||||
log.error(" aliyun uploadVideo error."+ response.getVideoId(),e); | |||||
videoId = ""; | |||||
} | |||||
} | |||||
// 关闭OSSClient。 | |||||
ossClient.getOssClient().shutdown(); | |||||
} | |||||
/** | |||||
* 提交转码 | |||||
*/ | |||||
public static SubmitTranscodeJobsResponse submitTranscodeJobs(AliyunVideoConfig config,String videoId,String templateId) throws Exception { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
SubmitTranscodeJobsRequest request = new SubmitTranscodeJobsRequest(); | |||||
//需要转码的视频ID | |||||
request.setVideoId(videoId); | |||||
//转码模板ID | |||||
request.setTemplateGroupId(templateId); | |||||
return client.getAcsResponse(request); | |||||
} | |||||
public static RefreshUploadVideoResponse refreshUploadVideo(AliyunVideoConfig config,String videoId) throws Exception { | |||||
RefreshUploadVideoRequest request = new RefreshUploadVideoRequest(); | |||||
request.setVideoId("VideoId"); | |||||
request.setAcceptFormat(FormatType.JSON); | |||||
request.setSysReadTimeout(1000); | |||||
request.setSysConnectTimeout(1000); | |||||
DefaultAcsClient client = initVodClient(config); | |||||
return client.getAcsResponse(request); | |||||
} | |||||
//获取视频播放地址 | |||||
//https://help.aliyun.com/document_detail/61064.html?spm=a2c4g.11186623.6.1043.7c2d3838K6wQPZ | |||||
public static String getVedioUrl(AliyunVideoConfig config,String videoId) throws ClientException { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
GetPlayInfoResponse response = new GetPlayInfoResponse(); | |||||
try { | |||||
GetPlayInfoRequest request = new GetPlayInfoRequest(); | |||||
request.setVideoId(videoId); | |||||
response = client.getAcsResponse(request); | |||||
List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList(); | |||||
//播放地址 | |||||
for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) { | |||||
return playInfo.getPlayURL(); | |||||
} | |||||
} catch (Exception e) { | |||||
log.error("getVedioUrl error.",e); | |||||
} | |||||
return null; | |||||
} | |||||
public static GetPlayInfoResponse getPlayInfoResponse(AliyunVideoConfig config, String videoId) throws ClientException { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
GetPlayInfoResponse response = new GetPlayInfoResponse(); | |||||
try { | |||||
GetPlayInfoRequest request = new GetPlayInfoRequest(); | |||||
request.setVideoId(videoId); | |||||
request.setAuthTimeout(31536000l);//365天有效 | |||||
request.setOutputType("cdn"); | |||||
return client.getAcsResponse(request); | |||||
} catch (Exception e) { | |||||
log.error("getVedioUrl error.",e); | |||||
} | |||||
return null; | |||||
} | |||||
//查询转码任务详情 | |||||
//https://help.aliyun.com/document_detail/109342.html | |||||
public static GetTranscodeTaskResponse getTransTask(AliyunVideoConfig config,String taskId) throws ClientException { | |||||
DefaultAcsClient client = initVodClient(config); | |||||
try { | |||||
GetTranscodeTaskResponse response = new GetTranscodeTaskResponse(); | |||||
response = getTranscodeTask(client,taskId); | |||||
return response; | |||||
// //转码任务ID | |||||
// System.out.println("TranscodeTaskId = " + response.getTranscodeTask().getTranscodeTaskId()); | |||||
// //转码任务状态 | |||||
// System.out.println("TaskStatus = " + response.getTranscodeTask().getTaskStatus()); | |||||
// for (GetTranscodeTaskResponse.TranscodeTask.TranscodeJobInfo jobInfo : response.getTranscodeTask().getTranscodeJobInfoList()) { | |||||
// //转码作业ID | |||||
// System.out.println("TranscodeJobId = " + jobInfo.getTranscodeJobId()); | |||||
// //转码作业状态 | |||||
// System.out.println("TranscodeJobStatus = " + jobInfo.getTranscodeJobStatus()); | |||||
// //转码处理进度 | |||||
// System.out.println("TranscodeProgress = " + jobInfo.getTranscodeProgress()); | |||||
// //转码作业完成时间 | |||||
// System.out.println("CompleteTime = " + jobInfo.getCompleteTime()); | |||||
// | |||||
// } | |||||
} catch (Exception e) { | |||||
log.error("getTransTask error.",e); | |||||
} | |||||
return null; | |||||
// System.out.println("RequestId = " + response.getRequestId()); | |||||
} | |||||
private static GetTranscodeTaskResponse getTranscodeTask(DefaultAcsClient client,String taskId) throws Exception { | |||||
GetTranscodeTaskRequest request = new GetTranscodeTaskRequest(); | |||||
request.setTranscodeTaskId(taskId); | |||||
return client.getAcsResponse(request); | |||||
} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.iformall.video.aliyun.sdk.server; | |||||
import com.aliyun.oss.OSS; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Data; | |||||
@Data | |||||
@AllArgsConstructor | |||||
public class OssUploadClient { | |||||
private String bucket; | |||||
private String endpoint; | |||||
private String fileName; | |||||
private OSS ossClient; | |||||
} |
@@ -0,0 +1,90 @@ | |||||
package com.iformall.video.aliyun.sdk.server; | |||||
import java.io.File; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import com.aliyun.oss.event.ProgressEvent; | |||||
import com.aliyun.oss.event.ProgressEventType; | |||||
import com.aliyun.oss.event.ProgressListener; | |||||
public class PutObjectProgressListener implements ProgressListener{ | |||||
private String videoId = ""; | |||||
private String localFile = ""; | |||||
private long bytesWritten = 0; | |||||
private long totalBytes = -1; | |||||
private boolean succeed = false; | |||||
private RedisTemplate<String, Object> redisTemplate; | |||||
public PutObjectProgressListener(RedisTemplate<String, Object> redisTemplate,String videoId,String localFile) { | |||||
this.redisTemplate = redisTemplate; | |||||
this.videoId = videoId; | |||||
this.localFile = localFile; | |||||
} | |||||
@Override | |||||
public void progressChanged(ProgressEvent progressEvent) { | |||||
long bytes = progressEvent.getBytes(); | |||||
ProgressEventType eventType = progressEvent.getEventType(); | |||||
switch (eventType) { | |||||
case TRANSFER_STARTED_EVENT: | |||||
if (null != redisTemplate && (!StringUtils.isBlank(videoId))) { | |||||
UploadCacheHelper.cacheStart(redisTemplate, videoId); | |||||
} | |||||
//System.out.println("Start to upload......"); | |||||
break; | |||||
case REQUEST_CONTENT_LENGTH_EVENT: | |||||
this.totalBytes = bytes; | |||||
if (null != redisTemplate && (!StringUtils.isBlank(videoId))) { | |||||
UploadCacheHelper.setContentLength(redisTemplate, videoId, String.valueOf(this.totalBytes)); | |||||
} | |||||
//System.out.println(this.totalBytes + " bytes in total will be uploaded to OSS"); | |||||
break; | |||||
case REQUEST_BYTE_TRANSFER_EVENT: | |||||
this.bytesWritten += bytes; | |||||
if (this.totalBytes != -1) { | |||||
int percent = (int)(this.bytesWritten * 100.0 / this.totalBytes); | |||||
//System.out.println(bytes + " bytes have been written at this time, upload progress: " + percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")"); | |||||
} else { | |||||
//System.out.println(bytes + " bytes have been written at this time, upload ratio: unknown" + "(" + this.bytesWritten + "/...)"); | |||||
} | |||||
if (null != redisTemplate && (!StringUtils.isBlank(videoId))) { | |||||
UploadCacheHelper.cacheProgress(redisTemplate, videoId, String.valueOf(this.bytesWritten)); | |||||
} | |||||
break; | |||||
case TRANSFER_COMPLETED_EVENT: | |||||
this.succeed = true; | |||||
if (null != redisTemplate && (!StringUtils.isBlank(videoId))) { | |||||
UploadCacheHelper.cacheComplete(redisTemplate, videoId); | |||||
} | |||||
if (!StringUtils.isBlank(localFile)) { | |||||
File f = new File(localFile); | |||||
if (f.exists()) { | |||||
f.delete(); | |||||
} | |||||
} | |||||
//System.out.println("Succeed to upload, " + this.bytesWritten + " bytes have been transferred in total"); | |||||
break; | |||||
case TRANSFER_FAILED_EVENT: | |||||
//System.out.println("Failed to upload, " + this.bytesWritten + " bytes have been transferred"); | |||||
if (null != redisTemplate && (!StringUtils.isBlank(videoId))) { | |||||
UploadCacheHelper.cacheError(redisTemplate, videoId); | |||||
} | |||||
if (!StringUtils.isBlank(localFile)) { | |||||
File f = new File(localFile); | |||||
if (f.exists()) { | |||||
f.delete(); | |||||
} | |||||
} | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
public boolean isSucceed() { | |||||
return succeed; | |||||
} | |||||
} |
@@ -0,0 +1,83 @@ | |||||
package com.iformall.video.aliyun.sdk.server; | |||||
import java.util.concurrent.TimeUnit; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.iformall.video.entity.VideUploadResult; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import org.springframework.data.redis.core.ValueOperations; | |||||
public class UploadCacheHelper { | |||||
private static String PRE = "video:upload:aliyun:progress:"; | |||||
private static String DETAIL = "video:upload:aliyun:detail:"; | |||||
public static void cacheStart(RedisTemplate<String, Object> template,String videoId) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
operations.set(PRE+videoId, "begin", 24*3600,TimeUnit.SECONDS); | |||||
} | |||||
public static void cacheComplete(RedisTemplate<String, Object> template,String videoId) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
operations.set(PRE+videoId, "complete", 24*3600,TimeUnit.SECONDS); | |||||
} | |||||
public static void cacheProgress(RedisTemplate<String, Object> template,String videoId,String bytes) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
operations.set(PRE+videoId, bytes, 24*3600,TimeUnit.SECONDS); | |||||
} | |||||
public static void cacheError(RedisTemplate<String, Object> template,String videoId) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
operations.set(PRE+videoId, "error", 24*3600,TimeUnit.SECONDS); | |||||
} | |||||
public static String getUploadProgress(RedisTemplate<String, Object> template,String videoId) { | |||||
if (template.hasKey(PRE+videoId)) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
Object o = operations.get(PRE+videoId); | |||||
if (o instanceof String) { | |||||
return (String)o; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
public static void setContentLength(RedisTemplate<String, Object> template,String videoId,String length) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
operations.set("video:upload:aliyun:contengLength:"+videoId, length, 24*3600,TimeUnit.SECONDS); | |||||
} | |||||
public static String getContentLength(RedisTemplate<String, Object> template,String videoId) { | |||||
if (template.hasKey("video:upload:aliyun:contengLength:"+videoId)) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
Object o = operations.get("video:upload:aliyun:contengLength:"+videoId); | |||||
if (o instanceof String) { | |||||
return (String)o; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
public static void cacheVideoDetail(RedisTemplate<String, Object> template,String videoId, Object value) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
operations.set(DETAIL+videoId, value, 24,TimeUnit.DAYS); | |||||
} | |||||
public static VideUploadResult getVideoDetail(RedisTemplate<String, Object> template, String videoId) { | |||||
String key = DETAIL+videoId; | |||||
if (template.hasKey(key)) { | |||||
ValueOperations<String, Object> operations = template.opsForValue(); | |||||
Object o = operations.get(key); | |||||
if (o instanceof VideUploadResult) { | |||||
return (VideUploadResult)o; | |||||
}else if(o instanceof String){ | |||||
return JSON.parseObject((String)o,VideUploadResult.class); | |||||
}else{ | |||||
return JSON.parseObject(JSON.toJSONString(o),VideUploadResult.class); | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} |
@@ -0,0 +1,50 @@ | |||||
package com.iformall.video.aliyun.thread; | |||||
import org.springframework.context.annotation.Bean; | |||||
import org.springframework.context.annotation.Configuration; | |||||
import org.springframework.core.task.AsyncTaskExecutor; | |||||
import org.springframework.scheduling.annotation.EnableAsync; | |||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; | |||||
import com.iformall.video.aliyun.config.AliyunVideoConfig; | |||||
import lombok.Data; | |||||
import java.util.concurrent.Executor; | |||||
import java.util.concurrent.ThreadPoolExecutor; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.boot.context.properties.ConfigurationProperties; | |||||
@Data | |||||
@Configuration | |||||
@EnableAsync | |||||
@ConfigurationProperties(prefix = "video.aliyun") | |||||
public class AliyunVedioThreadExecutorConfig { | |||||
private int corePoolSize; | |||||
private int maxPoolSize; | |||||
private int queueCapacity; | |||||
private String namePrefix; | |||||
@Bean(name = "asyncVideoServiceExecutor") | |||||
public Executor asyncVideoServiceExecutor() { | |||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); | |||||
//配置核心线程数 | |||||
executor.setCorePoolSize(corePoolSize); | |||||
//配置最大线程数 | |||||
executor.setMaxPoolSize(maxPoolSize); | |||||
//配置队列大小 | |||||
executor.setQueueCapacity(queueCapacity); | |||||
//配置线程池中的线程的名称前缀 | |||||
executor.setThreadNamePrefix(namePrefix); | |||||
// rejection-policy:当pool已经达到max size的时候,如何处理新任务 | |||||
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行 | |||||
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); | |||||
//执行初始化 | |||||
executor.initialize(); | |||||
return executor; | |||||
} | |||||
} |
@@ -0,0 +1,28 @@ | |||||
package com.iformall.video.aliyun.thread; | |||||
import org.springframework.stereotype.Service; | |||||
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse; | |||||
import com.iformall.video.aliyun.config.AliyunVideoConfig; | |||||
import com.iformall.video.aliyun.sdk.server.AliyunVedioServer; | |||||
import com.iformall.video.aliyun.sdk.server.UploadCacheHelper; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.data.redis.core.RedisTemplate; | |||||
import org.springframework.scheduling.annotation.Async; | |||||
//https://blog.csdn.net/m0_37701381/article/details/81072774 | |||||
@Service | |||||
@Slf4j | |||||
public class AliyunVideoUploadThread { | |||||
@Async("asyncVideoServiceExecutor") | |||||
public void executeAysncTask(AliyunVideoConfig config,CreateUploadVideoResponse response,String localFile,RedisTemplate<String, Object> redisTemplate) throws InterruptedException { | |||||
try { | |||||
AliyunVedioServer.uploadVideo(config,response, localFile,redisTemplate); | |||||
} catch (Exception e) { | |||||
log.error("AliyunVideoUploadThread upload error."+response.getVideoId(),e); | |||||
UploadCacheHelper.cacheError(redisTemplate, response.getVideoId()); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,11 @@ | |||||
package com.iformall.video.entity; | |||||
import lombok.Data; | |||||
@Data | |||||
public class VideTransResult { | |||||
private String videoId; | |||||
private boolean success = false; | |||||
private String msg; | |||||
private String taskId; | |||||
} |
@@ -0,0 +1,23 @@ | |||||
package com.iformall.video.entity; | |||||
import lombok.Data; | |||||
@Data | |||||
public class VideUploadResult { | |||||
private String status; | |||||
private String videoId; | |||||
private String videoUrl; | |||||
private Long height; | |||||
private Long Width; | |||||
private String coverURL;//视频封面 | |||||
private String duration;//视频时长 | |||||
private String title;//视频标题 | |||||
private Long size;//视频大小 b | |||||
private boolean success = false; | |||||
private String msg; | |||||
private boolean autoTrans;//是否自动转码 | |||||
} |