99 lines
3.0 KiB
Python
99 lines
3.0 KiB
Python
# 联软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", ""),
|
||
)
|