claude_sms_test

This commit is contained in:
jianqi
2026-09-18 16:53:21 +08:00
commit b9311bdb1e
46 changed files with 4225 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
# api/statistics_api.py
# 统计分析模块(动态查询与综合能力锻炼):
# 聚合 / 分组 / 关联 / 动态查询条件全部沉在 dao.statistics_dao,这里只暴露接口。
from typing import Optional
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from dao import statistics_dao
from database import get_db
router = APIRouter()
@router.get("/overview", summary="系统总览统计")
def overview(db: Session = Depends(get_db)):
"""统计学生、班级、教师、顾问、已就业人数及就业率。"""
return statistics_dao.overview(db)
@router.get("/student/gender", summary="学生性别分布")
def student_gender_distribution(db: Session = Depends(get_db)):
return statistics_dao.student_gender_distribution(db)
@router.get("/student/education", summary="学生学历分布")
def student_education_distribution(db: Session = Depends(get_db)):
return statistics_dao.student_education_distribution(db)
@router.get("/student/state", summary="学生就读状态分布")
def student_state_distribution(db: Session = Depends(get_db)):
return statistics_dao.student_state_distribution(db)
@router.get("/student/hometown", summary="学生生源地分布(Top N)")
def student_hometown_distribution(
limit: int = Query(10, ge=1, le=100, description="返回前 N 个生源地"),
db: Session = Depends(get_db),
):
return statistics_dao.student_hometown_distribution(db, limit=limit)
@router.get("/score/summary", summary="成绩综合统计(平均/最高/最低/及格率)")
def score_summary(
cls_id: Optional[str] = Query(None, description="按班级过滤(不传则统计全部)"),
db: Session = Depends(get_db),
):
"""统计平均分、最高分、最低分、及格人数与及格率,可动态按班级过滤(关联 stu_info)。"""
return statistics_dao.score_summary(db, cls_id=cls_id)
@router.get("/score/distribution", summary="成绩等级分布")
def score_level_distribution(db: Session = Depends(get_db)):
return statistics_dao.score_level_distribution(db)
@router.get("/employ/summary", summary="就业综合统计(就业率/薪资)")
def employ_summary(db: Session = Depends(get_db)):
return statistics_dao.employ_summary(db)