123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- package dao
- import (
- "context"
- "encoding/json"
- "fmt"
- "strconv"
- "time"
- "go-common/app/job/main/credit/model"
- "go-common/library/cache/redis"
- "go-common/library/log"
- )
- const (
- _voteOpIdx = "vo_%d_%d"
- _caseOpIdx = "caseop_"
- _blockIdx = "bl_%d_%d"
- _grantCaseKey = "gr_ca_li_v2"
- )
- func voteIndexKey(cid int64, otype int8) string {
- return fmt.Sprintf(_voteOpIdx, otype, cid)
- }
- func caseIndexKey(cid int64) string {
- return _caseOpIdx + strconv.FormatInt(cid, 10)
- }
- func blockIndexKey(otype, btype int64) string {
- return fmt.Sprintf(_blockIdx, otype, btype)
- }
- // DelCaseIdx DEL case opinion idx.
- func (d *Dao) DelCaseIdx(c context.Context, cid int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- if _, err = conn.Do("DEL", caseIndexKey(cid)); err != nil {
- log.Error("del case idx err(%v)", err)
- return
- }
- return
- }
- // DelBlockedInfoIdx ZREM block info idx.
- func (d *Dao) DelBlockedInfoIdx(c context.Context, bl *model.BlockedInfo) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- conn.Send("ZREM", blockIndexKey(bl.OriginType, bl.BlockedType), bl.ID)
- conn.Send("ZREM", blockIndexKey(0, -1), bl.ID)
- conn.Send("ZREM", blockIndexKey(0, bl.BlockedType), bl.ID)
- conn.Send("ZREM", blockIndexKey(bl.OriginType, -1), bl.ID)
- if err = conn.Flush(); err != nil {
- log.Error("conn.Flush err(%v)", err)
- return
- }
- for i := 0; i < 4; i++ {
- if _, err = conn.Receive(); err != nil {
- log.Error("conn.Receive() error(%v)", err)
- }
- }
- return
- }
- // AddBlockInfoIdx ZADD block info idx.
- func (d *Dao) AddBlockInfoIdx(c context.Context, bl *model.BlockedInfo) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- var mtime time.Time
- if mtime, err = time.ParseInLocation("2006-01-02 15:04:05", bl.MTime, time.Local); err != nil {
- log.Error("time.ParseInLocation err(%v)", err)
- return
- }
- conn.Send("ZADD", blockIndexKey(bl.OriginType, bl.BlockedType), mtime.Unix(), bl.ID)
- conn.Send("ZADD", blockIndexKey(0, -1), mtime.Unix(), bl.ID)
- conn.Send("ZADD", blockIndexKey(0, bl.BlockedType), mtime.Unix(), bl.ID)
- conn.Send("ZADD", blockIndexKey(bl.OriginType, -1), mtime.Unix(), bl.ID)
- if err = conn.Flush(); err != nil {
- log.Error("conn.Flush err(%v)", err)
- return
- }
- for i := 0; i < 4; i++ {
- if _, err = conn.Receive(); err != nil {
- log.Error("conn.Receive() error(%v)", err)
- }
- }
- return
- }
- // DelVoteIdx DEL case opinion idx.
- func (d *Dao) DelVoteIdx(c context.Context, cid int64) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- if err = conn.Send("DEL", voteIndexKey(cid, 1)); err != nil {
- log.Error("del case idx err(%v)", err)
- return
- }
- if err = conn.Send("DEL", voteIndexKey(cid, 2)); err != nil {
- log.Error("del case idx err(%v)", err)
- return
- }
- conn.Flush()
- for i := 0; i < 2; i++ {
- conn.Receive()
- }
- return
- }
- // SetGrantCase set grant case ids.
- func (d *Dao) SetGrantCase(c context.Context, mcases map[int64]*model.SimCase) (err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- args := redis.Args{}.Add(_grantCaseKey)
- for cid, mcase := range mcases {
- var bs []byte
- bs, err = json.Marshal(mcase)
- if err != nil {
- log.Error("json.Marshal(%+v) error(%v)", mcase, err)
- err = nil
- continue
- }
- args = args.Add(cid).Add(string(bs))
- }
- if _, err = conn.Do("HMSET", args...); err != nil {
- log.Error("conn.Send(HMSET,%v) error(%v)", args, err)
- }
- return
- }
- // DelGrantCase del grant case id.
- func (d *Dao) DelGrantCase(c context.Context, cids []int64) (err error) {
- var args = []interface{}{_grantCaseKey}
- conn := d.redis.Get(c)
- defer conn.Close()
- for _, cid := range cids {
- args = append(args, cid)
- }
- if _, err = conn.Do("HDEL", args...); err != nil {
- log.Error("conn.Send(HDEL,%s) err(%v)", _grantCaseKey, err)
- }
- return
- }
- // TotalGrantCase get length of grant case ids.
- func (d *Dao) TotalGrantCase(c context.Context) (count int, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- if count, err = redis.Int(conn.Do("HLEN", _grantCaseKey)); err != nil {
- if err != redis.ErrNil {
- log.Error("conn.Do(HLEN, %s) error(%v)", _grantCaseKey, err)
- return
- }
- err = nil
- }
- return
- }
- // GrantCases get granting case cids.
- func (d *Dao) GrantCases(c context.Context) (cids []int64, err error) {
- conn := d.redis.Get(c)
- defer conn.Close()
- var ms map[string]string
- if ms, err = redis.StringMap(conn.Do("HGETALL", _grantCaseKey)); err != nil {
- if err == redis.ErrNil {
- err = nil
- }
- return
- }
- for m, s := range ms {
- if s == "" {
- continue
- }
- cid, err := strconv.ParseInt(m, 10, 64)
- if err != nil {
- log.Error("strconv.ParseInt(%s) error(%v)", m, err)
- err = nil
- continue
- }
- cids = append(cids, cid)
- }
- return
- }
|