全部更新确认,无基础错误,各自测试各自端口bug,暂时没有自动导入数据。

This commit is contained in:
Orangeeee
2026-09-22 23:01:59 +08:00
committed by geyuan
parent 7d5f352c69
commit a1d7adba94
9 changed files with 47 additions and 44 deletions
+15 -22
View File
@@ -2,13 +2,12 @@
from fastapi import APIRouter , Depends , HTTPException
from StatCalc.dao.statcalc_dao import *
from StatCalc.model.statcalc_model import *
from StatCalc.schema.statcalc_request import *
from databases import *
statcalc_api = APIRouter()
@statcalc_api.get("/statcalc"
@statcalc_api.get("/statcalc/age"
,summary='人员信息查询'
,description=f'查询所有超过30岁的学员的信息。'
)
@@ -18,19 +17,19 @@ def get_students(db=Depends(get_db)):
return result
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
@statcalc_api.get("/statcalc"
@statcalc_api.get("/statcalc/students"
,summary='人数统计'
,description=f'统计每个班级的人数以及男生女生的人数。'
)
def get_students(g:get_student_dao = Depends()
def get_students(headcount:get_student_dao
,db=Depends(get_db)
):
result = get_class_count( g=g , db=db )
result = get_class_count( g=headcount , db=db )
if result:
return result
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
@statcalc_api.get("/statcalc"
@statcalc_api.get("/statcalc/scores"
,summary='80分以上成绩学生信息查询'
,description=f'查询每次考试成绩都在80分以上的学生的编号,姓名和成绩。'
)
@@ -40,7 +39,7 @@ def get_students(db=Depends(get_db)):
return result
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
@statcalc_api.get("/statcalc"
@statcalc_api.get("/statcalc/fail"
,summary='不及格成绩查询'
,description=f'查询有两次以上不及格的学生的姓名,班级和不及格成绩。'
)
@@ -50,23 +49,17 @@ def get_students( db=Depends(get_db) ):
return result
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
@statcalc_api.get("/statcalc"
,summary='班级平均分查询'
,description=f'统计每次考试每个班级的平均分,按照从高到低排序。'
)
def get_students( stu:StudentsQuery = Depends()
, db=Depends(get_db)
):
s_dict = stu.model_dump(exclude_unset=True) # 没值的不要
result = get_student_dao( s=s_dict , db=db )
if result:
return result
raise HTTPException(status_code=404, detail="没有找到符合条件的学生")
@statcalc_api.get('/statcalc/average', summary='统计每次考试每个班级的平均分')
def get_class_avg(db=Depends(get_db)):
result = get_class_avg_dao(db)
if not result:
return []
return result
from stu_jiuye.model import *
@statcalc_api.get('/Top5',summary='就业薪资Top5')
@statcalc_api.get('/statcalc/top',summary='就业薪资Top5')
def salarytop5(db=Depends(get_db)):
q = db.query(Employments,Company.employment_company) \
.join(Company, Employments.company_id == Company.id) \
@@ -75,7 +68,7 @@ def salarytop5(db=Depends(get_db)):
.limit(5) .all()
return [{'学生姓名':i.sname,'学生班级编号':i.class_num,'就业时间':i.offer_recived_time,'公司':employment_company} for i,employment_company in q]
@statcalc_api.get('/worktime',summary='学生就业时长')
@statcalc_api.get('/statcalc/job',summary='学生就业时长')
def worktime(db=Depends(get_db)):
q = db.query(Employments)\
.filter(Employments.is_deleted==0)\
@@ -87,7 +80,7 @@ def worktime(db=Depends(get_db)):
if i.offer_recived_time and i.employment_open_time else '暂无数据'} for i in q
]
@statcalc_api.get('/avgworktime',summary='学生平均就业时长')
@statcalc_api.get('/statcalc/avgjob',summary='学生平均就业时长')
def avgworktime(db=Depends(get_db)):
q = db.query(Employments)\
.filter(Employments.employment_open_time.isnot(None)
+15
View File
@@ -55,7 +55,22 @@ def get_score_80(db):
)
return q
def get_class_avg_dao(db):
results = (db.query(Score.num,
Score.cid,
ClassInfo.name.label("class_name"),
func.avg(Score.score).label("avg_score"))
.join(ClassInfo, Score.cid == ClassInfo.id)
.filter(Score.is_deleted == 0)
.group_by(Score.num, Score.cid, ClassInfo.name)
.order_by(func.avg(Score.score).desc())
.all())
return [ {"num": r.num,
"cid": r.cid,
"class_name": r.class_name,
"avg_score": round(float(r.avg_score), 2),}
for r in results]
+1 -1
View File
@@ -4,7 +4,7 @@ from pydantic import BaseModel , Field , field_validator
from datetime import datetime
import enum
class get_student_dao(enum.Enum):
class get_student_dao(str , enum.Enum):
get_class = "班级人数"
get_sex = "男女人数"
get_class_sex = "班级中男女人数"