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", ""),
|
|||
|
|
)
|