From ed0d685ab587afe5b0e790744f24d2048d3e523a Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 15:38:21 +0800 Subject: [PATCH 01/25] mrz --- PythonProject/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PythonProject/main.py b/PythonProject/main.py index 7d661dd..af9dc5c 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,5 +1,7 @@ from fastapi import FastAPI from api.student_api import StudentAPI +from api.statistics_api import StatisticsAPI app = FastAPI() app.include_router(StudentAPI) +app.include_router(StatisticsAPI) From 08142f9619c5a9eb6771cc5c15d889d6e74e1409 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 16:12:50 +0800 Subject: [PATCH 02/25] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/teacher_api.py | 13 ++++++------- PythonProject/dao/teacher_dao.py | 8 ++++---- PythonProject/schema/teacher_schema.py | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 44f23a5..9cc1c56 100644 --- a/PythonProject/api/teacher_api.py +++ b/PythonProject/api/teacher_api.py @@ -9,7 +9,7 @@ from dao.teacher_dao import * teacher_api=APIRouter() @teacher_api.post("",response_model=Teacher_ResponseModel) -def add_teacher1(teacher:Teacher_RequestModel,session=Depends(get_db())): +def add_teacher1(teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=add_teacher(req=d,session=session) if not r: @@ -18,16 +18,15 @@ def add_teacher1(teacher:Teacher_RequestModel,session=Depends(get_db())): @teacher_api.get("",response_model=Teacher_ResponseModel) -def get_teacher(id:int,session=Depends(get_db)): - r = session.query(Teacher_Model).filter( Teacher_Model.teac_id == id ).all() - if r: - return [{'teac_name':i.teac_name,'teac_gender':i.teac_gender,'teac_age':i.teac_age,'teac_position':i.teac_position} for i in r] - raise HTTPException(status_code=404,detail='老师不存在!') +def get_teacher(id: int, session=Depends(get_db)): + r = get_teacher(id=id, session=session) + if not r: + raise HTTPException(status_code=500, detail='查询异常!') @teacher_api.put("",response_model=Teacher_ResponseModel) def update_teacher1(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): - d=teacher.model_dump + d=teacher.model_dump() r=update_teacher(id=id,req=d,session=session) if not r: raise HTTPException(status_code=500, detail='更新异常!') diff --git a/PythonProject/dao/teacher_dao.py b/PythonProject/dao/teacher_dao.py index 01d51ac..192d992 100644 --- a/PythonProject/dao/teacher_dao.py +++ b/PythonProject/dao/teacher_dao.py @@ -3,7 +3,7 @@ from model.all_model import Teacher_Model from util.database import * from schema.teacher_schema import Teacher_RequestModel -def add_teacher(req:Teacher_RequestModel,session=Depends(get_db)): +def add_teacher(req:Teacher_RequestModel,session): try: data=req.model_dump() session.add(Teacher_Model(**data)) @@ -12,14 +12,14 @@ def add_teacher(req:Teacher_RequestModel,session=Depends(get_db)): raise HTTPException(status_code=500,detail="添加异常!") return req.model_dump() -def select_teacher(session=Depends(get_db)): +def select_teacher(session): try: teacher_list=session.query(Teacher_Model).filter(Teacher_Model.delete_status==0).all() return teacher_list except: raise HTTPException(status_code=500,detail="查询异常!") -def update_teacher(id:int,req:Teacher_RequestModel,session=Depends(get_db)): +def update_teacher(id:int,req:Teacher_RequestModel,session): try: session.query(Teacher_Model).filter(Teacher_Model.teac_id==id)\ .filter(Teacher_Model.delete_status==0).update(req.model_dump(exclude_unset=True)) @@ -27,7 +27,7 @@ def update_teacher(id:int,req:Teacher_RequestModel,session=Depends(get_db)): except: raise HTTPException(status_code=500,detail="更新异常!") -def delete_teacher(id:int,session=Depends(get_db)): +def delete_teacher(id:int,session): try: session.query(Teacher_Model).filter(Teacher_Model.teac_id==id,Teacher_Model.delete_status==0)\ .update({'delete_status':1}) diff --git a/PythonProject/schema/teacher_schema.py b/PythonProject/schema/teacher_schema.py index 0344fec..8f60539 100644 --- a/PythonProject/schema/teacher_schema.py +++ b/PythonProject/schema/teacher_schema.py @@ -1,6 +1,6 @@ from datetime import date - -from pydantic.v1 import BaseModel +from pydantic import BaseModel +# from pydantic.v1 import BaseModel from datetime import datetime class Teacher_RequestModel(BaseModel): From 4dbef61c5631255593ce43f1fa3154207a2d6118 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 16:16:48 +0800 Subject: [PATCH 03/25] mrz --- PythonProject/api/statistics_api.py | 28 +++++++++++++++------------- PythonProject/dao/statistics_dao.py | 26 +++++++++++++------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/PythonProject/api/statistics_api.py b/PythonProject/api/statistics_api.py index 0135d31..82f81b7 100644 --- a/PythonProject/api/statistics_api.py +++ b/PythonProject/api/statistics_api.py @@ -1,20 +1,22 @@ -from fastapi import APIRouter +from fastapi import APIRouter,Depends from dao.statistics_dao import select_all,select_age,select_score from schema.student_schema import StudentResponse +from util.database import get_db -StudentAPI = APIRouter() +StatisticsAPI = APIRouter() -@StudentAPI.get("/age",response_model=StudentResponse,tags=['统计分析模块'],description='根据年龄查询学生信息') -def get_students(min_age:int|None=None,max_age:int|None=None): - l = select_age(min_age,max_age) +@StatisticsAPI.get("/age",response_model=list[StudentResponse],tags=['统计分析模块'],description='根据年龄查询学生信息') +def get_students(min_age:int|None=None,max_age:int|None=None,db=Depends(get_db)): + l = select_age(min_age,max_age,db) + print(l) + return l + +@StatisticsAPI.get("/all",response_model=StudentResponse,tags=['统计分析模块'],description='统计每个班级的学员总数和男女生总数') +def get_students(db=Depends(get_db)): + l = select_all(db) return [i for i in l] -@StudentAPI.get("/all",response_model=StudentResponse,tags=['统计分析模块'],description='统计每个班级的学员总数和男女生总数') -def get_students(): - l = select_all() +@StatisticsAPI.get("/score",response_model=StudentResponse,tags=['统计分析模块'],description='根据成绩查询学生信息') +def get_students(min_score:int|None=None,max_score:int|None=None,db=Depends(get_db)): + l = select_score(min_score,max_score,db) return [i for i in l] - -@StudentAPI.get("/score",response_model=StudentResponse,tags=['统计分析模块'],description='根据成绩查询学生信息') -def get_students(min_score:int|None=None,max_score:int|None=None): - l = select_score(min_score,max_score) - return [i for i in l] \ No newline at end of file diff --git a/PythonProject/dao/statistics_dao.py b/PythonProject/dao/statistics_dao.py index bb9c068..f0c3879 100644 --- a/PythonProject/dao/statistics_dao.py +++ b/PythonProject/dao/statistics_dao.py @@ -4,42 +4,42 @@ from model.all_model import Student_Model,WlScore from util.database import get_db # 实现根据年龄查询学生信息的功能 -def select_age(min_age,max_age,session=Depends(get_db)): +def select_age(min_age,max_age,db): try: if min_age is None and max_age is None: raise HTTPException(status_code=400, detail="请至少传入一个参数") - session = session.query(Student_Model) + db = db.query(Student_Model) if min_age is not None: - session = session.filter(Student_Model.age >= min_age,Student_Model.delete_status == 0) + db = db.filter(Student_Model.age >= min_age,Student_Model.delete_status == 0) if max_age is not None: - session = session.filter(Student_Model.age <= max_age,Student_Model.delete_status == 0) - return session.all() + db = db.filter(Student_Model.age <= max_age,Student_Model.delete_status == 0) + print(db.all()) + return db.all() except HTTPException: raise except Exception: raise HTTPException(status_code=500,detail="查询异常") # 实现统计每个班级的学员总数以及男女生的总数的功能 -def select_all(session=Depends(get_db)): - print('1234') +def select_all(db): try: - l1 = session.query(Student_Model.class_id,func.count(1)).group_by(Student_Model.class_id,Student_Model.gender).all() + l1 = db.query(Student_Model.class_id,func.count(1)).group_by(Student_Model.class_id,Student_Model.gender).all() return l1 except Exception: raise HTTPException(status_code=500,detail="查询异常") # 实现根据成绩查询学员信息的功能 -def select_score(min_score,max_score,session=Depends(get_db)): +def select_score(min_score,max_score,db): try: if min_score is None and max_score is None: raise HTTPException(status_code=400, detail="请至少传入一个参数") - session = session.query(Student_Model,WlScore.score,WlScore.score)\ + db = db.query(Student_Model,WlScore.score,WlScore.score)\ .join(WlScore,WlScore.stu_id == Student_Model.stu_id,WlScore.delete_status==0,WlScore.delete_status == 0) if min_score is not None: - session = session.filter(WlScore.score >= min_score) + db = db.filter(WlScore.score >= min_score) if min_score is not None: - session = session.filter(WlScore.score <= max_score) - return session.all() + db = db.filter(WlScore.score <= max_score) + return db.all() except HTTPException: raise except Exception: From 9ccf526ba5663ab921cc653bfc104dec609dccf0 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 16:24:19 +0800 Subject: [PATCH 04/25] mrz --- PythonProject/api/statistics_api.py | 1 - PythonProject/dao/statistics_dao.py | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PythonProject/api/statistics_api.py b/PythonProject/api/statistics_api.py index 82f81b7..aff954a 100644 --- a/PythonProject/api/statistics_api.py +++ b/PythonProject/api/statistics_api.py @@ -8,7 +8,6 @@ StatisticsAPI = APIRouter() @StatisticsAPI.get("/age",response_model=list[StudentResponse],tags=['统计分析模块'],description='根据年龄查询学生信息') def get_students(min_age:int|None=None,max_age:int|None=None,db=Depends(get_db)): l = select_age(min_age,max_age,db) - print(l) return l @StatisticsAPI.get("/all",response_model=StudentResponse,tags=['统计分析模块'],description='统计每个班级的学员总数和男女生总数') diff --git a/PythonProject/dao/statistics_dao.py b/PythonProject/dao/statistics_dao.py index f0c3879..249e6d1 100644 --- a/PythonProject/dao/statistics_dao.py +++ b/PythonProject/dao/statistics_dao.py @@ -13,7 +13,7 @@ def select_age(min_age,max_age,db): db = db.filter(Student_Model.age >= min_age,Student_Model.delete_status == 0) if max_age is not None: db = db.filter(Student_Model.age <= max_age,Student_Model.delete_status == 0) - print(db.all()) + print('abc',db.all()) return db.all() except HTTPException: raise @@ -23,7 +23,7 @@ def select_age(min_age,max_age,db): # 实现统计每个班级的学员总数以及男女生的总数的功能 def select_all(db): try: - l1 = db.query(Student_Model.class_id,func.count(1)).group_by(Student_Model.class_id,Student_Model.gender).all() + l1 = db.query(Student_Model.class_id,Student_Model.gender,func.count(1)).group_by(Student_Model.class_id,Student_Model.gender).all() return l1 except Exception: raise HTTPException(status_code=500,detail="查询异常") @@ -43,4 +43,5 @@ def select_score(min_score,max_score,db): except HTTPException: raise except Exception: - raise HTTPException(status_code=500,detail="查询异常") \ No newline at end of file + raise HTTPException(status_code=500,detail="查询异常") + From 0a92849be692eee4c01508ac81fd677453450621 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 16:25:47 +0800 Subject: [PATCH 05/25] mrz --- 需求文档.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/需求文档.md b/需求文档.md index 2df2681..d6eb866 100644 --- a/需求文档.md +++ b/需求文档.md @@ -57,7 +57,7 @@ dao层(每一个功能就是一个函数,判断能否功能复用) 实现统计每个班级的学员总数以及男女生的总数的功能 **mrz 已作成** 实现根据成绩查询学员信息的功能 **mrz 已作成** 实现统计每次考试每个班级的平均分并排序的功能 **mrz 做成中** -实现统计薪资最高的前五名的学员信息 **sgt 做成中** -实现查询每个学生的就业时长 **xxx 做成中** +实现统计薪资最高的前五名的学员信息 **mrz 做成中** +实现查询每个学生的就业时长 **msj 做成中** 实现统计每个班级的平均就业时长 **xxx 做成中** From 1f0da3748f192c165acd3667c8344e8eeb42ce71 Mon Sep 17 00:00:00 2001 From: 0919word <835535015@qq.com> Date: Mon, 21 Sep 2026 16:26:26 +0800 Subject: [PATCH 06/25] =?UTF-8?q?=E8=92=8B=E7=AB=8B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/dao/cla_dao.py | 85 ++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 PythonProject/dao/cla_dao.py diff --git a/PythonProject/dao/cla_dao.py b/PythonProject/dao/cla_dao.py new file mode 100644 index 0000000..272c810 --- /dev/null +++ b/PythonProject/dao/cla_dao.py @@ -0,0 +1,85 @@ +from model.all_model import ClassManagement +from fastapi import HTTPException +from schema.cla_schema import claRequest + + +def add_class_dao(c:claRequest,session): + try: + data = c.model_dump() + d = ClassManagement(**data) + session.add(d) + except: + session.rollback() + return '输入有误,请重新添加班级!' + else: + session.commit() + return '添加成功!' + +def get_class_dao(session): + try: + class_list=session.query(ClassManagement).filter(ClassManagement.delete_status==0).all() + return class_list + except: + raise HTTPException(status_code=406,detail="输入查询信息有误,请重新输入!") + +def update_class_dao(id:int,req:ClassManagement,session): + try: + session.query(ClassManagement).filter(ClassManagement.class_id==id)\ + .filter(ClassManagement.delete_status==0).update(req.model_dump(exclude_unset=True)) + session.commit() + except: + raise HTTPException(status_code=400,detail="更新格式错误或参数缺失,请重新输入!") + return '更新成功,请核对信息!' + +def delete_class(id:int,session): + try: + session.query(ClassManagement).filter(ClassManagement.class_id==id,ClassManagement.delete_status==0)\ + .update({'delete_status': 1}) + session.commit() + except: + raise HTTPException(status_code=404, detail="删除异常,请重新核对之后删除!") + return '删除成功,请核对信息!' + +def get_class_for_delete(id: int, session): + try: + obj = ( + session.query(ClassManagement).filter(ClassManagement.class_id == id,ClassManagement.delete_status == 0).first() + ) + if not obj: + raise HTTPException(status_code=404, detail="班级不存在") + except HTTPException: + raise + except Exception: + raise HTTPException(status_code=500, detail="查询异常,请重新核对!") + + return { + "class_id": obj.class_id, + "class_name": obj.class_name, + "start_class_date": obj.start_class_date, + "head_teacher_id": obj.head_teacher_id, + "class_teacher_id": obj.class_teacher_id, + } + + +def hard_delete_class(id: int, session): + try: + obj = ( + session.query(ClassManagement).filter(ClassManagement.class_id == id,ClassManagement.delete_status == 0) + .first() + ) + if not obj: + raise HTTPException(status_code=404, detail="班级不存在") + + session.delete(obj) + session.commit() + except HTTPException: + raise + except Exception: + session.rollback() + raise HTTPException(status_code=500, detail="删除异常,请重新核对之后删除!") + + return '删除成功,请核对信息!' + + + + From c386779c0674e83056f6d132b18b80640f04f99e Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 16:27:39 +0800 Subject: [PATCH 07/25] mrz --- PythonProject/api/student_api.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PythonProject/api/student_api.py b/PythonProject/api/student_api.py index 3e4a874..90bbc0c 100644 --- a/PythonProject/api/student_api.py +++ b/PythonProject/api/student_api.py @@ -6,7 +6,7 @@ from util.database import get_db StudentAPI = APIRouter() -@StudentAPI.get('/',description='查询学生信息') +@StudentAPI.get('/',tags=['学⽣基本信息管理模块'],description='查询学生信息') def get_students(stu_id:int|None=None ,stu_name:str|None=None ,class_id:int|None=None @@ -18,7 +18,7 @@ def get_students(stu_id:int|None=None return r raise HTTPException(status_code=404,detail='学生不存在') -@StudentAPI.put('/{stu_id}') +@StudentAPI.put('/{stu_id}',tags=['学⽣基本信息管理模块']) def update_students(s:StudentRequest ,stu_id:int ,db=Depends(get_db)): @@ -28,7 +28,7 @@ def update_students(s:StudentRequest raise HTTPException(status_code=500, detail='没有更新!') return {'code':200,'totals':r,'detail':'更新成功'} -@StudentAPI.delete('/{stu_id}') +@StudentAPI.delete('/{stu_id}',tags=['学⽣基本信息管理模块']) def del_students(stu_id:int ,db=Depends(get_db)): rows=delete_student_dao( stu_id=stu_id,db=db ) @@ -36,7 +36,7 @@ def del_students(stu_id:int raise HTTPException(status_code=500,detail='没有删除') return {'code':200,'totals':rows,'detail':'删除成功'} -@StudentAPI.post('/',response_model=list[StugetResponse]) +@StudentAPI.post('/',tags=['学⽣基本信息管理模块'],response_model=list[StugetResponse]) def add_students(s:StudentRequest ,db=Depends(get_db)): d=s.model_dump(exclude_unset=True) @@ -45,7 +45,7 @@ def add_students(s:StudentRequest raise HTTPException(status_code=500,detail='添加失败') -@StudentAPI.put('/') +@StudentAPI.put('/',tags=['学⽣基本信息管理模块']) def get_students(stu_id:int|None = None ,stu_name:str|None = None ,class_id:int|None=None From 4425b99b870d80fd6543956cb209711ab9fcd617 Mon Sep 17 00:00:00 2001 From: Windows <2209639385@qq.com> Date: Mon, 21 Sep 2026 16:28:55 +0800 Subject: [PATCH 08/25] nb --- PythonProject/api/grade_api.py | 12 +++++++++++- PythonProject/dao/grade_dao.py | 13 ++++++++++++- PythonProject/model/all_model.py | 2 +- PythonProject/schema/grade_schema.py | 13 +++++++++---- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index f76c053..4b4d6e4 100644 --- a/PythonProject/api/grade_api.py +++ b/PythonProject/api/grade_api.py @@ -1,7 +1,8 @@ -from fastapi import APIRouter,Depends,HTTPException,Path +from fastapi import APIRouter,Depends,HTTPException,Path,Form from util.database import get_db from model.all_model import Student_Model from dao.grade_dao import * +from schema.grade_schema import * gradeAPI = APIRouter(tags=['学生考核成绩']) @@ -12,3 +13,12 @@ def get_grade(stu_id: int,db=Depends(get_db)): return {'code': 200,'msg':'查询成功','data':res} except Exception as e: raise HTTPException(status_code=500,detail=f'数据库查询异常:{str(e)}') + +@gradeAPI.post('/{stu_id}',summary='添加学生成绩') +def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): + d=o.model_dump() + r=add_grade_dao(g=d,db=db) + if not r: + raise HTTPException(status_code=400, detail='学生不存在') + return GradeResponse + diff --git a/PythonProject/dao/grade_dao.py b/PythonProject/dao/grade_dao.py index 8ee4926..7a65756 100644 --- a/PythonProject/dao/grade_dao.py +++ b/PythonProject/dao/grade_dao.py @@ -2,7 +2,7 @@ from fastapi import Depends,HTTPException from util.database import get_db -from model.grade_model import * +from model.all_model import * def get_grade_dao( stu_id:int @@ -13,3 +13,14 @@ def get_grade_dao( stu_id:int return r1 else: raise HTTPException(status_code=404,detail="学生不存在") + +def add_grade_dao(o,db=Depends(get_db)): + try: + o1 = WlScore(**o) + db.add(o1) + except: + db.rollback() + return False + else: + db.commit() + return True \ No newline at end of file diff --git a/PythonProject/model/all_model.py b/PythonProject/model/all_model.py index a2be52c..4262fa0 100644 --- a/PythonProject/model/all_model.py +++ b/PythonProject/model/all_model.py @@ -160,7 +160,7 @@ class WlScore(Base): stu_id = Column( Integer ,ForeignKey('wl_student.stu_id') - ,autoincrement=True + ,autoincrement=True #自增主建 ,comment='学生编号') exam_order = Column(Integer diff --git a/PythonProject/schema/grade_schema.py b/PythonProject/schema/grade_schema.py index 09de5b5..473dfc9 100644 --- a/PythonProject/schema/grade_schema.py +++ b/PythonProject/schema/grade_schema.py @@ -1,10 +1,15 @@ -from datetime import date -from typing import Self +from model.all_model import * from pydantic import BaseModel,Field class GradeRequest(BaseModel): stu_id:str|None = Field(description="学生编号") + exam_order:int = Field(description='考核序次') + score:float = Field(description='成绩') - -class GradeResponse(BaseModel): \ No newline at end of file +class GradeResponse(BaseModel): + code: int = 200 + detail: str = 'OK' + stu_id:str + exam_order:int + score:float \ No newline at end of file From 0089d681e9a3025ef72d00f8fa74828738d1c9a5 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 16:29:54 +0800 Subject: [PATCH 09/25] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/teacher_api.py | 18 +++++++----------- PythonProject/main.py | 8 ++++++++ 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 9cc1c56..41b4807 100644 --- a/PythonProject/api/teacher_api.py +++ b/PythonProject/api/teacher_api.py @@ -1,15 +1,11 @@ from fastapi import APIRouter,HTTPException -from fastapi.params import Depends - -from model.all_model import * from schema.teacher_schema import Teacher_ResponseModel, Teacher_RequestModel -from tmpl.work.util.database import get_db from dao.teacher_dao import * teacher_api=APIRouter() -@teacher_api.post("",response_model=Teacher_ResponseModel) -def add_teacher1(teacher:Teacher_RequestModel,session=Depends(get_db)): +@teacher_api.post("/",response_model=Teacher_ResponseModel) +def add_teacher(teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=add_teacher(req=d,session=session) if not r: @@ -17,15 +13,15 @@ def add_teacher1(teacher:Teacher_RequestModel,session=Depends(get_db)): return Teacher_ResponseModel(totals=1,data=d) -@teacher_api.get("",response_model=Teacher_ResponseModel) +@teacher_api.get("/",response_model=Teacher_ResponseModel) def get_teacher(id: int, session=Depends(get_db)): r = get_teacher(id=id, session=session) if not r: raise HTTPException(status_code=500, detail='查询异常!') -@teacher_api.put("",response_model=Teacher_ResponseModel) -def update_teacher1(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): +@teacher_api.put("/",response_model=Teacher_ResponseModel) +def update_teacher(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=update_teacher(id=id,req=d,session=session) if not r: @@ -33,8 +29,8 @@ def update_teacher1(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)) return {'code': 200, 'totals': r, 'detail': '更新成功'} -@teacher_api.delete("",response_model=Teacher_ResponseModel) -def delete_teacher1(id:int,session=Depends(get_db)): +@teacher_api.delete("/",response_model=Teacher_ResponseModel) +def delete_teacher(id:int,session=Depends(get_db)): r=delete_teacher(id=id,session=session) if not r: raise HTTPException(status_code=500,detail='删除异常!') diff --git a/PythonProject/main.py b/PythonProject/main.py index af9dc5c..8a9b02f 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,7 +1,15 @@ from fastapi import FastAPI from api.student_api import StudentAPI from api.statistics_api import StatisticsAPI +from api.teacher_api import teacher_api app = FastAPI() app.include_router(StudentAPI) app.include_router(StatisticsAPI) + +app.include_router(teacher_api) + + +if __name__ == '__main__': + import uvicorn + uvicorn.run("main:app",host='0.0.0.0',port=12310) \ No newline at end of file From 8b808a368178d8e6a0a42a9a704ac0c26cb48219 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 16:45:33 +0800 Subject: [PATCH 10/25] mrz --- PythonProject/model/all_model.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/PythonProject/model/all_model.py b/PythonProject/model/all_model.py index a2be52c..c8904a8 100644 --- a/PythonProject/model/all_model.py +++ b/PythonProject/model/all_model.py @@ -10,6 +10,11 @@ class Student_Model(Base): , autoincrement=True ,comment='学生编号') + class_id = Column(Integer + ,ForeignKey('wl_class.class_id') + ,comment='班级编号' + ) + stu_name=Column(String(100),comment='学生姓名') age=Column(Integer,comment='年龄') @@ -49,12 +54,6 @@ class ClassManagement(Base): class_id= Column(Integer, primary_key=True, autoincrement=True,comment='班级编号') - stu_id = Column(Integer - ,ForeignKey('wl_student.stu_id') - ,nullable=False - ,comment='学生编号' - ) - class_name = Column(String(100), comment='班级姓名') start_class_date = Column(DATE,comment='开课时间') From b57f15a0e212c4e4987cdbff9fa5deacdb99a273 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 16:47:44 +0800 Subject: [PATCH 11/25] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/teacher_api.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 41b4807..45ff834 100644 --- a/PythonProject/api/teacher_api.py +++ b/PythonProject/api/teacher_api.py @@ -4,7 +4,7 @@ from dao.teacher_dao import * teacher_api=APIRouter() -@teacher_api.post("/",response_model=Teacher_ResponseModel) +@teacher_api.post("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='新增教师接口') def add_teacher(teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=add_teacher(req=d,session=session) @@ -13,14 +13,14 @@ def add_teacher(teacher:Teacher_RequestModel,session=Depends(get_db)): return Teacher_ResponseModel(totals=1,data=d) -@teacher_api.get("/",response_model=Teacher_ResponseModel) +@teacher_api.get("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='查询教师接口') def get_teacher(id: int, session=Depends(get_db)): r = get_teacher(id=id, session=session) if not r: raise HTTPException(status_code=500, detail='查询异常!') -@teacher_api.put("/",response_model=Teacher_ResponseModel) +@teacher_api.put("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='更新教师接口') def update_teacher(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=update_teacher(id=id,req=d,session=session) @@ -29,7 +29,7 @@ def update_teacher(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): return {'code': 200, 'totals': r, 'detail': '更新成功'} -@teacher_api.delete("/",response_model=Teacher_ResponseModel) +@teacher_api.delete("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='删除教师接口') def delete_teacher(id:int,session=Depends(get_db)): r=delete_teacher(id=id,session=session) if not r: From 89763566a1bc25e5f3dc9f3ce9845280b6c88097 Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Mon, 21 Sep 2026 16:48:27 +0800 Subject: [PATCH 12/25] =?UTF-8?q?=E5=B0=B1=E4=B8=9Aget=E6=AC=A1=E6=98=82?= =?UTF-8?q?=E7=AE=A1=E7=9A=84dao=E5=B1=82=E5=92=8Capi=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/employment_api.py | 30 +++++++++++++++++ PythonProject/dao/employment_dao.py | 40 +++++++++++++++++++++++ PythonProject/schema/employment_schema.py | 14 +++++--- 3 files changed, 79 insertions(+), 5 deletions(-) diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index e69de29..68cc125 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -0,0 +1,30 @@ +from fastapi import FastAPI,APIRouter,Depends,HTTPException + +from dao import employment_dao +from dao.employment_dao import get_employment_dao +from schema.employment_schema import EmlpoymentRequest,EmploymentResponse +from model.all_model import ClassManagement,Employment_info +from util.database import get_db + +app = FastAPI() +@app.get('employment/students/{stu_id}',response_model=EmploymentResponse,summary='获取学生就业信息') +def get_emp_info1(stu_id: int,db=Depends(get_db)): + try: + if stu_id: + return employment_dao.get_employment_info() + except: + raise HTTPException(status_code=404, detail='就业信息不存在') + +@app.get('employment/class/{class_id}',summary='获取班级学生就业信息') +def get_emp_info2(class_id: int,db=Depends(get_db)): + try: + if class_id: + return employment_dao.get_employment_info() + except: + raise HTTPException(status_code=404, detail='就业信息不存在') + + + +@app.post('employment/students/{stu_id}') +def create_emp_info(stu_id: int,db=Depends(get_db)): + diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py index e69de29..47275fb 100644 --- a/PythonProject/dao/employment_dao.py +++ b/PythonProject/dao/employment_dao.py @@ -0,0 +1,40 @@ + +from model.all_model import Employment_info, ClassManagement, Student_Model +from util.database import get_db +from schema.employment_schema import EmlpoymentRequest + +def get_employment_dao(stu_id,class_id,db): + q = db.query(Employment_info).\ + join(ClassManagement,ClassManagement.stu_id == Employment_info.stu_id).\ + filter(Employment_info.delete_status == 0).\ + filter(Student_Model.delete_status == 0).\ + filter(ClassManagement.delete_status == 0) + if stu_id is not None: + q = q.filter(Employment_info.stu_id == stu_id) + if class_id is not None: + q = q.filter(ClassManagement.class_id == class_id) + r = q.all() + if r: + return [{'emp_id':i.emp_id + ,'stu_id': i.stu_id + ,'stu_name':i.stu_name + ,'class_id':i.class_id + ,'email':i.email + ,'employment_opening_date':i.employment_opening_date + ,'offer_issuance_date':i.offer_issuance_date + ,'company_name':i.company_name + ,'company_address':i.company_address + ,'salary':i.salary + }for i in r + ] + +def add_employment_dao(e:EmlpoymentRequest,db,stu_id): + try: + e1 = Employment_info(**e) + db.add(e1) + except: + db.rollback() + return False + else: + db.commit() + return True diff --git a/PythonProject/schema/employment_schema.py b/PythonProject/schema/employment_schema.py index 47a153f..d353b40 100644 --- a/PythonProject/schema/employment_schema.py +++ b/PythonProject/schema/employment_schema.py @@ -1,12 +1,13 @@ from fastapi import Query,HTTPException from pydantic import BaseModel, field_validator -from datetime import datetime +from datetime import date +from typing import Optional class EmlpoymentRequest(BaseModel): stu_id: int=Query(ge=1) email: str|None - employment_opening_date:datetime - offer_issuance_date:datetime + employment_opening_date:date + offer_issuance_date:date company_name:str company_address:str|None salary:float @@ -21,10 +22,13 @@ class EmlpoymentRequest(BaseModel): class EmploymentResponse(BaseModel): code:int = 200 detail:str = 'OK' + emp_id:int stu_id: int + stu_name:Optional[str] = None + class_id:int email: str | None - employment_opening_date: datetime - offer_issuance_date: datetime + employment_opening_date: date + offer_issuance_date: date company_name: str company_address: str | None salary: float \ No newline at end of file From abb7b973894f4bd08cf238af3d545ff93cbae856 Mon Sep 17 00:00:00 2001 From: Windows <2209639385@qq.com> Date: Mon, 21 Sep 2026 16:53:39 +0800 Subject: [PATCH 13/25] nb --- PythonProject/api/grade_api.py | 3 ++- PythonProject/dao/grade_dao.py | 7 +++---- PythonProject/main.py | 2 ++ PythonProject/schema/grade_schema.py | 5 +++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index 4b4d6e4..5aa4f17 100644 --- a/PythonProject/api/grade_api.py +++ b/PythonProject/api/grade_api.py @@ -14,7 +14,7 @@ def get_grade(stu_id: int,db=Depends(get_db)): except Exception as e: raise HTTPException(status_code=500,detail=f'数据库查询异常:{str(e)}') -@gradeAPI.post('/{stu_id}',summary='添加学生成绩') +@gradeAPI.post('/{stu_id}',response_model=GradeResponse,summary='添加学生成绩') def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): d=o.model_dump() r=add_grade_dao(g=d,db=db) @@ -22,3 +22,4 @@ def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): raise HTTPException(status_code=400, detail='学生不存在') return GradeResponse + diff --git a/PythonProject/dao/grade_dao.py b/PythonProject/dao/grade_dao.py index 7a65756..0b13d41 100644 --- a/PythonProject/dao/grade_dao.py +++ b/PythonProject/dao/grade_dao.py @@ -5,8 +5,7 @@ from util.database import get_db from model.all_model import * -def get_grade_dao( stu_id:int - ,db=Depends(get_db)): +def get_grade_dao( stu_id:int , db): r1 =db.query(WlScore).filter(WlScore.stu_id == stu_id,WlScore.delete_status == 0).all() if r1: @@ -14,9 +13,9 @@ def get_grade_dao( stu_id:int else: raise HTTPException(status_code=404,detail="学生不存在") -def add_grade_dao(o,db=Depends(get_db)): +def add_grade_dao(g,db): try: - o1 = WlScore(**o) + o1 = WlScore(**g) db.add(o1) except: db.rollback() diff --git a/PythonProject/main.py b/PythonProject/main.py index af9dc5c..ad88bc9 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,7 +1,9 @@ from fastapi import FastAPI from api.student_api import StudentAPI from api.statistics_api import StatisticsAPI +from api.grade_api import gradeAPI app = FastAPI() app.include_router(StudentAPI) app.include_router(StatisticsAPI) +app.include_router(gradeAPI) \ No newline at end of file diff --git a/PythonProject/schema/grade_schema.py b/PythonProject/schema/grade_schema.py index 473dfc9..d1ff0ae 100644 --- a/PythonProject/schema/grade_schema.py +++ b/PythonProject/schema/grade_schema.py @@ -1,12 +1,13 @@ from model.all_model import * -from pydantic import BaseModel,Field +from pydantic import BaseModel, Field, field_validator +from fastapi import HTTPException + class GradeRequest(BaseModel): stu_id:str|None = Field(description="学生编号") exam_order:int = Field(description='考核序次') score:float = Field(description='成绩') - class GradeResponse(BaseModel): code: int = 200 detail: str = 'OK' From 732475b2a76db6816e2ec1ad59bbd8164920ba0a Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 17:01:16 +0800 Subject: [PATCH 14/25] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/dao/teacher_dao.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PythonProject/dao/teacher_dao.py b/PythonProject/dao/teacher_dao.py index 192d992..694598e 100644 --- a/PythonProject/dao/teacher_dao.py +++ b/PythonProject/dao/teacher_dao.py @@ -12,7 +12,7 @@ def add_teacher(req:Teacher_RequestModel,session): raise HTTPException(status_code=500,detail="添加异常!") return req.model_dump() -def select_teacher(session): +def get_teacher(session): try: teacher_list=session.query(Teacher_Model).filter(Teacher_Model.delete_status==0).all() return teacher_list From 8143aff3ae4a861e1e4635b4b9fd3cba01265a22 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 17:03:09 +0800 Subject: [PATCH 15/25] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/model/all_model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PythonProject/model/all_model.py b/PythonProject/model/all_model.py index b9508c0..74f785d 100644 --- a/PythonProject/model/all_model.py +++ b/PythonProject/model/all_model.py @@ -75,13 +75,13 @@ class Teacher_Model(Base): teac_id=Column(Integer,primary_key=True,autoincrement=True,comment='老师编号') - teac_name=Column(String(20),comment='老师姓名') + teac_name=Column(String(100),comment='老师姓名') - teac_gender=Column(String(5),comment='老师性别') + teac_gender=Column(String(100),comment='老师性别') teac_age=Column(Integer,comment='老师年龄') - teac_position =Column(String(20),comment='老师职位') + teac_position =Column(String(100),comment='老师职位') create_date=Column(DATETIME,default=datetime.now) From 4cad0902d6b364fcd8399052a3422a63524a487c Mon Sep 17 00:00:00 2001 From: Windows <2209639385@qq.com> Date: Mon, 21 Sep 2026 17:08:46 +0800 Subject: [PATCH 16/25] nb --- PythonProject/api/grade_api.py | 2 +- PythonProject/dao/grade_dao.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index 5aa4f17..c0a33f0 100644 --- a/PythonProject/api/grade_api.py +++ b/PythonProject/api/grade_api.py @@ -20,6 +20,6 @@ def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): r=add_grade_dao(g=d,db=db) if not r: raise HTTPException(status_code=400, detail='学生不存在') - return GradeResponse + return o diff --git a/PythonProject/dao/grade_dao.py b/PythonProject/dao/grade_dao.py index 0b13d41..9471ae7 100644 --- a/PythonProject/dao/grade_dao.py +++ b/PythonProject/dao/grade_dao.py @@ -17,9 +17,8 @@ def add_grade_dao(g,db): try: o1 = WlScore(**g) db.add(o1) - except: - db.rollback() - return False - else: db.commit() - return True \ No newline at end of file + return o1 + except Exception: + db.rollback() + return None \ No newline at end of file From b8a48833210e114f9677fb702966b5add54f74be Mon Sep 17 00:00:00 2001 From: 0919word <835535015@qq.com> Date: Mon, 21 Sep 2026 17:12:57 +0800 Subject: [PATCH 17/25] =?UTF-8?q?=E8=92=8B=E7=AB=8B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/schema/cla_schema.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/PythonProject/schema/cla_schema.py b/PythonProject/schema/cla_schema.py index 5d64fcb..dc338e7 100644 --- a/PythonProject/schema/cla_schema.py +++ b/PythonProject/schema/cla_schema.py @@ -1,6 +1,5 @@ from datetime import date from pydantic import BaseModel -from sqlalchemy import DATETIME class claRequest(BaseModel): @@ -12,14 +11,6 @@ class claRequest(BaseModel): class_teacher_id : int|None = None - Entry_date : DATETIME - - update_date : DATETIME - - delete_status : int|None = None - - delete_time : DATETIME - class claResponse(BaseModel): code:int = 200 From e146ed53d5c09c0b6b1dc1acd28e9d75d5e4a0b4 Mon Sep 17 00:00:00 2001 From: 0919word <835535015@qq.com> Date: Mon, 21 Sep 2026 17:14:36 +0800 Subject: [PATCH 18/25] =?UTF-8?q?=E8=92=8B=E7=AB=8B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/schema/cla_schema.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/PythonProject/schema/cla_schema.py b/PythonProject/schema/cla_schema.py index dc338e7..dad7082 100644 --- a/PythonProject/schema/cla_schema.py +++ b/PythonProject/schema/cla_schema.py @@ -13,13 +13,14 @@ class claRequest(BaseModel): class claResponse(BaseModel): - code:int = 200 + code: int = 200 - detail:str = 'ok' + detail: str = 'ok' - class_name = str + class_name: str | None = None - head_teacher_id = int + head_teacher_id: int | None = None + + class_teacher_id: int | None = None - class_teacher_id = int From 9a47e485db8503116ba78cc81282e2ea124bd4a9 Mon Sep 17 00:00:00 2001 From: Windows <2209639385@qq.com> Date: Mon, 21 Sep 2026 17:19:20 +0800 Subject: [PATCH 19/25] nb --- PythonProject/api/grade_api.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index c0a33f0..5872b26 100644 --- a/PythonProject/api/grade_api.py +++ b/PythonProject/api/grade_api.py @@ -16,6 +16,11 @@ def get_grade(stu_id: int,db=Depends(get_db)): @gradeAPI.post('/{stu_id}',response_model=GradeResponse,summary='添加学生成绩') def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): + + exist_obj = get_grade_dao(db,o.stu_id) + if exist_obj: + raise HTTPException(status_code=409, detail="该学生此考核序次成绩已存在!") + d=o.model_dump() r=add_grade_dao(g=d,db=db) if not r: From f97b46961aed57f52496cf308f9e1655ac4e1690 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 17:31:25 +0800 Subject: [PATCH 20/25] mrz --- PythonProject/model/all_model.py | 1 - 1 file changed, 1 deletion(-) diff --git a/PythonProject/model/all_model.py b/PythonProject/model/all_model.py index 74f785d..422cb09 100644 --- a/PythonProject/model/all_model.py +++ b/PythonProject/model/all_model.py @@ -159,7 +159,6 @@ class WlScore(Base): stu_id = Column( Integer ,ForeignKey('wl_student.stu_id') - ,autoincrement=True #自增主建 ,comment='学生编号') exam_order = Column(Integer From 87e6083295f3dafcc96345d0d5c19925e0c7c45b Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 17:47:50 +0800 Subject: [PATCH 21/25] mrz --- PythonProject/api/employment_api.py | 2 +- PythonProject/api/statistics_api.py | 27 +++++++++-- PythonProject/dao/statistics_dao.py | 56 +++++++++++++++++++++-- PythonProject/main.py | 4 +- PythonProject/schema/statistics_schema.py | 11 +++++ 5 files changed, 87 insertions(+), 13 deletions(-) create mode 100644 PythonProject/schema/statistics_schema.py diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index 68cc125..71a8ca5 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -27,4 +27,4 @@ def get_emp_info2(class_id: int,db=Depends(get_db)): @app.post('employment/students/{stu_id}') def create_emp_info(stu_id: int,db=Depends(get_db)): - + pass diff --git a/PythonProject/api/statistics_api.py b/PythonProject/api/statistics_api.py index aff954a..ab3141d 100644 --- a/PythonProject/api/statistics_api.py +++ b/PythonProject/api/statistics_api.py @@ -1,21 +1,38 @@ from fastapi import APIRouter,Depends -from dao.statistics_dao import select_all,select_age,select_score +from dao.statistics_dao import select_all,select_age,select_score,select_avg_score,select_salary,select_days from schema.student_schema import StudentResponse +from schema.statistics_schema import AllStuResponse,AvgDayResponse from util.database import get_db StatisticsAPI = APIRouter() -@StatisticsAPI.get("/age",response_model=list[StudentResponse],tags=['统计分析模块'],description='根据年龄查询学生信息') +@StatisticsAPI.get("/age",response_model=list[StudentResponse],tags=['统计分析模块'],summary='根据年龄查询学生信息') def get_students(min_age:int|None=None,max_age:int|None=None,db=Depends(get_db)): l = select_age(min_age,max_age,db) return l -@StatisticsAPI.get("/all",response_model=StudentResponse,tags=['统计分析模块'],description='统计每个班级的学员总数和男女生总数') +@StatisticsAPI.get("/all",response_model=list[AllStuResponse],tags=['统计分析模块'],summary='统计每个班级的学员总数和男女生总数') def get_students(db=Depends(get_db)): l = select_all(db) - return [i for i in l] + return l -@StatisticsAPI.get("/score",response_model=StudentResponse,tags=['统计分析模块'],description='根据成绩查询学生信息') +@StatisticsAPI.get("/score",response_model=StudentResponse,tags=['统计分析模块'],summary='根据成绩查询学生信息') def get_students(min_score:int|None=None,max_score:int|None=None,db=Depends(get_db)): l = select_score(min_score,max_score,db) return [i for i in l] + +@StatisticsAPI.get("/avg_score",response_model=StudentResponse,tags=['统计分析模块'],summary='统计每次考试每个班级的平均分并排序') +def get_scores(db=Depends(get_db)): + l = select_avg_score(db) + return [i for i in l] + +@StatisticsAPI.get("/salary",response_model=list[StudentResponse],tags=['统计分析模块'],summary='统计薪资最高的前五名的学员信息') +def get_scores(db=Depends(get_db)): + l = select_salary(db) + return l + +@StatisticsAPI.get("/avg_day",response_model=list[AvgDayResponse],tags=['统计分析模块'],summary='统计每个班级的平均就业时长') +def get_days(db=Depends(get_db)): + l = select_days(db) + return l + diff --git a/PythonProject/dao/statistics_dao.py b/PythonProject/dao/statistics_dao.py index 249e6d1..774fb74 100644 --- a/PythonProject/dao/statistics_dao.py +++ b/PythonProject/dao/statistics_dao.py @@ -1,7 +1,6 @@ -from fastapi import HTTPException,Depends +from fastapi import HTTPException from sqlalchemy import func -from model.all_model import Student_Model,WlScore -from util.database import get_db +from model.all_model import Student_Model,WlScore,Employment_info # 实现根据年龄查询学生信息的功能 def select_age(min_age,max_age,db): @@ -23,7 +22,8 @@ def select_age(min_age,max_age,db): # 实现统计每个班级的学员总数以及男女生的总数的功能 def select_all(db): try: - l1 = db.query(Student_Model.class_id,Student_Model.gender,func.count(1)).group_by(Student_Model.class_id,Student_Model.gender).all() + l1 = db.query(Student_Model.class_id,Student_Model.gender,func.count(1).label('cnt'))\ + .group_by(Student_Model.class_id,Student_Model.gender).all() return l1 except Exception: raise HTTPException(status_code=500,detail="查询异常") @@ -34,7 +34,8 @@ def select_score(min_score,max_score,db): if min_score is None and max_score is None: raise HTTPException(status_code=400, detail="请至少传入一个参数") db = db.query(Student_Model,WlScore.score,WlScore.score)\ - .join(WlScore,WlScore.stu_id == Student_Model.stu_id,WlScore.delete_status==0,WlScore.delete_status == 0) + .join(WlScore,WlScore.stu_id == Student_Model.stu_id)\ + .filter(WlScore.delete_status==0,Student_Model.delete_status == 0) if min_score is not None: db = db.filter(WlScore.score >= min_score) if min_score is not None: @@ -45,3 +46,48 @@ def select_score(min_score,max_score,db): except Exception: raise HTTPException(status_code=500,detail="查询异常") +# 实现统计每次考试每个班级的平均分并排序的功能 +def select_avg_score(db): + try: + l1 = db.query(func.avg(WlScore.score))\ + .join(Student_Model,WlScore.stu_id == Student_Model.stu_id)\ + .filter(WlScore.delete_status==0,Student_Model.delete_status == 0)\ + .group_by(Student_Model.class_id)\ + .order_by(func.avg(WlScore.score)).all() + return l1 + except Exception: + raise HTTPException(status_code=500,detail="查询异常") + +# 实现统计薪资最高的前五名的学员信息 +def select_salary(db): + try: + l1 = db.query(Student_Model,Employment_info.salary)\ + .join(Employment_info,Employment_info.stu_id==Student_Model.stu_id)\ + .filter(Employment_info.delete_status==0,Student_Model.delete_status == 0)\ + .order_by(Employment_info.salary.desc())\ + .limit(5).all() + return l1 + except Exception: + raise HTTPException(status_code=500,detail="查询异常") + +# 实现统计每个班级的平均就业时长 +def select_days(db): + try: + l1 = db.query(Student_Model.class_id, + func.coalesce( + func.avg( + func.datediff( + Employment_info.offer_issuance_date, Employment_info.employment_opening_date + ) + ),0).label("avg_days") + ).join(Employment_info,Employment_info.stu_id == Student_Model.stu_id)\ + .filter(Student_Model.delete_status == 0, + Employment_info.delete_status == 0, + Employment_info.employment_opening_date.isnot(None), + Employment_info.offer_issuance_date.isnot(None),)\ + .group_by( Student_Model.class_id)\ + .order_by(func.avg(func.datediff(Employment_info.offer_issuance_date,Student_Model.admission_date)).desc()).all() + return l1 + except Exception: + raise HTTPException(status_code=500, detail="查询异常") + diff --git a/PythonProject/main.py b/PythonProject/main.py index b2aef0b..2ac3247 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -3,7 +3,7 @@ from api.student_api import StudentAPI from api.statistics_api import StatisticsAPI from api.teacher_api import teacher_api from api.grade_api import gradeAPI -app = FastAPI() +app = FastAPI(title='沃林学⽣管理系统') app.include_router(StudentAPI) app.include_router(StatisticsAPI) @@ -14,4 +14,4 @@ app.include_router(teacher_api) if __name__ == '__main__': import uvicorn uvicorn.run("main:app",host='0.0.0.0',port=12310) -app.include_router(gradeAPI) \ No newline at end of file +app.include_router(gradeAPI) diff --git a/PythonProject/schema/statistics_schema.py b/PythonProject/schema/statistics_schema.py new file mode 100644 index 0000000..4c967e0 --- /dev/null +++ b/PythonProject/schema/statistics_schema.py @@ -0,0 +1,11 @@ +from pydantic import BaseModel + +class AllStuResponse(BaseModel): + class_id: int + gender: str | None + cnt: int + +class AvgDayResponse(BaseModel): + class_id: int + avg_days: str | None + From 3f75a75f7667dbe058bf2585544c120ec79a7d4d Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Mon, 21 Sep 2026 17:48:26 +0800 Subject: [PATCH 22/25] =?UTF-8?q?=E5=B0=B1=E4=B8=9Aget=E6=AC=A1=E6=98=82?= =?UTF-8?q?=E7=AE=A1=E7=9A=84dao=E5=B1=82=E5=92=8Capi=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/employment_api.py | 11 ++--- PythonProject/dao/employment_dao.py | 74 ++++++++++++++++------------- 2 files changed, 45 insertions(+), 40 deletions(-) diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index 71a8ca5..a5ee446 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -13,7 +13,7 @@ def get_emp_info1(stu_id: int,db=Depends(get_db)): if stu_id: return employment_dao.get_employment_info() except: - raise HTTPException(status_code=404, detail='就业信息不存在') + raise HTTPException(status_code=404, detail='该学生就业信息不存在') @app.get('employment/class/{class_id}',summary='获取班级学生就业信息') def get_emp_info2(class_id: int,db=Depends(get_db)): @@ -21,10 +21,9 @@ def get_emp_info2(class_id: int,db=Depends(get_db)): if class_id: return employment_dao.get_employment_info() except: - raise HTTPException(status_code=404, detail='就业信息不存在') + raise HTTPException(status_code=404, detail='该班级就业信息不存在') - - -@app.post('employment/students/{stu_id}') -def create_emp_info(stu_id: int,db=Depends(get_db)): +# @app.post('employment/students/{stu_id}') +# def create_emp_info(stu_id: int,db=Depends(get_db)): +# try: pass diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py index 47275fb..3bed3a2 100644 --- a/PythonProject/dao/employment_dao.py +++ b/PythonProject/dao/employment_dao.py @@ -1,40 +1,46 @@ - +from fastapi import HTTPException,Depends from model.all_model import Employment_info, ClassManagement, Student_Model from util.database import get_db from schema.employment_schema import EmlpoymentRequest -def get_employment_dao(stu_id,class_id,db): - q = db.query(Employment_info).\ - join(ClassManagement,ClassManagement.stu_id == Employment_info.stu_id).\ - filter(Employment_info.delete_status == 0).\ - filter(Student_Model.delete_status == 0).\ - filter(ClassManagement.delete_status == 0) - if stu_id is not None: - q = q.filter(Employment_info.stu_id == stu_id) - if class_id is not None: - q = q.filter(ClassManagement.class_id == class_id) - r = q.all() - if r: - return [{'emp_id':i.emp_id - ,'stu_id': i.stu_id - ,'stu_name':i.stu_name - ,'class_id':i.class_id - ,'email':i.email - ,'employment_opening_date':i.employment_opening_date - ,'offer_issuance_date':i.offer_issuance_date - ,'company_name':i.company_name - ,'company_address':i.company_address - ,'salary':i.salary - }for i in r - ] - -def add_employment_dao(e:EmlpoymentRequest,db,stu_id): +def get_employment_dao(stu_id,class_id,db=Depends(get_db())): try: - e1 = Employment_info(**e) - db.add(e1) + q = db.query(Employment_info).\ + join(Student_Model,Employment_info.stu_id == Student_Model.stu_id).\ + join(ClassManagement,Student_Model.class_id == ClassManagement.class_id).\ + filter(Employment_info.delete_status == 0).\ + filter(Student_Model.delete_status == 0).\ + filter(ClassManagement.delete_status == 0) + if stu_id is not None: + q = q.filter(Employment_info.stu_id == stu_id) + if class_id is not None: + q = q.filter(ClassManagement.class_id == class_id) + r = q.all() + if r: + return [{'emp_id':i.emp_id + ,'stu_id': i.stu_id + ,'stu_name':i.stu_name + ,'class_id':i.class_id + ,'email':i.email + ,'employment_opening_date':i.employment_opening_date + ,'offer_issuance_date':i.offer_issuance_date + ,'company_name':i.company_name + ,'company_address':i.company_address + ,'salary':i.salary + }for i in r + ] except: - db.rollback() - return False - else: - db.commit() - return True + raise HTTPException(status_code=404,detail='信息不存在!') + +# def add_employment_dao(e:EmlpoymentRequest,db=Depends(get_db()),stu_id): +# try: +# r = db.query(Employment_info).filter(Employment_info.stu_id == stu_id).all() +# if r: +# e1 = Employment_info(**e) +# db.add(e1) +# except: +# db.rollback() +# return False +# else: +# db.commit() +# return True From 0e0b4125ec9826bcd019f83c1af0a9e8df7db74e Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Mon, 21 Sep 2026 17:50:29 +0800 Subject: [PATCH 23/25] =?UTF-8?q?=E5=B0=B1=E4=B8=9Aget=E6=AC=A1=E6=98=82?= =?UTF-8?q?=E7=AE=A1=E7=9A=84dao=E5=B1=82=E5=92=8Capi=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/employment_api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index a5ee446..351187c 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -6,8 +6,8 @@ from schema.employment_schema import EmlpoymentRequest,EmploymentResponse from model.all_model import ClassManagement,Employment_info from util.database import get_db -app = FastAPI() -@app.get('employment/students/{stu_id}',response_model=EmploymentResponse,summary='获取学生就业信息') +emp_api = FastAPI() +@emp_api.get('employment/students/{stu_id}',response_model=EmploymentResponse,summary='获取学生就业信息') def get_emp_info1(stu_id: int,db=Depends(get_db)): try: if stu_id: @@ -15,7 +15,7 @@ def get_emp_info1(stu_id: int,db=Depends(get_db)): except: raise HTTPException(status_code=404, detail='该学生就业信息不存在') -@app.get('employment/class/{class_id}',summary='获取班级学生就业信息') +@emp_api.get('employment/class/{class_id}',summary='获取班级学生就业信息') def get_emp_info2(class_id: int,db=Depends(get_db)): try: if class_id: From 9b2de683f73e9fa039b233ba4c6d679d04ff327a Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Mon, 21 Sep 2026 17:53:58 +0800 Subject: [PATCH 24/25] =?UTF-8?q?=E5=B0=B1=E4=B8=9Aget=E6=AC=A1=E6=98=82?= =?UTF-8?q?=E7=AE=A1=E7=9A=84dao=E5=B1=82=E5=92=8Capi=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/main.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PythonProject/main.py b/PythonProject/main.py index 2ac3247..9223bc4 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,4 +1,6 @@ from fastapi import FastAPI + +from api.employment_api import emp_api from api.student_api import StudentAPI from api.statistics_api import StatisticsAPI from api.teacher_api import teacher_api @@ -9,6 +11,7 @@ app.include_router(StudentAPI) app.include_router(StatisticsAPI) app.include_router(teacher_api) +app.include_router(emp_api) if __name__ == '__main__': From 44f2d89f62ce229caad086a3297ce11ec001abbc Mon Sep 17 00:00:00 2001 From: wolin_chenyulin001 <123@163.com> Date: Mon, 21 Sep 2026 18:02:12 +0800 Subject: [PATCH 25/25] =?UTF-8?q?=E5=B0=B1=E4=B8=9Aget=E6=AC=A1=E6=98=82?= =?UTF-8?q?=E7=AE=A1=E7=9A=84dao=E5=B1=82=E5=92=8Capi=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/employment_api.py | 10 +++++----- PythonProject/dao/employment_dao.py | 2 +- PythonProject/schema/employment_schema.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index 351187c..22095c7 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -1,12 +1,12 @@ -from fastapi import FastAPI,APIRouter,Depends,HTTPException +from fastapi import APIRouter,Depends,HTTPException from dao import employment_dao from dao.employment_dao import get_employment_dao -from schema.employment_schema import EmlpoymentRequest,EmploymentResponse +from schema.employment_schema import EmploymentRequest,EmploymentResponse from model.all_model import ClassManagement,Employment_info from util.database import get_db -emp_api = FastAPI() +emp_api = APIRouter() @emp_api.get('employment/students/{stu_id}',response_model=EmploymentResponse,summary='获取学生就业信息') def get_emp_info1(stu_id: int,db=Depends(get_db)): try: @@ -23,7 +23,7 @@ def get_emp_info2(class_id: int,db=Depends(get_db)): except: raise HTTPException(status_code=404, detail='该班级就业信息不存在') -# @app.post('employment/students/{stu_id}') +# @emp_api.post('employment/students/{stu_id}') # def create_emp_info(stu_id: int,db=Depends(get_db)): # try: - pass +# pass diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py index 3bed3a2..426452b 100644 --- a/PythonProject/dao/employment_dao.py +++ b/PythonProject/dao/employment_dao.py @@ -1,7 +1,7 @@ from fastapi import HTTPException,Depends from model.all_model import Employment_info, ClassManagement, Student_Model from util.database import get_db -from schema.employment_schema import EmlpoymentRequest +from schema.employment_schema import EmploymentRequest def get_employment_dao(stu_id,class_id,db=Depends(get_db())): try: diff --git a/PythonProject/schema/employment_schema.py b/PythonProject/schema/employment_schema.py index d353b40..4e93d2c 100644 --- a/PythonProject/schema/employment_schema.py +++ b/PythonProject/schema/employment_schema.py @@ -3,7 +3,7 @@ from pydantic import BaseModel, field_validator from datetime import date from typing import Optional -class EmlpoymentRequest(BaseModel): +class EmploymentRequest(BaseModel): stu_id: int=Query(ge=1) email: str|None employment_opening_date:date