package config import ( "sync" "git.x2erp.com/qdy/go-base/config/subconfigs" ) const ( //数据仓库-数据库名称 DorisDatabaseName = "x6_data" //客户端档案中心所在数据库yaml配置ID AgentDBArchivesId = "archives" //客户端单据中心所在数据库yaml配置ID AgentDBBillsId = "bills" //客户端库存中心所在数据库yaml配置ID AgentDBStockId = "stock" ) // IConfig 主配置接口(更新支持多数据库) type IConfig interface { // 多数据库支持 GetDatabaseConfig() *subconfigs.DatabaseConfig // 获取默认数据库(向后兼容) GetDbsConfig(name string) (*subconfigs.DatabaseConfig, bool) // 获取指定数据库连接 //服务支持 GetServiceConfig() *subconfigs.ServiceConfig //获取默认微服务配置 GetMcpServiceConfig() *subconfigs.McpServiceConfig //获取默认微服务配置 // 其他配置(保持不变) GetRedisConfig() *subconfigs.RedisConfig GetDorisConfig() *subconfigs.DorisConfig GetRabbitMQConfig() *subconfigs.RabbitMQConfig GetConsulConfig() *subconfigs.ConsulConfig GetMongoDBConfig() *subconfigs.MongoDBConfig GetHTTPConfig() *subconfigs.HTTPConfig GetMicroConfig() *subconfigs.MicroConfig GetLogConfig() *subconfigs.LogConfig // 配置检查(更新) IsDatabaseConfigured() bool IsDorisConfigured() bool IsRedisConfigured() bool SetAppName(name string) SetAppVersion(version string) SetAppEnv(name string) GetAppName() string GetAppVersion() string GetAppEnv() string GetAppAuthToken() string } // Config 主配置结构体 - 访问门面 type Config struct { loaded bool // 配置是否已加载 loadTime string // 配置加载时间(可选) configMap map[string]bool // 已加载的配置类型映射 } // GetDatabaseConfig 按名称获取数据库配置 func (c *Config) GetDatabaseConfig() *subconfigs.DatabaseConfig { if config := subconfigs.GetRegisteredConfig("database"); config != nil { return config.(*subconfigs.DatabaseConfig) } return nil } // GetDbsConfig 按名称获取数据库配置 func (c *Config) GetDbsConfig(name string) (*subconfigs.DatabaseConfig, bool) { // 获取 dbs 配置 dbsConfig := subconfigs.GetRegisteredConfig("dbs") if dbsConfig == nil { return nil, false } // 类型断言为 DbsConfig dbs, ok := dbsConfig.(*subconfigs.DbsConfig) if !ok { return nil, false } // 按名称获取 DbConfig dbConfig, exists := dbs.GetDbConfig(name) if !exists || dbConfig == nil { return nil, exists } // 将 DbConfig 转换为 DatabaseConfig return &subconfigs.DatabaseConfig{ BaseConfig: subconfigs.BaseConfig{}, DbConfig: *dbConfig, }, true } func (c *Config) GetRedisConfig() *subconfigs.RedisConfig { if config := subconfigs.GetRegisteredConfig("redis"); config != nil { return config.(*subconfigs.RedisConfig) } return nil } func (c *Config) GetConsulConfig() *subconfigs.ConsulConfig { if config := subconfigs.GetRegisteredConfig("consul"); config != nil { return config.(*subconfigs.ConsulConfig) } return nil } func (c *Config) GetMongoDBConfig() *subconfigs.MongoDBConfig { if config := subconfigs.GetRegisteredConfig("mongodb"); config != nil { return config.(*subconfigs.MongoDBConfig) } return nil } func (c *Config) GetDorisConfig() *subconfigs.DorisConfig { if config := subconfigs.GetRegisteredConfig("doris"); config != nil { return config.(*subconfigs.DorisConfig) } return nil } func (c *Config) GetRabbitMQConfig() *subconfigs.RabbitMQConfig { if config := subconfigs.GetRegisteredConfig("rabbitmq"); config != nil { return config.(*subconfigs.RabbitMQConfig) } return nil } func (c *Config) GetServiceConfig() *subconfigs.ServiceConfig { if config := subconfigs.GetRegisteredConfig("service"); config != nil { return config.(*subconfigs.ServiceConfig) } return nil } func (c *Config) GetMcpServiceConfig() *subconfigs.McpServiceConfig { if config := subconfigs.GetRegisteredConfig("mcpservice"); config != nil { return config.(*subconfigs.McpServiceConfig) } return nil } func (c *Config) GetHTTPConfig() *subconfigs.HTTPConfig { if config := subconfigs.GetRegisteredConfig("http"); config != nil { return config.(*subconfigs.HTTPConfig) } return nil } func (c *Config) GetMicroConfig() *subconfigs.MicroConfig { if config := subconfigs.GetRegisteredConfig("micro"); config != nil { return config.(*subconfigs.MicroConfig) } return nil } func (c *Config) GetLogConfig() *subconfigs.LogConfig { if config := subconfigs.GetRegisteredConfig("log"); config != nil { return config.(*subconfigs.LogConfig) } return nil } func (c *Config) IsDatabaseConfigured() bool { db := c.GetDatabaseConfig() return db != nil && db.IsConfigured() } // 实现 IConfig 接口的其他方法 func (c *Config) IsDorisConfigured() bool { doris := c.GetDorisConfig() return doris != nil && doris.IsConfigured() } func (c *Config) IsRedisConfigured() bool { redis := c.GetRedisConfig() return redis != nil && redis.IsConfigured() } // 设置方法 func (c *Config) SetAppEnv(name string) { if c.GetAppEnv() == "" { c.GetServiceConfig().AppEnv = name } } func (c *Config) SetAppName(name string) { if c.GetAppName() == "" { c.GetServiceConfig().AppName = name } } func (c *Config) SetAppVersion(name string) { if c.GetAppVersion() == "" { c.GetServiceConfig().AppVersion = name } } // GetAppVersion 获取服务版本 func (c *Config) GetAppVersion() string { return c.GetServiceConfig().AppVersion } // GetAppEnv 获取环境 func (c *Config) GetAppEnv() string { return c.GetServiceConfig().AppEnv } // GetAppName 获取当前应用名称 func (c *Config) GetAppName() string { return c.GetServiceConfig().AppName } // GetAppAuthToken 得到当前配置文件里的token func (c *Config) GetAppAuthToken() string { return c.GetServiceConfig().AppAuthToken } // GetDatabaseConfig 包级便捷函数 - 按名称获取数据库配置 func GetDatabaseConfig() *subconfigs.DatabaseConfig { if cfgInstance == nil { return nil } return cfgInstance.GetDatabaseConfig() } // GetDbsConfig 包级便捷函数 - 按名称获取数据库配置 func GetDbsConfig(name string) (*subconfigs.DatabaseConfig, bool) { if cfgInstance == nil { return nil, false } return cfgInstance.GetDbsConfig(name) } // GetRedis 包级便捷函数 - 获取Redis配置 func GetRedisConfig() *subconfigs.RedisConfig { if cfgInstance == nil { return &subconfigs.RedisConfig{} } return cfgInstance.GetRedisConfig() } // GetRedis 包级便捷函数 - 获取Redis配置 func GetConsulConfig() *subconfigs.ConsulConfig { if cfgInstance == nil { return &subconfigs.ConsulConfig{} } return cfgInstance.GetConsulConfig() } // GetHTTP 包级便捷函数 - 获取HTTP配置 func GetHTTPConfig() *subconfigs.HTTPConfig { if cfgInstance == nil { return &subconfigs.HTTPConfig{} } return cfgInstance.GetHTTPConfig() } // GetMongoDB 包级便捷函数 - 获取MongoDB配置 func GetMongoDBConfig() *subconfigs.MongoDBConfig { if cfgInstance == nil { return &subconfigs.MongoDBConfig{} } return cfgInstance.GetMongoDBConfig() } // GetLog 包级便捷函数 - 获取日志配置 func GetLogConfig() *subconfigs.LogConfig { if cfgInstance == nil { return &subconfigs.LogConfig{} } return cfgInstance.GetLogConfig() } func GetMicroConfig() *subconfigs.MicroConfig { if cfgInstance == nil { return &subconfigs.MicroConfig{} } return cfgInstance.GetMicroConfig() } func GetServiceConfig() *subconfigs.ServiceConfig { if cfgInstance == nil { return &subconfigs.ServiceConfig{} } return cfgInstance.GetServiceConfig() } func GetMcpServiceConfig() *subconfigs.McpServiceConfig { if cfgInstance == nil { return &subconfigs.McpServiceConfig{} } return cfgInstance.GetMcpServiceConfig() } var ( cfgInstance *Config once sync.Once ) // GetConfig 获取主配置(单例模式) func GetConfig() IConfig { once.Do(func() { cfgInstance = &Config{ loaded: false, configMap: make(map[string]bool), } LoadConfig() // 加载配置到注册表 cfgInstance.loaded = true // 可以在这里记录配置加载成功的日志 }) return cfgInstance } // IsConfigLoaded 检查配置是否已加载 func (c *Config) IsConfigLoaded() bool { return c.loaded } // MarkConfigLoaded 标记配置已加载 func (c *Config) MarkConfigLoaded(configType string) { if c.configMap == nil { c.configMap = make(map[string]bool) } c.configMap[configType] = true } // IsConfigTypeLoaded 检查特定类型的配置是否已加载 func (c *Config) IsConfigTypeLoaded(configType string) bool { if c.configMap == nil { return false } return c.configMap[configType] }