refactor(region):基本完成行政区划部分服务的迁移。

This commit is contained in:
徐涛 2022-09-15 16:22:24 +08:00
parent b262042244
commit 8687b462ff

View File

@ -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(&regions) err := global.DB.NewSelect().Model(&regions).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(&region).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
} }