123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338 |
- package region
- import (
- "time"
- "go-common/app/interface/main/app-show/conf"
- actdao "go-common/app/interface/main/app-show/dao/activity"
- addao "go-common/app/interface/main/app-show/dao/ad"
- arcdao "go-common/app/interface/main/app-show/dao/archive"
- adtdao "go-common/app/interface/main/app-show/dao/audit"
- bgmdao "go-common/app/interface/main/app-show/dao/bangumi"
- carddao "go-common/app/interface/main/app-show/dao/card"
- dyndao "go-common/app/interface/main/app-show/dao/dynamic"
- locdao "go-common/app/interface/main/app-show/dao/location"
- rcmmndao "go-common/app/interface/main/app-show/dao/recommend"
- rgdao "go-common/app/interface/main/app-show/dao/region"
- resdao "go-common/app/interface/main/app-show/dao/resource"
- searchdao "go-common/app/interface/main/app-show/dao/search"
- tagdao "go-common/app/interface/main/app-show/dao/tag"
- "go-common/app/interface/main/app-show/model/bangumi"
- "go-common/app/interface/main/app-show/model/card"
- "go-common/app/interface/main/app-show/model/region"
- resource "go-common/app/service/main/resource/model"
- "go-common/library/stat/prom"
- )
- const (
- _initRegionTagKey = "region_tag_%d_%d"
- )
- // Service is region service.
- type Service struct {
- c *conf.Config
- // prom
- pHit *prom.Prom
- pMiss *prom.Prom
- prmobi *prom.Prom
- // dao
- dao *rgdao.Dao
- // bnnr *bnnrdao.Dao
- rcmmnd *rcmmndao.Dao
- ad *addao.Dao // cptbanner
- tag *tagdao.Dao
- adt *adtdao.Dao
- arc *arcdao.Dao
- dyn *dyndao.Dao
- search *searchdao.Dao
- cdao *carddao.Dao
- act *actdao.Dao
- bgm *bgmdao.Dao
- res *resdao.Dao
- loc *locdao.Dao
- // tick
- tick time.Duration
- // regions cache
- cache map[string][]*region.Region
- // new region list cache
- cachelist map[string][]*region.Region
- limitCache map[int64][]*region.Limit
- configCache map[int64][]*region.Config
- regionListCache map[string]map[int]*region.Region
- verCache map[string]string
- // audit cache
- auditCache map[string]map[int]struct{} // audit mobi_app builds
- // region show item cache
- bannerCache map[int8]map[int][]*resource.Banner
- bannerBmgCache map[int8]map[int][]*bangumi.Banner
- hotCache map[int][]*region.ShowItem
- newCache map[int][]*region.ShowItem
- dynamicCache map[int][]*region.ShowItem
- // overseas
- hotOseaCache map[int][]*region.ShowItem
- newOseaCache map[int][]*region.ShowItem
- dynamicOseaCache map[int][]*region.ShowItem
- // region child show item cache
- childHotCache map[int][]*region.ShowItem
- childNewCache map[int][]*region.ShowItem
- childHotAidsCache map[int][]int64
- childNewAidsCache map[int][]int64
- showDynamicAidsCache map[int][]int64
- // overseas region child show item cache
- childHotOseaCache map[int][]*region.ShowItem
- childNewOseaCache map[int][]*region.ShowItem
- // region tag show item cache
- tagHotCache map[string][]*region.ShowItem
- tagNewCache map[string][]*region.ShowItem
- tagHotAidsCache map[string][]int64
- tagNewAidsCache map[string][]int64
- // overseas region tag show item cache
- tagHotOseaCache map[string][]*region.ShowItem
- tagNewOseaCache map[string][]*region.ShowItem
- // new region feed
- regionFeedCache map[int]*region.Show
- regionFeedOseaCache map[int]*region.Show
- // tags cache
- tagsCache map[string]string
- // region show
- showCache map[int]*region.Show
- childShowCache map[int]*region.Show
- // overseas region show
- showOseaCache map[int]*region.Show
- childShowOseaCache map[int]*region.Show
- // region dynamic show
- showDynamicCache map[int]*region.Show
- childShowDynamicCache map[int]*region.Show
- // overseas region dynamic show
- showDynamicOseaCache map[int]*region.Show
- childShowDynamicOseaCache map[int]*region.Show
- // similar tag
- similarTagCache map[string][]*region.SimilarTag
- // similar tag
- regionTagCache map[int][]*region.SimilarTag
- // ranking
- rankCache map[int][]*region.ShowItem
- rankOseaCache map[int][]*region.ShowItem
- // card
- cardCache map[string][]*region.Head
- columnListCache map[int]*card.ColumnList
- // region
- reRegionCache map[int]*region.Region
- // json tick
- jsonOn bool
- jsonCh chan int64
- jsonIdsCache map[int64]struct{} // rid<<32 | tid
- // cpm percentage 0~100
- cpmNum int
- cpmMid map[int64]struct{}
- cpmAll bool
- adIsPost bool
- // infoc
- logCh chan interface{}
- }
- // New new a region service.
- func New(c *conf.Config) (s *Service) {
- s = &Service{
- c: c,
- pHit: prom.CacheHit,
- pMiss: prom.CacheMiss,
- prmobi: prom.BusinessInfoCount,
- // dao
- dao: rgdao.New(c),
- // bnnr: bnnrdao.New(c),
- rcmmnd: rcmmndao.New(c),
- ad: addao.New(c),
- adt: adtdao.New(c),
- arc: arcdao.New(c),
- tag: tagdao.New(c),
- dyn: dyndao.New(c),
- search: searchdao.New(c),
- cdao: carddao.New(c),
- act: actdao.New(c),
- bgm: bgmdao.New(c),
- res: resdao.New(c),
- loc: locdao.New(c),
- // tick
- tick: time.Duration(c.Tick),
- // audit cache
- auditCache: map[string]map[int]struct{}{},
- // regions cache
- cache: map[string][]*region.Region{},
- // new region list cache
- cachelist: map[string][]*region.Region{},
- limitCache: map[int64][]*region.Limit{},
- configCache: map[int64][]*region.Config{},
- regionListCache: map[string]map[int]*region.Region{},
- verCache: map[string]string{},
- // region show item cache
- bannerCache: map[int8]map[int][]*resource.Banner{},
- bannerBmgCache: map[int8]map[int][]*bangumi.Banner{},
- hotCache: map[int][]*region.ShowItem{},
- newCache: map[int][]*region.ShowItem{},
- dynamicCache: map[int][]*region.ShowItem{},
- // overseas
- hotOseaCache: map[int][]*region.ShowItem{},
- newOseaCache: map[int][]*region.ShowItem{},
- dynamicOseaCache: map[int][]*region.ShowItem{},
- // region child show item cache
- childHotCache: map[int][]*region.ShowItem{},
- childNewCache: map[int][]*region.ShowItem{},
- childHotAidsCache: map[int][]int64{},
- childNewAidsCache: map[int][]int64{},
- showDynamicAidsCache: map[int][]int64{},
- // overseas region child show item cache
- childHotOseaCache: map[int][]*region.ShowItem{},
- childNewOseaCache: map[int][]*region.ShowItem{},
- // region tag show item cache
- tagHotCache: map[string][]*region.ShowItem{},
- tagNewCache: map[string][]*region.ShowItem{},
- tagHotAidsCache: map[string][]int64{},
- tagNewAidsCache: map[string][]int64{},
- // overseas region tag show item cache
- tagHotOseaCache: map[string][]*region.ShowItem{},
- tagNewOseaCache: map[string][]*region.ShowItem{},
- // new region feed
- regionFeedCache: map[int]*region.Show{},
- regionFeedOseaCache: map[int]*region.Show{},
- // tags cache
- tagsCache: map[string]string{},
- // region show
- showCache: map[int]*region.Show{},
- childShowCache: map[int]*region.Show{},
- // overseas region show
- showOseaCache: map[int]*region.Show{},
- childShowOseaCache: map[int]*region.Show{},
- // region dynamic show
- showDynamicCache: map[int]*region.Show{},
- childShowDynamicCache: map[int]*region.Show{},
- // overseas region dynamic show
- showDynamicOseaCache: map[int]*region.Show{},
- childShowDynamicOseaCache: map[int]*region.Show{},
- // similar tag
- similarTagCache: map[string][]*region.SimilarTag{},
- // similar tag
- regionTagCache: map[int][]*region.SimilarTag{},
- // ranking
- rankCache: map[int][]*region.ShowItem{},
- rankOseaCache: map[int][]*region.ShowItem{},
- // card
- cardCache: map[string][]*region.Head{},
- columnListCache: map[int]*card.ColumnList{},
- // region
- reRegionCache: map[int]*region.Region{},
- // json tick
- jsonOn: false,
- jsonCh: make(chan int64, 128),
- jsonIdsCache: map[int64]struct{}{},
- // cpm percentage 0~100
- cpmNum: 0,
- cpmMid: map[int64]struct{}{},
- cpmAll: true,
- adIsPost: false,
- // infoc
- logCh: make(chan interface{}, 1024),
- }
- now := time.Now()
- s.loadRegionlist()
- s.loadRegion()
- s.loadShow()
- s.loadShowChild()
- s.loadShowChildTagsInfo()
- s.loadBanner()
- s.loadbgmBanner()
- s.loadAuditCache()
- s.loadRegionListCache()
- s.loadRankRegionCache()
- s.loadColumnListCache(now)
- s.loadCardCache(now)
- go s.loadproc()
- go s.infocproc()
- return
- }
- func (s *Service) loadproc() {
- for {
- time.Sleep(s.tick)
- now := time.Now()
- s.loadRegionlist()
- s.loadRegion()
- s.loadShow()
- s.loadShowChild()
- s.loadShowChildTagsInfo()
- s.loadBanner()
- s.loadbgmBanner()
- s.loadAuditCache()
- s.loadRegionListCache()
- s.loadRankRegionCache()
- s.loadColumnListCache(now)
- s.loadCardCache(now)
- }
- }
- // Close dao
- func (s *Service) Close() {
- s.dao.Close()
- }
- // SetCpm percentage 0~100
- func (s *Service) SetCpmNum(num int) {
- s.cpmNum = num
- if s.cpmNum < 0 {
- s.cpmNum = 0
- } else if s.cpmNum > 100 {
- s.cpmNum = 100
- }
- }
- // GetCpm percentage
- func (s *Service) CpmNum() int {
- return s.cpmNum
- }
- // SetCpm percentage 0~100
- func (s *Service) SetCpmMid(mid int64) {
- var mids = map[int64]struct{}{}
- mids[mid] = struct{}{}
- for mid, _ := range s.cpmMid {
- if _, ok := mids[mid]; !ok {
- mids[mid] = struct{}{}
- }
- }
- s.cpmMid = mids
- }
- // GetCpm percentage
- func (s *Service) CpmMid() []int {
- var mids []int
- for mid, _ := range s.cpmMid {
- mids = append(mids, int(mid))
- }
- return mids
- }
- // SetCpm All
- func (s *Service) SetCpmAll(isAll bool) {
- s.cpmAll = isAll
- }
- // GetCpm All
- func (s *Service) CpmAll() int {
- if s.cpmAll {
- return 1
- }
- return 0
- }
- // SetIsPost Get or Post
- func (s *Service) SetAdIsPost(isPost bool) {
- s.adIsPost = isPost
- }
- // IsPost Get or Post
- func (s *Service) AdIsPost() int {
- if s.adIsPost {
- return 1
- }
- return 0
- }
|