File size: 1,825 Bytes
b4f2238 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | from __future__ import annotations
import logging
from typing import Any
from django.http import HttpRequest
from ninja import Router
from apps.oa_filing.schemas.filing_schemas import ExecuteFilingIn, OAConfigOut, SessionOut
from apps.oa_filing.services.script_executor_service import SUPPORTED_SITES
logger = logging.getLogger("apps.oa_filing.api")
router = Router()
def _get_executor_service() -> Any:
from apps.oa_filing.services.script_executor_service import ScriptExecutorService
return ScriptExecutorService()
def _get_organization_service() -> Any:
from apps.core.dependencies import build_organization_service
return build_organization_service()
@router.get("/configs", response=list[OAConfigOut])
def list_configs(request: HttpRequest) -> Any:
"""返回当前用户有凭证且系统支持的 OA 站点列表。"""
if not request.user.is_authenticated:
return []
lawyer_id = getattr(request.user, "id", None)
user_sites: set[str] = (
set(_get_organization_service().list_sites_for_lawyer(int(lawyer_id))) if lawyer_id is not None else set()
)
return [{"id": name, "oa_system_name": name, "has_credential": name in user_sites} for name in SUPPORTED_SITES]
@router.post("/execute", response=SessionOut)
def execute_filing(request: HttpRequest, payload: ExecuteFilingIn) -> Any:
"""执行OA立案。"""
service = _get_executor_service()
return service.execute(
payload.site_name,
payload.contract_id,
payload.case_id,
request.user,
)
@router.get("/session/{session_id}", response=SessionOut)
def get_session(request: HttpRequest, session_id: int) -> Any:
"""查询立案会话状态。"""
from apps.oa_filing.models import FilingSession
return FilingSession.objects.get(pk=session_id)
|