package models import "time" type Positions struct { Id uint `gorm:"column:id;primary_key;auto_increment;" json:"id"` DeviceId string `gorm:"column:device_id;index" json:"device_id"` Pos string `gorm:"column:pos" json:"pos"` RunDir int `gorm:"column:run_dir" json:"run_dir"` CreateTime int64 `gorm:"column:create_time;index"` TimeString string `gorm:"column:time_string;"` } func (d *Positions) TableName() string { return "positions" } func (d *Positions) Save() error { return db.Table(d.TableName()).Save(d).Error } func (d *Positions) FindDevicePosition(devId string, timestamp int64) error { return db.Table(d.TableName()).Where("device_id = ? AND create_time <= ?", devId, timestamp).Order("create_time desc").First(&d).Error } func (d *Positions) FindMovePosition(timestamp int64, pos string) error { return db.Table(d.TableName()).Where("create_time >= ? AND pos != ?", timestamp, pos).First(&d).Error } func (d *Positions) FindPositionByTime(timestamp int64) error { return db.Table(d.TableName()).Where("create_time <= ?", timestamp).Order("create_time desc").First(&d).Error } func (d *Positions) Clean() error { timestamp := time.Now().Unix() - 3600 return db.Table(d.TableName()).Where("create_time <= ?", timestamp).Delete(&d).Error }