Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
fd2d3871
authored
Sep 15, 2025
by
lijinqi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.冲突解决
2.循环依赖问题解决 3.api扣除次数bug修复
parent
5c84d461
Show whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
334 additions
and
89 deletions
+334
-89
computility-framework/computility-spring-boot-starter-protection/pom.xml
+5
-0
computility-framework/computility-spring-boot-starter-protection/src/main/java/com/luhu/computility/framework/signature/core/aop/ApiSignatureAspect.java
+152
-34
computility-framework/computility-spring-boot-starter-protection/src/main/java/com/luhu/computility/framework/signature/core/redis/ApiSignatureRedisDAO.java
+54
-0
computility-module-apihub/computility-module-apihub-api/src/main/java/com/luhu/computility/module/apihub/api/apiorder/ApiOrderApi.java
+2
-1
computility-module-apihub/computility-module-apihub-api/src/main/java/com/luhu/computility/module/apihub/api/appcredential/AppCredentialApi.java
+10
-0
computility-module-apihub/computility-module-apihub-api/src/main/java/com/luhu/computility/module/apihub/api/appcredential/dto/AppCredentialSaveReqDTO.java
+29
-0
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/api/ApiOrderApiServiceImpl.java
+4
-2
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/api/AppCredentialApiServiceImpl.java
+15
-0
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/api/UserApiUsageApiServiceImpl.java
+2
-1
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/apiorder/ApiOrderController.java
+1
-0
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/appcredential/AppCredentialController.java
+4
-4
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/appcredential/vo/AppCredentialPageReqVO.java
+3
-0
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/appcredential/vo/AppCredentialRespVO.java
+4
-0
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/userapiusage/vo/UserApiUsageSaveReqVO.java
+0
-1
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/app/apiorder/AppApiOrderController.java
+1
-0
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/dal/mysql/apiorder/ApiOrderMapper.java
+5
-15
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/dal/mysql/appcredential/AppCredentialMapper.java
+9
-9
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/service/appcredential/AppCredentialService.java
+1
-1
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/service/appcredential/AppCredentialServiceImpl.java
+1
-1
computility-module-biz/computility-module-biz-biz/src/main/java/com/luhu/computility/module/biz/service/home/HomeIndexServiceImpl.java
+2
-2
computility-module-external/src/main/java/com/luhu/computility/module/external/controller/openapi/AigcNewApiController.java
+2
-3
computility-module-external/src/main/java/com/luhu/computility/module/external/controller/openapi/AigcOldApiController.java
+2
-3
computility-module-external/src/main/java/com/luhu/computility/module/external/controller/openapi/OpenApiController.java
+9
-10
computility-module-member/pom.xml
+5
-0
computility-module-member/src/main/java/com/luhu/computility/module/member/mq/producer/user/MemberUserProducer.java
+10
-0
computility-module-member/src/main/java/com/luhu/computility/module/member/utils/AppKeyGenerator.java
+1
-1
computility-module-member/src/main/java/com/luhu/computility/module/member/utils/AppSecretEncrypt.java
+1
-1
No files found.
computility-framework/computility-spring-boot-starter-protection/pom.xml
View file @
fd2d3871
...
@@ -42,6 +42,11 @@
...
@@ -42,6 +42,11 @@
<artifactId>
computility-spring-boot-starter-test
</artifactId>
<artifactId>
computility-spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
<scope>
test
</scope>
</dependency>
</dependency>
<dependency>
<groupId>
com.luhu
</groupId>
<artifactId>
computility-module-apihub-api
</artifactId>
<version>
${revision}
</version>
</dependency>
</dependencies>
</dependencies>
...
...
computility-framework/computility-spring-boot-starter-protection/src/main/java/com/luhu/computility/framework/signature/core/aop/ApiSignatureAspect.java
View file @
fd2d3871
package
com
.
luhu
.
computility
.
framework
.
signature
.
core
.
aop
;
package
com
.
luhu
.
computility
.
framework
.
signature
.
core
.
aop
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.lang.Assert
;
import
cn.hutool.core.lang.Assert
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.BooleanUtil
;
import
cn.hutool.core.util.ObjUtil
;
import
cn.hutool.core.util.ObjUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.crypto.digest.DigestUtil
;
import
cn.hutool.crypto.digest.DigestUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.luhu.computility.framework.common.exception.ServiceException
;
import
com.luhu.computility.framework.common.exception.ServiceException
;
import
com.luhu.computility.framework.common.
exception.enums.GlobalErrorCodeConstants
;
import
com.luhu.computility.framework.common.
pojo.CommonResult
;
import
com.luhu.computility.framework.common.util.servlet.ServletUtils
;
import
com.luhu.computility.framework.common.util.servlet.ServletUtils
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.framework.signature.core.redis.ApiSignatureRedisDAO
;
import
com.luhu.computility.framework.signature.core.redis.ApiSignatureRedisDAO
;
import
com.luhu.computility.module.apihub.api.apicalllog.ApiCallLogApi
;
import
com.luhu.computility.module.apihub.api.apicalllog.dto.ApiCallLogSaveReqDTO
;
import
com.luhu.computility.module.apihub.api.apiendpoint.ApiEndpointApi
;
import
com.luhu.computility.module.apihub.api.apiendpoint.vo.ApiEndpointRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.AppCredentialApi
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.api.userapiusage.UserApiUsageApi
;
import
com.luhu.computility.module.apihub.api.userapiusage.dto.JoinUserApiUsageDTO
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Before
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.SortedMap
;
import
java.util.SortedMap
;
import
java.util.TreeMap
;
import
java.util.TreeMap
;
import
static
com
.
luhu
.
computility
.
framework
.
common
.
exception
.
enums
.
GlobalErrorCodeConstants
.
BAD_REQUEST
;
import
static
com
.
luhu
.
computility
.
module
.
apihub
.
enums
.
ErrorCodeConstants
.
API_ENDPOINT_EXPIRED
;
import
static
com
.
luhu
.
computility
.
module
.
apihub
.
enums
.
ErrorCodeConstants
.
API_ENDPOINT_NOT_AVAILABLE
;
import
static
com
.
luhu
.
computility
.
module
.
apihub
.
enums
.
ErrorCodeConstants
.
API_ENDPOINT_NOT_EXISTS
;
import
static
com
.
luhu
.
computility
.
module
.
apihub
.
enums
.
ErrorCodeConstants
.
INVALID_APPID
;
import
static
com
.
luhu
.
computility
.
module
.
apihub
.
enums
.
ErrorCodeConstants
.
TIMESTAMP_EXCEPTION
;
/**
/**
* 拦截声明了 {@link ApiSignature} 注解的方法,实现签名
* 拦截声明了 {@link ApiSignature} 注解的方法,实现签名
...
@@ -37,51 +54,151 @@ public class ApiSignatureAspect {
...
@@ -37,51 +54,151 @@ public class ApiSignatureAspect {
private
final
ApiSignatureRedisDAO
signatureRedisDAO
;
private
final
ApiSignatureRedisDAO
signatureRedisDAO
;
@Before
(
"@annotation(signature)"
)
@Resource
public
void
beforePointCut
(
JoinPoint
joinPoint
,
ApiSignature
signature
)
{
private
AppCredentialApi
appCredentialApi
;
// 1. 验证通过,直接结束
if
(
verifySignature
(
signature
,
Objects
.
requireNonNull
(
ServletUtils
.
getRequest
())))
{
@Resource
return
;
private
ApiEndpointApi
apiEndpointApi
;
@Resource
private
ApiCallLogApi
apiCallLogApi
;
@Resource
private
UserApiUsageApi
userApiUsageApi
;
public
ApiSignatureAspect
(
ApiSignatureRedisDAO
signatureRedisDAO
)
{
this
.
signatureRedisDAO
=
signatureRedisDAO
;
}
}
// 2. 验证不通过,抛出异常
log
.
error
(
"[beforePointCut][方法{} 参数({}) 签名失败]"
,
joinPoint
.
getSignature
().
toString
(),
@Around
(
"@annotation(signature)"
)
joinPoint
.
getArgs
());
public
Object
aroundPointCut
(
ProceedingJoinPoint
joinPoint
,
ApiSignature
signature
)
throws
Throwable
{
HttpServletRequest
request
=
Objects
.
requireNonNull
(
ServletUtils
.
getRequest
());
// 1.校验 Header
/* if (!verifyHeaders(signature, request)) {
throw new ServiceException(HEAD_EXCEPTION);
}*/
//查询appId对应的Secret
String
appId
=
request
.
getHeader
(
signature
.
appId
());
AppCredentialRespDTO
appCredentialRespDTO
=
appCredentialApi
.
getAppSecretByAppid
(
appId
);
if
(!
ObjectUtil
.
isEmpty
(
appCredentialRespDTO
))
{
Assert
.
notNull
(
appCredentialRespDTO
.
getAppId
(),
"[appId({})] 找不到对应的 appSecret"
,
appId
);
}
else
{
throw
new
ServiceException
(
INVALID_APPID
);
}
// 2. 签名校验
/*if (!verifySignature(signature, request, appCredentialDO)) {
log.error("[aroundPointCut][方法 {} 参数({}) 签名失败]", joinPoint.getSignature(), joinPoint.getArgs());
throw new ServiceException(BAD_REQUEST.getCode(),
throw new ServiceException(BAD_REQUEST.getCode(),
StrUtil.blankToDefault(signature.message(), BAD_REQUEST.getMsg()));
StrUtil.blankToDefault(signature.message(), BAD_REQUEST.getMsg()));
}*/
// 2. 应用-接口绑定校验
String
path
=
request
.
getRequestURI
();
String
method
=
request
.
getMethod
();
//2.1是否有该接口
ApiEndpointRespDTO
apiEndpointRespDTO
=
apiEndpointApi
.
getApiEndpointByPathAndMethod
(
path
,
method
);
if
(
Objects
.
isNull
(
apiEndpointRespDTO
))
{
throw
new
ServiceException
(
API_ENDPOINT_NOT_EXISTS
);
}
//2.2该接口是否订阅过
List
<
JoinUserApiUsageDTO
>
joinUserApiUsageResults
=
userApiUsageApi
.
selectJoinUserApiUsageResult
(
appCredentialRespDTO
.
getUserId
(),
apiEndpointRespDTO
.
getId
());
if
(
CollectionUtil
.
isEmpty
(
joinUserApiUsageResults
)){
throw
new
ServiceException
(
API_ENDPOINT_NOT_AVAILABLE
);
}
//3. 用户套餐校验(只校验,不扣减)如果有一个套餐符合条件,则继续往下走
JoinUserApiUsageDTO
joinUserApiUsageResult
=
null
;
LocalDateTime
now
=
LocalDateTime
.
now
();
for
(
JoinUserApiUsageDTO
j
:
joinUserApiUsageResults
)
{
// 未过期且有剩余额度
if
(
j
.
getExpireTime
().
isAfter
(
now
)
&&
j
.
getUsedTimes
()
<
j
.
getPackageTimes
())
{
if
(
joinUserApiUsageResult
==
null
||
j
.
getExpireTime
().
isBefore
(
joinUserApiUsageResult
.
getExpireTime
()))
{
joinUserApiUsageResult
=
j
;
}
}
}
}
if
(
Objects
.
isNull
(
joinUserApiUsageResult
))
{
throw
new
ServiceException
(
API_ENDPOINT_EXPIRED
);
}
// 4. 执行目标方法
Object
result
=
joinPoint
.
proceed
();
public
boolean
verifySignature
(
ApiSignature
signature
,
HttpServletRequest
request
)
{
// 5. 只有当接口执行成功才扣减额度
// 1.1 校验 Header
ApiCallLogSaveReqDTO
apiCallLogSaveReqVO
=
new
ApiCallLogSaveReqDTO
();
if
(!
verifyHeaders
(
signature
,
request
))
{
if
(
result
instanceof
CommonResult
)
{
return
false
;
if
(((
CommonResult
<?>)
result
).
isSuccess
()){
consumeUsage
(
joinUserApiUsageResults
,
apiEndpointRespDTO
.
getConsumptionPoints
());
apiCallLogSaveReqVO
.
setResponseStatus
(((
CommonResult
<?>)
result
).
getCode
().
toString
());
}
String
requestBody
=
ServletUtils
.
isJsonRequest
(
request
)
?
ServletUtils
.
getBody
(
request
)
:
null
;
apiCallLogApi
.
createApiCallLog
(
apiCallLogSaveReqVO
.
setUserId
(
appCredentialRespDTO
.
getUserId
())
.
setCallTime
(
LocalDateTime
.
now
())
.
setMethod
(
method
)
.
setPath
(
path
)
.
setApiEndpointName
(
apiEndpointRespDTO
.
getName
())
.
setRequestParams
(
requestBody
)
.
setResponseParams
(
JSON
.
toJSONString
(
result
))
);
}
}
return
result
;
}
/** 扣减一次额度(优先扣最近过期的套餐,用 Redis 保证并发安全) */
private
void
consumeUsage
(
List
<
JoinUserApiUsageDTO
>
joinUserApiUsageDTOS
,
Integer
consumptionPoints
)
{
JoinUserApiUsageDTO
target
=
null
;
LocalDateTime
now
=
LocalDateTime
.
now
();
for
(
JoinUserApiUsageDTO
j
:
joinUserApiUsageDTOS
)
{
if
(!
ObjectUtil
.
isEmpty
(
j
.
getExpireTime
())
&&
j
.
getExpireTime
().
isAfter
(
now
)
&&
j
.
getUsedTimes
()
<
j
.
getPackageTimes
())
{
if
(
ObjectUtil
.
isEmpty
(
target
)
||
j
.
getExpireTime
().
isBefore
(
target
.
getExpireTime
()))
{
target
=
j
;
}
}
}
String
key
=
ApiSignatureRedisDAO
.
USAGE_KEY
+
target
.
getApiEndPointId
()
+
target
.
getUserId
();
// Redis 原子自增,返回累计使用次数
Integer
used
=
signatureRedisDAO
.
incrementUsageWithExpire
(
key
,
consumptionPoints
.
longValue
());
if
(!
ObjectUtil
.
isEmpty
(
used
)
&&
used
<=
target
.
getPackageTimes
())
{
// 直接回写累计值
userApiUsageApi
.
asyncUpdateUsage
(
target
.
getId
(),
used
);
}
}
public
boolean
verifySignature
(
ApiSignature
signature
,
HttpServletRequest
request
,
AppCredentialRespDTO
appCredentialDO
)
{
// 1.2 校验 appId 是否能获取到对应的 appSecret
// 1.2 校验 appId 是否能获取到对应的 appSecret
String
appId
=
request
.
getHeader
(
signature
.
appId
());
String
appId
=
request
.
getHeader
(
signature
.
appId
());
String
appSecret
=
signatureRedisDAO
.
getAppSecret
(
appId
);
Assert
.
notNull
(
appSecret
,
"[appId({})] 找不到对应的 appSecret"
,
appId
);
// 2. 校验签名【重要!】
// 2. 校验签名【重要!】
String
clientSignature
=
request
.
getHeader
(
signature
.
sign
());
// 客户端签名
String
clientSignature
=
request
.
getHeader
(
signature
.
sign
());
// 客户端签名
String
serverSignatureString
=
buildSignatureString
(
signature
,
request
,
app
Secret
);
// 服务端签名字符串
String
serverSignatureString
=
buildSignatureString
(
signature
,
request
,
app
CredentialDO
.
getAppSecret
()
);
// 服务端签名字符串
String
serverSignature
=
DigestUtil
.
sha256Hex
(
serverSignatureString
);
// 服务端签名
String
serverSignature
=
DigestUtil
.
sha256Hex
(
serverSignatureString
);
// 服务端签名
log
.
error
(
DigestUtil
.
sha256Hex
(
serverSignatureString
));
if
(
ObjUtil
.
notEqual
(
clientSignature
,
serverSignature
))
{
if
(
ObjUtil
.
notEqual
(
clientSignature
,
serverSignature
))
{
return
false
;
return
false
;
}
}
// 3. 将 nonce 记入缓存,防止重复使用(重点二:此处需要将 ttl 设定为允许 timestamp 时间差的值 x 2 )
// 3. 将 nonce 记入缓存,防止重复使用(重点二:此处需要将 ttl 设定为允许 timestamp 时间差的值 x 2 )
String
nonce
=
request
.
getHeader
(
signature
.
nonce
());
String
nonce
=
request
.
getHeader
(
signature
.
nonce
());
if
(
BooleanUtil
.
isFalse
(
signatureRedisDAO
.
setNonce
(
appId
,
nonce
,
signature
.
timeout
()
*
2
,
signature
.
timeUnit
())))
{
signatureRedisDAO
.
setNonce
(
appId
,
nonce
,
signature
.
timeout
()
*
2
,
signature
.
timeUnit
());
String
timestamp
=
request
.
getHeader
(
signature
.
timestamp
());
log
.
info
(
"[verifySignature][appId({}) timestamp({}) nonce({}) sign({}) 存在重复请求]"
,
appId
,
timestamp
,
nonce
,
clientSignature
);
throw
new
ServiceException
(
GlobalErrorCodeConstants
.
REPEATED_REQUESTS
.
getCode
(),
"存在重复请求"
);
}
return
true
;
return
true
;
}
}
/**
/**
* 校验请求头加签参数
* 校验请求头加签参数
*
<p>
*
* 1. appId 是否为空
* 1. appId 是否为空
* 2. timestamp 是否为空,请求是否已经超时,默认 10 分钟
* 2. timestamp 是否为空,请求是否已经超时,默认 10 分钟
* 3. nonce 是否为空,随机数是否 10 位以上,是否在规定时间内已经访问过了
* 3. nonce 是否为空,随机数是否 10 位以上,是否在规定时间内已经访问过了
...
@@ -113,18 +230,21 @@ public class ApiSignatureAspect {
...
@@ -113,18 +230,21 @@ public class ApiSignatureAspect {
// 2. 检查 timestamp 是否超出允许的范围 (重点一:此处需要取绝对值)
// 2. 检查 timestamp 是否超出允许的范围 (重点一:此处需要取绝对值)
long
expireTime
=
signature
.
timeUnit
().
toMillis
(
signature
.
timeout
());
long
expireTime
=
signature
.
timeUnit
().
toMillis
(
signature
.
timeout
());
long
requestTimestamp
=
Long
.
parseLong
(
timestamp
);
long
requestTimestamp
=
Long
.
parseLong
(
timestamp
);
log
.
error
(
"当前时间:"
+
System
.
currentTimeMillis
()+
""
);;
long
timestampDisparity
=
Math
.
abs
(
System
.
currentTimeMillis
()
-
requestTimestamp
);
long
timestampDisparity
=
Math
.
abs
(
System
.
currentTimeMillis
()
-
requestTimestamp
);
if
(
timestampDisparity
>
expireTime
)
{
if
(
timestampDisparity
>
expireTime
)
{
return
false
;
throw
new
ServiceException
(
TIMESTAMP_EXCEPTION
)
;
}
}
// 3. 检查 nonce 是否存在,有且仅能使用一次
// 3. 检查 nonce 是否存在,有且仅能使用一次
return
signatureRedisDAO
.
getNonce
(
appId
,
nonce
)
==
null
;
return
signatureRedisDAO
.
getNonce
(
appId
,
nonce
)
==
null
;
}
}
/**
/**
* 构建签名字符串
* 构建签名字符串
*
<p>
*
* 格式为 = 请求参数 + 请求体 + 请求头 + 密钥
* 格式为 = 请求参数 + 请求体 + 请求头 + 密钥
*
*
* @param signature signature
* @param signature signature
...
@@ -133,13 +253,11 @@ public class ApiSignatureAspect {
...
@@ -133,13 +253,11 @@ public class ApiSignatureAspect {
* @return 签名字符串
* @return 签名字符串
*/
*/
private
String
buildSignatureString
(
ApiSignature
signature
,
HttpServletRequest
request
,
String
appSecret
)
{
private
String
buildSignatureString
(
ApiSignature
signature
,
HttpServletRequest
request
,
String
appSecret
)
{
SortedMap
<
String
,
String
>
parameterMap
=
getRequestParameterMap
(
request
);
// 请求头
SortedMap
<
String
,
String
>
headerMap
=
getRequestHeaderMap
(
signature
,
request
);
// 请求参数
SortedMap
<
String
,
String
>
headerMap
=
getRequestHeaderMap
(
signature
,
request
);
// 请求参数
String
requestBody
=
StrUtil
.
nullToDefault
(
ServletUtils
.
getBody
(
request
),
""
);
// 请求体
log
.
error
(
MapUtil
.
join
(
headerMap
,
"&"
,
"="
)
return
MapUtil
.
join
(
parameterMap
,
"&"
,
"="
)
+
"&appSecret="
+
appSecret
);
+
requestBody
return
MapUtil
.
join
(
headerMap
,
"&"
,
"="
)
+
MapUtil
.
join
(
headerMap
,
"&"
,
"="
)
+
"&appSecret="
+
appSecret
;
+
appSecret
;
}
}
/**
/**
...
...
computility-framework/computility-spring-boot-starter-protection/src/main/java/com/luhu/computility/framework/signature/core/redis/ApiSignatureRedisDAO.java
View file @
fd2d3871
...
@@ -25,6 +25,11 @@ public class ApiSignatureRedisDAO {
...
@@ -25,6 +25,11 @@ public class ApiSignatureRedisDAO {
private
static
final
String
SIGNATURE_NONCE
=
"api_signature_nonce:%s:%s"
;
private
static
final
String
SIGNATURE_NONCE
=
"api_signature_nonce:%s:%s"
;
/**
/**
* 用户套餐使用次数 Key 前缀
*/
public
static
final
String
USAGE_KEY
=
"api_usage:"
;
/**
* 签名密钥
* 签名密钥
* <p>
* <p>
* HASH 结构
* HASH 结构
...
@@ -54,4 +59,53 @@ public class ApiSignatureRedisDAO {
...
@@ -54,4 +59,53 @@ public class ApiSignatureRedisDAO {
return
(
String
)
stringRedisTemplate
.
opsForHash
().
get
(
SIGNATURE_APPID
,
appId
);
return
(
String
)
stringRedisTemplate
.
opsForHash
().
get
(
SIGNATURE_APPID
,
appId
);
}
}
// ========== 用户套餐使用次数 ==========
/**
* 原子自增用户套餐使用次数
*
* @param key Redis key(USAGE_KEY + apiEndpointId + userId)
* @return 当前使用次数
*/
public
Long
incrementUsage
(
String
key
)
{
return
stringRedisTemplate
.
opsForValue
().
increment
(
key
,
1
);
}
/**
* 获取用户套餐已使用次数
*
* @param key Redis key
* @return 使用次数
*/
public
Long
getUsage
(
String
key
)
{
String
value
=
stringRedisTemplate
.
opsForValue
().
get
(
key
);
if
(
value
==
null
)
{
return
0L
;
}
try
{
return
Long
.
parseLong
(
value
);
}
catch
(
NumberFormatException
e
)
{
return
0L
;
}
}
/**
* 重置用户套餐使用次数(可选,用于测试或套餐刷新)
*/
public
void
resetUsage
(
String
key
)
{
stringRedisTemplate
.
opsForValue
().
set
(
key
,
"0"
);
}
/**
* 增加用户套餐使用次数,并设置过期时间
*
* @param key Redis key
* @return 当前使用次数
*/
public
Integer
incrementUsageWithExpire
(
String
key
,
Long
consumptionPoints
)
{
Integer
used
=
stringRedisTemplate
.
opsForValue
().
increment
(
key
,
consumptionPoints
).
intValue
();
return
used
;
}
}
}
computility-module-apihub/computility-module-apihub-api/src/main/java/com/luhu/computility/module/apihub/api/apiorder/ApiOrderApi.java
View file @
fd2d3871
...
@@ -3,6 +3,7 @@ package com.luhu.computility.module.apihub.api.apiorder;
...
@@ -3,6 +3,7 @@ package com.luhu.computility.module.apihub.api.apiorder;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderPageReqDTO
;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderPageReqDTO
;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderRespDTO
;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderRespDTO
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -13,6 +14,6 @@ import java.util.List;
...
@@ -13,6 +14,6 @@ import java.util.List;
*/
*/
public
interface
ApiOrderApi
{
public
interface
ApiOrderApi
{
List
<
ApiOrderRespDTO
>
get
OrderList
(
ApiOrderPageReqDTO
apiOrderPageReqDTO
);
List
<
ApiOrderRespDTO
>
get
PaidOrderList
(
LocalDateTime
[]
timePeriod
);
}
}
computility-module-apihub/computility-module-apihub-api/src/main/java/com/luhu/computility/module/apihub/api/appcredential/AppCredentialApi.java
View file @
fd2d3871
...
@@ -3,7 +3,9 @@ package com.luhu.computility.module.apihub.api.appcredential;
...
@@ -3,7 +3,9 @@ package com.luhu.computility.module.apihub.api.appcredential;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderPageReqDTO
;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderPageReqDTO
;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderRespDTO
;
import
com.luhu.computility.module.apihub.api.apiorder.dto.ApiOrderRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialSaveReqDTO
;
import
javax.validation.Valid
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -22,4 +24,12 @@ public interface AppCredentialApi {
...
@@ -22,4 +24,12 @@ public interface AppCredentialApi {
*/
*/
AppCredentialRespDTO
getAppSecretByAppid
(
String
appId
);
AppCredentialRespDTO
getAppSecretByAppid
(
String
appId
);
/**
* 创建用户密钥信息
*
* @param createReqVO 创建信息
* @return 编号
*/
Long
createAppCredential
(
@Valid
AppCredentialSaveReqDTO
createReqVO
);
}
}
computility-module-apihub/computility-module-apihub-api/src/main/java/com/luhu/computility/module/apihub/api/appcredential/dto/AppCredentialSaveReqDTO.java
0 → 100644
View file @
fd2d3871
package
com
.
luhu
.
computility
.
module
.
apihub
.
api
.
appcredential
.
dto
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
@Schema
(
description
=
"管理后台 - 用户密钥信息新增/修改 Request VO"
)
@Data
public
class
AppCredentialSaveReqDTO
{
@Schema
(
description
=
"主键ID"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"8721"
)
private
Long
id
;
@Schema
(
description
=
"应用ID,唯一"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"23068"
)
@NotEmpty
(
message
=
"应用ID,唯一不能为空"
)
private
String
appId
;
@Schema
(
description
=
"AES加密后的应用密钥"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
)
@NotEmpty
(
message
=
"AES加密后的应用密钥不能为空"
)
private
String
appSecret
;
@Schema
(
description
=
"所属用户ID"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"11786"
)
@NotNull
(
message
=
"所属用户ID不能为空"
)
private
Long
userId
;
}
\ No newline at end of file
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/api/ApiOrderApiServiceImpl.java
View file @
fd2d3871
...
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
...
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.annotation.Validated
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -24,7 +25,7 @@ public class ApiOrderApiServiceImpl implements ApiOrderApi {
...
@@ -24,7 +25,7 @@ public class ApiOrderApiServiceImpl implements ApiOrderApi {
@Override
@Override
public
List
<
ApiOrderRespDTO
>
get
OrderList
(
ApiOrderPageReqDTO
apiOrderPageReqDTO
)
{
public
List
<
ApiOrderRespDTO
>
get
PaidOrderList
(
LocalDateTime
[]
timePeriod
)
{
return
apiOrderMapper
.
select
List
(
apiOrderPageReqDTO
);
return
apiOrderMapper
.
select
AllPaidList
(
timePeriod
);
}
}
}
}
\ No newline at end of file
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/api/AppCredentialApiServiceImpl.java
View file @
fd2d3871
package
com
.
luhu
.
computility
.
module
.
apihub
.
api
;
package
com
.
luhu
.
computility
.
module
.
apihub
.
api
;
import
com.luhu.computility.framework.common.util.object.BeanUtils
;
import
com.luhu.computility.module.apihub.api.apicalllog.dto.ApiCallLogPageReqDTO
;
import
com.luhu.computility.module.apihub.api.apicalllog.dto.ApiCallLogPageReqDTO
;
import
com.luhu.computility.module.apihub.api.apicalllog.dto.ApiCallLogRespDTO
;
import
com.luhu.computility.module.apihub.api.apicalllog.dto.ApiCallLogRespDTO
;
import
com.luhu.computility.module.apihub.api.apiendpoint.ApiEndpointApi
;
import
com.luhu.computility.module.apihub.api.apiendpoint.ApiEndpointApi
;
import
com.luhu.computility.module.apihub.api.appcredential.AppCredentialApi
;
import
com.luhu.computility.module.apihub.api.appcredential.AppCredentialApi
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialSaveReqDTO
;
import
com.luhu.computility.module.apihub.controller.admin.appcredential.vo.AppCredentialSaveReqVO
;
import
com.luhu.computility.module.apihub.dal.dataobject.appcredential.AppCredentialDO
;
import
com.luhu.computility.module.apihub.dal.dataobject.appcredential.AppCredentialDO
;
import
com.luhu.computility.module.apihub.dal.mysql.apicalllog.ApiCallLogMapper
;
import
com.luhu.computility.module.apihub.dal.mysql.apicalllog.ApiCallLogMapper
;
import
com.luhu.computility.module.apihub.dal.mysql.appcredential.AppCredentialMapper
;
import
com.luhu.computility.module.apihub.dal.mysql.appcredential.AppCredentialMapper
;
...
@@ -31,4 +34,15 @@ public class AppCredentialApiServiceImpl implements AppCredentialApi {
...
@@ -31,4 +34,15 @@ public class AppCredentialApiServiceImpl implements AppCredentialApi {
return
appCredentialMapper
.
selectOpenByAppId
(
appId
);
return
appCredentialMapper
.
selectOpenByAppId
(
appId
);
}
}
@Override
public
Long
createAppCredential
(
AppCredentialSaveReqDTO
createReqVO
)
{
// 插入
AppCredentialDO
appCredential
=
BeanUtils
.
toBean
(
createReqVO
,
AppCredentialDO
.
class
);
appCredentialMapper
.
insert
(
appCredential
);
// 返回
return
appCredential
.
getId
();
}
}
}
\ No newline at end of file
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/api/UserApiUsageApiServiceImpl.java
View file @
fd2d3871
...
@@ -46,7 +46,7 @@ public class UserApiUsageApiServiceImpl implements UserApiUsageApi {
...
@@ -46,7 +46,7 @@ public class UserApiUsageApiServiceImpl implements UserApiUsageApi {
throw
exception
(
USER_API_USAGE_NOT_EXISTS
);
throw
exception
(
USER_API_USAGE_NOT_EXISTS
);
}
}
UserApiUsageDO
userApiUsage
=
userApiUsageService
.
getUserApiUsage
(
id
);
UserApiUsageDO
userApiUsage
=
userApiUsageService
.
getUserApiUsage
(
id
);
userApiUsage
.
setUsedTimes
(
use
rApiUsage
.
getUsedTimes
()
-
use
d
);
userApiUsage
.
setUsedTimes
(
used
);
userApiUsageMapper
.
updateById
(
userApiUsage
);
userApiUsageMapper
.
updateById
(
userApiUsage
);
}
}
}
}
\ No newline at end of file
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/apiorder/ApiOrderController.java
View file @
fd2d3871
...
@@ -138,6 +138,7 @@ public class ApiOrderController {
...
@@ -138,6 +138,7 @@ public class ApiOrderController {
.
setPackageId
(
apiOrder
.
getPackageId
())
.
setPackageId
(
apiOrder
.
getPackageId
())
.
setPackageName
(
apiOrder
.
getPackageName
())
.
setPackageName
(
apiOrder
.
getPackageName
())
.
setPackageTimes
(
apiOrder
.
getPackageTimes
())
.
setPackageTimes
(
apiOrder
.
getPackageTimes
())
.
setUsedTimes
(
0
)
.
setPackageValidDays
(
apiOrder
.
getPackageValidDays
())
.
setPackageValidDays
(
apiOrder
.
getPackageValidDays
())
.
setUserId
(
apiOrder
.
getUserId
())
.
setUserId
(
apiOrder
.
getUserId
())
.
setExpireTime
(
DateUtil
.
offsetDay
(
new
Date
(),
apiOrder
.
getPackageTimes
()).
toLocalDateTime
()
)
.
setExpireTime
(
DateUtil
.
offsetDay
(
new
Date
(),
apiOrder
.
getPackageTimes
()).
toLocalDateTime
()
)
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/appcredential/AppCredentialController.java
View file @
fd2d3871
...
@@ -84,8 +84,7 @@ public class AppCredentialController {
...
@@ -84,8 +84,7 @@ public class AppCredentialController {
@Operation
(
summary
=
"获得用户密钥信息分页"
)
@Operation
(
summary
=
"获得用户密钥信息分页"
)
@PreAuthorize
(
"@ss.hasPermission('apihub:app-credential:query')"
)
@PreAuthorize
(
"@ss.hasPermission('apihub:app-credential:query')"
)
public
CommonResult
<
PageResult
<
AppCredentialRespVO
>>
getAppCredentialPage
(
@Valid
AppCredentialPageReqVO
pageReqVO
)
{
public
CommonResult
<
PageResult
<
AppCredentialRespVO
>>
getAppCredentialPage
(
@Valid
AppCredentialPageReqVO
pageReqVO
)
{
PageResult
<
AppCredentialDO
>
pageResult
=
appCredentialService
.
getAppCredentialPage
(
pageReqVO
);
return
success
(
appCredentialService
.
getAppCredentialPage
(
pageReqVO
));
return
success
(
BeanUtils
.
toBean
(
pageResult
,
AppCredentialRespVO
.
class
));
}
}
@GetMapping
(
"/export-excel"
)
@GetMapping
(
"/export-excel"
)
...
@@ -95,10 +94,10 @@ public class AppCredentialController {
...
@@ -95,10 +94,10 @@ public class AppCredentialController {
public
void
exportAppCredentialExcel
(
@Valid
AppCredentialPageReqVO
pageReqVO
,
public
void
exportAppCredentialExcel
(
@Valid
AppCredentialPageReqVO
pageReqVO
,
HttpServletResponse
response
)
throws
IOException
{
HttpServletResponse
response
)
throws
IOException
{
pageReqVO
.
setPageSize
(
PageParam
.
PAGE_SIZE_NONE
);
pageReqVO
.
setPageSize
(
PageParam
.
PAGE_SIZE_NONE
);
List
<
AppCredential
D
O
>
list
=
appCredentialService
.
getAppCredentialPage
(
pageReqVO
).
getList
();
List
<
AppCredential
RespV
O
>
list
=
appCredentialService
.
getAppCredentialPage
(
pageReqVO
).
getList
();
// 导出 Excel
// 导出 Excel
ExcelUtils
.
write
(
response
,
"用户密钥信息.xls"
,
"数据"
,
AppCredentialRespVO
.
class
,
ExcelUtils
.
write
(
response
,
"用户密钥信息.xls"
,
"数据"
,
AppCredentialRespVO
.
class
,
BeanUtils
.
toBean
(
list
,
AppCredentialRespVO
.
class
)
);
list
);
}
}
}
}
\ No newline at end of file
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/appcredential/vo/AppCredentialPageReqVO.java
View file @
fd2d3871
...
@@ -22,6 +22,9 @@ public class AppCredentialPageReqVO extends PageParam {
...
@@ -22,6 +22,9 @@ public class AppCredentialPageReqVO extends PageParam {
@Schema
(
description
=
"所属用户ID"
,
example
=
"11786"
)
@Schema
(
description
=
"所属用户ID"
,
example
=
"11786"
)
private
Long
userId
;
private
Long
userId
;
@Schema
(
description
=
"所属用户手机"
,
example
=
"11786"
)
private
String
userMobile
;
@Schema
(
description
=
"创建时间"
)
@Schema
(
description
=
"创建时间"
)
@DateTimeFormat
(
pattern
=
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
)
@DateTimeFormat
(
pattern
=
FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND
)
private
LocalDateTime
[]
createTime
;
private
LocalDateTime
[]
createTime
;
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/appcredential/vo/AppCredentialRespVO.java
View file @
fd2d3871
...
@@ -28,6 +28,10 @@ public class AppCredentialRespVO {
...
@@ -28,6 +28,10 @@ public class AppCredentialRespVO {
@ExcelProperty
(
"所属用户ID"
)
@ExcelProperty
(
"所属用户ID"
)
private
Long
userId
;
private
Long
userId
;
@Schema
(
description
=
"用户手机号"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"11786"
)
@ExcelProperty
(
"用户手机号"
)
private
String
userMobile
;
@Schema
(
description
=
"创建时间"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
)
@Schema
(
description
=
"创建时间"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
)
@ExcelProperty
(
"创建时间"
)
@ExcelProperty
(
"创建时间"
)
private
LocalDateTime
createTime
;
private
LocalDateTime
createTime
;
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/admin/userapiusage/vo/UserApiUsageSaveReqVO.java
View file @
fd2d3871
...
@@ -44,7 +44,6 @@ public class UserApiUsageSaveReqVO {
...
@@ -44,7 +44,6 @@ public class UserApiUsageSaveReqVO {
@Schema
(
description
=
"已使用次数"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
)
@Schema
(
description
=
"已使用次数"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
)
@NotNull
(
message
=
"已使用次数不能为空"
)
private
Integer
usedTimes
;
private
Integer
usedTimes
;
@Schema
(
description
=
"过期时间"
)
@Schema
(
description
=
"过期时间"
)
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/controller/app/apiorder/AppApiOrderController.java
View file @
fd2d3871
...
@@ -52,6 +52,7 @@ public class AppApiOrderController {
...
@@ -52,6 +52,7 @@ public class AppApiOrderController {
@GetMapping
(
"/page"
)
@GetMapping
(
"/page"
)
@Operation
(
summary
=
"获得api订单分页"
)
@Operation
(
summary
=
"获得api订单分页"
)
public
CommonResult
<
PageResult
<
AppApiOrderRespVO
>>
getApiOrderPage
(
@Valid
AppApiOrderPageReqVO
pageReqVO
)
{
public
CommonResult
<
PageResult
<
AppApiOrderRespVO
>>
getApiOrderPage
(
@Valid
AppApiOrderPageReqVO
pageReqVO
)
{
pageReqVO
.
setUserId
(
SecurityFrameworkUtils
.
getLoginUser
().
getId
());
PageResult
<
ApiOrderDO
>
pageResult
=
apiOrderService
.
getAppApiOrderPage
(
pageReqVO
);
PageResult
<
ApiOrderDO
>
pageResult
=
apiOrderService
.
getAppApiOrderPage
(
pageReqVO
);
PageResult
<
AppApiOrderRespVO
>
appApiOrderRespVOPageResult
PageResult
<
AppApiOrderRespVO
>
appApiOrderRespVOPageResult
=
BeanUtils
.
toBean
(
pageResult
,
AppApiOrderRespVO
.
class
);
=
BeanUtils
.
toBean
(
pageResult
,
AppApiOrderRespVO
.
class
);
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/dal/mysql/apiorder/ApiOrderMapper.java
View file @
fd2d3871
package
com
.
luhu
.
computility
.
module
.
apihub
.
dal
.
mysql
.
apiorder
;
package
com
.
luhu
.
computility
.
module
.
apihub
.
dal
.
mysql
.
apiorder
;
import
java.time.LocalDateTime
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.luhu.computility.framework.common.pojo.PageResult
;
import
com.luhu.computility.framework.common.pojo.PageResult
;
...
@@ -41,23 +43,11 @@ public interface ApiOrderMapper extends BaseMapperX<ApiOrderDO> {
...
@@ -41,23 +43,11 @@ public interface ApiOrderMapper extends BaseMapperX<ApiOrderDO> {
.
orderByDesc
(
ApiOrderDO:
:
getId
));
.
orderByDesc
(
ApiOrderDO:
:
getId
));
}
}
default
List
<
ApiOrderRespDTO
>
select
List
(
ApiOrderPageReqDTO
reqVO
)
{
default
List
<
ApiOrderRespDTO
>
select
AllPaidList
(
LocalDateTime
[]
timePeriod
)
{
List
<
ApiOrderDO
>
list
=
selectList
(
new
LambdaQueryWrapperX
<
ApiOrderDO
>()
List
<
ApiOrderDO
>
list
=
selectList
(
new
LambdaQueryWrapperX
<
ApiOrderDO
>()
.
eqIfPresent
(
ApiOrderDO:
:
getUserId
,
reqVO
.
getUserId
())
.
eqIfPresent
(
ApiOrderDO:
:
getApiId
,
reqVO
.
getApiId
())
.
eqIfPresent
(
ApiOrderDO:
:
getPackageId
,
reqVO
.
getPackageId
())
.
eqIfPresent
(
ApiOrderDO:
:
getOrderNo
,
reqVO
.
getOrderNo
())
.
eq
(
ApiOrderDO:
:
getStatus
,
ApiOrderStatus
.
PAID
.
getValue
())
.
eq
(
ApiOrderDO:
:
getStatus
,
ApiOrderStatus
.
PAID
.
getValue
())
.
eqIfPresent
(
ApiOrderDO:
:
getPayOrderId
,
reqVO
.
getPayOrderId
())
.
betweenIfPresent
(
ApiOrderDO:
:
getCreateTime
,
timePeriod
));
.
betweenIfPresent
(
ApiOrderDO:
:
getPayTime
,
reqVO
.
getPayTime
())
return
BeanUtil
.
copyToList
(
list
,
ApiOrderRespDTO
.
class
);
.
eqIfPresent
(
ApiOrderDO:
:
getPayChannelCode
,
reqVO
.
getPayChannelCode
())
.
betweenIfPresent
(
ApiOrderDO:
:
getCreateTime
,
reqVO
.
getCreateTime
())
.
orderByDesc
(
ApiOrderDO:
:
getId
));
return
list
.
stream
().
map
(
doObj
->
{
ApiOrderRespDTO
dto
=
new
ApiOrderRespDTO
();
BeanUtils
.
copyProperties
(
doObj
,
dto
);
return
dto
;
}).
collect
(
Collectors
.
toList
());
}
}
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/dal/mysql/appcredential/AppCredentialMapper.java
View file @
fd2d3871
...
@@ -6,8 +6,10 @@ import com.luhu.computility.framework.common.pojo.PageResult;
...
@@ -6,8 +6,10 @@ import com.luhu.computility.framework.common.pojo.PageResult;
import
com.luhu.computility.framework.common.util.object.BeanUtils
;
import
com.luhu.computility.framework.common.util.object.BeanUtils
;
import
com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX
;
import
com.luhu.computility.framework.mybatis.core.query.LambdaQueryWrapperX
;
import
com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX
;
import
com.luhu.computility.framework.mybatis.core.mapper.BaseMapperX
;
import
com.luhu.computility.framework.mybatis.core.query.MPJLambdaWrapperX
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialRespDTO
;
import
com.luhu.computility.module.apihub.dal.dataobject.appcredential.AppCredentialDO
;
import
com.luhu.computility.module.apihub.dal.dataobject.appcredential.AppCredentialDO
;
import
com.luhu.computility.module.member.dal.dataobject.user.MemberUserDO
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Mapper
;
import
com.luhu.computility.module.apihub.controller.admin.appcredential.vo.*
;
import
com.luhu.computility.module.apihub.controller.admin.appcredential.vo.*
;
...
@@ -19,13 +21,13 @@ import com.luhu.computility.module.apihub.controller.admin.appcredential.vo.*;
...
@@ -19,13 +21,13 @@ import com.luhu.computility.module.apihub.controller.admin.appcredential.vo.*;
@Mapper
@Mapper
public
interface
AppCredentialMapper
extends
BaseMapperX
<
AppCredentialDO
>
{
public
interface
AppCredentialMapper
extends
BaseMapperX
<
AppCredentialDO
>
{
default
PageResult
<
AppCredential
D
O
>
selectPage
(
AppCredentialPageReqVO
reqVO
)
{
default
PageResult
<
AppCredential
RespV
O
>
selectPage
(
AppCredentialPageReqVO
reqVO
)
{
return
select
Page
(
reqVO
,
new
LambdaQuery
WrapperX
<
AppCredentialDO
>()
return
select
JoinPage
(
reqVO
,
AppCredentialRespVO
.
class
,
new
MPJLambda
WrapperX
<
AppCredentialDO
>()
.
eqIfPresent
(
AppCredentialDO:
:
getAppId
,
reqVO
.
getAppId
()
)
.
selectAll
(
AppCredentialDO
.
class
)
.
eqIfPresent
(
AppCredentialDO:
:
getAppSecret
,
reqVO
.
getAppSecret
()
)
.
selectAs
(
MemberUserDO:
:
getMobile
,
AppCredentialRespVO:
:
getUserMobile
)
.
eqIfPresent
(
AppCredentialDO:
:
getUserId
,
reqVO
.
getUserId
()
)
.
leftJoin
(
MemberUserDO
.
class
,
MemberUserDO:
:
getId
,
AppCredentialDO:
:
getUserId
)
.
betweenIfPresent
(
AppCredentialDO:
:
getCreateTime
,
reqVO
.
getCreateTim
e
())
.
eqIfPresent
(
MemberUserDO:
:
getMobile
,
reqVO
.
getUserMobil
e
())
.
orderByDesc
(
AppCredentialDO:
:
get
Id
));
.
orderByDesc
(
AppCredentialDO:
:
get
CreateTime
));
}
}
default
AppCredentialDO
selectOneByAppId
(
String
appId
)
{
default
AppCredentialDO
selectOneByAppId
(
String
appId
)
{
...
@@ -38,7 +40,6 @@ public interface AppCredentialMapper extends BaseMapperX<AppCredentialDO> {
...
@@ -38,7 +40,6 @@ public interface AppCredentialMapper extends BaseMapperX<AppCredentialDO> {
AppCredentialDO
appCredentialDO
=
selectOne
(
new
LambdaQueryWrapperX
<
AppCredentialDO
>()
AppCredentialDO
appCredentialDO
=
selectOne
(
new
LambdaQueryWrapperX
<
AppCredentialDO
>()
.
eqIfPresent
(
AppCredentialDO:
:
getAppId
,
appId
));
.
eqIfPresent
(
AppCredentialDO:
:
getAppId
,
appId
));
return
BeanUtils
.
toBean
(
appCredentialDO
,
AppCredentialRespDTO
.
class
);
return
BeanUtils
.
toBean
(
appCredentialDO
,
AppCredentialRespDTO
.
class
);
}
}
}
}
\ No newline at end of file
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/service/appcredential/AppCredentialService.java
View file @
fd2d3871
...
@@ -57,7 +57,7 @@ public interface AppCredentialService {
...
@@ -57,7 +57,7 @@ public interface AppCredentialService {
* @param pageReqVO 分页查询
* @param pageReqVO 分页查询
* @return 用户密钥信息分页
* @return 用户密钥信息分页
*/
*/
PageResult
<
AppCredential
D
O
>
getAppCredentialPage
(
AppCredentialPageReqVO
pageReqVO
);
PageResult
<
AppCredential
RespV
O
>
getAppCredentialPage
(
AppCredentialPageReqVO
pageReqVO
);
/**
/**
...
...
computility-module-apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub/service/appcredential/AppCredentialServiceImpl.java
View file @
fd2d3871
...
@@ -74,7 +74,7 @@ public class AppCredentialServiceImpl implements AppCredentialService {
...
@@ -74,7 +74,7 @@ public class AppCredentialServiceImpl implements AppCredentialService {
}
}
@Override
@Override
public
PageResult
<
AppCredential
D
O
>
getAppCredentialPage
(
AppCredentialPageReqVO
pageReqVO
)
{
public
PageResult
<
AppCredential
RespV
O
>
getAppCredentialPage
(
AppCredentialPageReqVO
pageReqVO
)
{
return
appCredentialMapper
.
selectPage
(
pageReqVO
);
return
appCredentialMapper
.
selectPage
(
pageReqVO
);
}
}
...
...
computility-module-biz/computility-module-biz-biz/src/main/java/com/luhu/computility/module/biz/service/home/HomeIndexServiceImpl.java
View file @
fd2d3871
...
@@ -259,7 +259,7 @@ public class HomeIndexServiceImpl implements HomeIndexService {
...
@@ -259,7 +259,7 @@ public class HomeIndexServiceImpl implements HomeIndexService {
ApiOrderPageReqDTO
apiOrderPageReqDTO
=
new
ApiOrderPageReqDTO
();
ApiOrderPageReqDTO
apiOrderPageReqDTO
=
new
ApiOrderPageReqDTO
();
apiOrderPageReqDTO
.
setCreateTime
(
todayLocalDateTime
);
apiOrderPageReqDTO
.
setCreateTime
(
todayLocalDateTime
);
List
<
ApiOrderRespDTO
>
apiOrderList
=
apiOrderApi
.
get
OrderList
(
apiOrderPageReqDTO
);
List
<
ApiOrderRespDTO
>
apiOrderList
=
apiOrderApi
.
get
PaidOrderList
(
todayLocalDateTime
);
HomeIndexTopBarRespVO
homeIndexTopBarRespVO
=
new
HomeIndexTopBarRespVO
();
HomeIndexTopBarRespVO
homeIndexTopBarRespVO
=
new
HomeIndexTopBarRespVO
();
...
@@ -326,7 +326,7 @@ public class HomeIndexServiceImpl implements HomeIndexService {
...
@@ -326,7 +326,7 @@ public class HomeIndexServiceImpl implements HomeIndexService {
// API订单:已支付状态
// API订单:已支付状态
ApiOrderPageReqDTO
apiOrderPageReqDTO
=
new
ApiOrderPageReqDTO
();
ApiOrderPageReqDTO
apiOrderPageReqDTO
=
new
ApiOrderPageReqDTO
();
apiOrderPageReqDTO
.
setCreateTime
(
allTimePeriod
);
apiOrderPageReqDTO
.
setCreateTime
(
allTimePeriod
);
List
<
ApiOrderRespDTO
>
apiOrderList
=
apiOrderApi
.
get
OrderList
(
apiOrderPageReqDTO
);
List
<
ApiOrderRespDTO
>
apiOrderList
=
apiOrderApi
.
get
PaidOrderList
(
allTimePeriod
);
// 3. 按节点分组统计:数量 + 金额
// 3. 按节点分组统计:数量 + 金额
Map
<
LocalDate
,
Long
>
computeCountMap
=
groupOrderByNode
(
computeOrderList
,
timeNodes
,
dateType
);
Map
<
LocalDate
,
Long
>
computeCountMap
=
groupOrderByNode
(
computeOrderList
,
timeNodes
,
dateType
);
...
...
computility-module-external/src/main/java/com/luhu/computility/module/external/controller/openapi/AigcNewApiController.java
View file @
fd2d3871
...
@@ -8,7 +8,6 @@ import com.luhu.computility.framework.common.exception.enums.GlobalResponseCodeC
...
@@ -8,7 +8,6 @@ import com.luhu.computility.framework.common.exception.enums.GlobalResponseCodeC
import
com.luhu.computility.framework.common.pojo.CommonResult
;
import
com.luhu.computility.framework.common.pojo.CommonResult
;
import
com.luhu.computility.framework.common.util.http.HttpUtils
;
import
com.luhu.computility.framework.common.util.http.HttpUtils
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.module.apihub.signature.core.annotation.ApiHubApiSignature
;
import
com.luhu.computility.module.external.controller.openapi.dto.ImageRespDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.ImageRespDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.PoetryImageReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.PoetryImageReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.TextToImageReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.TextToImageReqDTO
;
...
@@ -49,7 +48,7 @@ public class AigcNewApiController {
...
@@ -49,7 +48,7 @@ public class AigcNewApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
value
=
"/text-to-image/season"
)
@PostMapping
(
value
=
"/text-to-image/season"
)
@Operation
(
summary
=
"四季和景点id生成图"
,
description
=
"接收简单生图参数,将生成图片保存在本地服务器,并返回生成图片的url"
)
@Operation
(
summary
=
"四季和景点id生成图"
,
description
=
"接收简单生图参数,将生成图片保存在本地服务器,并返回生成图片的url"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ImageRespDTO
>
textToImageV2
(
@RequestBody
TextToImageReqDTO
textToImageReqDTO
){
public
CommonResult
<
ImageRespDTO
>
textToImageV2
(
@RequestBody
TextToImageReqDTO
textToImageReqDTO
){
try
{
try
{
String
requestBody
=
JSONUtil
.
toJsonStr
(
textToImageReqDTO
);
String
requestBody
=
JSONUtil
.
toJsonStr
(
textToImageReqDTO
);
...
@@ -73,7 +72,7 @@ public class AigcNewApiController {
...
@@ -73,7 +72,7 @@ public class AigcNewApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
"/text-to-image/poetry"
)
@PostMapping
(
"/text-to-image/poetry"
)
@Operation
(
summary
=
"获取藏头诗图片"
,
description
=
"接收关键词、景点id、省份id这些参数,返回藏头诗图片url"
)
@Operation
(
summary
=
"获取藏头诗图片"
,
description
=
"接收关键词、景点id、省份id这些参数,返回藏头诗图片url"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ImageRespDTO
>
textToImageByPoetry
(
@RequestBody
PoetryImageReqDTO
poetryImageReqDTO
){
public
CommonResult
<
ImageRespDTO
>
textToImageByPoetry
(
@RequestBody
PoetryImageReqDTO
poetryImageReqDTO
){
try
{
try
{
String
requestBody
=
JSONUtil
.
toJsonStr
(
poetryImageReqDTO
);
String
requestBody
=
JSONUtil
.
toJsonStr
(
poetryImageReqDTO
);
...
...
computility-module-external/src/main/java/com/luhu/computility/module/external/controller/openapi/AigcOldApiController.java
View file @
fd2d3871
...
@@ -8,7 +8,6 @@ import com.luhu.computility.framework.common.exception.enums.GlobalResponseCodeC
...
@@ -8,7 +8,6 @@ import com.luhu.computility.framework.common.exception.enums.GlobalResponseCodeC
import
com.luhu.computility.framework.common.pojo.CommonResult
;
import
com.luhu.computility.framework.common.pojo.CommonResult
;
import
com.luhu.computility.framework.common.util.http.HttpUtils
;
import
com.luhu.computility.framework.common.util.http.HttpUtils
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.module.apihub.signature.core.annotation.ApiHubApiSignature
;
import
com.luhu.computility.module.external.controller.openapi.dto.ImageRespDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.ImageRespDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.PoetryImageReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.PoetryImageReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.TextToImageReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.TextToImageReqDTO
;
...
@@ -50,7 +49,7 @@ public class AigcOldApiController {
...
@@ -50,7 +49,7 @@ public class AigcOldApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
value
=
"/text-to-image/season"
)
@PostMapping
(
value
=
"/text-to-image/season"
)
@Operation
(
summary
=
"四季和景点id生成图"
,
description
=
"接收简单生图参数,将生成图片保存在本地服务器,并返回生成图片的url"
)
@Operation
(
summary
=
"四季和景点id生成图"
,
description
=
"接收简单生图参数,将生成图片保存在本地服务器,并返回生成图片的url"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ImageRespDTO
>
textToImageBySeason
(
@RequestBody
TextToImageReqDTO
textToImageReqDTO
){
public
CommonResult
<
ImageRespDTO
>
textToImageBySeason
(
@RequestBody
TextToImageReqDTO
textToImageReqDTO
){
try
{
try
{
String
requestBody
=
JSONUtil
.
toJsonStr
(
textToImageReqDTO
);
String
requestBody
=
JSONUtil
.
toJsonStr
(
textToImageReqDTO
);
...
@@ -74,7 +73,7 @@ public class AigcOldApiController {
...
@@ -74,7 +73,7 @@ public class AigcOldApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
"/text-to-image/poetry"
)
@PostMapping
(
"/text-to-image/poetry"
)
@Operation
(
summary
=
"获取藏头诗图片"
,
description
=
"接收关键词、景点id、省份id这些参数,返回藏头诗图片url"
)
@Operation
(
summary
=
"获取藏头诗图片"
,
description
=
"接收关键词、景点id、省份id这些参数,返回藏头诗图片url"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ImageRespDTO
>
textToImageByPoetry
(
@RequestBody
PoetryImageReqDTO
poetryImageReqDTO
){
public
CommonResult
<
ImageRespDTO
>
textToImageByPoetry
(
@RequestBody
PoetryImageReqDTO
poetryImageReqDTO
){
try
{
try
{
String
requestBody
=
JSONUtil
.
toJsonStr
(
poetryImageReqDTO
);
String
requestBody
=
JSONUtil
.
toJsonStr
(
poetryImageReqDTO
);
...
...
computility-module-external/src/main/java/com/luhu/computility/module/external/controller/openapi/OpenApiController.java
View file @
fd2d3871
...
@@ -3,7 +3,6 @@ package com.luhu.computility.module.external.controller.openapi;
...
@@ -3,7 +3,6 @@ package com.luhu.computility.module.external.controller.openapi;
import
com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog
;
import
com.luhu.computility.framework.apilog.core.annotation.ApiAccessLog
;
import
com.luhu.computility.framework.common.pojo.CommonResult
;
import
com.luhu.computility.framework.common.pojo.CommonResult
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.framework.signature.core.annotation.ApiSignature
;
import
com.luhu.computility.module.apihub.signature.core.annotation.ApiHubApiSignature
;
import
com.luhu.computility.module.external.controller.openapi.dto.AIQAReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.AIQAReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.AIQARespDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.AIQARespDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.CeateVideoStreamReqDTO
;
import
com.luhu.computility.module.external.controller.openapi.dto.CeateVideoStreamReqDTO
;
...
@@ -52,7 +51,7 @@ public class OpenApiController {
...
@@ -52,7 +51,7 @@ public class OpenApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
value
=
"/digital-human-conversation"
)
@PostMapping
(
value
=
"/digital-human-conversation"
)
@Operation
(
summary
=
"数字人对话"
,
description
=
"和数字人朱熹进行一问一答的对话"
)
@Operation
(
summary
=
"数字人对话"
,
description
=
"和数字人朱熹进行一问一答的对话"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ConversationRespDTO
>
digitalHumanConversation
(
@RequestBody
ConversationReqDTO
conversationReqDTO
){
public
CommonResult
<
ConversationRespDTO
>
digitalHumanConversation
(
@RequestBody
ConversationReqDTO
conversationReqDTO
){
return
openApiService
.
digitalHumanConversation
(
conversationReqDTO
);
return
openApiService
.
digitalHumanConversation
(
conversationReqDTO
);
}
}
...
@@ -65,7 +64,7 @@ public class OpenApiController {
...
@@ -65,7 +64,7 @@ public class OpenApiController {
@Parameter
(
name
=
"url"
,
description
=
"图片链接"
)
@Parameter
(
name
=
"url"
,
description
=
"图片链接"
)
})
})
@Operation
(
summary
=
"ai换脸-上传图片"
,
description
=
"用户上传头像将视频中人物头像替换"
)
@Operation
(
summary
=
"ai换脸-上传图片"
,
description
=
"用户上传头像将视频中人物头像替换"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
UploadImageRespDTO
>
uploadFaceSwapImage
(
@RequestPart
(
value
=
"image"
,
required
=
false
)
MultipartFile
image
,
public
CommonResult
<
UploadImageRespDTO
>
uploadFaceSwapImage
(
@RequestPart
(
value
=
"image"
,
required
=
false
)
MultipartFile
image
,
@RequestParam
(
value
=
"url"
,
required
=
false
)
String
url
)
{
@RequestParam
(
value
=
"url"
,
required
=
false
)
String
url
)
{
return
openApiService
.
uploadFaceSwapImage
(
image
,
url
);
return
openApiService
.
uploadFaceSwapImage
(
image
,
url
);
...
@@ -75,7 +74,7 @@ public class OpenApiController {
...
@@ -75,7 +74,7 @@ public class OpenApiController {
@ApiAccessLog
@ApiAccessLog
@GetMapping
(
"/create-video-stream"
)
@GetMapping
(
"/create-video-stream"
)
@Operation
(
summary
=
"ai换脸-生成换脸工作流"
,
description
=
"只有先上传图片才能开始换脸工作流,用户根据promptId取最后生成的视频"
)
@Operation
(
summary
=
"ai换脸-生成换脸工作流"
,
description
=
"只有先上传图片才能开始换脸工作流,用户根据promptId取最后生成的视频"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
CeateVideoStreamRespDTO
>
ceateVideoStream
(
@RequestBody
CeateVideoStreamReqDTO
ceateVideoStreamReqDTO
){
public
CommonResult
<
CeateVideoStreamRespDTO
>
ceateVideoStream
(
@RequestBody
CeateVideoStreamReqDTO
ceateVideoStreamReqDTO
){
return
openApiService
.
ceateVideoStream
(
ceateVideoStreamReqDTO
);
return
openApiService
.
ceateVideoStream
(
ceateVideoStreamReqDTO
);
}
}
...
@@ -84,7 +83,7 @@ public class OpenApiController {
...
@@ -84,7 +83,7 @@ public class OpenApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
value
=
"/generate-face-swap-image"
,
consumes
=
MediaType
.
MULTIPART_FORM_DATA_VALUE
)
@PostMapping
(
value
=
"/generate-face-swap-image"
,
consumes
=
MediaType
.
MULTIPART_FORM_DATA_VALUE
)
@Operation
(
summary
=
"ai换脸-图片换脸:上传图+图片生成"
,
description
=
"ai换脸-图片换脸:上传图片+图片生成"
)
@Operation
(
summary
=
"ai换脸-图片换脸:上传图+图片生成"
,
description
=
"ai换脸-图片换脸:上传图片+图片生成"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
GenerateFaceSwapRespDTO
>
faceImageGenerate
(
@RequestPart
(
value
=
"sourceImage"
,
required
=
false
)
MultipartFile
sourceImage
,
public
CommonResult
<
GenerateFaceSwapRespDTO
>
faceImageGenerate
(
@RequestPart
(
value
=
"sourceImage"
,
required
=
false
)
MultipartFile
sourceImage
,
@RequestParam
(
value
=
"sourceImageUrl"
,
required
=
false
)
String
sourceImageUrl
,
@RequestParam
(
value
=
"sourceImageUrl"
,
required
=
false
)
String
sourceImageUrl
,
@RequestPart
(
value
=
"targetImage"
,
required
=
false
)
MultipartFile
targetImage
,
@RequestPart
(
value
=
"targetImage"
,
required
=
false
)
MultipartFile
targetImage
,
...
@@ -96,7 +95,7 @@ public class OpenApiController {
...
@@ -96,7 +95,7 @@ public class OpenApiController {
@ApiAccessLog
@ApiAccessLog
@GetMapping
(
"/view-image"
)
@GetMapping
(
"/view-image"
)
@Operation
(
summary
=
"根据promptId取换脸后的图"
,
description
=
"根据promptId取换脸后的图"
)
@Operation
(
summary
=
"根据promptId取换脸后的图"
,
description
=
"根据promptId取换脸后的图"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ViewSourceRespDTO
>
viewImage
(
@RequestBody
ViewImageReqDTO
viewImageReqDTO
){
public
CommonResult
<
ViewSourceRespDTO
>
viewImage
(
@RequestBody
ViewImageReqDTO
viewImageReqDTO
){
return
openApiService
.
viewImage
(
viewImageReqDTO
);
return
openApiService
.
viewImage
(
viewImageReqDTO
);
}
}
...
@@ -109,7 +108,7 @@ public class OpenApiController {
...
@@ -109,7 +108,7 @@ public class OpenApiController {
@Parameter
(
name
=
"url"
,
description
=
"图片链接"
)
@Parameter
(
name
=
"url"
,
description
=
"图片链接"
)
})
})
@Operation
(
summary
=
"ai换脸-视频换脸;ai换脸-上传图片+视频流生成"
,
description
=
"ai换脸-上传图片+视频流生成"
)
@Operation
(
summary
=
"ai换脸-视频换脸;ai换脸-上传图片+视频流生成"
,
description
=
"ai换脸-上传图片+视频流生成"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
GenerateFaceSwapRespDTO
>
faceVideoGenerate
(
@RequestPart
(
value
=
"image"
,
required
=
false
)
MultipartFile
image
,
public
CommonResult
<
GenerateFaceSwapRespDTO
>
faceVideoGenerate
(
@RequestPart
(
value
=
"image"
,
required
=
false
)
MultipartFile
image
,
@RequestParam
(
value
=
"url"
,
required
=
false
)
String
url
)
{
@RequestParam
(
value
=
"url"
,
required
=
false
)
String
url
)
{
return
openApiService
.
faceVideoGenerate
(
image
,
url
);
return
openApiService
.
faceVideoGenerate
(
image
,
url
);
...
@@ -119,7 +118,7 @@ public class OpenApiController {
...
@@ -119,7 +118,7 @@ public class OpenApiController {
@ApiAccessLog
@ApiAccessLog
@GetMapping
(
"/view-video"
)
@GetMapping
(
"/view-video"
)
@Operation
(
summary
=
"根据promptId取最后生成的视频"
,
description
=
"根据promptId取最后生成的视频"
)
@Operation
(
summary
=
"根据promptId取最后生成的视频"
,
description
=
"根据promptId取最后生成的视频"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
ViewSourceRespDTO
>
viewVideo
(
@RequestBody
ViewVideoReqDTO
viewVideoReqDTO
){
public
CommonResult
<
ViewSourceRespDTO
>
viewVideo
(
@RequestBody
ViewVideoReqDTO
viewVideoReqDTO
){
return
openApiService
.
viewVideo
(
viewVideoReqDTO
);
return
openApiService
.
viewVideo
(
viewVideoReqDTO
);
}
}
...
@@ -134,7 +133,7 @@ public class OpenApiController {
...
@@ -134,7 +133,7 @@ public class OpenApiController {
@Parameter
(
name
=
"touristAreaId"
,
description
=
"景点编码"
)
@Parameter
(
name
=
"touristAreaId"
,
description
=
"景点编码"
)
})
})
@Operation
(
summary
=
"图片拍照-相似图查找"
,
description
=
"图片拍照-相似图查找"
)
@Operation
(
summary
=
"图片拍照-相似图查找"
,
description
=
"图片拍照-相似图查找"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
List
<
MatchImageRespDTO
>>
matchImage
(
@RequestPart
(
value
=
"image"
,
required
=
false
)
MultipartFile
image
public
CommonResult
<
List
<
MatchImageRespDTO
>>
matchImage
(
@RequestPart
(
value
=
"image"
,
required
=
false
)
MultipartFile
image
,
@RequestParam
(
value
=
"url"
,
required
=
false
)
String
url
,
@RequestParam
(
value
=
"url"
,
required
=
false
)
String
url
,
@RequestParam
(
value
=
"limit"
,
required
=
false
)
Integer
limit
,
@RequestParam
(
value
=
"limit"
,
required
=
false
)
Integer
limit
...
@@ -148,7 +147,7 @@ public class OpenApiController {
...
@@ -148,7 +147,7 @@ public class OpenApiController {
@ApiAccessLog
@ApiAccessLog
@PostMapping
(
"/AIQA-chat"
)
@PostMapping
(
"/AIQA-chat"
)
@Operation
(
summary
=
"AI问答"
,
description
=
"AI助手,关于行程和景区的疑问"
)
@Operation
(
summary
=
"AI问答"
,
description
=
"AI助手,关于行程和景区的疑问"
)
@Api
HubApi
Signature
@ApiSignature
public
CommonResult
<
AIQARespDTO
>
AIQAChat
(
@RequestBody
AIQAReqDTO
aiqaReqDTO
){
public
CommonResult
<
AIQARespDTO
>
AIQAChat
(
@RequestBody
AIQAReqDTO
aiqaReqDTO
){
return
openApiService
.
AIQAChat
(
aiqaReqDTO
);
return
openApiService
.
AIQAChat
(
aiqaReqDTO
);
}
}
...
...
computility-module-member/pom.xml
View file @
fd2d3871
...
@@ -20,6 +20,11 @@
...
@@ -20,6 +20,11 @@
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
com.luhu
</groupId>
<groupId>
com.luhu
</groupId>
<artifactId>
computility-module-apihub-api
</artifactId>
<version>
${revision}
</version>
</dependency>
<dependency>
<groupId>
com.luhu
</groupId>
<artifactId>
computility-module-system
</artifactId>
<artifactId>
computility-module-system
</artifactId>
<version>
${revision}
</version>
<version>
${revision}
</version>
</dependency>
</dependency>
...
...
computility-module-member/src/main/java/com/luhu/computility/module/member/mq/producer/user/MemberUserProducer.java
View file @
fd2d3871
package
com
.
luhu
.
computility
.
module
.
member
.
mq
.
producer
.
user
;
package
com
.
luhu
.
computility
.
module
.
member
.
mq
.
producer
.
user
;
import
com.luhu.computility.module.apihub.api.appcredential.AppCredentialApi
;
import
com.luhu.computility.module.apihub.api.appcredential.dto.AppCredentialSaveReqDTO
;
import
com.luhu.computility.module.member.api.message.user.MemberUserCreateMessage
;
import
com.luhu.computility.module.member.api.message.user.MemberUserCreateMessage
;
import
com.luhu.computility.module.member.utils.AppKeyGenerator
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -19,6 +22,9 @@ public class MemberUserProducer {
...
@@ -19,6 +22,9 @@ public class MemberUserProducer {
@Resource
@Resource
private
ApplicationContext
applicationContext
;
private
ApplicationContext
applicationContext
;
@Resource
private
AppCredentialApi
appCredentialApi
;
/**
/**
* 发送 {@link MemberUserCreateMessage} 消息
* 发送 {@link MemberUserCreateMessage} 消息
*
*
...
@@ -26,6 +32,10 @@ public class MemberUserProducer {
...
@@ -26,6 +32,10 @@ public class MemberUserProducer {
*/
*/
public
void
sendUserCreateMessage
(
Long
userId
)
{
public
void
sendUserCreateMessage
(
Long
userId
)
{
applicationContext
.
publishEvent
(
new
MemberUserCreateMessage
().
setUserId
(
userId
));
applicationContext
.
publishEvent
(
new
MemberUserCreateMessage
().
setUserId
(
userId
));
appCredentialApi
.
createAppCredential
(
new
AppCredentialSaveReqDTO
()
.
setAppId
(
AppKeyGenerator
.
generateAppId
())
.
setUserId
(
userId
)
.
setAppSecret
(
AppKeyGenerator
.
generateAppSecret
()));
}
}
}
}
computility-module-
apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub
/utils/AppKeyGenerator.java
→
computility-module-
member/src/main/java/com/luhu/computility/module/member
/utils/AppKeyGenerator.java
View file @
fd2d3871
package
com
.
luhu
.
computility
.
module
.
apihub
.
utils
;
package
com
.
luhu
.
computility
.
module
.
member
.
utils
;
import
cn.hutool.crypto.digest.DigestUtil
;
import
cn.hutool.crypto.digest.DigestUtil
;
...
...
computility-module-
apihub/computility-module-apihub-biz/src/main/java/com/luhu/computility/module/apihub
/utils/AppSecretEncrypt.java
→
computility-module-
member/src/main/java/com/luhu/computility/module/member
/utils/AppSecretEncrypt.java
View file @
fd2d3871
package
com
.
luhu
.
computility
.
module
.
apihub
.
utils
;
package
com
.
luhu
.
computility
.
module
.
member
.
utils
;
import
cn.hutool.crypto.Mode
;
import
cn.hutool.crypto.Mode
;
import
cn.hutool.crypto.Padding
;
import
cn.hutool.crypto.Padding
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment