123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- package medal
- import (
- "context"
- "strconv"
- "github.com/pkg/errors"
- "go-common/app/service/main/usersuit/model"
- gmc "go-common/library/cache/memcache"
- "go-common/library/log"
- )
- const (
- _prefixActivatedNid = "usma:" // key of activated medal nid
- _prefixOwners = "umos:" // key of owners info
- _prefixRedPoint = "usrp:" // key of red point
- _prefixPopup = "uspp:" // key of new medal popup
- )
- // medalactivated medal nid key.
- func activatedNidKey(mid int64) string {
- return _prefixActivatedNid + strconv.FormatInt(mid, 10)
- }
- // ownersKey medal_owner key.
- func ownersKey(mid int64) string {
- return _prefixOwners + strconv.FormatInt(mid, 10)
- }
- //RedPointKey new medal RedPoint key.
- func RedPointKey(mid int64) string {
- return _prefixRedPoint + strconv.FormatInt(mid, 10)
- }
- // PopupKey new medal popup key.
- func PopupKey(mid int64) string {
- return _prefixPopup + strconv.FormatInt(mid, 10)
- }
- func (d *Dao) pingMC(c context.Context) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Set(&gmc.Item{Key: "ping", Value: []byte{1}, Expiration: d.mcExpire}); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // MedalOwnersCache get medal_owner cache.
- func (d *Dao) MedalOwnersCache(c context.Context, mid int64) (res []*model.MedalOwner, notFound bool, err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- item, err := conn.Get(ownersKey(mid))
- if err != nil {
- if err == gmc.ErrNotFound {
- res = nil
- err = nil
- notFound = true
- return
- }
- err = errors.WithStack(err)
- return
- }
- res = make([]*model.MedalOwner, 0)
- if err = conn.Scan(item, &res); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // SetMedalOwnersache set medal_owner cache.
- func (d *Dao) SetMedalOwnersache(c context.Context, mid int64, nos []*model.MedalOwner) (err error) {
- key := ownersKey(mid)
- item := &gmc.Item{Key: key, Object: nos, Expiration: d.mcExpire, Flags: gmc.FlagJSON}
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Set(item); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // DelMedalOwnersCache delete medal_owner cache.
- func (d *Dao) DelMedalOwnersCache(c context.Context, mid int64) (err error) {
- key := ownersKey(mid)
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Delete(key); err != nil {
- if err == gmc.ErrNotFound {
- err = nil
- } else {
- err = errors.WithStack(err)
- }
- }
- return
- }
- // MedalsActivatedCache multi get user activated medal nid from memcache.
- func (d *Dao) medalsActivatedCache(c context.Context, mids []int64) (nids map[int64]int64, missed []int64, err error) {
- nids = make(map[int64]int64, len(mids))
- keys := make([]string, len(mids))
- mm := make(map[string]int64, len(mids))
- for i, mid := range mids {
- var key = activatedNidKey(mid)
- keys[i] = key
- mm[key] = mid
- }
- conn := d.mc.Get(c)
- defer conn.Close()
- items, err := conn.GetMulti(keys)
- if err != nil {
- if err == gmc.ErrNotFound {
- err = nil
- }
- return
- }
- for _, item := range items {
- var nid int64
- if err = conn.Scan(item, &nid); err != nil {
- log.Error("conn.Scan(%s) error(%v)", item.Value, err)
- continue
- }
- nids[mm[item.Key]] = nid
- delete(mm, item.Key)
- }
- missed = make([]int64, 0, len(mm))
- for _, m := range mm {
- missed = append(missed, m)
- }
- return
- }
- // MedalActivatedCache get user activated medal nid.
- func (d *Dao) medalActivatedCache(c context.Context, mid int64) (nid int64, notFound bool, err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- item, err := conn.Get(activatedNidKey(mid))
- if err != nil {
- if err == gmc.ErrNotFound {
- nid = 0
- err = nil
- notFound = true
- return
- }
- err = errors.WithStack(err)
- return
- }
- if err = conn.Scan(item, &nid); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // SetMedalActivatedCache set activated medal cache.
- func (d *Dao) SetMedalActivatedCache(c context.Context, mid, nid int64) (err error) {
- key := activatedNidKey(mid)
- item := &gmc.Item{Key: key, Object: nid, Expiration: d.mcExpire, Flags: gmc.FlagJSON}
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Set(item); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // DelMedalActivatedCache delete activated medal cache.
- func (d *Dao) DelMedalActivatedCache(c context.Context, mid int64) (err error) {
- key := activatedNidKey(mid)
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Delete(key); err != nil {
- if err == gmc.ErrNotFound {
- err = nil
- } else {
- err = errors.WithStack(err)
- }
- }
- return
- }
- // PopupCache get new medal info popup cache.
- func (d *Dao) PopupCache(c context.Context, mid int64) (nid int64, err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- item, err := conn.Get(PopupKey(mid))
- if err != nil {
- if err == gmc.ErrNotFound {
- nid = 0
- err = nil
- return
- }
- err = errors.WithStack(err)
- return
- }
- if err = conn.Scan(item, &nid); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // SetPopupCache set popup cache.
- func (d *Dao) SetPopupCache(c context.Context, mid, nid int64) (err error) {
- key := PopupKey(mid)
- item := &gmc.Item{Key: key, Object: nid, Expiration: d.pointExpire, Flags: gmc.FlagJSON}
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Set(item); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // DelPopupCache delete new medal info popup cache.
- func (d *Dao) DelPopupCache(c context.Context, mid int64) (err error) {
- key := PopupKey(mid)
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Delete(key); err != nil {
- if err == gmc.ErrNotFound {
- err = nil
- } else {
- err = errors.WithStack(err)
- }
- }
- return
- }
- // RedPointCache get new medal info red point cache.
- func (d *Dao) RedPointCache(c context.Context, mid int64) (nid int64, err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- item, err := conn.Get(RedPointKey(mid))
- if err != nil {
- if err == gmc.ErrNotFound {
- err = nil
- return
- }
- err = errors.WithStack(err)
- return
- }
- if err = conn.Scan(item, &nid); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // SetRedPointCache set red point cache.
- func (d *Dao) SetRedPointCache(c context.Context, mid, nid int64) (err error) {
- key := RedPointKey(mid)
- item := &gmc.Item{Key: key, Object: nid, Expiration: d.pointExpire, Flags: gmc.FlagJSON}
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Set(item); err != nil {
- err = errors.WithStack(err)
- }
- return
- }
- // DelRedPointCache delete new medal info red point cache.
- func (d *Dao) DelRedPointCache(c context.Context, mid int64) (err error) {
- key := RedPointKey(mid)
- conn := d.mc.Get(c)
- defer conn.Close()
- if err = conn.Delete(key); err != nil {
- if err == gmc.ErrNotFound {
- err = nil
- } else {
- err = errors.WithStack(err)
- }
- }
- return
- }
|