username.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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]string //数据[loginId]accountName
  17. last time.Time
  18. }
  19. type userData struct {
  20. LOGINID int64 //登录ID
  21. USERNAME string // 用户名字
  22. }
  23. // 加载数据
  24. func (r *userName) load() {
  25. now := time.Now()
  26. // 间隔3秒以上才重新加载
  27. if d := now.Sub(r.last); d.Seconds() < 3 {
  28. return
  29. }
  30. r.mtx.Lock()
  31. defer r.mtx.Unlock()
  32. e := db.GetEngine()
  33. if e == nil {
  34. return
  35. }
  36. sqlId := "select l.loginid, s.username" +
  37. " from loginaccount l" +
  38. " left join systemmanager s" +
  39. " on l.logincode = s.logincode" +
  40. " where s.username is not null"
  41. sData := make([]userData, 0)
  42. s := e.SQL(sqlId)
  43. if err := s.Find(&sData); err != nil {
  44. logger.GetLogger().Errorf("cache load usrname, %v", err)
  45. } else {
  46. r.data = make(map[int64]string)
  47. for i := range sData {
  48. r.data[sData[i].LOGINID] = sData[i].USERNAME
  49. }
  50. r.last = time.Now()
  51. }
  52. }
  53. func (r *userName) get(loginId int64) string {
  54. r.mtx.RLock()
  55. defer r.mtx.RUnlock()
  56. if r.data == nil {
  57. return ""
  58. }
  59. if v, ok := r.data[loginId]; ok {
  60. return v
  61. }
  62. return ""
  63. }
  64. // 根据登录ID获取名称
  65. func GetUserName(loginId int64) string {
  66. if v := vUser.get(loginId); v !=""{
  67. return v
  68. }else{
  69. vUser.load()
  70. }
  71. return vUser.get(loginId)
  72. }