package product import ( productv1 "gitea.timerzz.com/kedaya_haitao/common/model/product" "gorm.io/gorm" "time" ) type Option struct { ID uint `gorm:"primary_key" json:"id"` Interval time.Duration `yaml:"interval" json:"interval"` ExchangeRate float64 `yaml:"exchangeRate" json:"exchangeRate"` //汇率 Freight float64 `yaml:"freight" json:"freight"` //运费 } func (c *Controller) LoadOption() { c.db.FirstOrCreate(&c.Option, Option{Interval: time.Hour * 30, ExchangeRate: 7.3, Freight: 100}) } func (c *Controller) SaveOption(opt Option) { if opt.Interval > 0 { c.Option.Interval = opt.Interval } var change bool var oldFreight float64 if opt.ExchangeRate > 0 && opt.ExchangeRate != c.Option.ExchangeRate { c.Option.ExchangeRate = opt.ExchangeRate change = true } if opt.Freight > 0 && opt.Freight != c.Option.Freight { c.Option.Freight, oldFreight = opt.Freight, c.Option.Freight change = true } opt.ID = 1 c.db.Updates(opt) if change { c.updateExchangeRateAndFreight(oldFreight) } } func (c *Controller) updateExchangeRateAndFreight(oldFreight float64) { var results []*productv1.Product c.db.FindInBatches(&results, 20, func(tx *gorm.DB, batch int) error { for _, result := range results { if result.Freight == oldFreight { result.Freight = c.Option.Freight } result.ExchangeRate = c.Option.ExchangeRate } // 保存对当前批记录的修改 tx.Save(&results) return nil }) } func (c *Controller) GetOption() Option { return c.Option }