123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package data
- import (
- "context"
- "strconv"
- "time"
- "go-common/app/interface/main/creative/model/data"
- "go-common/library/ecode"
- "go-common/library/log"
- "github.com/tsuna/gohbase/hrpc"
- )
- var (
- trendTBLNameMap = map[byte]string{
- data.ArtView: ArtViewTBL,
- data.ArtReply: ArtReplyTBL,
- data.ArtShare: ArtShareTBL,
- data.ArtCoin: ArtCoinTBL,
- data.ArtFavTBL: ArtFavTBL,
- data.ArtLikeTBL: ArtLikeTBL,
- }
- rankTBLNameMap = map[byte]string{
- data.ArtView: ArtViewIncTBL,
- data.ArtReply: ArtReplyIncTBL,
- data.ArtShare: ArtShareIncTBL,
- data.ArtCoin: ArtCoinIncTBL,
- data.ArtFavTBL: ArtFavIncTBL,
- data.ArtLikeTBL: ArtLikeIncTBL,
- }
- )
- // ArtThirtyDay for article trend 30 days.
- func (d *Dao) ArtThirtyDay(c context.Context, mid int64, ty byte) (res []*data.ArtTrend, err error) {
- var (
- result *hrpc.Result
- ctx, cancel = context.WithTimeout(c, time.Duration(d.c.HBase.ReadTimeout))
- key = hbaseMd5Key(mid)
- )
- defer cancel()
- tableName, ok := trendTBLNameMap[ty]
- if !ok {
- log.Error("ArtThirtyDay not exist type(%d)|mid(%d)", ty, mid)
- return
- }
- log.Info("ArtThirtyDay mid(%d)|tableName(%s)|family(u)|rowkey(%s)", mid, tableName, key)
- if result, err = d.hbase.GetStr(ctx, tableName, key); err != nil {
- log.Error("ArtThirtyDay d.hbase.GetStr tableName(%s)|mid(%d)|key(%v)|error(%v)", tableName, mid, key, err)
- err = ecode.CreativeDataErr
- return
- }
- if result == nil || len(result.Cells) == 0 {
- log.Warn("ArtThirtyDay no data tableName(%s)|mid(%d)|key(%v)", tableName, mid, key)
- return
- }
- res = make([]*data.ArtTrend, 0, len(result.Cells))
- for _, c := range result.Cells {
- if c == nil {
- continue
- }
- qual := string(c.Qualifier[:])
- val := string(c.Value[:])
- if string(c.Family) == "u" {
- t, v, err := parseKeyValue(qual, val)
- if err != nil {
- break
- }
- td := &data.ArtTrend{}
- td.DateKey = t
- td.TotalIncr = v
- res = append(res, td)
- }
- }
- log.Info("ArtThirtyDay mid(%d)|tableName(%s)|family(u)|rowkey(%s)|res(%+v)", mid, tableName, key, res)
- return
- }
- // ArtRank for article rank
- func (d *Dao) ArtRank(c context.Context, mid int64, ty byte, date string) (res *data.ArtRankMap, err error) {
- var (
- result *hrpc.Result
- ctx, cancel = context.WithTimeout(c, time.Duration(d.c.HBase.ReadTimeout))
- key = hbaseMd5Key(mid)
- )
- defer cancel()
- tableName, ok := rankTBLNameMap[ty]
- if !ok {
- log.Error("ArtRank not exist type(%d)|mid(%d)", ty, mid)
- return
- }
- tableName += date
- log.Info("ArtRank mid(%d)|tableName(%s)|family(rd,v)|rowkey(%s)", mid, tableName, key)
- if result, err = d.hbase.GetStr(ctx, tableName, key); err != nil {
- log.Error("ArtRank d.hbase.GetStr tableName(%s)|mid(%d)|key(%v)|error(%v)", tableName, mid, key, err)
- err = ecode.CreativeDataErr
- return
- }
- if result == nil || len(result.Cells) == 0 {
- log.Warn("ArtRank no data tableName(%s)|mid(%d)|key(%v)", tableName, mid, key)
- return
- }
- aids := make(map[int]int64)
- incrs := make(map[int]int)
- for _, c := range result.Cells {
- if c == nil {
- continue
- }
- if string(c.Family) == "rd" {
- k, _ := strconv.Atoi(string(c.Qualifier[:]))
- v, _ := strconv.ParseInt(string(c.Value[:]), 10, 64)
- aids[k] = v
- } else if string(c.Family) == "v" {
- k, _ := strconv.Atoi(string(c.Qualifier[:]))
- v, _ := strconv.Atoi(string(c.Value[:]))
- incrs[k] = v
- }
- }
- res = &data.ArtRankMap{}
- res.AIDs = aids
- res.Incrs = incrs
- log.Info("ArtRank mid(%d)|tableName(%s)|family(rd,v)|rowkey(%s)|res(%+v)", mid, tableName, key, res)
- return
- }
- // 专栏阅读来源分析 rowkey mid倒置补(10位)+ yyyyMMdd
- func readSourceKey(id int64) string {
- idStr := strconv.FormatInt(id, 10)
- s := reverseString(idStr)
- s = s + time.Now().AddDate(0, 0, -1).Add(-12*time.Hour).Format("20060102")
- return s
- }
- // ReadAnalysis for article read source.
- func (d *Dao) ReadAnalysis(c context.Context, mid int64) (res *data.ArtRead, err error) {
- var (
- result *hrpc.Result
- ctx, cancel = context.WithTimeout(c, time.Duration(d.c.HBase.ReadTimeout))
- tableName = ArtReadAnalysisTBL
- key = readSourceKey(mid)
- )
- defer cancel()
- log.Info("ReadAnalysis mid(%d)|tableName(%s)|family(f)|rowkey(%s)", mid, tableName, key)
- if result, err = d.hbase.GetStr(ctx, tableName, key); err != nil {
- log.Error("ReadAnalysis d.hbase.GetStr tableName(%s)|mid(%d)|key(%v)|error(%v)", tableName, mid, key, err)
- err = ecode.CreativeDataErr
- return
- }
- if result == nil || len(result.Cells) == 0 {
- log.Warn("ReadAnalysis no data tableName(%s)|mid(%d)|key(%v)", tableName, mid, key)
- return
- }
- var cells data.ArtRead
- err = parser.Parse(result.Cells, &cells)
- if err != nil {
- log.Error("ReadAnalysis parser.Parse tableName(%s)|mid(%d)|rowkey(%+v)|error(%v)", tableName, mid, key, err)
- err = ecode.CreativeDataErr
- return
- }
- res = &cells
- log.Info("ReadAnalysis mid(%d)|tableName(%s)|family(f)|rowkey(%s)|res(%+v)", mid, tableName, key, res)
- return
- }
|