File size: 1,201 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
"""Business logic services."""

from __future__ import annotations

from apps.contracts.models import Contract, ContractAssignment


class ContractAssignmentQueryService:
    def list_lawyer_ids_by_contract_internal(self, contract_id: int) -> list[int]:
        if not Contract.objects.filter(id=contract_id).exists():
            return []

        return list(
            ContractAssignment.objects.filter(contract_id=contract_id)
            .order_by("-is_primary", "order", "id")
            .values_list("lawyer_id", flat=True)
        )

    def get_primary_lawyer(self, contract_id: int) -> ContractAssignment | None:
        """获取合同的主办律师指派记录。"""
        return (
            ContractAssignment.objects.filter(contract_id=contract_id, is_primary=True).select_related("lawyer").first()
        )

    def get_all_lawyers(self, contract_id: int) -> list[ContractAssignment]:
        """获取合同的所有律师指派记录(按 is_primary 降序、order 升序)。"""
        return list(
            ContractAssignment.objects.filter(contract_id=contract_id)
            .select_related("lawyer")
            .order_by("-is_primary", "order", "id")
        )