| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /**
- * @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))
- }
|