package model import ( "fmt" "github.com/jinzhu/gorm" "smart-enterprise-management/consts" "time" ) type AttendanceDeviceInfo struct { ID int64 `gorm:"column:ID;PRIMARY_KEY" json:"ID"` Code string `gorm:"column:Code" json:"code"` Name string `gorm:"column:Name" json:"name"` DeviceId string `gorm:"column:DeviceId" json:"deviceid"` DeviceModel string `gorm:"column:DeviceModel" json:"devicemodel"` DeviceName string `gorm:"column:DeviceName" json:"devicename"` Manufacturer string `gorm:"column:Manufacturer" json:"manufacturer"` Batch string `gorm:"column:Batch" json:"batch"` SN string `gorm:"column:SN" json:"sn"` DeviceState int64 `gorm:"column:DeviceState" json:"devicestate"` Unit string `gorm:"column:Unit" json:"unit"` Person string `gorm:"column:Person" json:"person"` Phone string `gorm:"column:phone" json:"phone"` Remark string `gorm:"column:remark" json:"remark"` Longitude string `gorm:"column:Longitude" json:"longitude"` Latitude string `gorm:"column:Latitude" json:"latitude"` VerifyTime time.Time `gorm:"column:VerifyTime"` VerifyStatus int `gorm:"column:VerifyStatus"` Key string `gorm:"column:Key"` ProjectId int64 `gorm:"column:ProjectId"` ProviderId int64 `gorm:"column:ProviderId"` CreatedAt time.Time `gorm:"column:CreatedAt"` Kind int `gorm:"column:Kind"` SubKind int `gorm:"column:SubKind"` } func (AttendanceDeviceInfo) TableName() string { return "db_smart_v2.AttendanceDeviceInfo" } func (p *AttendanceDeviceInfo) Insert(db *gorm.DB) error { return db.Table(p.TableName()).Create(p).Error } func (p *AttendanceDeviceInfo) Del(db *gorm.DB, where map[string]interface{}) error { cond, val, err := whereBuild(where) if err != nil { return err } return db.Table(p.TableName()).Where(cond, val...).Delete(p).Error } func (p *AttendanceDeviceInfo) Find(db *gorm.DB, where map[string]interface{}) error { cond, val, err := whereBuild(where) if err != nil { return err } return db.Table(p.TableName()).Where(cond, val...).First(p).Error } func (p *AttendanceDeviceInfo) Update(db *gorm.DB, where map[string]interface{}, values map[string]interface{}) error { cond, val, err := whereBuild(where) if err != nil { return err } return db.Table(p.TableName()).Where(cond, val...).Updates(values).Error } func (p *AttendanceDeviceInfo) FindSort(db *gorm.DB, where map[string]interface{}, sort string) error { cond, val, err := whereBuild(where) if err != nil { return err } ps := []AttendanceDeviceInfo{} err = db.Table(p.TableName()).Where(cond, val...).Order(sort).Limit(1).Find(&ps).Error if err != nil { return err } if len(ps) > 0 { *p = ps[0] } return nil } func (p *AttendanceDeviceInfo) Save(db *gorm.DB) error { return db.Save(p).Error } func (p *AttendanceDeviceInfo) Count(db *gorm.DB, where map[string]interface{}) (int64, error) { if len(where) > 0 { cond, val, err := whereBuild(where) if err != nil { return 0, err } ret := int64(0) err = db.Table(p.TableName()).Where(cond, val...).Count(&ret).Error return ret, err } ret := int64(0) err := db.Table(p.TableName()).Count(&ret).Error return ret, err } func (p *AttendanceDeviceInfo) List(db *gorm.DB, where map[string]interface{}, page int) (list []AttendanceDeviceInfo, err error) { if len(where) > 0 { cond, val, err := whereBuild(where) if err != nil { return list, err } result := db.Table(p.TableName()).Where(cond, val...).Limit(PageSize).Offset(page).Find(&list) return list, result.Error } result := db.Table(p.TableName()).Limit(10).Offset(page).Find(&list) return list, result.Error } func (p *AttendanceDeviceInfo) All(db *gorm.DB) (list []AttendanceDeviceInfo, err error) { result := db.Table(p.TableName()).Find(&list) return list, result.Error } type AttendanceDeviceItem struct { Id int64 Sn string TypeCode int32 TypeName string ProjectName string ProjectId int64 SafetyRecordNo string CreatedTime time.Time Status int32 State int32 ProjectApproveTime time.Time Key string ProviderName string SocialCode string Name string Manufacturer string Batch string Person string Phone string Unit string Lon string Lat string Model string Kind int SubKind int } func attendanceDeviceListSql(req AttendanceDeviceListRequest)(string, string, []interface{}) { sql := fmt.Sprintf("select t1.ID as id, t1.DeviceModel as model, t1.Batch as batch, t1.Person as person, t1.Phone as phone, t1.Manufacturer as manufacturer, t1.Longitude as lon, t1.Latitude as lat, t1.Kind as kind, t1.SubKind as sub_kind, t1.Key as 'key', t1.DeviceName as name, t1.SN as sn, t1.VerifyTime as project_approve_time, "+ "t1.CreatedAt as created_time, t1.DeviceState as state, t1.VerifyStatus as status, t2.SafetyNo as safety_record_no, t2.Name as project_name, t3.Name as provider_name, t3.SocialCode as social_code from AttendanceDeviceInfo as t1 left join ProjectInfo as t2 on t1.ProjectId=t2.ID left join Provider as t3 on t1.ProviderId=t3.ID") countSql := fmt.Sprintf("select count(1) as count from AttendanceDeviceInfo as t1 left join ProjectInfo as t2 on t1.ProjectId=t2.ID ") args := []interface{}{} whereArray := []string{} if req.ProviderId > 0 { whereArray = append(whereArray, fmt.Sprintf("t1.ProviderId=%d", req.ProviderId)) } if req.Cid > 0 { whereArray = append(whereArray, fmt.Sprintf("t2.Cid=%d", req.Cid)) } if req.Filter != "" { whereArray = append(whereArray, fmt.Sprintf("(t1.SN like '%%%s%%' or t1.DeviceName like '%%%s%%')", req.Filter, req.Filter)) } if req.ProjectId > 0 { whereArray = append(whereArray, fmt.Sprintf("t1.ProjectId=%d", req.ProjectId)) } if req.State >= 0 { whereArray = append(whereArray, fmt.Sprintf("t1.DeviceState=%d", req.State)) } if req.CanDel { req.IsAll = true req.StatusFilter = []int32{consts.DeviceStatusAddAuditted} whereArray = append(whereArray, fmt.Sprintf("(select count(1) from DeviceDelJob where DeviceId=t1.ID and (Status = 0 or Status = 1)) = 0")) } if len(req.StatusFilter) > 0 { args = append(args, req.StatusFilter) whereArray = append(whereArray, fmt.Sprintf("t1.VerifyStatus in(?)")) } where := "" for _, v := range whereArray { if where == "" { where = fmt.Sprintf(" where %s", v) continue } where = fmt.Sprintf("%s and %s", where, v) } offset := (req.Page - 1) *int32(PageSize) if req.IsAll { sql = fmt.Sprintf("%s %s order by t1.CreatedAt desc", sql, where) countSql = fmt.Sprintf("%s %s", countSql, where) } else { sql = fmt.Sprintf("%s %s order by t1.CreatedAt desc limit %d offset %d", sql, where, PageSize, offset) countSql = fmt.Sprintf("%s %s", countSql, where) } return sql, countSql, args } type AttendanceDeviceListRequest struct { ProviderId int64 Filter string StatusFilter []int32 IsAll bool CanDel bool Page int32 ProjectId int64 Cid int64 State int32 } func (p *AttendanceDeviceInfo) AttendanceDeviceList(db *gorm.DB, req AttendanceDeviceListRequest) ([]AttendanceDeviceItem, int64, error) { type ResultCount struct { Count int64 } array := []ResultCount{} ret := []AttendanceDeviceItem{} var err error sql, countSql, args := attendanceDeviceListSql(req) err = db.Raw(countSql, args...).Scan(&array).Error if err != nil { return nil, 0, err } if len(array) == 0 { return nil, 0, nil } if array[0].Count == 0 { return nil, 0, nil } err = db.Raw(sql, args...).Scan(&ret).Error if err != nil { return nil, array[0].Count, err } return ret, array[0].Count, nil }