新增PDF生成并发设置

This commit is contained in:
2026-06-23 12:54:14 +08:00
parent 529e175d2c
commit 1e9404cc7d
27 changed files with 541 additions and 24 deletions

View File

@@ -0,0 +1,64 @@
from datetime import datetime
from sqlalchemy.orm import Session
from app.models import SystemSetting
PDF_GENERATION_CONCURRENCY_KEY = "pdf_generation_concurrency_limit"
DEFAULT_PDF_GENERATION_CONCURRENCY = 2
MIN_PDF_GENERATION_CONCURRENCY = 1
MAX_PDF_GENERATION_CONCURRENCY = 10
def ensure_default_settings(db: Session) -> None:
if not db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY):
db.add(
SystemSetting(
key=PDF_GENERATION_CONCURRENCY_KEY,
value=str(DEFAULT_PDF_GENERATION_CONCURRENCY),
description="PDF证书同时生成数量限制",
)
)
def get_pdf_generation_concurrency_limit(db: Session) -> int:
setting = db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY)
return _coerce_limit(setting.value if setting else None)
def get_pdf_settings(db: Session) -> dict[str, object]:
ensure_default_settings(db)
setting = db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY)
return {
"pdf_generation_concurrency_limit": get_pdf_generation_concurrency_limit(db),
"updated_at": setting.updated_at if setting else None,
}
def update_pdf_generation_concurrency_limit(db: Session, value: int) -> dict[str, object]:
limit = _coerce_limit(value)
ensure_default_settings(db)
setting = db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY)
if setting is None:
setting = SystemSetting(
key=PDF_GENERATION_CONCURRENCY_KEY,
value=str(limit),
description="PDF证书同时生成数量限制",
)
db.add(setting)
else:
setting.value = str(limit)
setting.updated_at = datetime.utcnow()
db.flush()
return {
"pdf_generation_concurrency_limit": limit,
"updated_at": setting.updated_at,
}
def _coerce_limit(value: object) -> int:
try:
limit = int(value)
except (TypeError, ValueError):
limit = DEFAULT_PDF_GENERATION_CONCURRENCY
return max(MIN_PDF_GENERATION_CONCURRENCY, min(MAX_PDF_GENERATION_CONCURRENCY, limit))