You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"encoding/json" |
|
"fmt" |
|
"strconv" |
|
|
|
"go-common/app/interface/main/growup/model" |
|
article "go-common/app/interface/openplatform/article/model" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
) |
|
|
|
// ArticleStat article stat |
|
func (d *Dao) ArticleStat(c context.Context, mid int64, ip string) (res article.UpStat, err error) { |
|
arg := &article.ArgMid{Mid: mid, RealIP: ip} |
|
if res, err = d.art.CreationUpStat(c, arg); err != nil { |
|
log.Error("d.art.CreationUpStat(%+v) error(%v)", arg, err) |
|
if _, er := strconv.ParseInt(err.Error(), 10, 64); er != nil { |
|
err = ecode.CreativeArticleRPCErr |
|
} |
|
} |
|
return |
|
} |
|
|
|
func (d *Dao) getUpBaseStatCache(c context.Context, mid int64, date string) (data *model.UpBaseStat, err error) { |
|
key := fmt.Sprintf("growup-up-status:%d-%s", mid, date) |
|
res, err := d.getCacheVal(c, key) |
|
if err != nil { |
|
log.Error("d.getCacheVal error(%v)", err) |
|
return |
|
} |
|
if res == nil { |
|
return |
|
} |
|
err = json.Unmarshal(res, &data) |
|
if err != nil { |
|
log.Error("json.Unmarshal(%v) error(%v)", res, err) |
|
} |
|
return |
|
} |
|
|
|
// setUpBaseStatCache add stat cache. |
|
func (d *Dao) setUpBaseStatCache(c context.Context, mid int64, date string, st *model.UpBaseStat) (err error) { |
|
key := fmt.Sprintf("growup-up-status:%d-%s", mid, date) |
|
v, err := json.Marshal(st) |
|
if err != nil { |
|
log.Error("json.Marshal error(%v)", err) |
|
return |
|
} |
|
return d.setCacheKV(c, key, v, d.redisExpire) |
|
} |
|
|
|
// UpStat get up stat from hbase |
|
func (d *Dao) UpStat(c context.Context, mid int64, dt string) (st *model.UpBaseStat, err error) { |
|
// try cache |
|
st, err = d.getUpBaseStatCache(c, mid, dt) |
|
if err != nil { |
|
log.Error("d.getUpBaseStatCache(%d) error(%v)", mid, err) |
|
return |
|
} |
|
if st != nil { |
|
return |
|
} |
|
// from hbase |
|
if st, err = d.BaseUpStat(c, mid, dt); st != nil { |
|
d.AddCache(func() { |
|
d.setUpBaseStatCache(context.TODO(), mid, dt, st) |
|
}) |
|
} |
|
return |
|
}
|
|
|