chore: initial baseline with P0-safety .gitignore
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# =============================================================================
|
||||
# 企微IT智能服务台 — 系统管理 API
|
||||
# =============================================================================
|
||||
# 说明:系统级配置管理接口,包括:
|
||||
# 1. GET /api/system/emergency-mode — 查询应急模式状态
|
||||
# 2. PUT /api/system/emergency-mode — 切换应急模式开关
|
||||
# =============================================================================
|
||||
|
||||
import logging
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.database import get_db
|
||||
from app.models.system_config import SystemConfig
|
||||
from app.utils.response import AppException, success_response
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# 创建路由器
|
||||
router = APIRouter()
|
||||
|
||||
# 应急模式配置键(与 main.py init_data 保持一致)
|
||||
EMERGENCY_MODE_KEY = "emergency_mode"
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# GET /api/system/emergency-mode — 查询应急模式状态
|
||||
# --------------------------------------------------------------------------
|
||||
@router.get("/system/emergency-mode")
|
||||
async def get_emergency_mode(
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""查询应急模式状态。
|
||||
|
||||
返回当前应急模式的开关状态。
|
||||
应急模式开启时,智能服务台降级,引导员工使用企微原生「员工服务」通道。
|
||||
|
||||
Returns:
|
||||
Dict: 统一响应格式
|
||||
data.emergency_mode: bool — 是否启用应急模式
|
||||
data.employee_service_guide: str — 开启时的引导文案(仅开启时返回)
|
||||
"""
|
||||
# 从数据库读取 emergency_mode 配置
|
||||
stmt = select(SystemConfig).where(
|
||||
SystemConfig.config_key == EMERGENCY_MODE_KEY
|
||||
)
|
||||
result = await db.execute(stmt)
|
||||
config = result.scalars().first()
|
||||
|
||||
# 配置不存在时默认关闭(安全默认值)
|
||||
is_enabled = False
|
||||
if config and config.config_value:
|
||||
is_enabled = config.config_value.lower() in ("true", "1", "yes")
|
||||
|
||||
response_data = {"emergency_mode": is_enabled}
|
||||
|
||||
# 应急模式开启时,附带引导文案
|
||||
if is_enabled:
|
||||
response_data["employee_service_guide"] = (
|
||||
"IT智能服务台正在进行系统维护,"
|
||||
"请通过企业微信「通讯录 → 员工服务」联系IT支持人员,"
|
||||
"我们将尽快为您处理。"
|
||||
)
|
||||
|
||||
return success_response(data=response_data)
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# PUT /api/system/emergency-mode — 切换应急模式开关
|
||||
# --------------------------------------------------------------------------
|
||||
@router.put("/system/emergency-mode")
|
||||
async def toggle_emergency_mode(
|
||||
body: dict,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""切换应急模式开关(仅限坐席/管理员操作)。
|
||||
|
||||
开启应急模式后:
|
||||
- H5 用户端页面显示引导文案,提示走企微原生「员工服务」
|
||||
- 坐席工作台顶部显示醒目的应急模式横幅
|
||||
|
||||
关闭应急模式后恢复正常服务。
|
||||
|
||||
Args:
|
||||
body: 请求体,包含 emergency_mode: bool
|
||||
|
||||
Returns:
|
||||
Dict: 统一响应格式
|
||||
data.emergency_mode: bool — 切换后的状态
|
||||
"""
|
||||
enabled = body.get("emergency_mode", None)
|
||||
if enabled is None:
|
||||
raise AppException(1001, "emergency_mode 参数不能为空")
|
||||
|
||||
enabled_bool = bool(enabled)
|
||||
|
||||
# 查找或创建 emergency_mode 配置项
|
||||
stmt = select(SystemConfig).where(
|
||||
SystemConfig.config_key == EMERGENCY_MODE_KEY
|
||||
)
|
||||
result = await db.execute(stmt)
|
||||
config = result.scalars().first()
|
||||
|
||||
new_value = "true" if enabled_bool else "false"
|
||||
|
||||
if config:
|
||||
# 更新已有配置
|
||||
config.config_value = new_value
|
||||
else:
|
||||
# 配置不存在时新建(兜底,正常情况由 init_data 创建)
|
||||
config = SystemConfig(
|
||||
config_key=EMERGENCY_MODE_KEY,
|
||||
config_value=new_value,
|
||||
description="应急模式开关(true=启用员工服务通道,智能服务台降级)",
|
||||
)
|
||||
db.add(config)
|
||||
|
||||
await db.flush()
|
||||
|
||||
status_text = "开启" if enabled_bool else "关闭"
|
||||
logger.info(f"应急模式已{status_text}")
|
||||
|
||||
return success_response(
|
||||
data={
|
||||
"emergency_mode": enabled_bool,
|
||||
"message": f"应急模式已{status_text}",
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user