systemmanager.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/3/10 14:13
  4. * @Modify : 2021/3/10 14:13
  5. */
  6. package mtpcache
  7. import (
  8. "mtp2_if/db"
  9. "mtp2_if/logger"
  10. "sync"
  11. "time"
  12. )
  13. var vSysMgr sysMgr
  14. // sysMgr 管理员
  15. type sysMgr struct {
  16. mtx sync.RWMutex // 锁
  17. data map[int64]sysMgrData // 数据[AUTOID]sysMgrData
  18. last time.Time
  19. }
  20. // sysMgrData 管理员数据
  21. type sysMgrData struct {
  22. AUTOID int64 `json:"autoid" xorm:"'AUTOID'"` // 管理员ID
  23. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 管理员登录代码
  24. USERNAME string `json:"username" xorm:"'USERNAME'"` // 管理员登录名称
  25. }
  26. func (r *sysMgr) load() {
  27. now := time.Now()
  28. // 间隔3秒以上才重新加载
  29. if d := now.Sub(r.last); d.Seconds() < 3 {
  30. return
  31. }
  32. r.mtx.Lock()
  33. defer r.mtx.Unlock()
  34. e := db.GetEngine()
  35. if e == nil {
  36. return
  37. }
  38. sqlId := "select t.autoid, t.logincode, t.username from systemmanager t"
  39. sData := make([]sysMgrData, 0)
  40. s := e.SQL(sqlId)
  41. if err := s.Find(&sData); err != nil {
  42. logger.GetLogger().Errorf("cache load usrname, %v", err)
  43. } else {
  44. r.data = make(map[int64]sysMgrData)
  45. for i := range sData {
  46. r.data[sData[i].AUTOID] = sData[i]
  47. }
  48. r.last = time.Now()
  49. }
  50. }
  51. func (r *sysMgr) logincode(autoId int64) string {
  52. r.mtx.RLock()
  53. defer r.mtx.RUnlock()
  54. if r.data == nil {
  55. return ""
  56. }
  57. if v, ok := r.data[autoId]; ok {
  58. return v.LOGINCODE
  59. }
  60. return ""
  61. }
  62. // GetSystemmangerLoginCode 获取管理员登录代码
  63. // 参数 autoId 管理员id
  64. func GetSystemmangerLoginCode(autoId int64) string {
  65. if v := vSysMgr.logincode(autoId); v != "" {
  66. return v
  67. }else {
  68. vSysMgr.load()
  69. }
  70. return vSysMgr.logincode(autoId)
  71. }