You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.7 KiB
135 lines
2.7 KiB
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
|
|
}
|