You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
6.6 KiB
278 lines
6.6 KiB
package view |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
"go-common/app/interface/main/app-view/model/elec" |
|
"go-common/app/interface/main/app-view/model/view" |
|
"go-common/app/service/main/archive/model/archive" |
|
thumbup "go-common/app/service/main/thumbup/model" |
|
"go-common/library/conf/env" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
"go-common/library/sync/errgroup" |
|
) |
|
|
|
// CheckAccess check |
|
func (s *Service) CheckAccess(mid int64) bool { |
|
if !s.BnjIsGrey { |
|
return true |
|
} |
|
_, ok := s.BnjWhiteMid[mid] |
|
if !ok && env.DeployEnv == env.DeployEnvProd { |
|
log.Error("mid(%d) env(%s) not allow", mid, env.DeployEnv) |
|
return false |
|
} |
|
return true |
|
} |
|
|
|
func (s *Service) initBnjPages(c context.Context, ps []*archive.Page3) (pages []*view.Page) { |
|
for _, v := range ps { |
|
page := &view.Page{} |
|
metas := make([]*view.Meta, 0, 4) |
|
for q, r := range _rate { |
|
meta := &view.Meta{ |
|
Quality: q, |
|
Size: int64(float64(r*v.Duration) * 1.1 / 8.0), |
|
} |
|
metas = append(metas, meta) |
|
} |
|
page.Page3 = v |
|
page.Metas = metas |
|
page.DMLink = fmt.Sprintf(_dmformat, v.Cid) |
|
pages = append(pages, page) |
|
} |
|
return |
|
} |
|
|
|
// initBnjReqUser is |
|
func (s *Service) initBnjReqUser(c context.Context, authorMid, aid, mid int64) (reqUser *view.ReqUser, err error) { |
|
reqUser = &view.ReqUser{Favorite: 0, Attention: -999, Like: 0, Dislike: 0} |
|
if mid == 0 { |
|
return |
|
} |
|
g := errgroup.Group{} |
|
g.Go(func() error { |
|
var is bool |
|
if is, _ = s.favDao.IsFav(context.Background(), mid, aid); is { |
|
reqUser.Favorite = 1 |
|
} |
|
return nil |
|
}) |
|
g.Go(func() error { |
|
res, err := s.thumbupDao.HasLike(context.Background(), mid, _businessLike, []int64{aid}) |
|
if err != nil { |
|
log.Error("s.thumbupDao.HasLike err(%+v)", err) |
|
return nil |
|
} |
|
if res.States == nil { |
|
return nil |
|
} |
|
if typ, ok := res.States[aid]; ok { |
|
if typ.State == thumbup.StateLike { |
|
reqUser.Like = 1 |
|
} else if typ.State == thumbup.StateDislike { |
|
reqUser.Dislike = 1 |
|
} |
|
} |
|
return nil |
|
}) |
|
g.Go(func() (err error) { |
|
res, err := s.coinDao.ArchiveUserCoins(context.Background(), aid, mid, _avTypeAv) |
|
if err != nil { |
|
log.Error("%+v", err) |
|
err = nil |
|
} |
|
if res != nil && res.Multiply > 0 { |
|
reqUser.Coin = 1 |
|
} |
|
return |
|
}) |
|
if authorMid > 0 { |
|
g.Go(func() error { |
|
fl, err := s.accDao.Following3(context.Background(), mid, authorMid) |
|
if err != nil { |
|
log.Error("%+v", err) |
|
return nil |
|
} |
|
if fl { |
|
reqUser.Attention = 1 |
|
} |
|
return nil |
|
}) |
|
} |
|
g.Wait() |
|
return |
|
} |
|
|
|
// Bnj2019 is |
|
func (s *Service) Bnj2019(c context.Context, mid int64, relateID int64) (bnj *view.BnjMain, err error) { |
|
if s.BnjMainView == nil || !s.BnjMainView.IsNormal() { |
|
err = ecode.NothingFound |
|
return |
|
} |
|
bnj = new(view.BnjMain) |
|
bnj.ElecSmallText = s.c.Bnj2019.ElecSmallText |
|
bnj.ElecBigText = s.c.Bnj2019.ElecBigText |
|
bnj.Archive3 = s.BnjMainView.Archive3 |
|
bnj.ReqUser = &view.ReqUser{} |
|
bnj.Elec = s.BnjElecInfo |
|
bnj.Pages = s.initBnjPages(c, s.BnjMainView.Pages) |
|
bnj.ReqUser, _ = s.initBnjReqUser(c, bnj.Author.Mid, bnj.Aid, mid) |
|
bnj.PlayerIcon = s.playerIcon |
|
bnj.Elec = s.BnjElecInfo |
|
for _, a := range s.BnjLists { |
|
relate := &view.BnjItem{ |
|
Aid: a.Aid, |
|
Cid: a.FirstCid, |
|
Tid: a.TypeID, |
|
Pic: a.Pic, |
|
Copyright: a.Copyright, |
|
PubDate: a.PubDate, |
|
Title: a.Title, |
|
Desc: a.Desc, |
|
Stat: a.Stat, |
|
Duration: a.Duration, |
|
Author: a.Author, |
|
Dimension: a.Dimension, |
|
Rights: a.Rights, |
|
} |
|
if relate.Aid == s.c.Bnj2019.AdAv { |
|
relate.IsAd = 1 |
|
} |
|
if relate.Aid == relateID { |
|
relate.Pages = s.initBnjPages(c, a.Pages) |
|
relate.ReqUser, _ = s.initBnjReqUser(c, a.Author.Mid, a.Aid, mid) |
|
} |
|
bnj.Relates = append(bnj.Relates, relate) |
|
} |
|
return |
|
} |
|
|
|
// BnjList is |
|
func (s *Service) BnjList(c context.Context, mid int64) (list *view.BnjList, err error) { |
|
list = new(view.BnjList) |
|
for _, item := range s.BnjLists { |
|
list.Item = append(list.Item, &view.BnjItem{ |
|
Aid: item.Aid, |
|
Cid: item.FirstCid, |
|
Pic: item.Pic, |
|
Duration: item.Duration, |
|
IsAd: 0, |
|
Author: item.Author, |
|
}) |
|
} |
|
return |
|
} |
|
|
|
// BnjItem is |
|
func (s *Service) BnjItem(c context.Context, aid, mid int64) (item *view.BnjItem, err error) { |
|
var v *archive.View3 |
|
if aid == s.BnjMainView.Aid { |
|
v = s.BnjMainView |
|
} else { |
|
for _, l := range s.BnjLists { |
|
if aid == l.Aid { |
|
v = l |
|
break |
|
} |
|
} |
|
} |
|
if v == nil || !v.IsNormal() { |
|
err = ecode.NothingFound |
|
return |
|
} |
|
item = &view.BnjItem{ |
|
Aid: v.Aid, |
|
Cid: v.FirstCid, |
|
Tid: v.TypeID, |
|
Pic: v.Pic, |
|
Copyright: v.Copyright, |
|
PubDate: v.PubDate, |
|
Title: v.Title, |
|
Desc: v.Desc, |
|
Stat: v.Stat, |
|
Duration: v.Duration, |
|
Author: v.Author, |
|
Dimension: v.Dimension, |
|
Rights: v.Rights, |
|
} |
|
if item.Aid == s.c.Bnj2019.AdAv { |
|
item.IsAd = 1 |
|
} |
|
item.ReqUser, _ = s.initBnjReqUser(c, v.Author.Mid, v.Aid, mid) |
|
item.Pages = s.initBnjPages(c, v.Pages) |
|
return |
|
} |
|
|
|
func (s *Service) loadBnj2019Infos() (err error) { |
|
var ( |
|
aids []int64 |
|
avm map[int64]*archive.View3 |
|
list []*archive.View3 |
|
mainView *archive.View3 |
|
elec *elec.Info |
|
whiteMid = make(map[int64]struct{}) |
|
liveMids []int64 |
|
bnjStatus int |
|
) |
|
if bnjStatus, liveMids, err = s.liveDao.Bnj2019Conf(context.Background()); err != nil { |
|
log.Error("%+v", err) |
|
} else { |
|
log.Info("got live bnj2019 mids(%v)", liveMids) |
|
for _, mid := range liveMids { |
|
whiteMid[mid] = struct{}{} |
|
} |
|
} |
|
if bnjStatus == 1 { |
|
s.BnjIsGrey = true |
|
} else { |
|
s.BnjIsGrey = false |
|
} |
|
// TODO live mids |
|
for _, mid := range s.c.Bnj2019.WhiteMids { |
|
whiteMid[mid] = struct{}{} |
|
} |
|
s.BnjWhiteMid = whiteMid |
|
aids = append(aids, s.c.Bnj2019.MainAid) |
|
aids = append(aids, s.c.Bnj2019.AidList...) |
|
if avm, err = s.arcDao.ViewsRPC(context.Background(), aids); err != nil { |
|
log.Error("bnj s.arcDao.Archives(%v) error(%v)", aids, err) |
|
return |
|
} |
|
mainView, ok := avm[s.c.Bnj2019.MainAid] |
|
if !ok { |
|
log.Error("bnj main archive(%d) not exist", s.c.Bnj2019.MainAid) |
|
return |
|
} |
|
mainView.Rights.Elec = 1 |
|
mainView.Rights.Download = 1 |
|
s.BnjMainView = mainView |
|
for _, aid := range s.c.Bnj2019.AidList { |
|
a, ok := avm[aid] |
|
if !ok { |
|
log.Error("bnj list has no aid(%d)", aid) |
|
continue |
|
} |
|
if !a.IsNormal() { |
|
log.Error("bnj list aid(%d) not open(%d)", aid, a.State) |
|
continue |
|
} |
|
a.Rights.Elec = 1 |
|
a.Rights.Download = 1 |
|
list = append(list, a) |
|
} |
|
if len(list) == 0 { |
|
log.Error("list is zero") |
|
return |
|
} |
|
s.BnjLists = list |
|
if elec, err = s.elcDao.TotalInfo(context.Background(), mainView.Author.Mid, mainView.Aid); err == nil { |
|
s.BnjElecInfo = elec |
|
s.BnjElecInfo.Total += s.c.Bnj2019.FakeElec |
|
} else { |
|
log.Error("s.elecDao.TotalInfo(%d,%d) error(%v)", mainView.Author.Mid, mainView.Aid, err) |
|
} |
|
return |
|
}
|
|
|