stake_product.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package entity
  2. import (
  3. "app/commons/constant"
  4. "github.com/shopspring/decimal"
  5. "gorm.io/gorm"
  6. )
  7. // 质押产品
  8. // 活期产品 -- 随进随出 -- 当前版本仅有活期产品
  9. // 定期产品 -- 到期可赎回
  10. // 股票质押产品配置
  11. const (
  12. StakeProductTypeRegularly = "regularly" // 定期
  13. StakeProductTypeCurrent = "current" // 活期
  14. )
  15. type StakeProduct struct {
  16. MysqlBaseModel
  17. Name string `json:"name" gorm:"type:varchar(256);comment: 产品名称;"`
  18. Symbol string `json:"symbol" gorm:"type:varchar(64);comment:支付币种;"`
  19. CycleDay int `json:"cycleDay" gorm:"comment:质押周期天0:活期;"`
  20. PledgeMode string `json:"pledgeMode" gorm:"comment:质押类型:current活期 regularly 定期;"`
  21. PeriodProfitRatio decimal.Decimal `json:"periodProfitRatio" gorm:"type:decimal(25,8);default:0;comment:期收益比例"`
  22. IsQueue bool `json:"isQueue" gorm:"comment:产品是否开启排队;"`
  23. QuotaPerMinutes decimal.Decimal `json:"quotaPerMinutes" gorm:"comment:每分钟释放生效额度;"`
  24. CurrentAvailableQuota decimal.Decimal `json:"currentAvailableQuota" gorm:"comment:当前累计可用生效额度;"`
  25. Sort int `json:"sort" gorm:"default:0;comment:排序"`
  26. Enable bool `json:"enable" gorm:"type:tinyint;default:0;comment:是否有效 1=可质押 0=暂停质押"`
  27. }
  28. func (*StakeProduct) TableName() string {
  29. return ModelPrefix + "stake_product"
  30. }
  31. func (*StakeProduct) Comment() string {
  32. return "产品配置"
  33. }
  34. func NewStakeProduct() *StakeProduct {
  35. return &StakeProduct{}
  36. }
  37. func (c *StakeProduct) DataInit(db *gorm.DB) error {
  38. list := []StakeProduct{
  39. {
  40. Symbol: constant.CoinSymbolTD,
  41. Name: "活期",
  42. CycleDay: 0,
  43. PledgeMode: StakeProductTypeCurrent,
  44. PeriodProfitRatio: decimal.NewFromFloat(0.0008), // 收益频率:每2小时1次(单次0.08%/日化0.96%/月化28.8%)
  45. IsQueue: false,
  46. QuotaPerMinutes: decimal.NewFromFloat(365),
  47. CurrentAvailableQuota: decimal.NewFromFloat(0),
  48. Sort: 0,
  49. Enable: true,
  50. },
  51. {
  52. Symbol: constant.CoinSymbolTD,
  53. Name: "30天定期",
  54. CycleDay: 30,
  55. PledgeMode: StakeProductTypeRegularly,
  56. PeriodProfitRatio: decimal.NewFromFloat(0.001), // 收益频率:每2小时1次(单次0.08%/日化0.96%/月化28.8%)
  57. IsQueue: false,
  58. QuotaPerMinutes: decimal.NewFromFloat(165),
  59. CurrentAvailableQuota: decimal.NewFromFloat(0),
  60. Sort: 1,
  61. Enable: false,
  62. },
  63. }
  64. for _, row := range list {
  65. find := NewStakeProduct()
  66. if stat := db.Model(&StakeProduct{}).
  67. Where("symbol = ?", row.Symbol).Where("cycle_day", row.CycleDay).
  68. Find(&find).Statement; stat.RowsAffected == 0 {
  69. if err := db.Create(&row).Error; err != nil {
  70. return err
  71. }
  72. }
  73. }
  74. return nil
  75. }