123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- package data
- import (
- "context"
- "fmt"
- "time"
- "go-common/app/admin/main/up/model/datamodel"
- "go-common/app/admin/main/up/service/cache"
- "go-common/app/interface/main/creative/model/tag"
- "go-common/library/log"
- "go-common/library/sync/errgroup"
- )
- // ViewerBase get up viewer base data.
- func (s *Service) ViewerBase(c context.Context, mid int64) (res *datamodel.ViewerBaseInfo, err error) {
- dt := getDateLastSunday()
- if res, err = s.data.ViewerBase(c, mid, dt); err != nil {
- log.Error("get viewer base error, err=%v", err)
- return
- }
- return
- }
- // ViewerArea get up viewer area data.
- func (s *Service) ViewerArea(c context.Context, mid int64) (res *datamodel.ViewerAreaInfo, err error) {
- dt := getDateLastSunday()
- res, err = s.data.ViewerArea(c, mid, dt)
- if err != nil {
- log.Error("get viewer area error, err=%v", err)
- return
- }
- return
- }
- // CacheTrend get trend from mc.
- func (s *Service) CacheTrend(c context.Context, mid int64) (res *datamodel.ViewerTrendInfo, err error) {
- dt := getDateLastSunday()
- if res, err = s.viewerTrend(c, mid, dt); err != nil {
- return
- }
- return
- }
- //GetTags get tag
- func (s *Service) GetTags(c context.Context, ids ...int64) (result map[int64]*tag.Meta) {
- var tagMetaMap, leftIDs = cache.GetTagCache(ids...)
- if len(leftIDs) > 0 {
- if tlist, err := s.dtag.TagList(c, leftIDs); err != nil {
- log.Error("trend s.dtag.TagList err(%v)", err)
- } else {
- for _, v := range tlist {
- tagMetaMap[v.TagID] = v
- cache.AddTagCache(v)
- }
- }
- }
- result = tagMetaMap
- return
- }
- // ViewerTrend get up viewer trend data.
- func (s *Service) viewerTrend(c context.Context, mid int64, dt time.Time) (res *datamodel.ViewerTrendInfo, err error) {
- ut, err := s.data.ViewerTrend(c, mid, dt)
- if err != nil || ut == nil {
- log.Error("trend s.data.ViewerTrend err(%v)", err)
- return
- }
- f := []string{"fan", "guest"}
- skeys := make([]int, 0) //for tag sort.
- tgs := make([]int64, 0) // for request tag name.
- res = &datamodel.ViewerTrendInfo{}
- var dataMap = make(map[string]*datamodel.ViewerTypeTagInfo)
- for _, fk := range f {
- td := ut[fk]
- vt := &datamodel.ViewerTypeTagInfo{}
- if td == nil {
- vt.Type = nil
- vt.Tag = nil
- dataMap[fk] = vt
- continue
- }
- typeMap := make(map[int]*datamodel.ViewerTypeData) //return type map to user.
- //deal type for type name.
- if td.Ty != nil {
- for k, v := range td.Ty {
- var tagInfo, ok = cache.VideoUpTypeCache[k]
- var name = ""
- if ok {
- name = tagInfo.Name
- }
- typeMap[k] = &datamodel.ViewerTypeData{
- Tid: k,
- Name: name,
- Play: v,
- }
- }
- } else {
- typeMap = nil
- }
- // deal tag for tag name.
- if td.Tag != nil {
- for k, v := range td.Tag {
- tgs = append(tgs, v)
- skeys = append(skeys, k)
- }
- var tagMetaMap, leftIDs = cache.GetTagCache(tgs...)
- if len(leftIDs) > 0 {
- var tlist []*tag.Meta
- if tlist, err = s.dtag.TagList(c, leftIDs); err != nil {
- log.Error("trend s.dtag.TagList err(%v)", err)
- } else {
- for _, v := range tlist {
- tagMetaMap[v.TagID] = v
- cache.AddTagCache(v)
- }
- }
- }
- for _, k := range skeys {
- var tagID = td.Tag[k]
- var tagData = &datamodel.ViewerTagData{
- Idx: k,
- TagID: int(tagID),
- Name: "",
- }
- if tagMeta, ok := tagMetaMap[tagID]; ok {
- tagData.Name = tagMeta.TagName
- }
- vt.Tag = append(vt.Tag, tagData)
- }
- }
- for _, v := range typeMap {
- vt.Type = append(vt.Type, v)
- }
- dataMap[fk] = vt
- }
- res.Fans = dataMap["fan"]
- res.Guest = dataMap["guest"]
- return
- }
- //ViewData view data for up
- type ViewData struct {
- Base *datamodel.ViewerBaseInfo `json:"viewer_base"`
- Trend *datamodel.ViewerTrendInfo `json:"viewer_trend"`
- Area *datamodel.ViewerAreaInfo `json:"viewer_area"`
- }
- //GetUpViewInfo get view info by arg
- func (s *Service) GetUpViewInfo(c context.Context, arg *datamodel.GetUpViewInfoArg) (result *ViewData, err error) {
- if arg == nil {
- log.Error("arg is nil")
- return
- }
- res, err := s.GetViewData(c, arg.Mid)
- result = &res
- return
- }
- //GetViewData get all view data
- func (s *Service) GetViewData(c context.Context, mid int64) (result ViewData, err error) {
- var group, ctx = errgroup.WithContext(c)
- group.Go(func() error {
- var e error
- result.Base, e = s.ViewerBase(ctx, mid)
- if e != nil {
- log.Error("get base view err happen, err=%v", e)
- }
- return nil
- })
- group.Go(func() error {
- var e error
- result.Area, e = s.ViewerArea(ctx, mid)
- if e != nil {
- log.Error("get area view err happen, err=%v", e)
- }
- return nil
- })
- group.Go(func() error {
- var e error
- result.Trend, e = s.CacheTrend(ctx, mid)
- if e != nil {
- log.Error("get trend view err happen, err=%v", e)
- }
- return nil
- })
- err = group.Wait()
- if err != nil {
- log.Error("get view data error, err=%+v", err)
- }
- return
- }
- //GetFansSummary get fan summary
- func (s *Service) GetFansSummary(c context.Context, arg *datamodel.GetFansSummaryArg) (result *datamodel.FansSummaryResult, err error) {
- result = &datamodel.FansSummaryResult{}
- var fanInfo, e = s.data.UpFansAnalysis(c, arg.Mid, datamodel.Thirty)
- if e != nil || fanInfo == nil {
- err = e
- log.Error("get fan analysis err happen, err=%v", e)
- return
- }
- result.FanSummary = fanInfo.Summary
- return
- }
- //GetRelationFansDay get fan day history
- func (s *Service) GetRelationFansDay(c context.Context, arg *datamodel.GetRelationFansHistoryArg) (result *datamodel.GetRelationFansHistoryResult, err error) {
- result = &datamodel.GetRelationFansHistoryResult{}
- if arg.DataType == 0 {
- arg.DataType = datamodel.DataType30Day
- }
- switch arg.DataType {
- case datamodel.DataType30Day:
- result.RelationFanHistoryData, err = s.data.RelationFansDay(c, arg.Mid)
- case datamodel.DataTypeMonth:
- result.RelationFanHistoryData, err = s.data.RelationFansMonth(c, arg.Mid)
- default:
- err = fmt.Errorf("invalid data type(%d)", arg.DataType)
- }
- if err != nil {
- log.Error("get relation fans day fail, err=%v", err)
- return
- }
- return
- }
|