Create & Init Project...
This commit is contained in:
150
app/interface/main/app-show/service/show/feed.go
Normal file
150
app/interface/main/app-show/service/show/feed.go
Normal file
@ -0,0 +1,150 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user