systemmanager.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 init() {
  27. go func() {
  28. time.Sleep(time.Second * 5)
  29. vSysMgr.load()
  30. }()
  31. }
  32. func (r *sysMgr) load() {
  33. now := time.Now()
  34. // 间隔3秒以上才重新加载
  35. if d := now.Sub(r.last); d.Seconds() < 3 {
  36. return
  37. }
  38. r.mtx.Lock()
  39. defer r.mtx.Unlock()
  40. e := db.GetEngine()
  41. if e == nil {
  42. return
  43. }
  44. sqlId := "select t.autoid, t.logincode, t.username from systemmanager t"
  45. sData := make([]sysMgrData, 0)
  46. s := e.SQL(sqlId)
  47. if err := s.Find(&sData); err != nil {
  48. logger.GetLogger().Errorf("cache load usrname, %v", err)
  49. } else {
  50. r.data = make(map[int64]sysMgrData)
  51. for i := range sData {
  52. r.data[sData[i].AUTOID] = sData[i]
  53. }
  54. r.last = time.Now()
  55. }
  56. }
  57. func (r *sysMgr) logincode(autoId int64) string {
  58. r.mtx.RLock()
  59. defer r.mtx.RUnlock()
  60. if r.data == nil {
  61. return ""
  62. }
  63. if v, ok := r.data[autoId]; ok {
  64. return v.LOGINCODE
  65. }
  66. return ""
  67. }
  68. // GetSystemmangerLoginCode 获取管理员登录代码
  69. // 参数 autoId 管理员id
  70. func GetSystemmangerLoginCode(autoId int64) string {
  71. if v := vSysMgr.logincode(autoId); v != "" {
  72. return v
  73. } else {
  74. vSysMgr.load()
  75. }
  76. return vSysMgr.logincode(autoId)
  77. }