package region import ( "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" "recook/internal/back" "recook/internal/dbc" "recook/internal/define" "recook/internal/model/region" "recook/internal/v2/lib/tianqiapi" "recook/tools" "strings" ) type Province struct { region.Information Cities []City `json:"cities"` } type City struct { region.Information Districts []District `json:"districts"` } type District struct { region.Information } var cacheProvinces []region.Information var cacheAllRegion []Province /* 只获取省份 */ func Provinces(c *gin.Context) { if len(cacheProvinces) > 0 { back.Suc(c, "操作成功", cacheProvinces) return } var r []region.Information err := dbc.DB.Find(&r, "parent_id=?", 0).Error if err != nil { if gorm.IsRecordNotFoundError(err) { panic("数据库未配置省市区信息") } else { back.Err(c, err.Error()) } return } cacheProvinces = r back.Suc(c, "操作成功", r) } func All(c *gin.Context) { if len(cacheAllRegion) > 0 { back.Suc(c, "操作成功", &cacheAllRegion) return } name := (®ion.Information{}).TableName() var r []Province // 找到省份 err := dbc.DB.Table(name).Find(&r, "parent_id=? AND depth=?", 0, define.RegionLevelProvince).Error if err != nil { back.Err(c, err.Error()) return } // 找到市 for i1, v1 := range r { err = dbc.DB.Table(name).Find(&(r[i1].Cities), "parent_id=? AND depth=?", v1.ID, define.RegionLevelCity).Error if err != nil { back.Err(c, err.Error()) return } // 找到区 for i2, v2 := range r[i1].Cities { err = dbc.DB.Table(name).Find(&(r[i1].Cities[i2].Districts), "parent_id=? AND depth=?", v2.ID, define.RegionLevelDistrict).Error if err != nil { back.Err(c, err.Error()) return } } } cacheAllRegion = r back.Suc(c, "操作成功", &r) } type argsWeather struct { CityId string `json:"cityId" form:"cityId"` CityZh string `json:"cityZh" form:"cityZh"` City string `json:"city" form:"city"` } // @Style 获取天气 func Weather(c *gin.Context) { var p argsWeather if err := tools.ParseParams(&p, c); err != nil { back.Fail(c, err.Error()) return } if p.CityId != "" { result, err := tianqiapi.TianqiApi.CityId(p.CityId) if err != nil { back.Fail(c, err.Error()) return } back.Suc(c, "操作成功", result) return } else if p.CityZh != "" { result, err := tianqiapi.TianqiApi.City(p.CityZh) if err != nil { back.Fail(c, err.Error()) return } back.Suc(c, "操作成功", result) return } else if p.City != "" { result, err := tianqiapi.TianqiApi.City(strings.ReplaceAll(p.CityZh, "区", "")) if err != nil { back.Fail(c, err.Error()) return } back.Suc(c, "操作成功", result) return } back.Fail(c, "参数错误") return }