bilibili-backup/app/interface/main/mcn/dao/datadao/api.go
2019-04-22 02:59:20 +00:00

578 lines
22 KiB
Go

package datadao
import (
"context"
"fmt"
"net/http"
"net/url"
"time"
"go-common/app/interface/main/mcn/dao/cache"
"go-common/app/interface/main/mcn/dao/global"
"go-common/app/interface/main/mcn/model/datamodel"
"go-common/app/interface/main/mcn/model/mcnmodel"
"go-common/app/interface/main/mcn/tool/datacenter"
tagmdl "go-common/app/interface/main/tag/api"
"go-common/library/log"
"go-common/library/sync/errgroup"
)
// const url for api
const (
APIMcnSummary = "http://berserker.bilibili.co/avenger/api/155/query" // 7 see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690
APIIndexInc = "http://berserker.bilibili.co/avenger/api/156/query" // 3.1
APIIndexSource = "http://berserker.bilibili.co/avenger/api/159/query" // 3.2
APIPlaySource = "http://berserker.bilibili.co/avenger/api/161/query" // 3.3
APIMcnFans = "http://berserker.bilibili.co/avenger/api/168/query" // 3.4
APIMcnFansInc = "http://berserker.bilibili.co/avenger/api/171/query" // 3.5
APIMcnFansDec = "http://berserker.bilibili.co/avenger/api/169/query" // 3.6
APIMcnFansAttentionWay = "http://berserker.bilibili.co/avenger/api/170/query" // 3.7
APIMcnFansSex = "http://berserker.bilibili.co/avenger/api/162/query" // 3.8
APIMcnFansAge = "http://berserker.bilibili.co/avenger/api/163/query" // 3.8
APIMcnFansPlayWay = "http://berserker.bilibili.co/avenger/api/164/query" // 3.8
APIMcnFansArea = "http://berserker.bilibili.co/avenger/api/165/query" // 3.9
APIMcnFansType = "http://berserker.bilibili.co/avenger/api/166/query" // 3.10
APIMcnFansTag = "http://berserker.bilibili.co/avenger/api/167/query" // 3.11
)
func (d *Dao) callDataAPI(c context.Context, api string, query *datacenter.Query, res interface{}) (err error) {
var response = &datacenter.Response{
Result: res,
}
if query.Error() != nil {
err = query.Error()
log.Error("query error, err=%s", err)
return
}
var params = url.Values{}
params.Add("query", query.String())
if err = d.Client.Get(c, api, params, response); err != nil {
log.Error("fail to get response, err=%+v", err)
return
}
if response.Code != http.StatusOK {
err = fmt.Errorf("code:%d, msg:%s", response.Code, response.Msg)
return
}
return
}
// GetMcnSummary 7
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-7.mcn获取概要数据
func (d *Dao) GetMcnSummary(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetDataSummaryReply, err error) {
res = new(mcnmodel.McnGetDataSummaryReply)
var tmp []*datamodel.DmConMcnArchiveD
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
).Limit(1, 0).Order("log_date desc")
var api = APIMcnSummary
if err = d.callDataAPI(c, api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res.CopyFromDmConMcnArchiveD(tmp[0])
}
//log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp[0])
return
}
//GetMcnSummaryCache GetMcnSummary with cache
func (d *Dao) GetMcnSummaryCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetDataSummaryReply, err error) {
res = new(mcnmodel.McnGetDataSummaryReply)
var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetDataSummaryReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
return d.GetMcnSummary(c, signID, date)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetIndexInc 3.1
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.1.查询MCN增量趋势
func (d *Dao) GetIndexInc(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexIncReply, err error) {
res = new(mcnmodel.McnGetIndexIncReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
).Limit(30, 0).Order("log_date desc")
var api = APIIndexInc
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
return
}
//GetIndexIncCache GetIndexInc with cache
func (d *Dao) GetIndexIncCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexIncReply, err error) {
res = new(mcnmodel.McnGetIndexIncReply)
var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetIndexIncReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
return d.GetIndexInc(c, signID, date, tp)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetIndexSource 3.2
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.2.查询MCN下播放稿件来源所在分区
func (d *Dao) GetIndexSource(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexSourceReply, err error) {
res = new(mcnmodel.McnGetIndexSourceReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
)
var api = APIIndexSource
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
var tids []int64
for _, v := range res.Result {
tids = append(tids, v.TypeID)
}
tpNames := cache.GetTidNames(tids)
for _, v := range res.Result {
if tpName, ok := tpNames[v.TypeID]; ok {
v.TypeName = tpName
}
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
return
}
//GetIndexSourceCache GetIndexSource with cache
func (d *Dao) GetIndexSourceCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetIndexSourceReply, err error) {
res = new(mcnmodel.McnGetIndexSourceReply)
var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetIndexSourceReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
return d.GetIndexSource(c, signID, date, tp)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetPlaySource 3.3
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.3.查询MCN播放设备占比
func (d *Dao) GetPlaySource(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetPlaySourceReply, err error) {
res = new(mcnmodel.McnGetPlaySourceReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
).Limit(1, 0).Order("log_date desc")
var api = APIPlaySource
var tmp []*mcnmodel.McnGetPlaySourceReply
if err = d.callDataAPI(c, api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res = tmp[0]
}
//log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp)
return
}
//GetPlaySourceCache GetPlaySource with cache
func (d *Dao) GetPlaySourceCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetPlaySourceReply, err error) {
res = new(mcnmodel.McnGetPlaySourceReply)
var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetPlaySourceReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
return d.GetPlaySource(c, signID, date)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetMcnFans 3.4
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.4.查询MCN粉丝数与活跃度
func (d *Dao) GetMcnFans(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansReply, err error) {
res = new(mcnmodel.McnGetMcnFansReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
).Limit(1, 0).Order("log_date desc")
var tmp []*mcnmodel.McnGetMcnFansReply
var api = APIMcnFans
if err = d.callDataAPI(c, api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res = tmp[0]
}
//log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp[0])
return
}
//GetMcnFansCache GetMcnFans with cache
func (d *Dao) GetMcnFansCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansReply, err error) {
res = new(mcnmodel.McnGetMcnFansReply)
var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
return d.GetMcnFans(c, signID, date)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetMcnFansInc 3.5
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.5.查询MCN粉丝按天增量
func (d *Dao) GetMcnFansInc(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansIncReply, err error) {
res = new(mcnmodel.McnGetMcnFansIncReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
).Limit(30, 0).Order("log_date desc")
var api = APIMcnFansInc
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
//log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, res.Result[0])
return
}
//GetMcnFansIncCache GetMcnFansInc with cache
func (d *Dao) GetMcnFansIncCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansIncReply, err error) {
res = new(mcnmodel.McnGetMcnFansIncReply)
var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansIncReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
return d.GetMcnFansInc(c, signID, date)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetMcnFansDec 3.6
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.6.查询MCN粉丝取关数按天
func (d *Dao) GetMcnFansDec(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansDecReply, err error) {
res = new(mcnmodel.McnGetMcnFansDecReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
).Limit(30, 0).Order("log_date desc")
var api = APIMcnFansDec
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
//log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, res.Result[0])
return
}
//GetMcnFansDecCache GetMcnFansDec with cache
func (d *Dao) GetMcnFansDecCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansDecReply, err error) {
res = new(mcnmodel.McnGetMcnFansDecReply)
var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansDecReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
return d.GetMcnFansDec(c, signID, date)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetMcnFansAttentionWay 3.7
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.7.查询MCN粉丝关注渠道
func (d *Dao) GetMcnFansAttentionWay(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansAttentionWayReply, err error) {
res = new(mcnmodel.McnGetMcnFansAttentionWayReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
).Limit(1, 0).Order("log_date desc")
var tmp []*mcnmodel.McnGetMcnFansAttentionWayReply
var api = APIMcnFansAttentionWay
if err = d.callDataAPI(c, api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res = tmp[0]
}
//log.Info("%s query arg(%d,%+v) res(%+v)", api, signID, date, tmp[0])
return
}
//GetMcnFansAttentionWayCache GetMcnFansAttentionWay with cache
func (d *Dao) GetMcnFansAttentionWayCache(c context.Context, signID int64, date time.Time) (res *mcnmodel.McnGetMcnFansAttentionWayReply, err error) {
res = new(mcnmodel.McnGetMcnFansAttentionWayReply)
var cache = NewCacheMcnDataSignID(signID, date, res, "McnGetMcnFansAttentionWayReply", func(c context.Context, signID int64, date time.Time) (res interface{}, err error) {
return d.GetMcnFansAttentionWay(c, signID, date)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetFansBaseFansAttr 3.8
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.8.查询MCN粉丝/游客基本属性分析(性别占比 观众年龄 观看途径)
func (d *Dao) GetFansBaseFansAttr(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetBaseFansAttrReply, err error) {
res = new(mcnmodel.McnGetBaseFansAttrReply)
var group, _ = errgroup.WithContext(c)
group.Go(func() (err error) {
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
).Limit(1, 0).Order("log_date desc")
var api = APIMcnFansSex
var tmp []*datamodel.DmConMcnFansSexW
if err = d.callDataAPI(context.Background(), api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res.FansSex = tmp[0]
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, tmp[0])
return
})
group.Go(func() (err error) {
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
).Limit(1, 0).Order("log_date desc")
var tmp []*datamodel.DmConMcnFansAgeW
var api = APIMcnFansAge
if err = d.callDataAPI(context.Background(), api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res.FansAge = tmp[0]
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, tmp[0])
return
})
group.Go(func() (err error) {
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionLte(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
).Limit(1, 0).Order("log_date desc")
var tmp []*datamodel.DmConMcnFansPlayWayW
var api = APIMcnFansPlayWay
if err = d.callDataAPI(context.Background(), api, q, &tmp); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
if len(tmp) > 0 {
res.FansPlayWay = tmp[0]
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, tmp[0])
return
})
err = group.Wait()
if err != nil {
log.Error("fail to get data, err=%v", err)
return
}
return
}
//GetFansBaseFansAttrCache GetFansBaseFansAttr with cache
func (d *Dao) GetFansBaseFansAttrCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetBaseFansAttrReply, err error) {
res = new(mcnmodel.McnGetBaseFansAttrReply)
var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetBaseFansAttrReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
return d.GetFansBaseFansAttr(c, signID, date, tp)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetFansArea 3.9
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.9.查询MCN粉丝/游客地区分布分析
func (d *Dao) GetFansArea(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansAreaReply, err error) {
res = new(mcnmodel.McnGetFansAreaReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
)
var api = APIMcnFansArea
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
return
}
//GetFansAreaCache GetFansArea with cache
func (d *Dao) GetFansAreaCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansAreaReply, err error) {
res = new(mcnmodel.McnGetFansAreaReply)
var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetFansAreaReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
return d.GetFansArea(c, signID, date, tp)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetFansType 3.10
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.10.查询MCN粉丝/游客内容倾向分析
func (d *Dao) GetFansType(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTypeReply, err error) {
res = new(mcnmodel.McnGetFansTypeReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
)
var api = APIMcnFansType
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
var tids []int64
for _, v := range res.Result {
tids = append(tids, v.TypeID)
}
tpNames := cache.GetTidNames(tids)
for _, v := range res.Result {
if tpName, ok := tpNames[v.TypeID]; ok {
v.TypeName = tpName
}
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
return
}
//GetFansTypeCache GetFansType with cache
func (d *Dao) GetFansTypeCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTypeReply, err error) {
res = new(mcnmodel.McnGetFansTypeReply)
var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetFansTypeReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
return d.GetFansType(c, signID, date, tp)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}
// GetFansTag 3.11
// see doc http://info.bilibili.co/pages/viewpage.action?pageId=11545690#id-对外接口文档-3.11.查询MCN粉丝/游客标签地图分析
func (d *Dao) GetFansTag(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTagReply, err error) {
res = new(mcnmodel.McnGetFansTagReply)
var q = &datacenter.Query{}
q.Select("*").Where(
datacenter.ConditionMapType{"log_date": datacenter.ConditionIn(date)},
datacenter.ConditionMapType{"sign_id": datacenter.ConditionIn(signID)},
datacenter.ConditionMapType{"type": datacenter.ConditionIn(tp)},
)
var api = APIMcnFansTag
if err = d.callDataAPI(c, api, q, &res.Result); err != nil {
log.Error("call data api fail, api=%s, err=%s", api, err)
return
}
var tagIDs []int64
for _, v := range res.Result {
tagIDs = append(tagIDs, v.TagID)
}
var tagsReply *tagmdl.TagsReply
if tagsReply, err = global.GetTagGRPC().Tags(c, &tagmdl.TagsReq{Tids: tagIDs}); err != nil {
log.Error("tag(%+v) grpc client fail, err=%s", tagIDs, err)
err = nil
}
for _, v := range res.Result {
if tagsReply == nil {
continue
}
if tag, ok := tagsReply.Tags[v.TagID]; ok {
v.TagName = tag.Name
}
}
//log.Info("%s query arg(%d,%+v,%s) res(%+v)", api, signID, date, tp, res.Result[0])
return
}
//GetFansTagCache GetFansTag with cache
func (d *Dao) GetFansTagCache(c context.Context, signID int64, date time.Time, tp string) (res *mcnmodel.McnGetFansTagReply, err error) {
res = new(mcnmodel.McnGetFansTagReply)
var cache = NewCacheMcnDataWithTp(signID, date, tp, res, "McnGetFansTagReply", func(c context.Context, signID int64, date time.Time, tp string) (res interface{}, err error) {
return d.GetFansTag(c, signID, date, tp)
})
if err = d.McWrapper.GetOrLoad(c, cache); err != nil {
log.Error("cache get err, err=%v", err)
return
}
return
}