package entity import ( "app/commons/constant" "github.com/shopspring/decimal" "gorm.io/gorm" ) // 质押产品 // 活期产品 -- 随进随出 -- 当前版本仅有活期产品 // 定期产品 -- 到期可赎回 // 股票质押产品配置 const ( StakeProductTypeRegularly = "regularly" // 定期 StakeProductTypeCurrent = "current" // 活期 ) type StakeProduct struct { MysqlBaseModel Name string `json:"name" gorm:"type:varchar(256);comment: 产品名称;"` Symbol string `json:"symbol" gorm:"type:varchar(64);comment:支付币种;"` CycleDay int `json:"cycleDay" gorm:"comment:质押周期天0:活期;"` PledgeMode string `json:"pledgeMode" gorm:"comment:质押类型:current活期 regularly 定期;"` PeriodProfitRatio decimal.Decimal `json:"periodProfitRatio" gorm:"type:decimal(25,8);default:0;comment:期收益比例"` IsQueue bool `json:"isQueue" gorm:"comment:产品是否开启排队;"` QuotaPerMinutes decimal.Decimal `json:"quotaPerMinutes" gorm:"comment:每分钟释放生效额度;"` CurrentAvailableQuota decimal.Decimal `json:"currentAvailableQuota" gorm:"comment:当前累计可用生效额度;"` Sort int `json:"sort" gorm:"default:0;comment:排序"` Enable bool `json:"enable" gorm:"type:tinyint;default:0;comment:是否有效 1=可质押 0=暂停质押"` } func (*StakeProduct) TableName() string { return ModelPrefix + "stake_product" } func (*StakeProduct) Comment() string { return "产品配置" } func NewStakeProduct() *StakeProduct { return &StakeProduct{} } func (c *StakeProduct) DataInit(db *gorm.DB) error { list := []StakeProduct{ { Symbol: constant.CoinSymbolTD, Name: "活期", CycleDay: 0, PledgeMode: StakeProductTypeCurrent, PeriodProfitRatio: decimal.NewFromFloat(0.0008), // 收益频率:每2小时1次(单次0.08%/日化0.96%/月化28.8%) IsQueue: false, QuotaPerMinutes: decimal.NewFromFloat(365), CurrentAvailableQuota: decimal.NewFromFloat(0), Sort: 0, Enable: true, }, { Symbol: constant.CoinSymbolTD, Name: "30天定期", CycleDay: 30, PledgeMode: StakeProductTypeRegularly, PeriodProfitRatio: decimal.NewFromFloat(0.001), // 收益频率:每2小时1次(单次0.08%/日化0.96%/月化28.8%) IsQueue: false, QuotaPerMinutes: decimal.NewFromFloat(165), CurrentAvailableQuota: decimal.NewFromFloat(0), Sort: 1, Enable: false, }, } for _, row := range list { find := NewStakeProduct() if stat := db.Model(&StakeProduct{}). Where("symbol = ?", row.Symbol).Where("cycle_day", row.CycleDay). Find(&find).Statement; stat.RowsAffected == 0 { if err := db.Create(&row).Error; err != nil { return err } } } return nil }