56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package dao
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
"go-common/app/job/main/spy/model"
|
|
"go-common/library/log"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/tsuna/gohbase/hrpc"
|
|
)
|
|
|
|
var (
|
|
// table
|
|
_hbaseTableActive = "active_data"
|
|
// family
|
|
_familyDays = "activeDays"
|
|
_familyDaysB = []byte(_familyDays)
|
|
)
|
|
|
|
func strRowKey(mid int64) string {
|
|
return fmt.Sprintf("%d", mid)
|
|
}
|
|
|
|
// GetActiveData get user active days and watched bangumi video time
|
|
func (dao *Dao) GetActiveData(c context.Context, mid int64) (active *model.Active, err error) {
|
|
var (
|
|
result *hrpc.Result
|
|
key = strRowKey(mid)
|
|
ctx, cancel = context.WithTimeout(c, time.Duration(dao.c.HBase.ReadTimeout))
|
|
)
|
|
defer cancel()
|
|
if result, err = dao.hbase.GetStr(ctx, _hbaseTableActive, key); err != nil {
|
|
err = errors.Wrapf(err, "hbase.GetStr(%s,%s)", _hbaseTableActive, key)
|
|
return
|
|
}
|
|
active = &model.Active{}
|
|
for _, c := range result.Cells {
|
|
h := &model.Active{}
|
|
if c != nil && bytes.Equal(c.Family, _familyDaysB) {
|
|
days, err := strconv.ParseInt(string(c.Qualifier), 10, 64)
|
|
if err != nil {
|
|
log.Error("strconv.ParseInt err(%v)", err)
|
|
continue
|
|
}
|
|
h.Active = days
|
|
active = h
|
|
}
|
|
}
|
|
return
|
|
}
|