123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package show
- import (
- "context"
- "hash/crc32"
- "strconv"
- "time"
- "go-common/app/interface/main/app-show/model"
- "go-common/app/interface/main/app-show/model/card"
- "go-common/app/interface/main/app-show/model/feed"
- "go-common/app/service/main/archive/api"
- "go-common/app/service/main/archive/model/archive"
- )
- var (
- _emptyList = []*feed.Item{}
- )
- // FeedIndex feed index
- func (s *Service) FeedIndex(c context.Context, mid, idx int64, plat int8, build, loginEvent int, lastParam, mobiApp, device, buvid string, now time.Time) (res []*feed.Item) {
- var (
- ps = 10
- isIpad = plat == model.PlatIPad
- cards, cardCache []*card.PopularCard
- )
- if isIpad {
- ps = 20
- }
- var key int
- if mid > 0 {
- key = int((mid / 1000) % 10)
- } else {
- key = int((crc32.ChecksumIEEE([]byte(buvid)) / 1000) % 10)
- }
- cardCache = s.PopularCardTenList(c, key)
- if len(cardCache) > int(idx) {
- cards = cardCache[idx:]
- } else {
- res = _emptyList
- return
- }
- res = s.dealItem(c, plat, build, ps, cards, idx, lastParam, now)
- if len(res) == 0 {
- res = _emptyList
- return
- }
- //infoc
- infoc := &feedInfoc{
- mobiApp: mobiApp,
- device: device,
- build: strconv.Itoa(build),
- now: now.Format("2006-01-02 15:04:05"),
- loginEvent: strconv.Itoa(loginEvent),
- mid: strconv.FormatInt(mid, 10),
- buvid: buvid,
- page: strconv.Itoa((int(idx) / ps) + 1),
- feed: res,
- }
- s.infocfeed(infoc)
- return
- }
- // dealItem feed item
- func (s *Service) dealItem(c context.Context, plat int8, build, ps int, cards []*card.PopularCard, idx int64, lastParam string, now time.Time) (is []*feed.Item) {
- const _rankCount = 3
- var (
- uri map[int64]string
- // key
- max = int64(100)
- _fTypeOperation = "operation"
- aids []int64
- am map[int64]*api.Arc
- feedcards []*card.PopularCard
- err error
- )
- LOOP:
- for pos, ca := range cards {
- var cardIdx = idx + int64(pos+1)
- if cardIdx > max && ca.FromType != _fTypeOperation {
- continue
- }
- if config, ok := ca.PopularCardPlat[plat]; ok {
- for _, l := range config {
- if model.InvalidBuild(build, l.Build, l.Condition) {
- continue LOOP
- }
- }
- } else if ca.FromType == _fTypeOperation {
- continue LOOP
- }
- tmp := &card.PopularCard{}
- *tmp = *ca
- tmp.Idx = cardIdx
- feedcards = append(feedcards, tmp)
- switch ca.Type {
- case model.GotoAv:
- aids = append(aids, ca.Value)
- }
- if len(feedcards) == ps {
- break
- }
- }
- if len(aids) != 0 {
- if am, err = s.arc.ArchivesPB(c, aids); err != nil {
- s.pMiss.Incr("popularcard_Archives")
- err = nil
- } else {
- s.pHit.Incr("popularcard_Archives")
- }
- }
- for _, ca := range feedcards {
- i := &feed.Item{}
- i.FromType = ca.FromType
- i.Idx = ca.Idx
- i.Pos = ca.Pos
- switch ca.Type {
- case model.GotoAv:
- a := am[ca.Value]
- isOsea := model.IsOverseas(plat)
- if a != nil && a.IsNormal() && (!isOsea || (isOsea && a.AttrVal(archive.AttrBitOverseaLock) == 0)) {
- i.FromPlayerAv(a, uri[a.Aid])
- i.FromRcmdReason(ca)
- // if tag, ok := s.hotArcTag[a.Aid]; ok {
- // i.Tag = &feed.Tag{TagID: tag.ID, TagName: tag.Name}
- // }
- i.Goto = ca.Type
- is = append(is, i)
- }
- case model.GotoRank:
- if rankAids := s.rankAidsCache; len(rankAids) >= _rankCount {
- i.FromRank(rankAids, s.rankScoreCache, s.rankArchivesCache)
- // i.Param = strconv.FormatInt(ca.ID, 10)
- if i.Goto != "" {
- is = append(is, i)
- }
- }
- case model.GotoHotTopic:
- if hotTopics := s.hottopicsCache; len(hotTopics) > 0 {
- i.FromHotTopic(hotTopics)
- is = append(is, i)
- }
- }
- }
- if rl := len(is); rl == 0 {
- is = _emptyList
- return
- }
- return
- }
|