123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- package dao
- import (
- "context"
- "fmt"
- "strconv"
- "time"
- "go-common/library/cache/redis"
- "go-common/library/log"
- )
- const (
- _keyUperWeightGroup = "platform_uper_weight_param_2" // 工作台任务权重参数(用户维度)
- _prefixKeyMissionSortedSet = "platform_missions_" // 工作台任务池 有序集合(权重排序)
- _prefixKeySingleExpire = "platform_single_expire_" // 单条工单的开始处理时间 有序集合
- _relatedMissions = "platfrom_missions_%d_%d" // 当前认领任务
- )
- // SetList .
- func (d *Dao) SetList(c context.Context, key string, ids []int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- for _, id := range ids {
- now := time.Now().Format("2006-01-02 15:04:05")
- log.Info("enter queue id is %d time is %s", id, now)
- if err = conn.Send("LPUSH", key, id); err != nil {
- log.Error("d.LPUSH error(%v)", err)
- return
- }
- }
- if err = conn.Flush(); err != nil {
- log.Error("conn.Flush error(%v)", err)
- }
- return
- }
- // ExistKey .
- func (d *Dao) ExistKey(c context.Context, key string) (exist bool, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- exist, err = redis.Bool(conn.Do("EXISTS", key))
- return
- }
- // SetString .
- func (d *Dao) SetString(c context.Context, key, val string) (err error) {
- var conn = d.redis.Get(c)
- defer conn.Close()
- _, err = conn.Do("SET", key, val)
- return
- }
- // SetCrash .
- func (d *Dao) SetCrash(c context.Context) (err error) {
- key, val := "dead", "1"
- err = d.SetString(c, key, val)
- return
- }
- // IsCrash .
- func (d *Dao) IsCrash(c context.Context) (exist bool, err error) {
- key := "dead"
- exist, err = d.ExistKey(c, key)
- return
- }
- // UperInfoCache 读取用户维度的申诉weight计算参数
- func (d *Dao) UperInfoCache(c context.Context, apIDs []int64) (params []int64, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- args := redis.Args{}
- args = args.Add(_keyUperWeightGroup)
- for _, apid := range apIDs {
- args = args.Add(apid)
- }
- if params, err = redis.Int64s(conn.Do("HMGET", args...)); err != nil {
- log.Error("HMGET %v error(%v)", args, err)
- }
- return
- }
- // DelUperInfo .
- func (d *Dao) DelUperInfo(c context.Context, mids []int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- args := redis.Args{}
- args = args.Add(_keyUperWeightGroup)
- for _, mid := range mids {
- args = args.Add(mid)
- }
- if _, err = conn.Do("HDEL", args...); err != nil {
- log.Error("HDEL %v error(%v)", args, err)
- }
- return
- }
- // SetWeightSortedSet 覆盖sorted set
- func (d *Dao) SetWeightSortedSet(c context.Context, bid int, newWeight map[int64]int64) (err error) {
- key := _prefixKeyMissionSortedSet + strconv.Itoa(bid)
- conn := d.redis.Get(c)
- defer conn.Close()
- args := redis.Args{}
- args = args.Add(key)
- for id, weight := range newWeight {
- args = args.Add(weight, id)
- }
- if _, err = conn.Do("ZADD", args...); err != nil { // ZADD key score member [[score member] [score member] ...]
- log.Error("ZADD %v error(%v)", args, err)
- }
- return
- }
- // SingleExpire 获取所有的 single expire 信息
- func (d *Dao) SingleExpire(c context.Context, bid int) (delIDs []int64, err error) {
- key := _prefixKeySingleExpire + strconv.Itoa(bid)
- conn := d.redis.Get(c)
- defer conn.Close()
- floorTime := time.Now().Add(-480 * time.Second).Unix()
- // fixme if too hash field too many
- delIDs, err = redis.Int64s(conn.Do("ZRANGEBYSCORE", key, "0", floorTime, "LIMIT", "0", "50"))
- return
- }
- // DelSingleExpire .
- func (d *Dao) DelSingleExpire(c context.Context, bid int, ids []int64) (err error) {
- key := _prefixKeySingleExpire + strconv.Itoa(bid)
- conn := d.redis.Get(c)
- defer conn.Close()
- args := redis.Args{}
- args = args.Add(key)
- for _, apID := range ids {
- args = args.Add(apID)
- }
- if _, err = conn.Do("ZREM", args...); err != nil {
- log.Error("ZREM %v error(%v)", args, err)
- }
- return
- }
- // DelRelatedMissions .
- func (d *Dao) DelRelatedMissions(ctx context.Context, bid, transAdmin int, ids []int64) (err error) {
- if len(ids) == 0 {
- return
- }
- key := fmt.Sprintf(_relatedMissions, transAdmin, bid)
- conn := d.redis.Get(ctx)
- defer conn.Close()
- args := redis.Args{}.Add(key)
- for _, id := range ids {
- args = args.Add(id)
- }
- _, err = conn.Do("ZREM", args...)
- return
- }
|