# 联软LV7000配置管理 """ 从system_configs表读取联软API配置,构建LianruanClient实例。 联软配置键(前缀 integration_lianruan_): - integration_lianruan_base_url: 联软API地址(如 http://192.168.x.x:30098) - integration_lianruan_api_account: API账号 - integration_lianruan_api_password: API密码 - integration_lianruan_validate_key: 验证密钥(可选) 配置方式:管理后台 → 系统集成 → 联软LV7000 → 填入账号密码 """ import logging from sqlalchemy.ext.asyncio import AsyncSession from app.integrations.lianruan.client import LianruanClient from app.integrations.lianruan.exceptions import LianruanConfigError from app.models.system_config import SystemConfig logger = logging.getLogger(__name__) # 联软配置键前缀(与 admin_service INTEGRATION_DEFINITIONS 中的 key_prefix 一致) _PREFIX = "integration_lianruan_" async def _get_lianruan_config_value(db: AsyncSession, key_suffix: str) -> str: """读取单个联软配置值。 Args: db: 数据库会话 key_suffix: 配置键后缀(如 base_url / api_account) Returns: str: 配置值,不存在返回空字符串 """ full_key = f"{_PREFIX}{key_suffix}" from sqlalchemy import select result = await db.execute(select(SystemConfig).where(SystemConfig.key == full_key)) config_row = result.scalar_one_or_none() return config_row.value if config_row else "" async def get_lianruan_config(db: AsyncSession) -> dict: """从system_configs表读取联软配置。 Args: db: 数据库会话 Returns: dict: 包含 base_url / api_account / api_password / validate_key Raises: LianruanConfigError: 配置缺失 """ base_url = await _get_lianruan_config_value(db, "base_url") api_account = await _get_lianruan_config_value(db, "api_account") api_password = await _get_lianruan_config_value(db, "api_password") validate_key = await _get_lianruan_config_value(db, "validate_key") if not base_url: raise LianruanConfigError("联软API未配置:缺少Base URL") if not api_account: raise LianruanConfigError("联软API未配置:缺少API账号") if not api_password: raise LianruanConfigError("联软API未配置:缺少API密码") return { "base_url": base_url, "api_account": api_account, "api_password": api_password, "validate_key": validate_key, } async def get_lianruan_client(db: AsyncSession) -> LianruanClient: """构建联软API客户端实例。 从system_configs表读取配置,创建LianruanClient。 Args: db: 数据库会话 Returns: LianruanClient: 已配置的联软客户端 Raises: LianruanConfigError: 配置缺失 """ cfg = await get_lianruan_config(db) return LianruanClient( base_url=cfg["base_url"], api_account=cfg["api_account"], api_password=cfg["api_password"], validate_key=cfg.get("validate_key", ""), )