refactor(region):基本完成行政区划部分服务的迁移。
This commit is contained in:
parent
b262042244
commit
8687b462ff
|
@ -3,25 +3,38 @@ package service
|
|||
import (
|
||||
"electricity_bill_calc/cache"
|
||||
"electricity_bill_calc/global"
|
||||
"electricity_bill_calc/logger"
|
||||
"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) {
|
||||
ctx, cancel := global.TimeoutContext(30 * time.Second)
|
||||
defer cancel()
|
||||
if regions, _ := cache.RetreiveSearch[[]model.Region]("region", "parent", parent); regions != nil {
|
||||
return *regions, nil
|
||||
}
|
||||
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 {
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -43,13 +56,16 @@ func (r _RegionService) FetchAllParentRegions(code string) ([]model.Region, erro
|
|||
}
|
||||
|
||||
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 {
|
||||
return cachedRegion, nil
|
||||
}
|
||||
region := new(model.Region)
|
||||
has, err := global.DBConn.ID(code).NoAutoCondition().Get(region)
|
||||
if has {
|
||||
cache.CacheSearch(region, []string{"region"}, "region", code)
|
||||
err := global.DB.NewSelect().Model(®ion).WherePK(code).Scan(ctx)
|
||||
if err != nil && region != nil {
|
||||
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