package srv_search import ( "context" "strconv" "time" "videoweb/pub/common/srvdef" "videoweb/pub/esmanager" "videoweb/pub/models/actress" "videoweb/pub/models/esmod" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" ) func getActressEsData(ctx context.Context, minTime, endTime *time.Time, esIndex string) (esmanager.M, *srvdef.SrvErr) { data, serr := getActressData(ctx, minTime, endTime) if serr != nil { return nil, serr } return actressToEsData(data), nil } func getActressData(ctx context.Context, minTime, endTime *time.Time) ([]*actress.Actress, *srvdef.SrvErr) { pageNumber := 1 pageSize := 1000 rsl := make([]*actress.Actress, 0) filter := bson.M{} if minTime != nil && endTime != nil { filter[actress.FN.Actress.UpdatedAt] = bson.M{ "$gte": minTime, "$lte": endTime, } } for { opts := &options.FindOptions{} opts.SetSort(bson.M{actress.FN.Actress.UpdatedAt: -1}) opts.SetSkip(int64(pageSize * (pageNumber - 1))) opts.SetLimit(int64(pageSize)) data, serr := actress.FindManyActresss(ctx, filter, opts) if serr != nil { return nil, serr } rsl = append(rsl, data...) if len(data) < pageSize { break } pageNumber++ } return rsl, nil } func actressToEsData(data []*actress.Actress) esmanager.M { rsl := make(map[string]interface{}, len(data)) for _, v := range data { esInfo := esmod.ESActress{ Id: v.Id, Alias: v.Alias, Avatar: v.Avatar, Meas: v.Meas, Desc: v.Desc, Office: v.Office, DebutDate: v.DebutDate, BornDate: v.BornDate, Region: v.Region, Score: v.Score, Works: v.Works, HotValue: v.HotValue, Real: v.Real, Status: v.Status, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, TranslationCategoryId: v.TranslationCategoryId, Rank: v.Rank, } rsl[strconv.FormatInt(v.Id, 10)] = esInfo } return rsl }