username.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/1/13 10:51
  4. * @Modify : 2021/1/13 10:51
  5. */
  6. package mtpcache
  7. import (
  8. "mtp2_if/db"
  9. "mtp2_if/logger"
  10. "sync"
  11. "time"
  12. )
  13. var vUser userName
  14. type userName struct {
  15. mtx sync.RWMutex // 锁
  16. data map[int64]userData // 数据[loginId]userData
  17. last time.Time
  18. }
  19. type userData struct {
  20. LOGINID int64 `json:"LOGINID" xorm:"'LOGINID'"` // 登录ID
  21. LOGINCODE string `json:"LOGINCODE" xorm:"'LOGINCODE'"` // 登录代码
  22. USERNAME string `json:"USERNAME" xorm:"'USERNAME'"` // 用户名字
  23. }
  24. // 加载数据
  25. func (r *userName) load() {
  26. now := time.Now()
  27. // 间隔3秒以上才重新加载
  28. if d := now.Sub(r.last); d.Seconds() < 3 {
  29. return
  30. }
  31. r.mtx.Lock()
  32. defer r.mtx.Unlock()
  33. e := db.GetEngine()
  34. if e == nil {
  35. return
  36. }
  37. sqlId := "select l.loginid, l.logincode, s.username" +
  38. " from loginaccount l" +
  39. " left join systemmanager s" +
  40. " on l.logincode = s.logincode" +
  41. " where s.username is not null"
  42. sData := make([]userData, 0)
  43. s := e.SQL(sqlId)
  44. if err := s.Find(&sData); err != nil {
  45. logger.GetLogger().Errorf("cache load usrname, %v", err)
  46. } else {
  47. r.data = make(map[int64]userData)
  48. for i := range sData {
  49. r.data[sData[i].LOGINID] = sData[i]
  50. }
  51. r.last = time.Now()
  52. }
  53. }
  54. func (r *userName) name(loginId int64) string {
  55. r.mtx.RLock()
  56. defer r.mtx.RUnlock()
  57. if r.data == nil {
  58. return ""
  59. }
  60. if v, ok := r.data[loginId]; ok {
  61. return v.USERNAME
  62. }
  63. return ""
  64. }
  65. func (r *userName) loginCode(loginId int64) string {
  66. r.mtx.RLock()
  67. defer r.mtx.RUnlock()
  68. if r.data == nil {
  69. return ""
  70. }
  71. if v, ok := r.data[loginId]; ok {
  72. return v.LOGINCODE
  73. }
  74. return ""
  75. }
  76. // 根据登录ID获取名称
  77. func GetUserNameByLoginId(loginId int64) string {
  78. if v := vUser.name(loginId); v != "" {
  79. return v
  80. } else {
  81. vUser.load()
  82. }
  83. return vUser.name(loginId)
  84. }
  85. // 根据登录ID获取登录代码
  86. func GetLoginCodeByLoginId(loginId int64) string {
  87. if v := vUser.loginCode(loginId); v != "" {
  88. return v
  89. } else {
  90. vUser.load()
  91. }
  92. return vUser.loginCode(loginId)
  93. }