123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- package view
- import (
- "context"
- "fmt"
- "time"
- "go-common/app/interface/main/app-view/conf"
- accdao "go-common/app/interface/main/app-view/dao/account"
- actdao "go-common/app/interface/main/app-view/dao/act"
- addao "go-common/app/interface/main/app-view/dao/ad"
- aidao "go-common/app/interface/main/app-view/dao/ai"
- arcdao "go-common/app/interface/main/app-view/dao/archive"
- assdao "go-common/app/interface/main/app-view/dao/assist"
- audiodao "go-common/app/interface/main/app-view/dao/audio"
- bandao "go-common/app/interface/main/app-view/dao/bangumi"
- coindao "go-common/app/interface/main/app-view/dao/coin"
- creativedao "go-common/app/interface/main/app-view/dao/creative"
- dmdao "go-common/app/interface/main/app-view/dao/dm"
- elcdao "go-common/app/interface/main/app-view/dao/elec"
- favdao "go-common/app/interface/main/app-view/dao/favorite"
- gamedao "go-common/app/interface/main/app-view/dao/game"
- livedao "go-common/app/interface/main/app-view/dao/live"
- locdao "go-common/app/interface/main/app-view/dao/location"
- managerdao "go-common/app/interface/main/app-view/dao/manager"
- rgndao "go-common/app/interface/main/app-view/dao/region"
- reldao "go-common/app/interface/main/app-view/dao/relation"
- rscdao "go-common/app/interface/main/app-view/dao/resource"
- searchdao "go-common/app/interface/main/app-view/dao/search"
- spdao "go-common/app/interface/main/app-view/dao/special"
- tagdao "go-common/app/interface/main/app-view/dao/tag"
- thumbupdao "go-common/app/interface/main/app-view/dao/thumbup"
- ugcpaydao "go-common/app/interface/main/app-view/dao/ugcpay"
- vipdao "go-common/app/interface/main/app-view/dao/vip"
- "go-common/app/interface/main/app-view/model"
- elecmdl "go-common/app/interface/main/app-view/model/elec"
- "go-common/app/interface/main/app-view/model/live"
- "go-common/app/interface/main/app-view/model/manager"
- "go-common/app/interface/main/app-view/model/region"
- "go-common/app/interface/main/app-view/model/special"
- "go-common/app/interface/main/app-view/model/view"
- "go-common/app/service/main/archive/model/archive"
- shareclient "go-common/app/service/main/share/api"
- "go-common/library/conf/env"
- "go-common/library/log"
- "go-common/library/stat/prom"
- )
- var (
- _elecTypeIds = []int16{
- 20, 154, 156, // dance
- 31, 30, 59, 29, 28, // music
- 26, 22, 126, 127, // guichu
- 24, 25, 47, 27, // animae
- 17, 18, 16, 65, 136, 19, 121, 171, 172, 173, // game
- 37, 124, 122, 39, 96, 95, 98, // tech
- 71, 137, 131, // yule
- 157, 158, 159, 164, // fashion
- 82, 128, // movie and tv
- 138, 21, 75, 76, 161, 162, 163, 174, // life
- 153, 168, // guo man
- 85, 86, 182, 183, 184, // film and television
- }
- )
- // Service is view service
- type Service struct {
- c *conf.Config
- pHit *prom.Prom
- pMiss *prom.Prom
- prom *prom.Prom
- // dao
- accDao *accdao.Dao
- arcDao *arcdao.Dao
- tagDao *tagdao.Dao
- favDao *favdao.Dao
- banDao *bandao.Dao
- elcDao *elcdao.Dao
- rgnDao *rgndao.Dao
- liveDao *livedao.Dao
- assDao *assdao.Dao
- adDao *addao.Dao
- rscDao *rscdao.Dao
- relDao *reldao.Dao
- coinDao *coindao.Dao
- audioDao *audiodao.Dao
- actDao *actdao.Dao
- thumbupDao *thumbupdao.Dao
- gameDao *gamedao.Dao
- shareClient shareclient.ShareClient
- vipDao *vipdao.Dao
- mngDao *managerdao.Dao
- spDao *spdao.Dao
- dmDao *dmdao.Dao
- aiDao *aidao.Dao
- creativeDao *creativedao.Dao
- search *searchdao.Dao
- ugcpayDao *ugcpaydao.Dao
- locDao *locdao.Dao
- // region
- tick time.Duration
- region map[int8]map[int]*region.Region
- // elec
- allowTypeIds map[int16]struct{}
- // live cache
- liveCache map[int64]*live.Live
- // chan
- inCh chan interface{}
- dmRegion map[int16]struct{}
- // vip active cache
- vipActiveCache map[int]string
- vipTick time.Duration
- // mamager cache
- RelateCache []*manager.Relate
- specialCache map[int64]*special.Card
- specialMids map[int64]struct{}
- // player icon
- playerIcon *view.PlayerIcon
- // view relate game from AI
- RelateGameCache map[int64]int64
- // bnj caches
- BnjMainView *archive.View3
- BnjLists []*archive.View3
- BnjElecInfo *elecmdl.Info
- BnjWhiteMid map[int64]struct{}
- BnjIsGrey bool
- }
- // New new archive
- func New(c *conf.Config) (s *Service) {
- s = &Service{
- c: c,
- pHit: prom.CacheHit,
- pMiss: prom.CacheMiss,
- prom: prom.BusinessInfoCount,
- // dao
- accDao: accdao.New(c),
- arcDao: arcdao.New(c),
- tagDao: tagdao.New(c),
- favDao: favdao.New(c),
- banDao: bandao.New(c),
- elcDao: elcdao.New(c),
- rgnDao: rgndao.New(c),
- liveDao: livedao.New(c),
- assDao: assdao.New(c),
- adDao: addao.New(c),
- rscDao: rscdao.New(c),
- relDao: reldao.New(c),
- coinDao: coindao.New(c),
- audioDao: audiodao.New(c),
- actDao: actdao.New(c),
- thumbupDao: thumbupdao.New(c),
- gameDao: gamedao.New(c),
- vipDao: vipdao.New(c),
- mngDao: managerdao.New(c),
- spDao: spdao.New(c),
- dmDao: dmdao.New(c),
- aiDao: aidao.New(c),
- creativeDao: creativedao.New(c),
- search: searchdao.New(c),
- ugcpayDao: ugcpaydao.New(c),
- locDao: locdao.New(c),
- // region
- tick: time.Duration(c.Tick),
- region: map[int8]map[int]*region.Region{},
- // live cache
- liveCache: map[int64]*live.Live{},
- // chan
- inCh: make(chan interface{}, 1024),
- allowTypeIds: map[int16]struct{}{},
- dmRegion: map[int16]struct{}{},
- specialMids: map[int64]struct{}{},
- // vip
- vipActiveCache: make(map[int]string),
- vipTick: time.Duration(c.VipTick),
- // manager
- RelateCache: []*manager.Relate{},
- specialCache: map[int64]*special.Card{},
- // player icon
- playerIcon: &view.PlayerIcon{},
- }
- for _, id := range _elecTypeIds {
- s.allowTypeIds[id] = struct{}{}
- }
- for _, id := range c.DMRegion {
- s.dmRegion[id] = struct{}{}
- }
- var err error
- if s.shareClient, err = shareclient.NewClient(nil); err != nil {
- panic(fmt.Sprintf("env:%s no share-service", env.DeployEnv))
- }
- // load data
- s.loadLive()
- s.loadRegion()
- s.loadPlayerIcon()
- s.loadVIPActive()
- s.loadManager()
- s.loadRelateGame()
- s.loadBnj2019Infos()
- go s.infocproc()
- go s.tickproc()
- go s.vipproc()
- go s.bnjTickproc()
- return s
- }
- // Ping is dao ping.
- func (s *Service) Ping(c context.Context) (err error) {
- return s.arcDao.Ping(c)
- }
- func (s *Service) bnjTickproc() {
- for {
- time.Sleep(time.Duration(s.c.Bnj2019.Tick))
- err := s.loadBnj2019Infos()
- if err != nil {
- log.Error("bnj load error(%v)", err)
- }
- }
- }
- // tickproc tick load cache.
- func (s *Service) tickproc() {
- for {
- time.Sleep(s.tick)
- s.loadRegion()
- s.loadLive()
- s.loadPlayerIcon()
- s.loadManager()
- s.loadRelateGame()
- }
- }
- // vipproc tick load vip cache.
- func (s *Service) vipproc() {
- for {
- time.Sleep(s.vipTick)
- s.loadVIPActive()
- }
- }
- // loadVIPActive tick load vip active cache.
- func (s *Service) loadVIPActive() {
- var (
- va map[int]string
- err error
- )
- va = make(map[int]string)
- if va[view.VIPActiveView], err = s.vipDao.VIPActive(context.TODO(), view.VIPActiveView); err != nil {
- log.Error("s.vipDao.VIPActinve(%d) error(%v)", view.VIPActiveView, err)
- return
- }
- s.vipActiveCache = va
- log.Info("load vip active success")
- }
- func (s *Service) loadRegion() {
- res, err := s.rgnDao.Seconds(context.TODO())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.region = res
- }
- func (s *Service) loadLive() {
- if s.c.Env == model.EnvHK {
- return
- }
- living, err := s.liveDao.Living(context.TODO())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- tmp := map[int64]*live.Live{}
- for _, v := range living {
- tmp[v.Mid] = v
- }
- s.liveCache = tmp
- }
- func (s *Service) loadManager() {
- r, err := s.mngDao.Relate(context.TODO())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.RelateCache = r
- sp, err := s.spDao.Card(context.TODO())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.specialCache = sp
- midsM, err := s.creativeDao.Special(context.Background())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- log.Info("load special mids(%+v)", midsM)
- s.specialMids = midsM
- }
- func (s *Service) loadRelateGame() {
- g, err := s.aiDao.Av2Game(context.TODO())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- s.RelateGameCache = g
- }
- func (s *Service) loadPlayerIcon() {
- res, err := s.rscDao.PlayerIcon(context.TODO())
- if err != nil {
- log.Error("%+v", err)
- return
- }
- if res != nil {
- s.playerIcon = &view.PlayerIcon{URL1: res.URL1, Hash1: res.Hash1, URL2: res.URL2, Hash2: res.Hash2, CTime: res.CTime}
- } else {
- s.playerIcon = nil
- }
- }
- func (s *Service) relateCache(c context.Context, plat int8, build int, now time.Time, aid int64, tids []int64, rid int32) (relate *manager.Relate) {
- rs := s.RelateCache
- rls := make([]*manager.Relate, 0, len(rs))
- if len(rs) != 0 {
- LOOP:
- for _, r := range rs {
- if vs, ok := r.Versions[plat]; ok {
- for _, v := range vs {
- if model.InvalidBuild(build, v.Build, v.Condition) {
- continue LOOP
- }
- }
- if (r.STime == 0 || now.After(r.STime.Time())) && (r.ETime == 0 || now.Before(r.ETime.Time())) {
- rls = append(rls, r)
- }
- }
- }
- }
- for _, r := range rls {
- if _, ok := r.Aids[aid]; ok {
- relate = r
- break
- }
- if len(tids) != 0 {
- for _, tid := range tids {
- if _, ok := r.Tids[tid]; ok {
- relate = r
- break
- }
- }
- }
- if _, ok := r.Rids[int64(rid)]; ok {
- relate = r
- break
- }
- }
- return
- }
- func (s Service) relateGame(c context.Context, aid int64) (id int64) {
- id = s.RelateGameCache[aid]
- return
- }
|