- employee/settings/user_session_metrics 的 ensure_*_ready 改为按 bind 缓存 + 锁, 避免每次登录重复建表与并发场景下的竞态 - auth 登录链路先查员工再降级触发目录就绪,并吞掉查询期 SQLAlchemy 异常 - 默认管理员账号由 superadmin 迁移为 admin,兼容历史账号回填 - 补充登录降级与设置持久化相关测试
78 lines
4.5 KiB
Python
78 lines
4.5 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import Boolean, DateTime, Integer, String, func
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.base_class import Base
|
|
|
|
|
|
class SystemSetting(Base):
|
|
__tablename__ = "system_settings"
|
|
|
|
id: Mapped[str] = mapped_column(String(32), primary_key=True, default="default")
|
|
|
|
company_name: Mapped[str] = mapped_column(String(120), default="X-Financial")
|
|
display_name: Mapped[str] = mapped_column(String(120), default="X-Financial")
|
|
company_code: Mapped[str] = mapped_column(String(64), default="XF-001")
|
|
record_number: Mapped[str] = mapped_column(String(120), default="")
|
|
copyright_text: Mapped[str] = mapped_column(String(255), default="")
|
|
theme_skin: Mapped[str] = mapped_column(String(64), default="sky")
|
|
|
|
admin_account: Mapped[str] = mapped_column(String(120), default="admin")
|
|
admin_email: Mapped[str] = mapped_column(String(255), default="")
|
|
session_timeout: Mapped[int] = mapped_column(Integer, default=30)
|
|
conversation_retention_days: Mapped[int] = mapped_column(Integer, default=3)
|
|
notice_email: Mapped[str] = mapped_column(String(255), default="")
|
|
mfa_enabled: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
strong_password: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
login_alert_enabled: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
|
|
main_provider: Mapped[str] = mapped_column(String(64), default="Codex")
|
|
main_model: Mapped[str] = mapped_column(String(255), default="codex-mini-latest")
|
|
main_endpoint: Mapped[str] = mapped_column(String(512), default="https://api.openai.com/v1")
|
|
backup_provider: Mapped[str] = mapped_column(String(64), default="GLM")
|
|
backup_model: Mapped[str] = mapped_column(String(255), default="glm-5.1")
|
|
backup_endpoint: Mapped[str] = mapped_column(String(512), default="https://open.bigmodel.cn/api/paas/v4/")
|
|
vlm_provider: Mapped[str] = mapped_column(String(64), default="Gemini")
|
|
vlm_model: Mapped[str] = mapped_column(String(255), default="gemini-2.5-flash")
|
|
vlm_endpoint: Mapped[str] = mapped_column(String(512), default="https://generativelanguage.googleapis.com/v1beta/openai/")
|
|
embedding_provider: Mapped[str] = mapped_column(String(64), default="GLM")
|
|
embedding_model: Mapped[str] = mapped_column(String(255), default="Embedding-3")
|
|
embedding_endpoint: Mapped[str] = mapped_column(String(512), default="https://open.bigmodel.cn/api/paas/v4/")
|
|
reranker_provider: Mapped[str] = mapped_column(String(64), default="Ali")
|
|
reranker_model: Mapped[str] = mapped_column(String(255), default="gte-rerank-v2")
|
|
reranker_endpoint: Mapped[str] = mapped_column(
|
|
String(512), default="https://dashscope.aliyuncs.com/api/v1/services/rerank/text-rerank/text-rerank"
|
|
)
|
|
onlyoffice_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
onlyoffice_public_url: Mapped[str] = mapped_column(String(512), default="")
|
|
|
|
log_level: Mapped[str] = mapped_column(String(16), default="INFO")
|
|
retention_days: Mapped[int] = mapped_column(Integer, default=180)
|
|
archive_cycle: Mapped[str] = mapped_column(String(32), default="weekly")
|
|
log_path: Mapped[str] = mapped_column(String(255), default="server/logs/app.log")
|
|
alert_email: Mapped[str] = mapped_column(String(255), default="")
|
|
operation_audit: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
login_audit: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
mask_sensitive: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
|
|
smtp_host: Mapped[str] = mapped_column(String(255), default="smtp.exmail.qq.com")
|
|
smtp_port: Mapped[int] = mapped_column(Integer, default=465)
|
|
smtp_encryption: Mapped[str] = mapped_column(String(32), default="SSL/TLS")
|
|
sender_name: Mapped[str] = mapped_column(String(120), default="X-Financial")
|
|
sender_address: Mapped[str] = mapped_column(String(255), default="")
|
|
smtp_username: Mapped[str] = mapped_column(String(255), default="")
|
|
alert_enabled: Mapped[bool] = mapped_column(Boolean, default=True)
|
|
digest_enabled: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
digest_time: Mapped[str] = mapped_column(String(16), default="09:00")
|
|
default_receiver: Mapped[str] = mapped_column(String(255), default="")
|
|
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
onupdate=func.now(),
|
|
)
|