us-coach-spider/product/option.go
timerzz 88e6febe37
Some checks failed
Build image / build (push) Failing after 26m21s
feat 添加折扣属性
2024-05-23 20:48:04 +08:00

66 lines
1.8 KiB
Go

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"` //运费
Discount int `yaml:"discount" json:"discount"` //折扣
}
func (c *Controller) LoadOption() {
c.db.Where("id = ?", 1).Attrs(Option{Interval: time.Hour * 12, ExchangeRate: 7.3, Freight: 100, Discount: 100}).FirstOrCreate(&c.Option)
}
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
}
if opt.Discount > 0 && opt.Discount != c.Option.Discount {
c.Option.Discount = opt.Discount
change = true
}
opt.ID = 1
c.db.Updates(opt)
if change {
c.updateRate(oldFreight)
}
}
func (c *Controller) updateRate(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
result.Discount = c.Option.Discount
}
// 保存对当前批记录的修改
tx.Save(&results)
return nil
})
}
func (c *Controller) GetOption() Option {
return c.Option
}