enumdicitem.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/1/13 9:15
  4. * @Modify : 2021/1/13 9:15
  5. */
  6. package mtpcache
  7. import (
  8. "mtp2_if/db"
  9. "mtp2_if/logger"
  10. "sync"
  11. "time"
  12. )
  13. var vDic enumdicitem
  14. // 商品单位名称缓存
  15. type enumdicitem struct {
  16. mtx sync.RWMutex //锁
  17. data map[int32]string //数据[enumitemname]enumdicname
  18. last time.Time
  19. }
  20. type enumData struct {
  21. ENUMITEMNAME int32 `json:"enumitemname" xorm:"'enumitemname'"` //ID
  22. ENUMDICNAME string `json:"enumdicname" xorm:"'enumdicname'"` //名称
  23. }
  24. func init() {
  25. vDic.data = make(map[int32]string, 0)
  26. }
  27. // 加载数据
  28. func (r *enumdicitem) load() {
  29. now := time.Now()
  30. // 间隔3秒以上才重新加载
  31. if d := now.Sub(r.last); d.Seconds() < 3{
  32. return
  33. }
  34. r.mtx.Lock()
  35. defer r.mtx.Unlock()
  36. e := db.GetEngine()
  37. if e == nil{
  38. return
  39. }
  40. sqlId := "select t.enumitemname, t.enumdicname" +
  41. " from enumdicitem t" +
  42. " where t.enumdiccode = 'goodsunit'" +
  43. " and t.enumitemstatus = 1"
  44. sData := make([]enumData, 0)
  45. s := e.SQL(sqlId)
  46. if err := s.Find(&sData); err != nil {
  47. logger.GetLogger().Errorf("cache load enumdicitem, %v", err)
  48. } else {
  49. r.data = make(map[int32]string)
  50. for i := range sData {
  51. r.data[sData[i].ENUMITEMNAME] = sData[i].ENUMDICNAME
  52. }
  53. r.last = time.Now()
  54. }
  55. }
  56. func (r *enumdicitem) get(id int32) string {
  57. r.mtx.RLock()
  58. defer r.mtx.RUnlock()
  59. if r.data == nil{
  60. return ""
  61. }
  62. if v, ok := r.data[id]; ok{
  63. return v
  64. }
  65. return ""
  66. }
  67. // 获取商品单位枚举名称
  68. func GetEnumDicitemName(id int32) string {
  69. if v := vDic.get(id); v !=""{
  70. return v
  71. }else{
  72. vDic.load()
  73. }
  74. return vDic.get(id)
  75. }