mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2026-01-06 23:45:47 +08:00
查找省份对应ID时,自动尝试省略省、区之类的后缀
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"github.com/iwind/TeaGo/types"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -18,6 +19,8 @@ const (
|
||||
RegionProvinceStateDisabled = 0 // 已禁用
|
||||
)
|
||||
|
||||
var RegionProvinceSuffixes = []string{"省", "州", "区", "大区", "特区", "港", "岛", "环礁", "谷地", "山", "口岸", "郡", "县", "城", "河", "河畔", "市"}
|
||||
|
||||
type RegionProvinceDAO dbs.DAO
|
||||
|
||||
func NewRegionProvinceDAO() *RegionProvinceDAO {
|
||||
@@ -95,6 +98,37 @@ func (this *RegionProvinceDAO) FindProvinceIdWithDataId(tx *dbs.Tx, dataId strin
|
||||
|
||||
// FindProvinceIdWithName 根据省份名查找省份ID
|
||||
func (this *RegionProvinceDAO) FindProvinceIdWithName(tx *dbs.Tx, countryId int64, provinceName string) (int64, error) {
|
||||
{
|
||||
provinceId, err := this.findProvinceIdWithExactName(tx, countryId, provinceName)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if provinceId > 0 {
|
||||
return provinceId, nil
|
||||
}
|
||||
}
|
||||
|
||||
// 候选词
|
||||
for _, suffix := range RegionProvinceSuffixes {
|
||||
var name string
|
||||
if strings.HasSuffix(provinceName, suffix) {
|
||||
name = strings.TrimSuffix(provinceName, suffix)
|
||||
} else {
|
||||
name = provinceName + suffix
|
||||
}
|
||||
provinceId, err := this.findProvinceIdWithExactName(tx, countryId, name)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if provinceId > 0 {
|
||||
return provinceId, nil
|
||||
}
|
||||
}
|
||||
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
func (this *RegionProvinceDAO) findProvinceIdWithExactName(tx *dbs.Tx, countryId int64, provinceName string) (int64, error) {
|
||||
return this.Query(tx).
|
||||
Attr("countryId", countryId).
|
||||
Where("(name=:provinceName OR customName=:provinceName OR JSON_CONTAINS(codes, :provinceNameJSON) OR JSON_CONTAINS(customCodes, :provinceNameJSON))").
|
||||
|
||||
Reference in New Issue
Block a user