73 lines
2.4 KiB
Go
73 lines
2.4 KiB
Go
package service
|
|
|
|
import (
|
|
"fmt"
|
|
"planA/planB/initialization/golabl"
|
|
"strconv"
|
|
)
|
|
|
|
// GetRegionId 根据地区Id获取获取省市信息
|
|
// @param districtID 地区ID
|
|
// @return int 省份ID
|
|
// @return int 城市ID
|
|
// @return int 区县ID
|
|
// @return error 错误信息
|
|
func GetRegionId(districtID string) (int, int, int, error) {
|
|
//获取区县 code
|
|
district, err := golabl.Redis.RedisDbC.HGetAll(golabl.Ctx, fmt.Sprintf("region:%s", districtID)).Result()
|
|
if err != nil {
|
|
return 0, 0, 0, err
|
|
}
|
|
// 将 district["code"] 转为 int
|
|
districtCode, districtErr := strconv.Atoi(district["code"])
|
|
if districtErr != nil {
|
|
return 0, 0, 0, fmt.Errorf("区县code转换失败 id %v %v", districtID, districtErr)
|
|
}
|
|
//获取市 code
|
|
city, err := golabl.Redis.RedisDbC.HGetAll(golabl.Ctx, fmt.Sprintf("region:%s", district["pid"])).Result()
|
|
if err != nil {
|
|
return 0, 0, 0, err
|
|
}
|
|
// 将 city["code"] 转为 int
|
|
cityCode, cityErr := strconv.Atoi(city["code"])
|
|
if cityErr != nil {
|
|
return 0, 0, 0, fmt.Errorf("市code转换失败 id %v %v", district["pid"], err)
|
|
}
|
|
//获取市 province
|
|
province, err := golabl.Redis.RedisDbC.HGetAll(golabl.Ctx, fmt.Sprintf("region:%s", city["pid"])).Result()
|
|
if err != nil {
|
|
return 0, 0, 0, err
|
|
}
|
|
// 将 province["code"] 转为 int
|
|
provinceCode, provinceErr := strconv.Atoi(province["code"])
|
|
if provinceErr != nil {
|
|
return 0, 0, 0, fmt.Errorf("省code转换失败 id %v %v", city["pid"], err)
|
|
}
|
|
return provinceCode, cityCode, districtCode, nil
|
|
}
|
|
|
|
// GetRandomDistrictInProvince 在指定省内随机获取一个区级地区
|
|
func GetRandomDistrictInProvince(provinceID int) (map[string]string, error) {
|
|
// 从该省份的区级地区集合中随机获取一个 ID
|
|
provinceKey := fmt.Sprintf("province:%d:districts", provinceID)
|
|
districtID, err := golabl.Redis.RedisDbC.SRandMember(golabl.Ctx, provinceKey).Result()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 获取该地区的详细信息
|
|
return golabl.Redis.RedisDbC.HGetAll(golabl.Ctx, fmt.Sprintf("region:%s", districtID)).Result()
|
|
}
|
|
|
|
// GetRandomDistrict 随机获取一个区级地区
|
|
func GetRandomDistrict() (map[string]string, error) {
|
|
// 从所有区级地区集合中随机获取一个 ID
|
|
districtID, err := golabl.Redis.RedisDbC.SRandMember(golabl.Ctx, "all:districts").Result()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// 获取该地区的详细信息
|
|
return golabl.Redis.RedisDbC.HGetAll(golabl.Ctx, fmt.Sprintf("region:%s", districtID)).Result()
|
|
}
|