123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package dao
- import (
- "context"
- "fmt"
- "go-common/app/admin/main/workflow/model"
- "go-common/library/cache/redis"
- "go-common/library/log"
- )
- const (
- _listKeyFormat = "wf_%d_%d"
- _fbRound = 11
- _auditFlowDealType = 0
- _feedbackFlowDealType = 1
- _adminOnlineHash = "wkf_online_hash"
- _prefixAdminOnlineField = "wkf_online_uid_%d"
- )
- func (d *Dao) pingRedis(c context.Context) (err error) {
- conn := d.redis.Get(c)
- _, err = conn.Do("SET", "PING", "PONG")
- conn.Close()
- return
- }
- // redis list key wf_business_dealtype like wf_2_1
- // dealtype=0 audit dealtype=1 feedback
- // RedisRPOPCids returns cids from a list
- func (d *Dao) RedisRPOPCids(c context.Context, business int8, round int64, num int8) (cids []int64, err error) {
- var (
- key string
- conn = d.redis.Get(c)
- flow int
- cid int64
- chall *model.Chall
- )
- defer conn.Close()
- cids = make([]int64, 0)
- if round == _fbRound {
- flow = _feedbackFlowDealType
- } else {
- flow = _auditFlowDealType
- }
- key = fmt.Sprintf(_listKeyFormat, business, flow)
- for {
- exist := false
- if exist, err = redis.Bool(conn.Do("EXISTS", key)); err != nil {
- log.Error("redis.Bool key(%s) err(%v)", key, err)
- return
- }
- if !exist {
- log.Warn("key(%s) not exist", key)
- return
- }
- if cid, err = redis.Int64(conn.Do("RPOP", key)); err != nil {
- log.Error("conn.Do(RPOP,%s) error(%v)", key, err)
- return
- }
- // judge if business_state is queue state
- if chall, err = d.Chall(c, cid); err != nil {
- return
- }
- chall.FromState()
- if chall.BusinessState == model.QueueState {
- cids = append(cids, cid)
- }
- if len(cids) >= int(num) {
- break
- }
- }
- return
- }
- // IsOnline judge if admin is online
- func (d *Dao) IsOnline(c context.Context, assigneeAdminID int64) (online bool, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- key := _adminOnlineHash
- field := d.fieldOnlineList(assigneeAdminID)
- return redis.Bool(conn.Do("HEXISTS", key, field))
- }
- // AddOnline checkin if start subscribe mission in platform, set key
- func (d *Dao) AddOnline(c context.Context, assigneeAdminID int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- key := _adminOnlineHash
- field := d.fieldOnlineList(assigneeAdminID)
- _, err = conn.Do("HSET", key, field, assigneeAdminID)
- return
- }
- // DelOnline checkout if exit subscribe mission in platform, delete key
- func (d *Dao) DelOnline(c context.Context, assigneeAdminID int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- key := _adminOnlineHash
- field := d.fieldOnlineList(assigneeAdminID)
- _, err = conn.Do("HDEL", key, field)
- return
- }
- // ListOnline list online admin
- func (d *Dao) ListOnline(c context.Context) (ids []int64, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- key := _adminOnlineHash
- return redis.Int64s(conn.Do("HVALS", key))
- }
- // LogInOutTime show last online or offline time
- func (d *Dao) LogInOutTime(c context.Context, uids []int64) {
- }
- // uid field in key wkf_online_hash
- func (d *Dao) fieldOnlineList(assigneeAdminID int64) string {
- return fmt.Sprintf(_prefixAdminOnlineField, assigneeAdminID)
- }
- func (d *Dao) keyChallCount(assigneeAdminID int64) string {
- return fmt.Sprintf(_prefixChallPendingCount, assigneeAdminID)
- }
|