wxgzh
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user