feat: cms overview and mobile case query

This commit is contained in:
2026-06-13 01:44:31 +08:00
parent 8fecaeeb54
commit 05ce7e987e
12 changed files with 1787 additions and 1 deletions
+28
View File
@@ -324,6 +324,11 @@ class CmsStudentViewSet(viewsets.ReadOnlyModelViewSet):
数据范围 = `teacher_student_relation` 中 `teacher=当前医生 且 status=1` 的学生。
非名下学生访问详情时不在 queryset 内 → 404。
附带教能力相关接口(均自动收口名下学生):
- CMS-TEA-3 教学工具-训练记录:`GET students/training-records/`
- CMS-TEA-4 能力画像:`GET students/{id}/competency/`
- CMS-TEA-5 排行榜:`GET students/ranking/`
"""
permission_classes = [IsAuthenticated, IsTeacher]
serializer_class = CmsStudentSerializer
@@ -340,3 +345,26 @@ class CmsStudentViewSet(viewsets.ReadOnlyModelViewSet):
.select_related('institution', 'department')
.order_by('-created_at')
)
@extend_schema(summary='CMS-TEA-3 教学工具-训练记录(名下学生)', tags=['CMS-我的学生'])
@action(detail=False, methods=['get'], url_path='training-records')
def training_records(self, request):
"""名下学生训练记录列表(与超管 CMS-TRN-1 共用构建逻辑,范围限名下学生)。"""
from apps.cms.training import build_training_records
from apps.training.models import TrainingRecord
student_ids = list(self.get_queryset().values_list('id', flat=True))
base = TrainingRecord.objects.filter(user_id__in=student_ids)
return build_training_records(base, request)
@extend_schema(summary='CMS-TEA-5 学生排行榜(名下学生多维度排名)', tags=['CMS-我的学生'])
@action(detail=False, methods=['get'], url_path='ranking')
def ranking(self, request):
from apps.cms.training import build_ranking
return Response(build_ranking(self.get_queryset(), request.query_params.get('dimension')))
@extend_schema(summary='CMS-TEA-4 学生能力画像(雷达 + 概览)', tags=['CMS-我的学生'])
@action(detail=True, methods=['get'], url_path='competency')
def competency(self, request, pk=None):
"""单个名下学生的能力画像(越权对象不在 queryset → 404)。"""
from apps.cms.training import student_competency
return Response(student_competency(self.get_object()))