123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package dao
- import (
- "context"
- "encoding/hex"
- "fmt"
- "strings"
- "time"
- "go-common/app/job/bbq/recall/internal/model"
- "go-common/app/job/bbq/recall/proto"
- "go-common/app/job/bbq/recall/proto/quality"
- "go-common/library/log"
- "github.com/golang/snappy"
- )
- const (
- // _fetchVideo = "select `id`, `title`, `content`, `mid`, `avid`, `cid`, `pubtime`, `ctime`, `mtime`, `duration`, `state`, `tid`, `sub_tid` from video where pubtime > ? limit ?, ?;"
- _fetchVideo = "select `svid`, `title`, `content`, `mid`, `avid`, `cid`, `pubtime`, `ctime`, `mtime`, `duration`, `state`, `tid`, `sub_tid` from video limit ?, ?;"
- _fetchVideoTag = "select `id`, `name`, `type` from `tag` where `id` = ? and `status` = 1;"
- _fetchVideoTagAll = "select `id`, `name`, `type` from `tag` where `status` = 1;"
- _fetchVideoTextTag = "select `tag` from `video_repository` where `svid` = ? limit 1;"
- _queryVideoQuality = "select `stat_info` from `video_forward_index_stat_info` where `svid` = ?;"
- _fetchNewIncomeVideo = "select `svid` from `video` where ctime > ? and state in (%s);"
- )
- // FetchVideoInfo .
- func (d *Dao) FetchVideoInfo(c context.Context, offset, size int) (result []*model.Video, err error) {
- // rows, err := d.db.Query(c, _fetchVideo, ptime.Format("2006-01-02 15:04:05"), offset, size)
- rows, err := d.db.Query(c, _fetchVideo, offset, size)
- if err != nil {
- return nil, err
- }
- for rows.Next() {
- tmp := &model.Video{}
- if err = rows.Scan(&tmp.SVID, &tmp.Title, &tmp.Content, &tmp.MID, &tmp.AVID, &tmp.CID, &tmp.PubTime, &tmp.CTime, &tmp.MTime, &tmp.Duration, &tmp.State, &tmp.TID, &tmp.SubTID); err != nil {
- log.Error("FetchVideoInfo: %v", err)
- return nil, err
- }
- result = append(result, tmp)
- }
- return result, nil
- }
- // FetchVideoTagAll .
- func (d *Dao) FetchVideoTagAll(c context.Context) (result []*proto.Tag, err error) {
- result = make([]*proto.Tag, 0)
- rows, err := d.db.Query(c, _fetchVideoTagAll)
- if err != nil {
- return
- }
- for rows.Next() {
- tmp := new(proto.Tag)
- if err = rows.Scan(&tmp.TagID, &tmp.TagName, &tmp.TagType); err != nil {
- log.Error("FetchVideoTag: %v", err)
- continue
- }
- result = append(result, tmp)
- }
- return
- }
- // FetchVideoTag .
- func (d *Dao) FetchVideoTag(c context.Context, tid int32) (result *proto.Tag, err error) {
- row := d.db.QueryRow(c, _fetchVideoTag, tid)
- result = new(proto.Tag)
- if err = row.Scan(&result.TagID, &result.TagName, &result.TagType); err != nil {
- log.Error("FetchVideoTag: %v", err)
- return
- }
- return
- }
- // FetchVideoTextTag .
- func (d *Dao) FetchVideoTextTag(c context.Context, svid int64) (result []string, err error) {
- row := d.dbCms.QueryRow(c, _fetchVideoTextTag, svid)
- var tags string
- if err = row.Scan(&tags); err != nil {
- log.Errorv(c, log.KV("log", "_fetchVideoTextTag failed"), log.KV("error", err), log.KV("svid", svid))
- return
- }
- result = strings.Split(tags, ",")
- return
- }
- // FetchVideoQuality .
- func (d *Dao) FetchVideoQuality(c context.Context, svid uint64) (result *quality.VideoQuality, err error) {
- var raw string
- row := d.dbOffline.QueryRow(c, _queryVideoQuality, svid)
- row.Scan(&raw)
- if raw == "" {
- return
- }
- trimed := strings.Trim(raw, "\n")
- hexDst, err := hex.DecodeString(trimed)
- if err != nil {
- log.Error("FetchVideoQuality: %v src[%s] raw[%s]", err, trimed, trimed)
- return
- }
- snappyDst, err := snappy.Decode(nil, hexDst)
- if err != nil {
- log.Error("FetchVideoQuality: %v src[%s] raw[%s]", err, string(hexDst), trimed)
- return
- }
- result = &quality.VideoQuality{}
- result.Unmarshal(snappyDst)
- if err != nil {
- log.Error("FetchVideoQuality: %v src[%s] raw[%s]", err, snappyDst, trimed)
- }
- return
- }
- // FetchNewincomeVideo .
- func (d *Dao) FetchNewincomeVideo() (res []int64, err error) {
- duration, _ := time.ParseDuration("-24h")
- today := time.Now().Add(duration).Format("2006-01-02")
- _query := fmt.Sprintf(_fetchNewIncomeVideo, strings.Join(model.RecommendVideoState, ","))
- row, err := d.db.Query(context.Background(), _query, today)
- if err != nil {
- return
- }
- res = make([]int64, 0)
- for row.Next() {
- var tmp int64
- if err = row.Scan(&tmp); err != nil {
- return
- }
- res = append(res, tmp)
- }
- return
- }
|