| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| package model |
|
|
| import ( |
| "sync" |
| "time" |
| "veloera/common" |
| "veloera/setting/operation_setting" |
| ) |
|
|
| type Pricing struct { |
| ModelName string `json:"model_name"` |
| QuotaType int `json:"quota_type"` |
| ModelRatio float64 `json:"model_ratio"` |
| ModelPrice float64 `json:"model_price"` |
| OwnerBy string `json:"owner_by"` |
| CompletionRatio float64 `json:"completion_ratio"` |
| EnableGroup []string `json:"enable_groups,omitempty"` |
| } |
|
|
| var ( |
| pricingMap []Pricing |
| lastGetPricingTime time.Time |
| updatePricingLock sync.Mutex |
| ) |
|
|
| func GetPricing() []Pricing { |
| updatePricingLock.Lock() |
| defer updatePricingLock.Unlock() |
|
|
| if time.Since(lastGetPricingTime) > time.Minute*1 || len(pricingMap) == 0 { |
| updatePricing() |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| return pricingMap |
| } |
|
|
| func updatePricing() { |
| |
| enableAbilities := GetAllEnableAbilities() |
| modelGroupsMap := make(map[string][]string) |
| for _, ability := range enableAbilities { |
| groups := modelGroupsMap[ability.Model] |
| if groups == nil { |
| groups = make([]string, 0) |
| } |
| if !common.StringsContains(groups, ability.Group) { |
| groups = append(groups, ability.Group) |
| } |
| modelGroupsMap[ability.Model] = groups |
| } |
|
|
| pricingMap = make([]Pricing, 0) |
| for model, groups := range modelGroupsMap { |
| pricing := Pricing{ |
| ModelName: model, |
| EnableGroup: groups, |
| } |
| modelPrice, findPrice := operation_setting.GetModelPriceWithFallback(model, false) |
| if findPrice { |
| pricing.ModelPrice = modelPrice |
| pricing.QuotaType = 1 |
| } else { |
| modelRatio, _ := operation_setting.GetModelRatioWithFallback(model) |
| pricing.ModelRatio = modelRatio |
| pricing.CompletionRatio = operation_setting.GetCompletionRatioWithFallback(model) |
| pricing.QuotaType = 0 |
| } |
| pricingMap = append(pricingMap, pricing) |
| } |
| lastGetPricingTime = time.Now() |
| } |
|
|