/** * @Author: zou.yingbin * @Create : 2021/1/13 9:15 * @Modify : 2021/1/13 9:15 */ package mtpcache import ( "mtp2_if/db" "mtp2_if/logger" "sync" "time" ) var vDic enumdicitem // 商品单位名称缓存 type enumdicitem struct { mtx sync.RWMutex //锁 data map[int32]string //数据[enumitemname]enumdicname last time.Time } type enumData struct { ENUMITEMNAME int32 `json:"enumitemname" xorm:"'enumitemname'"` //ID ENUMDICNAME string `json:"enumdicname" xorm:"'enumdicname'"` //名称 } func init() { vDic.data = make(map[int32]string, 0) } // 加载数据 func (r *enumdicitem) load() { now := time.Now() // 间隔3秒以上才重新加载 if d := now.Sub(r.last); d.Seconds() < 3 { return } r.mtx.Lock() defer r.mtx.Unlock() e := db.GetEngine() if e == nil { return } sqlId := "select t.enumitemname, t.enumdicname" + " from enumdicitem t" + " where t.enumdiccode = 'goodsunit'" + " and t.enumitemstatus = 1" sData := make([]enumData, 0) s := e.SQL(sqlId) if err := s.Find(&sData); err != nil { logger.GetLogger().Errorf("cache load enumdicitem, %v", err) } else { r.data = make(map[int32]string) for i := range sData { r.data[sData[i].ENUMITEMNAME] = sData[i].ENUMDICNAME } r.last = time.Now() } } func (r *enumdicitem) get(id int32) string { r.mtx.RLock() defer r.mtx.RUnlock() if r.data == nil { return "" } if v, ok := r.data[id]; ok { return v } return "" } // 获取商品单位枚举名称 func GetEnumDicitemName(id int32) string { if id <= 0 { return "" } if v := vDic.get(id); v != "" { return v } else { vDic.load() } return vDic.get(id) }