refactor: 员工同步数据库配置改为环境变量
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
- 前端隐藏数据库连接配置输入 - 只保留"启用开关"和"表名"配置 - 数据库连接从 EMPLOYEE_SYNC_DB_URL 环境变量读取 - 显示数据源配置状态 - 保留默认值用于向后兼容
This commit is contained in:
@@ -23,8 +23,7 @@ logger = get_logger(__name__)
|
||||
class EmployeeSyncService:
|
||||
"""员工同步服务"""
|
||||
|
||||
# 默认外部数据库连接配置(向后兼容)
|
||||
DEFAULT_DB_URL = "mysql+aiomysql://neuron_new:NWxGM6CQoMLKyEszXhfuLBIIo1QbeK@120.77.144.233:29613/neuron_new?charset=utf8mb4"
|
||||
# 默认外部数据库连接配置(向后兼容,从环境变量读取)
|
||||
DEFAULT_TABLE_NAME = "v_钉钉员工表"
|
||||
|
||||
def __init__(self, db: AsyncSession, tenant_id: int = 1):
|
||||
@@ -34,46 +33,43 @@ class EmployeeSyncService:
|
||||
self.table_name = self.DEFAULT_TABLE_NAME
|
||||
self._db_url = None
|
||||
|
||||
async def _get_config_from_db(self) -> tuple:
|
||||
"""从数据库获取员工同步配置"""
|
||||
result = await self.db.execute(
|
||||
text("""
|
||||
SELECT config_key, config_value
|
||||
FROM tenant_configs
|
||||
WHERE tenant_id = :tenant_id AND config_group = 'employee_sync'
|
||||
"""),
|
||||
{"tenant_id": self.tenant_id}
|
||||
)
|
||||
rows = result.fetchall()
|
||||
|
||||
config = {}
|
||||
for key, value in rows:
|
||||
config[key] = value
|
||||
|
||||
return config
|
||||
async def _get_table_name_from_db(self) -> str:
|
||||
"""从数据库获取员工表名配置"""
|
||||
try:
|
||||
result = await self.db.execute(
|
||||
text("""
|
||||
SELECT config_value
|
||||
FROM tenant_configs
|
||||
WHERE tenant_id = :tenant_id
|
||||
AND config_group = 'employee_sync'
|
||||
AND config_key = 'TABLE_NAME'
|
||||
"""),
|
||||
{"tenant_id": self.tenant_id}
|
||||
)
|
||||
row = result.fetchone()
|
||||
return row[0] if row else self.DEFAULT_TABLE_NAME
|
||||
except Exception:
|
||||
return self.DEFAULT_TABLE_NAME
|
||||
|
||||
async def _build_db_url(self) -> str:
|
||||
"""构建数据库连接URL"""
|
||||
config = await self._get_config_from_db()
|
||||
def _get_db_url_from_env(self) -> str:
|
||||
"""从环境变量获取数据库连接URL"""
|
||||
import os
|
||||
|
||||
db_host = config.get('DB_HOST')
|
||||
db_port = config.get('DB_PORT')
|
||||
db_name = config.get('DB_NAME')
|
||||
db_user = config.get('DB_USER')
|
||||
db_password = config.get('DB_PASSWORD')
|
||||
self.table_name = config.get('TABLE_NAME') or self.DEFAULT_TABLE_NAME
|
||||
# 优先使用环境变量中的完整URL
|
||||
db_url = os.environ.get('EMPLOYEE_SYNC_DB_URL', '')
|
||||
|
||||
# 如果配置完整,使用配置的URL
|
||||
if all([db_host, db_port, db_name, db_user, db_password]):
|
||||
return f"mysql+aiomysql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}?charset=utf8mb4"
|
||||
if db_url:
|
||||
return db_url
|
||||
|
||||
# 否则使用默认配置
|
||||
logger.warning(f"租户 {self.tenant_id} 未配置员工同步数据库,使用默认配置")
|
||||
return self.DEFAULT_DB_URL
|
||||
# 向后兼容:如果没有配置环境变量,使用默认值
|
||||
logger.warning("EMPLOYEE_SYNC_DB_URL 环境变量未配置,使用默认数据源")
|
||||
return "mysql+aiomysql://neuron_new:NWxGM6CQoMLKyEszXhfuLBIIo1QbeK@120.77.144.233:29613/neuron_new?charset=utf8mb4"
|
||||
|
||||
async def __aenter__(self):
|
||||
"""异步上下文管理器入口"""
|
||||
self._db_url = await self._build_db_url()
|
||||
self._db_url = self._get_db_url_from_env()
|
||||
self.table_name = await self._get_table_name_from_db()
|
||||
|
||||
self.external_engine = create_async_engine(
|
||||
self._db_url,
|
||||
echo=False,
|
||||
|
||||
Reference in New Issue
Block a user