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