package models import ( "fmt" "gorm.io/gorm" "silkserver/constvar" "silkserver/pkg/mysqlx" ) type ( // ShiftSchedule 排班管理 ShiftSchedule struct { BaseModelString ResourceType constvar.ResourceType `gorm:"type:int(11);comment:资源类型" json:"resourceType"` ResourceID string `gorm:"index;type:varchar(191);not null;comment:资源ID" json:"resourceId"` ResourceName string `gorm:"type:varchar(191);comment:资源名称" json:"resourceName"` ShiftType constvar.ShiftType `gorm:"type:varchar(100);comment:班次类型" json:"shiftType"` WorkOnWeekend bool `gorm:"type:tinyint(1);comment:休息日无需上班" json:"workOnWeekend"` WorkOnHoliday bool `gorm:"type:tinyint(1);comment:节假日无需上班" json:"workOnHoliday"` ScheduleShift []*ShiftScheduleShift `gorm:"-" json:"-"` // 班次列表 Shift []*Shift `gorm:"-" json:"shift"` // 班次列表 } ShiftScheduleSearch struct { ShiftSchedule Keyword string Order string PageNum int PageSize int Orm *gorm.DB ResourceIDs []string } ShiftScheduleExcel struct { ResourceID string `json:"resourceId"` ShiftTypeName string `json:"shiftTypeName"` IsWeekendStr string `json:"isWeekendStr"` IsHolidayStr string `json:"isHolidayStr"` ShiftName string `json:"shiftName"` } ) func (slf ShiftSchedule) TableName() string { return "shift_schedule" } func NewShiftScheduleSearch() *ShiftScheduleSearch { return &ShiftScheduleSearch{Orm: mysqlx.GetDB()} } func (slf *ShiftScheduleSearch) SetOrm(tx *gorm.DB) *ShiftScheduleSearch { slf.Orm = tx return slf } func (slf *ShiftScheduleSearch) SetPage(page, size int) *ShiftScheduleSearch { slf.PageNum, slf.PageSize = page, size return slf } func (slf *ShiftScheduleSearch) SetOrder(order string) *ShiftScheduleSearch { slf.Order = order return slf } func (slf *ShiftScheduleSearch) SetID(id string) *ShiftScheduleSearch { slf.ID = id return slf } func (slf *ShiftScheduleSearch) SetResourceType(resourceType constvar.ResourceType) *ShiftScheduleSearch { slf.ResourceType = resourceType return slf } func (slf *ShiftScheduleSearch) SetResourceID(resourceID string) *ShiftScheduleSearch { slf.ResourceID = resourceID return slf } func (slf *ShiftScheduleSearch) SetResourceIDs(resourceIDs []string) *ShiftScheduleSearch { slf.ResourceIDs = resourceIDs return slf } func (slf *ShiftScheduleSearch) SetKeyword(keyword string) *ShiftScheduleSearch { slf.Keyword = keyword return slf } func (slf *ShiftScheduleSearch) build() *gorm.DB { var db = slf.Orm.Table(slf.TableName()) if slf.ID != "" { db = db.Where("id = ?", slf.ID) } if slf.ResourceID != "" { db = db.Where("resource_id = ?", slf.ResourceID) } if len(slf.ResourceIDs) > 0 { db = db.Where("resource_id in (?)", slf.ResourceIDs) } if slf.ResourceType > 0 { db = db.Where("resource_type = ?", slf.ResourceType) } if slf.Keyword != "" { db = db.Where("resource_name LIKE ?", "%"+slf.Keyword+"%") } if slf.Order != "" { db = db.Order(slf.Order) } return db } // Create 单条插入 func (slf *ShiftScheduleSearch) Create(record *ShiftSchedule) 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 *ShiftScheduleSearch) CreateBatch(records []*ShiftSchedule) error { var db = slf.build() if err := db.Create(&records).Error; err != nil { return fmt.Errorf("create batch err: %v, records: %+v", err, records) } return nil } func (slf *ShiftScheduleSearch) Save(record *ShiftSchedule) 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 *ShiftScheduleSearch) 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 *ShiftScheduleSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error { var ( db = slf.Orm.Table(slf.TableName()).Where(query, args...) ) if err := db.Updates(upMap).Error; err != nil { return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap) } return nil } func (slf *ShiftScheduleSearch) Delete() error { var db = slf.build() if err := db.Unscoped().Delete(&ShiftSchedule{}).Error; err != nil { return err } return nil } func (slf *ShiftScheduleSearch) First() (*ShiftSchedule, error) { var ( record = new(ShiftSchedule) db = slf.build() ) if err := db.First(record).Error; err != nil { return record, err } return record, nil } func (slf *ShiftScheduleSearch) Find() ([]*ShiftSchedule, int64, error) { var ( records = make([]*ShiftSchedule, 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 *ShiftScheduleSearch) FindNotTotal() ([]*ShiftSchedule, error) { var ( records = make([]*ShiftSchedule, 0) db = slf.build() ) 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, fmt.Errorf("find records err: %v", err) } return records, nil } // FindByQuery 指定条件查询. func (slf *ShiftScheduleSearch) FindByQuery(query string, args []interface{}) ([]*ShiftSchedule, int64, error) { var ( records = make([]*ShiftSchedule, 0) total int64 db = slf.Orm.Table(slf.TableName()).Where(query, args...) ) if err := db.Count(&total).Error; err != nil { return records, total, fmt.Errorf("find by query 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 by query records err: %v, query: %s, args: %+v", err, query, args) } return records, total, nil } // FindByQueryNotTotal 指定条件查询&不查询总条数. func (slf *ShiftScheduleSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*ShiftSchedule, error) { var ( records = make([]*ShiftSchedule, 0) db = slf.Orm.Table(slf.TableName()).Where(query, args...) ) 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, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args) } return records, nil }