From f1b61c574c0012d67dc1d59dfcb32a051ba0c728 Mon Sep 17 00:00:00 2001 From: xia Date: Sun, 23 Feb 2025 21:50:55 +0800 Subject: [PATCH] 1 --- .../internal/logic/get_app_list_logic.go | 82 +++++++++++++++++-- .../internal/svc/service_context.go | 20 +++-- go.mod | 2 +- go.sum | 1 + 4 files changed, 89 insertions(+), 16 deletions(-) diff --git a/app/admin_service/internal/logic/get_app_list_logic.go b/app/admin_service/internal/logic/get_app_list_logic.go index 5f0a9d3..af5ecbf 100644 --- a/app/admin_service/internal/logic/get_app_list_logic.go +++ b/app/admin_service/internal/logic/get_app_list_logic.go @@ -2,8 +2,9 @@ package logic import ( "context" + "encoding/json" + "fmt" - "gitea.youtukeji.com.cn/youtu/youtu_grpc/app/admin_service/admin_service" "gitea.youtukeji.com.cn/youtu/youtu_grpc/app/admin_service/internal/svc" "github.com/zeromicro/go-zero/core/logx" @@ -23,19 +24,86 @@ func NewGetAppListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetApp } } +// 定义数据结构 +type EcpmConfig struct { + AppID string `json:"appId"` + ECPM int `json:"eCPM"` + IPU int `json:"IPU"` +} + type AppData struct { - AppId string `json:"appId"` + AppID string `json:"appId"` AppSecret string `json:"appSecret"` Type string `json:"type"` } +type MergedAppInfo struct { + AppID string `json:"appId"` + ECPM int `json:"eCPM,omitempty"` + IPU int `json:"IPU,omitempty"` + AppSecret string `json:"appSecret,omitempty"` + Type string `json:"type,omitempty"` +} + // 获取app列表 -func (l *GetAppListLogic) GetAppList(in *admin_service.GetAppListRequest) (res *admin_service.GetAppListResponse, err error) { - res = &admin_service.GetAppListResponse{} - b, err := l.svcCtx.EtcdCli.Get(context.Background(), "/youtu/appData") +func (l *GetAppListLogic) GetAppList() ([]*MergedAppInfo, error) { + // 从ETCD获取ecpm配置 + ecpmResp, err := l.svcCtx.EtcdClient.Get(l.ctx, "/youtu/ecpm/config") if err != nil { - return nil, err + return nil, fmt.Errorf("获取ecpm配置失败: %v", err) } - return &admin_service.GetAppListResponse{}, nil + var ecpmConfigs []EcpmConfig + if len(ecpmResp.Kvs) > 0 { + if err := json.Unmarshal(ecpmResp.Kvs[0].Value, &ecpmConfigs); err != nil { + return nil, fmt.Errorf("解析ecpm配置失败: %v", err) + } + } + + // 从ETCD获取app数据 + appDataResp, err := l.svcCtx.EtcdClient.Get(l.ctx, "/youtu/appData") + if err != nil { + return nil, fmt.Errorf("获取app数据失败: %v", err) + } + + var appDatas []AppData + if len(appDataResp.Kvs) > 0 { + if err := json.Unmarshal(appDataResp.Kvs[0].Value, &appDatas); err != nil { + return nil, fmt.Errorf("解析app数据失败: %v", err) + } + } + + // 创建合并映射 + merged := make(map[string]*MergedAppInfo) + + // 合并ecpm数据 + for _, ecpm := range ecpmConfigs { + merged[ecpm.AppID] = &MergedAppInfo{ + AppID: ecpm.AppID, + ECPM: ecpm.ECPM, + IPU: ecpm.IPU, + } + } + + // 合并app数据 + for _, app := range appDatas { + if entry, exists := merged[app.AppID]; exists { + entry.AppSecret = app.AppSecret + entry.Type = app.Type + } else { + merged[app.AppID] = &MergedAppInfo{ + AppID: app.AppID, + AppSecret: app.AppSecret, + Type: app.Type, + } + } + } + + // 转换为切片 + result := make([]*MergedAppInfo, 0, len(merged)) + for _, v := range merged { + result = append(result, v) + } + + return result, nil } diff --git a/app/admin_service/internal/svc/service_context.go b/app/admin_service/internal/svc/service_context.go index 7e71f7c..25d6066 100644 --- a/app/admin_service/internal/svc/service_context.go +++ b/app/admin_service/internal/svc/service_context.go @@ -1,25 +1,29 @@ package svc import ( + "log" + "time" + "gitea.youtukeji.com.cn/youtu/youtu_grpc/pkg/config" - "github.com/spf13/viper" clientv3 "go.etcd.io/etcd/client/v3" ) type ServiceContext struct { - Config config.Config - EtcdCli *clientv3.Client + Config config.Config + EtcdClient *clientv3.Client } func NewServiceContext(c config.Config) *ServiceContext { - - cli, err := clientv3.NewFromURL(viper.GetString(config.EtcdAddrKey)) + etcdClient, err := clientv3.New(clientv3.Config{ + Endpoints: c.RpcServerConf.Etcd.Hosts, + DialTimeout: 3 * time.Second, + }) if err != nil { - panic(err) + log.Fatal(err) } return &ServiceContext{ - Config: c, - EtcdCli: cli, + Config: c, + EtcdClient: etcdClient, } } diff --git a/go.mod b/go.mod index d447d02..79ddeb6 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( github.com/spf13/viper v1.20.0-alpha.6 github.com/spf13/viper/remote v1.20.0-alpha.6 github.com/zeromicro/go-zero v1.8.0 - go.etcd.io/etcd/client/v3 v3.5.18 + go.etcd.io/etcd/client/v3 v3.5.15 google.golang.org/grpc v1.70.0 google.golang.org/protobuf v1.36.5 gorm.io/driver/mysql v1.5.7 diff --git a/go.sum b/go.sum index 4d44eaa..a766800 100644 --- a/go.sum +++ b/go.sum @@ -452,6 +452,7 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.18 h1:mZPOYw4h8rTk7TeJ5+3udUkfVGBqc+GCjOJYd68 go.etcd.io/etcd/client/pkg/v3 v3.5.18/go.mod h1:BxVf2o5wXG9ZJV+/Cu7QNUiJYk4A29sAhoI5tIRsCu4= go.etcd.io/etcd/client/v2 v2.305.15 h1:VG2xbf8Vz1KJh65Ar2V5eDmfkp1bpzkSEHlhJM3usp8= go.etcd.io/etcd/client/v2 v2.305.15/go.mod h1:Ad5dRjPVb/n5yXgAWQ/hXzuXXkBk0Y658ocuXYaUU48= +go.etcd.io/etcd/client/v3 v3.5.15/go.mod h1:CLSJxrYjvLtHsrPKsy7LmZEE+DK2ktfd2bN4RhBMwlU= go.etcd.io/etcd/client/v3 v3.5.18 h1:nvvYmNHGumkDjZhTHgVU36A9pykGa2K4lAJ0yY7hcXA= go.etcd.io/etcd/client/v3 v3.5.18/go.mod h1:kmemwOsPU9broExyhYsBxX4spCTDX3yLgPMWtpBXG6E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=