refactor(region):基本完成行政区划部分服务的迁移。
This commit is contained in:
parent
b262042244
commit
8687b462ff
|
@ -3,25 +3,38 @@ package service
|
||||||
import (
|
import (
|
||||||
"electricity_bill_calc/cache"
|
"electricity_bill_calc/cache"
|
||||||
"electricity_bill_calc/global"
|
"electricity_bill_calc/global"
|
||||||
|
"electricity_bill_calc/logger"
|
||||||
"electricity_bill_calc/model"
|
"electricity_bill_calc/model"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"xorm.io/builder"
|
"github.com/samber/lo"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type _RegionService struct{}
|
type _RegionService struct {
|
||||||
|
l *zap.Logger
|
||||||
|
}
|
||||||
|
|
||||||
var RegionService _RegionService
|
var RegionService = _RegionService{
|
||||||
|
l: logger.Named("Service", "Region"),
|
||||||
|
}
|
||||||
|
|
||||||
func (_RegionService) FetchSubRegions(parent string) ([]model.Region, error) {
|
func (_RegionService) FetchSubRegions(parent string) ([]model.Region, error) {
|
||||||
|
ctx, cancel := global.TimeoutContext(30 * time.Second)
|
||||||
|
defer cancel()
|
||||||
if regions, _ := cache.RetreiveSearch[[]model.Region]("region", "parent", parent); regions != nil {
|
if regions, _ := cache.RetreiveSearch[[]model.Region]("region", "parent", parent); regions != nil {
|
||||||
return *regions, nil
|
return *regions, nil
|
||||||
}
|
}
|
||||||
regions := make([]model.Region, 0)
|
regions := make([]model.Region, 0)
|
||||||
err := global.DBConn.Where(builder.Eq{"parent": parent}).Asc("code").Find(®ions)
|
err := global.DB.NewSelect().Model(®ions).Where("parent = ?", parent).Order("code asc").Scan(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return make([]model.Region, 0), err
|
return make([]model.Region, 0), err
|
||||||
}
|
}
|
||||||
cache.CacheSearch(regions, []string{"region"}, "region", "parent", parent)
|
relationNames := lo.Map(regions, func(r model.Region, index int) string {
|
||||||
|
return fmt.Sprintf("region:%s", r.Code)
|
||||||
|
})
|
||||||
|
cache.CacheSearch(regions, relationNames, "region", "parent", parent)
|
||||||
return regions, err
|
return regions, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,13 +56,16 @@ func (r _RegionService) FetchAllParentRegions(code string) ([]model.Region, erro
|
||||||
}
|
}
|
||||||
|
|
||||||
func (_RegionService) fetchRegion(code string) (*model.Region, error) {
|
func (_RegionService) fetchRegion(code string) (*model.Region, error) {
|
||||||
|
ctx, cancel := global.TimeoutContext(30 * time.Second)
|
||||||
|
defer cancel()
|
||||||
if cachedRegion, _ := cache.RetreiveSearch[model.Region]("region", code); cachedRegion != nil {
|
if cachedRegion, _ := cache.RetreiveSearch[model.Region]("region", code); cachedRegion != nil {
|
||||||
return cachedRegion, nil
|
return cachedRegion, nil
|
||||||
}
|
}
|
||||||
region := new(model.Region)
|
region := new(model.Region)
|
||||||
has, err := global.DBConn.ID(code).NoAutoCondition().Get(region)
|
err := global.DB.NewSelect().Model(®ion).WherePK(code).Scan(ctx)
|
||||||
if has {
|
if err != nil && region != nil {
|
||||||
cache.CacheSearch(region, []string{"region"}, "region", code)
|
relationName := fmt.Sprintf("region:%s", code)
|
||||||
|
cache.CacheSearch(region, []string{relationName}, "region", code)
|
||||||
}
|
}
|
||||||
return _postProcessSingle(region, has, err)
|
return region, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user