package controllers import ( "context" "fmt" "fwh-toolbox-server/models/fwh_pro/query" "log" "time" "gorm.io/gen" "gorm.io/gen/field" ) type SiteListFilter struct { ID []string Version []string ActiveStatus []int32 ActiveTime []time.Time // 仅有两个值时有效 LocalActiveTime []time.Time // 仅有两个值时有效 FhpSn []string Country []string Province []string City []string } func GetSiteList(ctx context.Context, filter SiteListFilter, offset int, limit int) { Q := query.IotGateway q := Q.WithContext(ctx) if offset >= 0 { q = q.Offset(limit) } if limit >= 0 { q = q.Limit(limit) } // 必须显示项,可动态添加 selectList := []field.Expr{Q.ID, Q.Version, Q.FhpSn, Q.ElecnetStatus, Q.Country, Q.Province, Q.City, Q.FinancierName} // 查询指定字段 q = q.Select(selectList...) var condition []gen.Condition if len(filter.ID) > 0 { condition = append(condition, Q.ID.In(filter.ID...)) } if len(filter.Version) > 0 { condition = append(condition, Q.Version.In(filter.Version...)) } if len(filter.ActiveStatus) > 0 { condition = append(condition, Q.ActiveStatus.In(filter.ActiveStatus...)) } if len(filter.ActiveTime) == 2 { condition = append(condition, Q.ActiveTime.Between(filter.ActiveTime[0], filter.ActiveTime[1])) } if len(filter.LocalActiveTime) == 2 { condition = append(condition, Q.LocalActiveTime.Between(filter.LocalActiveTime[0], filter.LocalActiveTime[1])) } // 查找aPower SN for i := 0; i < len(filter.FhpSn); i++ { condition = append(condition, Q.FhpSn.Like("%"+filter.FhpSn[i]+"%")) } if len(filter.Country) > 0 { condition = append(condition, Q.Country.In(filter.Country...)) } if len(filter.Province) > 0 { condition = append(condition, Q.Province.In(filter.Province...)) } if len(filter.City) > 0 { condition = append(condition, Q.City.In(filter.City...)) } // 过滤条件 siteList, err := q.Where(condition...).Find() if err != nil { log.Fatal("Failed to query: ", err) return } // 打印查询到的数据 for _, site := range siteList { fmt.Printf("ID: %s, Name: %s\n", site.ID, site.Name) } return }