| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- package config
-
- import (
- "sync"
-
- "git.x2erp.com/qdy/go-base/config/core"
- "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) // 获取指定数据库连接
- GetDbsConfigs() *subconfigs.DbsConfig //获取所有配置
-
- //服务支持
- GetServiceConfig() *subconfigs.ServiceConfig //获取默认微服务配置
- GetMcpServiceConfig() *subconfigs.McpServiceConfig //获取默认微服务配置
- GetConfigureConfig() *subconfigs.ConfigureConfig
-
- // 其他配置(保持不变)
- 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
- }
-
- // Config 主配置结构体 - 访问门面
- type Config struct {
- loaded bool // 配置是否已加载
- loadTime string // 配置加载时间(可选)
- configMap map[string]bool // 已加载的配置类型映射
- }
-
- // GetDatabaseConfig 按名称获取数据库配置
- func (c *Config) GetDatabaseConfig() *subconfigs.DatabaseConfig {
- if config := core.GetRegisteredConfig("database"); config != nil {
- return config.(*subconfigs.DatabaseConfig)
- }
- return nil
- }
-
- func (c *Config) GetDbsConfigs() *subconfigs.DbsConfig {
- if config := core.GetRegisteredConfig("dbs"); config != nil {
- return config.(*subconfigs.DbsConfig)
- }
- return nil
- }
-
- // GetDbsConfig 按名称获取数据库配置
- func (c *Config) GetDbsConfig(name string) (*subconfigs.DatabaseConfig, bool) {
- // 获取 dbs 配置
- dbsConfig := core.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: core.BaseConfig{},
- DbConfig: *dbConfig,
- }, true
- }
-
- func (c *Config) GetRedisConfig() *subconfigs.RedisConfig {
- if config := core.GetRegisteredConfig("redis"); config != nil {
- return config.(*subconfigs.RedisConfig)
- }
- return nil
- }
-
- func (c *Config) GetConsulConfig() *subconfigs.ConsulConfig {
- if config := core.GetRegisteredConfig("consul"); config != nil {
- return config.(*subconfigs.ConsulConfig)
- }
- return nil
- }
-
- func (c *Config) GetConfigureConfig() *subconfigs.ConfigureConfig {
- if config := core.GetRegisteredConfig("configure"); config != nil {
- return config.(*subconfigs.ConfigureConfig)
- }
- return nil
- }
-
- func (c *Config) GetMongoDBConfig() *subconfigs.MongoDBConfig {
- if config := core.GetRegisteredConfig("mongodb"); config != nil {
- return config.(*subconfigs.MongoDBConfig)
- }
- return nil
- }
-
- func (c *Config) GetDorisConfig() *subconfigs.DorisConfig {
- if config := core.GetRegisteredConfig("doris"); config != nil {
- return config.(*subconfigs.DorisConfig)
- }
- return nil
- }
-
- func (c *Config) GetRabbitMQConfig() *subconfigs.RabbitMQConfig {
- if config := core.GetRegisteredConfig("rabbitmq"); config != nil {
- return config.(*subconfigs.RabbitMQConfig)
- }
- return nil
- }
-
- func (c *Config) GetServiceConfig() *subconfigs.ServiceConfig {
- if config := core.GetRegisteredConfig("service"); config != nil {
- return config.(*subconfigs.ServiceConfig)
- }
- return nil
- }
-
- func (c *Config) GetMcpServiceConfig() *subconfigs.McpServiceConfig {
- if config := core.GetRegisteredConfig("mcpservice"); config != nil {
- return config.(*subconfigs.McpServiceConfig)
- }
- return nil
- }
-
- func (c *Config) GetHTTPConfig() *subconfigs.HTTPConfig {
- if config := core.GetRegisteredConfig("http"); config != nil {
- return config.(*subconfigs.HTTPConfig)
- }
- return nil
- }
-
- func (c *Config) GetMicroConfig() *subconfigs.MicroConfig {
- if config := core.GetRegisteredConfig("micro"); config != nil {
- return config.(*subconfigs.MicroConfig)
- }
- return nil
- }
-
- func (c *Config) GetLogConfig() *subconfigs.LogConfig {
- if config := core.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
- }
-
- // 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)
- }
-
- // GetDbsConfigs 包级便捷函数 - 按名称获取数据库配置
- func GetDbsConfigs() *subconfigs.DbsConfig {
- if cfgInstance == nil {
- return nil
- }
- return cfgInstance.GetDbsConfigs()
- }
-
- // GetRedis 包级便捷函数 - 获取Redis配置
- func GetRedisConfig() *subconfigs.RedisConfig {
- if cfgInstance == nil {
- return &subconfigs.RedisConfig{}
- }
- return cfgInstance.GetRedisConfig()
- }
-
- // GetConsulConfig 包级便捷函数 - 获取ConsulConfig配置
- func GetConsulConfig() *subconfigs.ConsulConfig {
- if cfgInstance == nil {
- return &subconfigs.ConsulConfig{}
- }
- return cfgInstance.GetConsulConfig()
- }
-
- // GetConfigureConfig 包级便捷函数 - 获取GetConfigureConfig配置
- func GetConfigureConfig() *subconfigs.ConfigureConfig {
- if cfgInstance == nil {
- return &subconfigs.ConfigureConfig{}
- }
- return cfgInstance.GetConfigureConfig()
- }
-
- // 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]
- }
|