/** * @Author: zou.yingbin * @Create : 2021/6/3 15:14 * @Modify : 2021/6/3 15:14 */ package mtpcache import ( "mtp2_if/db" "sync" "time" ) var vDivisionMgr DivisionMgr // DivisionMgr 行政区域缓存 type DivisionMgr struct { mtx sync.RWMutex data map[int64]Division last time.Time } // Division 行政区域表 type Division struct { Autoid int64 `json:"autoid" xorm:"'AUTOID'" binding:"required"` // 自增ID Divisioncode string `json:"divisioncode" xorm:"'DIVISIONCODE'" binding:"required"` // 行政代码 Shortcode string `json:"shortcode" xorm:"'SHORTCODE'"` // 地区简码 Parentcode string `json:"parentcode" xorm:"'PARENTCODE'"` // 上级行政代码 Divisionlevel string `json:"divisionlevel" xorm:"'DIVISIONLEVEL'"` // 行政级别 Divisionname string `json:"divisionname" xorm:"'DIVISIONNAME'"` // 行政名称 Pathname string `json:"pathname" xorm:"'PATHNAME'"` // 路径名称 Separablename string `json:"separablename" xorm:"'SEPARABLENAME'"` // 可拆分的全称 Postcode string `json:"postcode" xorm:"'POSTCODE'"` // 邮政编码 Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间 Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人 } // TableName is DIVISION func (Division) TableName() string { return "DIVISION" } func init() { go func() { time.Sleep(time.Second * 5) vDivisionMgr.load() }() } func (r *DivisionMgr) load() { now := time.Now() // 间隔3秒以上才重新加载 if d := now.Sub(r.last); d.Seconds() < 3 { return } r.mtx.Lock() defer r.mtx.Unlock() engine := db.GetEngine() if engine == nil { return } divisions := make([]Division, 0) if err := engine.Find(&divisions); err == nil { r.data = map[int64]Division{} for i := range divisions { r.data[divisions[i].Autoid] = divisions[i] } } } // Name 获取行政区名称 func (r *DivisionMgr) Name(Id int64) string { r.mtx.RLock() defer r.mtx.RUnlock() if d, ok := r.data[Id]; ok { return d.Divisionname } return "" } // 获取行政区名称 func GetDivisionName(Id int32) string { if Id <= 0 { return "" } if strName := vDivisionMgr.Name(int64(Id)); strName != "" { return strName } vDivisionMgr.load() return vDivisionMgr.Name(int64(Id)) }