package db import ( "fmt" "gorm.io/gorm" "strings" "time" ) type ( ModelTask struct { BaseModel Name string `gorm:"type:varchar(255)" json:"name"` //任务名称 ModelID string `gorm:"type:varchar(255)" json:"modelID"` //模型ID BeginTime time.Time //工作时间开始 EndTime time.Time //公祖时间结束 DomainUnitIds []string `gorm:"-" json:"domainUnitIds"` //区域id列表 DomainIds string `gorm:"type:varchar(1000)" json:"-"` Building string `gorm:"type:varchar(255)" json:"building"` //楼栋 Floor string `gorm:"type:varchar(255)" json:"floor"` //楼层 AlarmType AlarmType `gorm:"type:varchar(255);" json:"alarmType"` //预警方式 PersonType string `gorm:"type:varchar(255);" json:"personType"` //人员类型 GatherPersons int `gorm:"type:int;" json:"gatherPersons"` //聚集人数 AppearInterval int `gorm:"type:int;" json:"appearInterval"` //出现间隔,单位为秒 DaysWindow int `gorm:"type:int;" json:"daysWindow" ` //近几天内 Threshold int `gorm:"type:int;" json:"threshold" ` //达几次 Enabled bool `json:"enabled"` //是否开启 } ModelTaskSearch struct { ModelTask Orm *gorm.DB PageNum int PageSize int Keyword string ModelIDs []string Unexpired bool } ) type AlarmType string const ( AlarmTypeSave AlarmType = "save" //仅保存 AlarmTypeSendMessage AlarmType = "message" //发消息 ) func (slf *ModelTask) TableName() string { return "model_task" } func (slf *ModelTask) BeforeCreate(db *gorm.DB) (err error) { err = slf.BaseModel.BeforeCreate(db) if err != nil { return err } if len(slf.DomainUnitIds) > 0 { slf.DomainIds = strings.Join(slf.DomainUnitIds, ",") } return nil } func (slf *ModelTask) BeforeSave(db *gorm.DB) (err error) { if len(slf.DomainUnitIds) > 0 { slf.DomainIds = strings.Join(slf.DomainUnitIds, ",") } return nil } func (slf *ModelTask) BeforeUpdate(db *gorm.DB) (err error) { if len(slf.DomainUnitIds) > 0 { slf.DomainIds = strings.Join(slf.DomainUnitIds, ",") } return nil } func (slf *ModelTask) AfterFind(db *gorm.DB) (err error) { if slf.DomainIds != "" { slf.DomainUnitIds = strings.Split(slf.DomainIds, ",") } return nil } func NewModelTaskSearch() *ModelTaskSearch { return &ModelTaskSearch{Orm: GetDB()} } func (slf *ModelTaskSearch) SetOrm(tx *gorm.DB) *ModelTaskSearch { slf.Orm = tx return slf } func (slf *ModelTaskSearch) SetPage(page, size int) *ModelTaskSearch { slf.PageNum, slf.PageSize = page, size return slf } func (slf *ModelTaskSearch) SetID(id string) *ModelTaskSearch { slf.ID = id return slf } func (slf *ModelTaskSearch) SetModelID(id string) *ModelTaskSearch { slf.ModelID = id return slf } func (slf *ModelTaskSearch) SetModelIDs(ids []string) *ModelTaskSearch { slf.ModelIDs = ids return slf } func (slf *ModelTaskSearch) SetKeyword(kw string) *ModelTaskSearch { slf.Keyword = kw return slf } func (slf *ModelTaskSearch) SetEnabled(enabled bool) *ModelTaskSearch { slf.Enabled = enabled return slf } func (slf *ModelTaskSearch) SetUnexpired() *ModelTaskSearch { slf.Unexpired = true return slf } func (slf *ModelTaskSearch) build() *gorm.DB { var db = slf.Orm.Table(slf.TableName()) if slf.ID != "" { db = db.Where("id = ?", slf.ID) } if slf.ModelID != "" { db = db.Where("model_id = ?", slf.ModelID) } if len(slf.ModelIDs) != 0 { db = db.Where("model_id in ?", slf.ModelIDs) } if slf.Keyword != "" { kw := "%" + slf.Keyword + "%" db = db.Where("name like ?", kw) } if slf.Enabled { db = db.Where("enabled = ?", slf.Enabled) } if slf.Unexpired { now := time.Now() db = db.Where("begin_time <= ?", now).Where("end_time >= ?", now) } return db } func (slf *ModelTaskSearch) First() (*ModelTask, error) { var ( record = new(ModelTask) db = slf.build() ) if err := db.First(record).Error; err != nil { return record, err } return record, nil } func (slf *ModelTaskSearch) CreateBatch(records []*ModelTask) 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 *ModelTaskSearch) Save(record *ModelTask) 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 *ModelTaskSearch) Find() ([]*ModelTask, int64, error) { var ( records = make([]*ModelTask, 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 *ModelTaskSearch) FindAll() ([]*ModelTask, error) { var ( records = make([]*ModelTask, 0) db = slf.build() ) if err := db.Find(&records).Error; err != nil { return records, fmt.Errorf("find records err: %v", err) } return records, nil }