/** * @Author: zou.yingbin * @Create : 2021/1/13 14:07 * @Modify : 2021/1/13 14:07 */ package mtpcache import ( "mtp2_if/db" "mtp2_if/logger" "sync" "time" ) var vUsrMgr userAccountMgr // 用户缓存 type userAccountMgr struct { mtx sync.RWMutex //锁 data map[int64]usrAccData //数据[userId]accountName last time.Time } type usrAccData struct { USERID int64 `json:"userid" xorm:"'USERID'"` //用户ID USERTYPE int32 `json:"usertype" xorm:"'USERTYPE'"` //账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` //账户名称(机构名称) PARENTUSERID int32 `json:"parentuserid" xorm:"'PARENTUSERID'"` //所属机构ID MEMBERUSERID int32 `json:"memberuserid" xorm:"'MEMBERUSERID'"` //所属会员ID } // 加载数据 func (r *userAccountMgr) load() { now := time.Now() // 间隔3秒以上才重新加载 if d := now.Sub(r.last); d.Seconds() < 3 { return } r.mtx.Lock() defer r.mtx.Unlock() e := db.GetEngine() if e == nil { return } sqlId := "select USERID, USERTYPE, ACCOUNTNAME, PARENTUSERID, MEMBERUSERID from useraccount" sData := make([]usrAccData, 0) s := e.SQL(sqlId) if err := s.Find(&sData); err != nil { logger.GetLogger().Errorf("cache load useraccount, %v", err) } else { r.data = make(map[int64]usrAccData) for i := range sData { r.data[sData[i].USERID] = sData[i] } r.last = time.Now() } } func (r *userAccountMgr) get(loginId int64) string { r.mtx.RLock() defer r.mtx.RUnlock() if r.data == nil { return "" } if v, ok := r.data[loginId]; ok { return v.ACCOUNTNAME } return "" } //根据UserId获取名称 func GetUserNameByUserId(userId int64) string { if v := vUsrMgr.get(userId); v !=""{ return v }else{ vUsrMgr.load() } return vUsrMgr.get(userId) }