134 lines
3.0 KiB
Go
134 lines
3.0 KiB
Go
|
package mobile
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"go-common/app/interface/main/app-wall/model/mobile"
|
||
|
"go-common/library/cache/memcache"
|
||
|
"go-common/library/log"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_prefix = "mobiles_user_%v"
|
||
|
)
|
||
|
|
||
|
func keyMobile(usermob string) string {
|
||
|
return fmt.Sprintf(_prefix, usermob)
|
||
|
}
|
||
|
|
||
|
// AddMobileCache
|
||
|
func (d *Dao) AddMobileCache(c context.Context, usermob string, m []*mobile.Mobile) (err error) {
|
||
|
var (
|
||
|
key = keyMobile(usermob)
|
||
|
conn = d.mc.Get(c)
|
||
|
)
|
||
|
if err = conn.Set(&memcache.Item{Key: key, Object: m, Flags: memcache.FlagJSON, Expiration: d.expire}); err != nil {
|
||
|
log.Error("addMobileCache d.mc.Set(%s,%v) error(%v)", key, m, err)
|
||
|
}
|
||
|
conn.Close()
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// MobileCache
|
||
|
func (d *Dao) MobileCache(c context.Context, usermob string) (m []*mobile.Mobile, err error) {
|
||
|
var (
|
||
|
key = keyMobile(usermob)
|
||
|
conn = d.mc.Get(c)
|
||
|
r *memcache.Item
|
||
|
)
|
||
|
defer conn.Close()
|
||
|
if r, err = conn.Get(key); err != nil {
|
||
|
if err == memcache.ErrNotFound {
|
||
|
err = nil
|
||
|
return
|
||
|
}
|
||
|
log.Error("mobileCache MemchDB.Get(%s) error(%v)", key, err)
|
||
|
return
|
||
|
}
|
||
|
if err = conn.Scan(r, &m); err != nil {
|
||
|
log.Error("r.Scan(%s) error(%v)", r.Value, err)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// DeleteMobileCache
|
||
|
func (d *Dao) DeleteMobileCache(c context.Context, usermob string) (err error) {
|
||
|
var (
|
||
|
key = keyMobile(usermob)
|
||
|
conn = d.mc.Get(c)
|
||
|
)
|
||
|
defer conn.Close()
|
||
|
if err = conn.Delete(key); err != nil {
|
||
|
if err == memcache.ErrNotFound {
|
||
|
err = nil
|
||
|
return
|
||
|
}
|
||
|
log.Error("mobileCache MemchDB.Delete(%s) error(%v)", key, err)
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// UpdateMobileCache
|
||
|
func (d *Dao) UpdateMobileCache(c context.Context, usermob string, m *mobile.Mobile) (err error) {
|
||
|
var (
|
||
|
ms []*mobile.Mobile
|
||
|
mobiles []*mobile.Mobile
|
||
|
uproductid = map[string]struct{}{}
|
||
|
)
|
||
|
if ms, err = d.MobileCache(c, usermob); err != nil && len(ms) > 0 {
|
||
|
log.Error("d.MobileCache error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
if len(ms) > 0 {
|
||
|
for _, ml := range ms {
|
||
|
tmp := &mobile.Mobile{}
|
||
|
*tmp = *ml
|
||
|
if tmp.Productid == m.Productid {
|
||
|
tmp = m
|
||
|
if m.Threshold == 0 {
|
||
|
tmp.Threshold = ml.Threshold
|
||
|
}
|
||
|
uproductid[m.Productid] = struct{}{}
|
||
|
}
|
||
|
mobiles = append(mobiles, tmp)
|
||
|
}
|
||
|
if _, ok := uproductid[m.Productid]; !ok {
|
||
|
mobiles = append(mobiles, m)
|
||
|
}
|
||
|
if err = d.AddMobileCache(c, usermob, mobiles); err != nil {
|
||
|
log.Error("d.AddMobileCache error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// UpdateMobileFlowCache
|
||
|
func (d *Dao) UpdateMobileFlowCache(c context.Context, usermob string, m *mobile.Mobile) (err error) {
|
||
|
var (
|
||
|
ms []*mobile.Mobile
|
||
|
mobiles []*mobile.Mobile
|
||
|
)
|
||
|
if ms, err = d.MobileCache(c, usermob); err != nil && len(ms) > 0 {
|
||
|
log.Error("d.MobileCache error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
if len(ms) > 0 {
|
||
|
for _, ml := range ms {
|
||
|
tmp := &mobile.Mobile{}
|
||
|
*tmp = *ml
|
||
|
if tmp.Productid == m.Productid {
|
||
|
tmp.Threshold = m.Threshold
|
||
|
}
|
||
|
mobiles = append(mobiles, tmp)
|
||
|
}
|
||
|
if err = d.AddMobileCache(c, usermob, mobiles); err != nil {
|
||
|
log.Error("d.AddMobileCache error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|