第四版_完整

This commit is contained in:
jianqi
2026-09-14 15:23:26 +08:00
parent 06c329fdd1
commit c2909191d2
14 changed files with 84 additions and 64 deletions
+9 -3
View File
@@ -2,6 +2,8 @@
# 本文件封装对 所有相关表的 所有数据库操作(统计查询)
from collections import defaultdict
from fastapi.openapi.utils import status_code_ranges
from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session, joinedload
from sqlalchemy import func, case, and_, join, asc, desc
@@ -9,7 +11,7 @@ from model import StudentEmployManage
from model.stu_model import StuInfo
from model.stu_score_model import StuScore
from typing import Optional, List, Dict
from scheme.statistics_scheme import StatsResponse, ExamScoreItem, StuInfoAllExamAboveScore, FailingStudentItem, \
from scheme.statistics_scheme import ClassGenderDistributionItem, ExamScoreItem, StuInfoAllExamAboveScore, FailingStudentItem, \
ClassExamAvgScoreItem, TopSalaryStudentItem, StudentEmpDurationItem, ClassAvgEmpDurationItem, StudentAgeDetailItem
@@ -17,7 +19,7 @@ class StatisticsDao:
"""用户数据访问对象,所有方法均为静态方法,方便调用"""
@staticmethod
def get_cls_stats(db: Session) -> List[StatsResponse]:
def get_class_gender_distribution(db: Session) -> List[ClassGenderDistributionItem]:
all_cls_gender_stats = (
db.query(
@@ -31,7 +33,7 @@ class StatisticsDao:
)
return [
StatsResponse(
ClassGenderDistributionItem(
cls_id=i.cls_id,
total_cnt=i.total_cnt,
man_cnt=i.man_cnt,
@@ -96,6 +98,10 @@ class StatisticsDao:
@staticmethod
def find_students_fail_count(db: Session, fail_cnt: int) -> List[FailingStudentItem]:
test_max_cnt = len(db.query(StuScore.exam_attempt).group_by(StuScore.exam_attempt).all())
if fail_cnt > test_max_cnt:
raise HTTPException(status_code = 400, detail = f'最大次数为{test_max_cnt}')
stu_fail_dict = StatisticsDao.get_stu_dict_who_fail(db)
ans = []