package region import ( "strings" "zhiyuan/models" "zhiyuan/pkg/app" "zhiyuan/pkg/db" "zhiyuan/pkg/redis" "zhiyuan/pkg/utils" ) const cacheKey = "region_list_cache" var Region models.Region func GetList(where map[string]interface{}, fields []string, page app.Page, retVal interface{}) ([]*models.Region, error) { if page.PageNum > 0 && page.PageSize > 0 { where["_limit"] = db.GetOffset(uint(page.PageNum), uint(page.PageSize)) } return Region.GetMulti(where, fields, retVal) } func GetListByCache() ([]*models.Region, error) { res, err := redis.Get(cacheKey) var regionList []*models.Region if err != nil { regionList, err = GetList(nil, nil, app.Page{}, nil) if err != nil { return nil, err } redis.Set(cacheKey, regionList, 86400) } else { utils.JsonDecode(res).To(®ionList) } return regionList, nil } func GetNameByCodes(codes []int) (map[int]string, error) { var regionList []*models.Region if len(codes) <= 0 { return nil, nil } regionMap := make(map[int]string, 0) _, err := GetList(map[string]interface{}{"code in": codes}, []string{"code, name"}, app.Page{}, ®ionList) if err != nil { return nil, err } for _, v := range regionList { regionMap[v.Code] = v.Name } return regionMap, nil } func GetFullAddressByCodes(province int, city int, region int, address string, split string, regionMap map[int]string) string { if regionMap == nil { var err error regionMap, err = GetNameByCodes([]int{province, city, region}) if err != nil { return "" } } addressList := make([]string, 0) if _, ok := regionMap[province]; ok { addressList = append(addressList, regionMap[province]) } if _, ok := regionMap[city]; ok { addressList = append(addressList, regionMap[city]) } if _, ok := regionMap[region]; ok { addressList = append(addressList, regionMap[region]) } if address != "" { addressList = append(addressList, address) } return strings.Join(addressList, split) }