package models import ( "fmt" "github.com/shopspring/decimal" "gorm.io/gorm" "silkserver/pkg/mysqlx" ) type ( //SalaryDetails 薪资明细表 SalaryDetails struct { gorm.Model SalaryReportFormId uint `json:"salaryReportFormId" gorm:"type:int(11);not null;comment:薪资报表id"` SalaryTypeId uint `json:"salaryTypeId" gorm:"type:int(11);comment:薪资类型id"` SalaryType MiniDict `json:"salaryType" gorm:"foreignKey:SalaryTypeId;references:ID"` Amount decimal.Decimal `json:"amount" gorm:"type:decimal(20,3);comment:工资值"` } SalaryDetailsSearch struct { SalaryDetails PageNum int PageSize int Preload bool Orm *gorm.DB } ) func (slf SalaryDetails) TableName() string { return "silk_salary_details" } func NewSalaryDetailsSearch() *SalaryDetailsSearch { return &SalaryDetailsSearch{Orm: mysqlx.GetDB()} } func (slf *SalaryDetailsSearch) SetOrm(tx *gorm.DB) *SalaryDetailsSearch { slf.Orm = tx return slf } func (slf *SalaryDetailsSearch) SetPage(page, size int) *SalaryDetailsSearch { slf.PageNum, slf.PageSize = page, size return slf } func (slf *SalaryDetailsSearch) SetPreload(preload bool) *SalaryDetailsSearch { slf.Preload = preload return slf } func (slf *SalaryDetailsSearch) SetSalaryReportFormId(salaryReportFormId uint) *SalaryDetailsSearch { slf.SalaryReportFormId = salaryReportFormId return slf } func (slf *SalaryDetailsSearch) SetSalaryTypeId(salaryTypeId uint) *SalaryDetailsSearch { slf.SalaryTypeId = salaryTypeId return slf } func (slf *SalaryDetailsSearch) build() *gorm.DB { var db = slf.Orm.Table(slf.TableName()) if slf.Preload { db = db.Model(SalaryDetails{}).Preload("SalaryType") } if slf.SalaryReportFormId != 0 { db = db.Where("salary_report_form_id = ?", slf.SalaryReportFormId) } if slf.SalaryTypeId != 0 { db = db.Where("salary_type_id = ?", slf.SalaryTypeId) } return db } // Create 单条插入 func (slf *SalaryDetailsSearch) Create(record *SalaryDetails) error { var db = slf.build() if err := db.Create(record).Error; err != nil { return fmt.Errorf("create err: %v, record: %+v", err, record) } return nil } // CreateBatch 批量插入 func (slf *SalaryDetailsSearch) CreateBatch(record []*SalaryDetails) error { var db = slf.build() if err := db.Create(record).Error; err != nil { return fmt.Errorf("create err: %v, record: %+v", err, record) } return nil } func (slf *SalaryDetailsSearch) Save(record *SalaryDetails) error { var db = slf.build() if err := db.Omit("CreatedAt").Save(record).Error; err != nil { return fmt.Errorf("save err: %v, record: %+v", err, record) } return nil } func (slf *SalaryDetailsSearch) UpdateByMap(upMap map[string]interface{}) error { var ( db = slf.build() ) if err := db.Updates(upMap).Error; err != nil { return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap) } return nil } func (slf *SalaryDetailsSearch) Delete() error { var db = slf.build() if err := db.Unscoped().Delete(&SalaryDetails{}).Error; err != nil { return err } return nil } func (slf *SalaryDetailsSearch) Find() ([]*SalaryDetails, int64, error) { var ( records = make([]*SalaryDetails, 0) total int64 db = slf.build() ) if err := db.Count(&total).Error; err != nil { return records, total, fmt.Errorf("find count err: %v", err) } if slf.PageNum*slf.PageSize > 0 { db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize) } if err := db.Find(&records).Error; err != nil { return records, total, fmt.Errorf("find records err: %v", err) } return records, total, nil } func (slf *SalaryDetailsSearch) FindNotTotal() ([]*SalaryDetails, error) { var ( records = make([]*SalaryDetails, 0) db = slf.build() ) if err := db.Find(&records).Error; err != nil { return records, fmt.Errorf("find records err: %v", err) } return records, nil } func (slf *SalaryDetailsSearch) Count() (int64, error) { var ( total int64 db = slf.build() ) if err := db.Count(&total).Error; err != nil { return total, fmt.Errorf("find count err: %v", err) } return total, nil }