Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-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
04fe42c6
authored
Nov 12, 2023
by
CaIon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复余额不足邮件提醒bug
parent
2c9b83fd
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
40 additions
and
39 deletions
+40
-39
controller/relay-audio.go
+2
-2
controller/relay-image.go
+1
-1
controller/relay-mj.go
+1
-1
controller/relay-text.go
+3
-3
model/token.go
+33
-32
No files found.
controller/relay-audio.go
View file @
04fe42c6
...
...
@@ -44,7 +44,7 @@ func relayAudioHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
preConsumedQuota
=
0
}
if
preConsumedQuota
>
0
{
err
:
=
model
.
PreConsumeTokenQuota
(
tokenId
,
preConsumedQuota
)
userQuota
,
err
=
model
.
PreConsumeTokenQuota
(
tokenId
,
preConsumedQuota
)
if
err
!=
nil
{
return
errorWrapper
(
err
,
"pre_consume_token_quota_failed"
,
http
.
StatusForbidden
)
}
...
...
@@ -99,7 +99,7 @@ func relayAudioHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
go
func
()
{
quota
:=
countTokenText
(
audioResponse
.
Text
,
audioModel
)
quotaDelta
:=
quota
-
preConsumedQuota
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
quotaDel
ta
)
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
userQuota
,
quotaDelta
,
preConsumedQuo
ta
)
if
err
!=
nil
{
common
.
SysError
(
"error consuming token remain quota: "
+
err
.
Error
())
}
...
...
controller/relay-image.go
View file @
04fe42c6
...
...
@@ -147,7 +147,7 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode
var
textResponse
ImageResponse
defer
func
(
ctx
context
.
Context
)
{
if
consumeQuota
{
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
quota
)
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
userId
,
quota
,
0
)
if
err
!=
nil
{
common
.
SysError
(
"error consuming token remain quota: "
+
err
.
Error
())
}
...
...
controller/relay-mj.go
View file @
04fe42c6
...
...
@@ -359,7 +359,7 @@ func relayMidjourneySubmit(c *gin.Context, relayMode int) *MidjourneyResponse {
defer
func
(
ctx
context
.
Context
)
{
if
consumeQuota
{
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
quota
)
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
userQuota
,
quota
,
0
)
if
err
!=
nil
{
common
.
SysError
(
"error consuming token remain quota: "
+
err
.
Error
())
}
...
...
controller/relay-text.go
View file @
04fe42c6
...
...
@@ -233,7 +233,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
//common.LogInfo(c.Request.Context(), fmt.Sprintf("user %d has enough quota %d, trusted and no need to pre-consume", userId, userQuota))
}
if
consumeQuota
&&
preConsumedQuota
>
0
{
err
:
=
model
.
PreConsumeTokenQuota
(
tokenId
,
preConsumedQuota
)
userQuota
,
err
=
model
.
PreConsumeTokenQuota
(
tokenId
,
preConsumedQuota
)
if
err
!=
nil
{
return
errorWrapper
(
err
,
"pre_consume_token_quota_failed"
,
http
.
StatusForbidden
)
}
...
...
@@ -400,7 +400,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
if
preConsumedQuota
!=
0
{
go
func
(
ctx
context
.
Context
)
{
// return pre-consumed quota
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
-
preConsumedQuota
)
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
userQuota
,
-
preConsumedQuota
,
0
)
if
err
!=
nil
{
common
.
LogError
(
ctx
,
"error return pre-consumed quota: "
+
err
.
Error
())
}
...
...
@@ -434,7 +434,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
quota
=
0
}
quotaDelta
:=
quota
-
preConsumedQuota
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
quotaDel
ta
)
err
:=
model
.
PostConsumeTokenQuota
(
tokenId
,
userQuota
,
quotaDelta
,
preConsumedQuo
ta
)
if
err
!=
nil
{
common
.
LogError
(
ctx
,
"error consuming token remain quota: "
+
err
.
Error
())
}
...
...
model/token.go
View file @
04fe42c6
...
...
@@ -178,59 +178,60 @@ func decreaseTokenQuota(id int, quota int) (err error) {
return
err
}
func
PreConsumeTokenQuota
(
tokenId
int
,
quota
int
)
(
err
error
)
{
func
PreConsumeTokenQuota
(
tokenId
int
,
quota
int
)
(
userQuota
int
,
err
error
)
{
if
quota
<
0
{
return
errors
.
New
(
"quota 不能为负数!"
)
return
0
,
errors
.
New
(
"quota 不能为负数!"
)
}
token
,
err
:=
GetTokenById
(
tokenId
)
if
err
!=
nil
{
return
err
return
0
,
err
}
if
!
token
.
UnlimitedQuota
&&
token
.
RemainQuota
<
quota
{
return
errors
.
New
(
"令牌额度不足"
)
return
0
,
errors
.
New
(
"令牌额度不足"
)
}
userQuota
,
err
:
=
GetUserQuota
(
token
.
UserId
)
userQuota
,
err
=
GetUserQuota
(
token
.
UserId
)
if
err
!=
nil
{
return
err
return
0
,
err
}
if
userQuota
<
quota
{
return
errors
.
New
(
"用户额度不足"
)
}
quotaTooLow
:=
userQuota
>=
common
.
QuotaRemindThreshold
&&
userQuota
-
quota
<
common
.
QuotaRemindThreshold
noMoreQuota
:=
userQuota
-
quota
<=
0
if
quotaTooLow
||
noMoreQuota
{
go
func
()
{
email
,
err
:=
GetUserEmail
(
token
.
UserId
)
if
err
!=
nil
{
common
.
SysError
(
"failed to fetch user email: "
+
err
.
Error
())
}
prompt
:=
"您的额度即将用尽"
if
noMoreQuota
{
prompt
=
"您的额度已用尽"
}
if
email
!=
""
{
topUpLink
:=
fmt
.
Sprintf
(
"%s/topup"
,
common
.
ServerAddress
)
err
=
common
.
SendEmail
(
prompt
,
email
,
fmt
.
Sprintf
(
"%s,当前剩余额度为 %d,为了不影响您的使用,请及时充值。<br/>充值链接:<a href='%s'>%s</a>"
,
prompt
,
userQuota
,
topUpLink
,
topUpLink
))
if
err
!=
nil
{
common
.
SysError
(
"failed to send email"
+
err
.
Error
())
}
}
}()
return
userQuota
,
errors
.
New
(
fmt
.
Sprintf
(
"用户额度不足,剩余额度为 %d"
,
userQuota
))
}
if
!
token
.
UnlimitedQuota
{
err
=
DecreaseTokenQuota
(
tokenId
,
quota
)
if
err
!=
nil
{
return
err
return
userQuota
,
err
}
}
err
=
DecreaseUserQuota
(
token
.
UserId
,
quota
)
return
err
return
userQuota
,
err
}
func
PostConsumeTokenQuota
(
tokenId
int
,
q
uota
int
)
(
err
error
)
{
func
PostConsumeTokenQuota
(
tokenId
int
,
userQuota
int
,
quota
int
,
preConsumedQ
uota
int
)
(
err
error
)
{
token
,
err
:=
GetTokenById
(
tokenId
)
if
quota
>
0
{
quotaTooLow
:=
userQuota
>=
common
.
QuotaRemindThreshold
&&
userQuota
-
(
quota
+
preConsumedQuota
)
<
common
.
QuotaRemindThreshold
noMoreQuota
:=
userQuota
-
(
quota
+
preConsumedQuota
)
<=
0
if
quotaTooLow
||
noMoreQuota
{
go
func
()
{
email
,
err
:=
GetUserEmail
(
token
.
UserId
)
if
err
!=
nil
{
common
.
SysError
(
"failed to fetch user email: "
+
err
.
Error
())
}
prompt
:=
"您的额度即将用尽"
if
noMoreQuota
{
prompt
=
"您的额度已用尽"
}
if
email
!=
""
{
topUpLink
:=
fmt
.
Sprintf
(
"%s/topup"
,
common
.
ServerAddress
)
err
=
common
.
SendEmail
(
prompt
,
email
,
fmt
.
Sprintf
(
"%s,当前剩余额度为 %d,为了不影响您的使用,请及时充值。<br/>充值链接:<a href='%s'>%s</a>"
,
prompt
,
userQuota
,
topUpLink
,
topUpLink
))
if
err
!=
nil
{
common
.
SysError
(
"failed to send email"
+
err
.
Error
())
}
}
}()
}
err
=
DecreaseUserQuota
(
token
.
UserId
,
quota
)
}
else
{
err
=
IncreaseUserQuota
(
token
.
UserId
,
-
quota
)
...
...
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