Просмотр исходного кода

feat: record channel's used quota (close #137)

JustSong 2 лет назад
Родитель
Сommit
0cdab80a6e
2 измененных файлов с 11 добавлено и 0 удалено
  1. 2 0
      controller/relay.go
  2. 9 0
      model/channel.go

+ 2 - 0
controller/relay.go

@@ -262,6 +262,8 @@ func relayHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode {
 			userId := c.GetInt("id")
 			model.RecordLog(userId, model.LogTypeConsume, fmt.Sprintf("使用模型 %s 消耗 %d 点额度(模型倍率 %.2f,分组倍率 %.2f)", textRequest.Model, quota, modelRatio, groupRatio))
 			model.UpdateUserUsedQuotaAndRequestCount(userId, quota)
+			channelId := c.GetInt("channel_id")
+			model.UpdateChannelUsedQuota(channelId, quota)
 		}
 	}()
 

+ 9 - 0
model/channel.go

@@ -1,6 +1,7 @@
 package model
 
 import (
+	"gorm.io/gorm"
 	"one-api/common"
 )
 
@@ -20,6 +21,7 @@ type Channel struct {
 	BalanceUpdatedTime int64   `json:"balance_updated_time" gorm:"bigint"`
 	Models             string  `json:"models"`
 	Group              string  `json:"group" gorm:"type:varchar(32);default:'default'"`
+	UsedQuota          int64   `json:"used_quota" gorm:"bigint;default:0"`
 }
 
 func GetAllChannels(startIdx int, num int, selectAll bool) ([]*Channel, error) {
@@ -136,3 +138,10 @@ func UpdateChannelStatusById(id int, status int) {
 		common.SysError("failed to update channel status: " + err.Error())
 	}
 }
+
+func UpdateChannelUsedQuota(id int, quota int) {
+	err := DB.Model(&Channel{}).Where("id = ?", id).Update("used_quota", gorm.Expr("used_quota + ?", quota)).Error
+	if err != nil {
+		common.SysError("failed to update channel used quota: " + err.Error())
+	}
+}