mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
						|
 | 
						|
package services
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"github.com/TeaOSLab/EdgeAPI/internal/db/models/regions"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
						|
)
 | 
						|
 | 
						|
// RegionCityService 城市相关服务
 | 
						|
type RegionCityService struct {
 | 
						|
	BaseService
 | 
						|
}
 | 
						|
 | 
						|
// FindAllEnabledRegionCities 查找所有城市
 | 
						|
func (this *RegionCityService) FindAllEnabledRegionCities(ctx context.Context, req *pb.FindAllEnabledRegionCitiesRequest) (*pb.FindAllEnabledRegionCitiesResponse, error) {
 | 
						|
	_, _, err := this.ValidateNodeId(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	cities, err := regions.SharedRegionCityDAO.FindAllEnabledCities(tx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var pbCities = []*pb.RegionCity{}
 | 
						|
 | 
						|
	var provincesMap = map[int64]*regions.RegionProvince{} // provinceId => RegionProvince
 | 
						|
 | 
						|
	for _, city := range cities {
 | 
						|
		var provinceId = int64(city.ProvinceId)
 | 
						|
 | 
						|
		var pbProvince = &pb.RegionProvince{Id: provinceId}
 | 
						|
		if req.IncludeRegionProvince {
 | 
						|
			province, ok := provincesMap[provinceId]
 | 
						|
			if !ok {
 | 
						|
				province, err = regions.SharedRegionProvinceDAO.FindEnabledRegionProvince(tx, provinceId)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
				if province == nil {
 | 
						|
					continue
 | 
						|
				}
 | 
						|
				provincesMap[provinceId] = province
 | 
						|
			}
 | 
						|
 | 
						|
			pbProvince = &pb.RegionProvince{
 | 
						|
				Id:    int64(province.Id),
 | 
						|
				Name:  province.Name,
 | 
						|
				Codes: province.DecodeCodes(),
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		pbCities = append(pbCities, &pb.RegionCity{
 | 
						|
			Id:               int64(city.Id),
 | 
						|
			Name:             city.Name,
 | 
						|
			Codes:            city.DecodeCodes(),
 | 
						|
			RegionProvinceId: int64(city.ProvinceId),
 | 
						|
			RegionProvince:   pbProvince,
 | 
						|
		})
 | 
						|
	}
 | 
						|
 | 
						|
	return &pb.FindAllEnabledRegionCitiesResponse{
 | 
						|
		RegionCities: pbCities,
 | 
						|
	}, nil
 | 
						|
}
 | 
						|
 | 
						|
// FindEnabledRegionCity 查找单个城市信息
 | 
						|
func (this *RegionCityService) FindEnabledRegionCity(ctx context.Context, req *pb.FindEnabledRegionCityRequest) (*pb.FindEnabledRegionCityResponse, error) {
 | 
						|
	_, _, err := this.ValidateNodeId(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	city, err := regions.SharedRegionCityDAO.FindEnabledRegionCity(tx, req.RegionCityId)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if city == nil {
 | 
						|
		return &pb.FindEnabledRegionCityResponse{
 | 
						|
			RegionCity: nil,
 | 
						|
		}, nil
 | 
						|
	}
 | 
						|
 | 
						|
	return &pb.FindEnabledRegionCityResponse{
 | 
						|
		RegionCity: &pb.RegionCity{
 | 
						|
			Id:               int64(city.Id),
 | 
						|
			Name:             city.Name,
 | 
						|
			Codes:            city.DecodeCodes(),
 | 
						|
			RegionProvinceId: int64(city.ProvinceId),
 | 
						|
		},
 | 
						|
	}, nil
 | 
						|
}
 |