This commit is contained in:
2021-12-21 18:03:55 +08:00
parent 0df3603ef2
commit b8d1391bde
12 changed files with 458 additions and 169 deletions

View File

@@ -14,32 +14,71 @@ package user
import (
"github.com/jageros/hawox/attribute"
"stock/module"
"sync"
)
var users sync.Map
var (
users = map[string]*User{}
mx sync.RWMutex
)
func LoadAllUserIntoCache() error {
attrs, err := attribute.LoadAll("user")
if err != nil {
return err
}
mx.Lock()
for _, attr := range attrs {
u := &User{attr: attr}
users.Store(attr.GetAttrID(), u)
users[u.OpenID()] = u
}
mx.Unlock()
return nil
}
func GetUser(openId string) (*User, error) {
u, ok := users.Load(openId)
mx.RLock()
u, ok := users[openId]
mx.RUnlock()
if ok {
return u.(*User), nil
return u, nil
}
us, err := newUser(openId)
if err != nil {
return nil, err
}
users.Store(openId, us)
mx.Lock()
users[openId] = us
mx.Unlock()
return us, nil
}
func ForEachUser(f func(u module.IUser) bool) {
mx.Lock()
defer mx.Unlock()
for _, u := range users {
if !f(u) {
break
}
}
}
func Codes(isFund bool) []string {
var codes = map[string]struct{}{}
ForEachUser(func(u module.IUser) bool {
cds := u.Codes(isFund)
for _, cd := range cds {
if _, ok := codes[cd]; ok {
continue
}
codes[cd] = struct{}{}
}
return true
})
var cods []string
for code := range codes {
cods = append(cods, code)
}
return cods
}