package model import ( "aps_crm/pkg/mysqlx" "github.com/shopspring/decimal" "gorm.io/gorm" ) type ( Product struct { Id uint `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` Name string `json:"name" gorm:"column:name;type:varchar(255);comment:产品名称"` Price decimal.Decimal `json:"price" gorm:"column:price;type:decimal(10,2);comment:产品价格"` Number string `json:"number" gorm:"column:number;type:varchar(255);comment:产品编号"` Amount decimal.Decimal `json:"amount" gorm:"column:amount;type:decimal(12,2);comment:产品数量"` Total decimal.Decimal `json:"total" gorm:"column:total;type:decimal(10,2);comment:产品总价"` Desc string `json:"desc" gorm:"column:desc;type:varchar(255);comment:产品描述"` Unit string `json:"unit" gorm:"column:unit;type:varchar(255);comment:单位"` Cost string `json:"cost" gorm:"column:cost;type:varchar(255);comment:产品成本"` Profit string `json:"profit" gorm:"column:profit;type:varchar(255);comment:毛利"` Margin string `json:"margin" gorm:"column:margin;type:varchar(255);comment:毛利率"` Specs string `gorm:"type:varchar(191);comment:物料规格" json:"specs"` Type string `gorm:"type:varchar(191);comment:物料型号" json:"type"` gorm.Model `json:"-"` } ProductSearch struct { Product Ids []uint Orm *gorm.DB } ) func (Product) TableName() string { return "products" } func NewProductSearch(db *gorm.DB) *ProductSearch { if db == nil { db = mysqlx.GetDB() } return &ProductSearch{ Orm: db, } } func (slf *ProductSearch) build() *gorm.DB { var db = slf.Orm.Model(&Product{}) if slf.Id != 0 { db = db.Where("id = ?", slf.Id) } if slf.Name != "" { db = db.Where("name = ?", slf.Name) } if len(slf.Ids) != 0 { db = db.Where("id in ?", slf.Ids) } return db } // Create 创建 func (slf *ProductSearch) Create(record *Product) error { var db = slf.build() return db.Create(record).Error } func (slf *ProductSearch) CreateBatch(records []*Product) error { var db = slf.build() return db.Create(records).Error } func (slf *ProductSearch) Delete() error { var db = slf.build() return db.Delete(&Product{}).Error } func (slf *ProductSearch) Update(record *Product) error { var db = slf.build() return db.Updates(record).Error } func (slf *ProductSearch) GetListByIds(ids []int) (result []Product, err error) { var db = slf.build() err = db.Where("id in (?)", ids).Find(&result).Error return } func (slf *ProductSearch) Find() (result []Product, err error) { var db = slf.build() err = db.Preload("country").Find(&result).Error return } func (slf *ProductSearch) SetId(id uint) *ProductSearch { slf.Id = id return slf } func (slf *ProductSearch) SetIds(ids []uint) *ProductSearch { slf.Ids = ids return slf } func (slf *ProductSearch) SetName(name string) *ProductSearch { slf.Name = name return slf } func (slf *ProductSearch) UpdateList(m map[string]interface{}, ids []int) error { var db = slf.build() return db.Where("id in (?)", ids).Updates(m).Error } func (slf *ProductSearch) First() (result Product, err error) { var db = slf.build() err = db.First(&result).Error return } func (slf *ProductSearch) FindAll() (result []*Product, err error) { var db = slf.build() err = db.Find(&result).Error return } func (slf *ProductSearch) Updates(m map[string]interface{}) error { var db = slf.build() return db.Updates(m).Error } func ProductMap(products []*Product) (pm map[string]*Product) { pm = make(map[string]*Product, len(products)) for _, p := range products { pm[p.Number] = p } return pm }