123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package feed
- import (
- "context"
- "hash/crc32"
- "math/rand"
- "time"
- "go-common/app/interface/main/app-card/model/card/ai"
- "go-common/app/interface/main/app-intl/model"
- "go-common/library/log"
- )
- // indexCache is.
- func (s *Service) indexCache(c context.Context, mid int64, count int) (rs []*ai.Item, err error) {
- var (
- pos, nextPos int
- )
- cache := s.rcmdCache
- if len(cache) < count {
- return
- }
- if pos, err = s.rcmd.PositionCache(c, mid); err != nil {
- return
- }
- rs = make([]*ai.Item, 0, count)
- if pos < len(cache)-count-1 {
- nextPos = pos + count
- rs = append(rs, cache[pos:nextPos]...)
- } else if pos < len(cache)-1 {
- nextPos = count - (len(cache) - pos)
- rs = append(rs, cache[pos:]...)
- rs = append(rs, cache[:nextPos]...)
- } else {
- nextPos = count - 1
- rs = append(rs, cache[:nextPos]...)
- }
- s.addCache(func() {
- s.rcmd.AddPositionCache(context.Background(), mid, nextPos)
- })
- return
- }
- // recommendCache is.
- func (s *Service) recommendCache(count int) (rs []*ai.Item) {
- cache := s.rcmdCache
- index := len(cache)
- if count > 0 && count < index {
- index = count
- }
- rs = make([]*ai.Item, 0, index)
- for _, idx := range rand.Perm(len(cache))[:index] {
- rs = append(rs, cache[idx])
- }
- return
- }
- // group is.
- func (s *Service) group(mid int64, buvid string) (group int) {
- if mid == 0 && buvid == "" {
- group = -1
- return
- }
- if mid != 0 {
- if v, ok := s.groupCache[mid]; ok {
- group = v
- return
- }
- group = int(mid % 20)
- return
- }
- group = int(crc32.ChecksumIEEE([]byte(buvid)) % 20)
- return
- }
- // loadRcmdCache is.
- func (s *Service) loadRcmdCache() {
- is, err := s.rcmd.RcmdCache(context.Background())
- if err != nil {
- log.Error("%+v", err)
- }
- if len(is) >= 50 {
- for _, i := range is {
- i.Goto = model.GotoAv
- }
- s.rcmdCache = is
- return
- }
- aids, err := s.rcmd.Hots(context.Background())
- if err != nil {
- log.Error("%+v", err)
- }
- if len(aids) == 0 {
- if aids, err = s.rcmd.RcmdAidsCache(context.Background()); err != nil {
- return
- }
- }
- if len(aids) < 50 && len(s.rcmdCache) != 0 {
- return
- }
- s.rcmdCache = s.fromAids(aids)
- s.addCache(func() {
- s.rcmd.AddRcmdAidsCache(context.Background(), aids)
- })
- }
- // fromAids is.
- func (s *Service) fromAids(aids []int64) (is []*ai.Item) {
- is = make([]*ai.Item, 0, len(aids))
- for _, aid := range aids {
- i := &ai.Item{
- ID: aid,
- Goto: model.GotoAv,
- }
- is = append(is, i)
- }
- return
- }
- // rcmdproc is.
- func (s *Service) rcmdproc() {
- for {
- time.Sleep(s.tick)
- s.loadRcmdCache()
- }
- }
- // loadRankCache is.
- func (s *Service) loadRankCache() {
- rank, err := s.rank.AllRank(context.Background())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.rankCache = rank
- }
- // rankproc is.
- func (s *Service) rankproc() {
- for {
- time.Sleep(s.tick)
- s.loadRankCache()
- }
- }
- // loadUpCardCache is.
- func (s *Service) loadUpCardCache() {
- follow, err := s.card.Follow(context.Background())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.followCache = follow
- }
- // upCardproc is.
- func (s *Service) upCardproc() {
- for {
- time.Sleep(s.tick)
- s.loadUpCardCache()
- }
- }
- // loadGroupCache is.
- func (s *Service) loadGroupCache() {
- group, err := s.rcmd.Group(context.Background())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.groupCache = group
- }
- // groupproc is.
- func (s *Service) groupproc() {
- for {
- time.Sleep(s.tick)
- s.loadGroupCache()
- }
- }
|