/** * @Author: zou.yingbin * @Create : 2021/3/10 14:13 * @Modify : 2021/3/10 14:13 */ package mtpcache import ( "mtp2_if/db" "mtp2_if/logger" "sync" "time" ) var vSysMgr sysMgr // sysMgr 管理员 type sysMgr struct { mtx sync.RWMutex // 锁 data map[int64]sysMgrData // 数据[AUTOID]sysMgrData last time.Time } // sysMgrData 管理员数据 type sysMgrData struct { AUTOID int64 `json:"autoid" xorm:"'AUTOID'"` // 管理员ID LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 管理员登录代码 USERNAME string `json:"username" xorm:"'USERNAME'"` // 管理员登录名称 } func init() { go func() { time.Sleep(time.Second * 5) vSysMgr.load() }() } func (r *sysMgr) 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 t.autoid, t.logincode, t.username from systemmanager t" sData := make([]sysMgrData, 0) s := e.SQL(sqlId) if err := s.Find(&sData); err != nil { logger.GetLogger().Errorf("cache load usrname, %v", err) } else { r.data = make(map[int64]sysMgrData) for i := range sData { r.data[sData[i].AUTOID] = sData[i] } r.last = time.Now() } } func (r *sysMgr) logincode(autoId int64) string { r.mtx.RLock() defer r.mtx.RUnlock() if r.data == nil { return "" } if v, ok := r.data[autoId]; ok { return v.LOGINCODE } return "" } // GetSystemmangerLoginCode 获取管理员登录代码 // 参数 autoId 管理员id func GetSystemmangerLoginCode(autoId int64) string { if v := vSysMgr.logincode(autoId); v != "" { return v } else { vSysMgr.load() } return vSysMgr.logincode(autoId) }