123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package data
- import (
- "errors"
- "gadmin/config"
- "gadmin/internal/gorm/model"
- "gadmin/internal/gorm/query"
- "github.com/sirupsen/logrus"
- "gorm.io/gorm"
- "sync"
- )
- var (
- userInfo = make(map[int64]*model.PlayerAttr)
- )
- func GetUser(userId int64) *model.PlayerAttr {
- if val, ok := userInfo[userId]; ok {
- return val
- }
- if userId == 0 {
- return nil
- }
- lock.RLock()
- defer lock.RUnlock()
- var (
- user *model.PlayerAttr
- err error
- )
- for _, DB := range config.GDBGroup {
- u := query.Use(DB).PlayerAttr
- user, err = u.Where(u.Playerid.Eq(userId)).First()
- if err != nil && err.Error() != "record not found" {
- logrus.Errorf("query user failed:%v", err)
- return nil
- }
- if user != nil {
- break
- }
- }
- if user != nil {
- userInfo[userId] = user
- }
- return user
- }
- var userMap = &sync.Map{}
- func GetUserToSyncMap(userId int64) *model.PlayerAttr {
- if userId == 0 {
- return nil
- }
- if user, ok := userMap.Load(userId); ok {
- return user.(*model.PlayerAttr)
- }
- var (
- user *model.PlayerAttr
- err error
- )
- for _, DB := range config.GDBGroup {
- u := query.Use(DB).PlayerAttr
- user, err = u.Where(u.Playerid.Eq(userId)).First()
- if err != nil && err.Error() != "record not found" {
- logrus.Errorf("query user failed:%v", err)
- return nil
- }
- if user != nil {
- break
- }
- }
- if user != nil {
- userMap.Store(userId, user)
- }
- return user
- }
- // GetUsers playerIdMap map[serverId][]playerId
- func GetUsers(playerIds []int64, svrId int) []*model.PlayerAttr {
- if len(playerIds) == 0 {
- return nil
- }
- result := make([]*model.PlayerAttr, 0)
- uIds := make([]int64, 0)
- for _, playerId := range playerIds {
- if uInfo, ok := userInfo[playerId]; ok {
- result = append(result, uInfo)
- continue
- }
- uIds = append(uIds, playerId)
- }
- if len(uIds) == 0 {
- return result
- }
- lock.RLock()
- defer lock.RUnlock()
- m := query.Use(config.GDBGroup[svrId]).PlayerAttr
- res, err := m.Where(m.Playerid.In(uIds...)).Find()
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
- logrus.Errorf("query user failed:%v", err)
- return nil
- }
- if len(res) == 0 {
- return result
- }
- //塞进userInfo
- for _, uInfo := range res {
- userInfo[uInfo.Playerid] = uInfo
- result = append(result, uInfo)
- }
- return result
- }
|