111 lines
3.9 KiB
Go
111 lines
3.9 KiB
Go
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
//go:build plus
|
|
|
|
package userconfigs
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
|
)
|
|
|
|
type PriceType = string
|
|
|
|
const (
|
|
PriceTypeTraffic PriceType = "traffic" // 按流量
|
|
PriceTypeBandwidth PriceType = "bandwidth" // 按带宽
|
|
PriceTypePeriod PriceType = "period" // 按周期
|
|
PriceTypePlan PriceType = "plan" // 套餐
|
|
)
|
|
|
|
func IsValidPriceType(priceType string) bool {
|
|
return priceType == PriceTypeTraffic ||
|
|
priceType == PriceTypeBandwidth ||
|
|
priceType == PriceTypePeriod ||
|
|
priceType == PriceTypePlan
|
|
}
|
|
|
|
func PriceTypeName(priceType PriceType) string {
|
|
switch priceType {
|
|
case PriceTypeTraffic:
|
|
return "按流量"
|
|
case PriceTypeBandwidth:
|
|
return "按带宽"
|
|
case PriceTypePeriod:
|
|
return "按周期"
|
|
case PriceTypePlan:
|
|
return "按套餐"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// UserPriceConfig 计费相关设置
|
|
type UserPriceConfig struct {
|
|
IsOn bool `yaml:"isOn" json:"isOn"`
|
|
|
|
EnablePlans bool `yaml:"enablePlans" json:"enablePlans"` // 是否使用套餐
|
|
ShowPlansInUserSystem bool `yaml:"showPlansInUserSystem" json:"showPlansInUserSystem"` // 是否在用户系统显示套餐
|
|
|
|
EnableTrafficPackages bool `yaml:"enableTrafficPackages" json:"enableTrafficPackages"` // 是否可以使用流量包
|
|
ShowTrafficPackages bool `yaml:"showTrafficPackages" json:"showTrafficPackages"` // 在用户界面显示流量包
|
|
MaxTrafficPackagesInOrder int32 `yaml:"maxTrafficPackagesInOrder" json:"maxTrafficPackagesInOrder"` // 单次订单能购买的流量包数量 TODO 暂时不实现
|
|
|
|
DefaultPriceType PriceType `yaml:"priceType" json:"priceType"` // 默认计费方式
|
|
DefaultPricePeriod string `yaml:"pricePeriod" json:"pricePeriod"` // 默认计费周期
|
|
UserCanChangePriceType bool `yaml:"userCanChangePriceType" json:"userCanChangePriceType"` // 用户是否可以自定义计费方式
|
|
UserCanChangePricePeriod bool `yaml:"userCanChangePricePeriod" json:"userCanChangePricePeriod"` // 用户可以自定义计费周期
|
|
|
|
DefaultTrafficPriceConfig *serverconfigs.PlanTrafficPriceConfig `yaml:"trafficPrice" json:"trafficPrice"` // 默认流量价格
|
|
DefaultBandwidthPriceConfig *serverconfigs.PlanBandwidthPriceConfig `yaml:"bandwidthPrice" json:"bandwidthPrice"` // 默认带宽价格
|
|
|
|
UnpaidBillPolicy struct { // 未支付账单策略
|
|
IsOn bool `json:"isOn"` // 是否启用
|
|
MinDailyBillDays int32 `json:"minDailyBillDays"` // 日账单:允许未支付的最大天数
|
|
MinMonthlyBillDays int32 `json:"minMonthlyBillDays"` // 月账单:允许未支付的最大天数
|
|
DisableServers bool `json:"disableServers"` // 是否停止服务运行
|
|
} `json:"unpaidBillPolicy"`
|
|
|
|
UserUI struct {
|
|
ShowPrices bool `yaml:"showPrices" json:"showPrices"` // 显示价格和价格计算器
|
|
} `yaml:"userUI" json:"userUI"` // 用户界面相关配置
|
|
}
|
|
|
|
func (this *UserPriceConfig) Clone() (*UserPriceConfig, error) {
|
|
jsonBytes, err := json.Marshal(this)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var config = &UserPriceConfig{}
|
|
err = json.Unmarshal(jsonBytes, config)
|
|
return config, err
|
|
}
|
|
|
|
func DefaultUserPriceConfig() *UserPriceConfig {
|
|
return &UserPriceConfig{
|
|
DefaultPriceType: PriceTypeBandwidth,
|
|
DefaultPricePeriod: PricePeriodMonthly,
|
|
ShowPlansInUserSystem: true,
|
|
}
|
|
}
|
|
|
|
type PricePeriod = string
|
|
|
|
const (
|
|
PricePeriodDaily PricePeriod = "daily" // 日结
|
|
PricePeriodMonthly PricePeriod = "monthly" // 月结
|
|
)
|
|
|
|
func IsValidPricePeriod(period string) bool {
|
|
return period == PricePeriodDaily || period == PricePeriodMonthly
|
|
}
|
|
|
|
func PricePeriodName(period PricePeriod) string {
|
|
switch period {
|
|
case PricePeriodDaily:
|
|
return "按日"
|
|
case PricePeriodMonthly:
|
|
return "按月"
|
|
}
|
|
return ""
|
|
}
|