go-common/app/interface/main/activity/dao/timemachine/hbase.go
2019-04-22 18:49:16 +08:00

155 lines
4.5 KiB
Go

package timemachine
import (
"bytes"
"context"
"strconv"
"time"
"go-common/app/interface/main/activity/model/timemachine"
"go-common/library/log"
"github.com/tsuna/gohbase/hrpc"
)
const (
_hBaseUpItemTableName = "dw:mid_main_profile_y"
)
// reverse for string.
func hbaseRowKey(mid int64) string {
s := strconv.FormatInt(mid, 10)
rs := []rune(s)
l := len(rs)
for f, t := 0, l-1; f < t; f, t = f+1, t-1 {
rs[f], rs[t] = rs[t], rs[f]
}
ns := string(rs)
if l < 10 {
for i := 0; i < 10-l; i++ {
ns = ns + "0"
}
}
return ns
}
// RawTimemachine .
func (d *Dao) RawTimemachine(c context.Context, mid int64) (data *timemachine.Item, err error) {
var (
result *hrpc.Result
ctx, cancel = context.WithTimeout(c, time.Duration(d.c.Hbase.RegionReadTimeout))
key = hbaseRowKey(mid)
tableName = _hBaseUpItemTableName
)
defer cancel()
if result, err = d.hbase.GetStr(ctx, tableName, key); err != nil {
log.Error("UserItem d.hbase.GetStr tableName(%s)|mid(%d)|key(%v)|error(%v)", tableName, mid, key, err)
return
}
if result == nil {
return
}
data = &timemachine.Item{Mid: mid}
for _, c := range result.Cells {
if c == nil {
continue
}
if !bytes.Equal(c.Family, []byte("m")) {
continue
}
tmFillFields(data, c)
}
return
}
func tmFillFields(data *timemachine.Item, c *hrpc.Cell) {
var (
intVal int64
strVal string
)
strVal = string(c.Value[:])
if v, e := strconv.ParseInt(string(c.Value[:]), 10, 64); e == nil {
intVal = v
}
switch {
case bytes.Equal(c.Qualifier, []byte("is_up")):
data.IsUp = intVal
case bytes.Equal(c.Qualifier, []byte("dh")):
data.DurationHour = intVal
case bytes.Equal(c.Qualifier, []byte("adh")):
data.AvDurationHour = intVal
case bytes.Equal(c.Qualifier, []byte("a_vv")):
data.ArchiveVv = intVal
case bytes.Equal(c.Qualifier, []byte("tag_id")):
data.LikeTagID = intVal
case bytes.Equal(c.Qualifier, []byte("ls_vv")):
data.LikeSubtidVv = intVal
case bytes.Equal(c.Qualifier, []byte("ugc_avs")):
data.LikesUgc3Avids = strVal
case bytes.Equal(c.Qualifier, []byte("pgc_avs")):
data.LikePgc3Avids = strVal
case bytes.Equal(c.Qualifier, []byte("up")):
data.LikeBestUpID = intVal
case bytes.Equal(c.Qualifier, []byte("up_ad")):
data.LikeUpAvDuration = intVal
case bytes.Equal(c.Qualifier, []byte("up_ld")):
data.LikeUpLiveDuration = intVal
case bytes.Equal(c.Qualifier, []byte("up_avs")):
data.LikeUp3Avs = strVal
case bytes.Equal(c.Qualifier, []byte("up_st")):
data.LikeLiveUpSubTname = strVal
case bytes.Equal(c.Qualifier, []byte("cir_tm")):
data.BrainwashCirTime = strVal
case bytes.Equal(c.Qualifier, []byte("cir_av")):
data.BrainwashCirAvid = intVal
case bytes.Equal(c.Qualifier, []byte("cir_v")):
data.BrainwashCirVv = intVal
case bytes.Equal(c.Qualifier, []byte("fs_av")):
data.FirstSubmitAvid = intVal
case bytes.Equal(c.Qualifier, []byte("fs_tm")):
data.FirstSubmitTime = strVal
case bytes.Equal(c.Qualifier, []byte("fs_ty")):
data.FirstSubmitType = intVal
case bytes.Equal(c.Qualifier, []byte("s_av_rd")):
data.SubmitAvsRds = strVal
case bytes.Equal(c.Qualifier, []byte("bt_av")):
data.BestAvid = intVal
case bytes.Equal(c.Qualifier, []byte("bt_ty")):
data.BestAvidType = intVal
case bytes.Equal(c.Qualifier, []byte("bt_av_o")):
data.BestAvidOld = intVal
case bytes.Equal(c.Qualifier, []byte("bt_av_ty")):
data.BestAvidOldType = intVal
case bytes.Equal(c.Qualifier, []byte("o_vv")):
data.OldAvVv = intVal
case bytes.Equal(c.Qualifier, []byte("all_vv")):
data.AllVv = intVal
case bytes.Equal(c.Qualifier, []byte("live_d")):
data.UpLiveDuration = intVal
case bytes.Equal(c.Qualifier, []byte("is_live")):
data.IsLiveUp = intVal
case bytes.Equal(c.Qualifier, []byte("ld")):
data.ValidLiveDays = intVal
case bytes.Equal(c.Qualifier, []byte("md")):
data.MaxCdnNumDate = strVal
case bytes.Equal(c.Qualifier, []byte("mc")):
data.MaxCdnNum = intVal
case bytes.Equal(c.Qualifier, []byte("att")):
data.Attentions = intVal
case bytes.Equal(c.Qualifier, []byte("fan_vv")):
data.UpBestFanVv = strVal
case bytes.Equal(c.Qualifier, []byte("fan_live")):
data.UpBestFanLiveMinute = strVal
case bytes.Equal(c.Qualifier, []byte("like_tid")):
data.Like2Tids = strVal
case bytes.Equal(c.Qualifier, []byte("like_st")):
data.Like2SubTids = strVal
case bytes.Equal(c.Qualifier, []byte("wr")):
data.WinRatio = strVal
case bytes.Equal(c.Qualifier, []byte("pd_hr")):
data.PlayDurationHourRep = intVal
case bytes.Equal(c.Qualifier, []byte("lu_adr")):
data.LikeUpAvDurationRep = intVal
}
}