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)