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.

94 lines
1.8 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"
)
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 QueryProvinces(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 QueryAll(c *gin.Context) {
if len(cacheAllRegion) > 0 {
back.Suc(c, "操作成功", &cacheAllRegion)
return
}
name := (&region.Information{}).TableName()
var r []Province
tx := dbc.DB.Begin()
// 找到省份
err := tx.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 = tx.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 = tx.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
}
}
}
tx.Commit()
cacheAllRegion = r
back.Suc(c, "操作成功", &r)
}