diff --git a/PythonProject/api/cla_api.py b/PythonProject/api/cla_api.py new file mode 100644 index 0000000..b002d34 --- /dev/null +++ b/PythonProject/api/cla_api.py @@ -0,0 +1,32 @@ +from fastapi import APIRouter, Depends +from util.database import get_db +from schema.cla_schema import claRequest +from dao.cla_dao import add_class_dao,get_class_dao,update_class_dao,delete_class_dao,get_class_for_delete,hard_delete_class + +claAPI = APIRouter(prefix="/class", tags=["班级管理"]) + +@claAPI.post("/class", summary="新增班级") +def add_class(data: claRequest, Session = Depends(get_db)): + return add_class_dao(data, Session) + +@claAPI.get("/class/list", summary="查询班级") +def list_class(Session = Depends(get_db)): + return get_class_dao(Session) + +@claAPI.put("/class/{class_id}", summary="更新班级信息") +def update_class(class_id: int, data: claRequest, Session = Depends(get_db)): + return update_class_dao(class_id, data, Session) + +@claAPI.get("/class/{class_id}", summary="逻辑删除班级信息") +def delete_class(class_id: int, Session = Depends(get_db)): + return delete_class_dao(class_id, Session) + +@claAPI.get("/class/delete/check/{class_id}", summary="硬删除前查询") +def check_delete(class_id: int, Session = Depends(get_db)): + return get_class_for_delete(class_id, Session) + +@claAPI.delete("/class/delete/confirm/{class_id}", summary="删除班级信息") +def confirm_delete(class_id: int, Session = Depends(get_db)): + return hard_delete_class(class_id, Session) + + diff --git a/PythonProject/api/statistics_api.py b/PythonProject/api/statistics_api.py index ab3141d..f934c21 100644 --- a/PythonProject/api/statistics_api.py +++ b/PythonProject/api/statistics_api.py @@ -1,7 +1,7 @@ from fastapi import APIRouter,Depends 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 schema.statistics_schema import AllStuResponse,AvgDayResponse,AcgScoreResponse from util.database import get_db StatisticsAPI = APIRouter() @@ -21,10 +21,10 @@ def get_students(min_score:int|None=None,max_score:int|None=None,db=Depends(get_ l = select_score(min_score,max_score,db) return [i for i in l] -@StatisticsAPI.get("/avg_score",response_model=StudentResponse,tags=['统计分析模块'],summary='统计每次考试每个班级的平均分并排序') +@StatisticsAPI.get("/avg_score",response_model=list[AcgScoreResponse],tags=['统计分析模块'],summary='统计每次考试每个班级的平均分并排序') def get_scores(db=Depends(get_db)): l = select_avg_score(db) - return [i for i in l] + return l @StatisticsAPI.get("/salary",response_model=list[StudentResponse],tags=['统计分析模块'],summary='统计薪资最高的前五名的学员信息') def get_scores(db=Depends(get_db)): @@ -35,4 +35,3 @@ def get_scores(db=Depends(get_db)): def get_days(db=Depends(get_db)): l = select_days(db) return l - diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 45ff834..c0ba4fb 100644 --- a/PythonProject/api/teacher_api.py +++ b/PythonProject/api/teacher_api.py @@ -1,26 +1,30 @@ -from fastapi import APIRouter,HTTPException +from fastapi import APIRouter,HTTPException,Depends from schema.teacher_schema import Teacher_ResponseModel, Teacher_RequestModel -from dao.teacher_dao import * +from dao.teacher_dao import add_teacher +from util.database import get_db teacher_api=APIRouter() -@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) - if not r: +@teacher_api.post("/teachers",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='新增教师接口') +def get_teacher(x1:Teacher_RequestModel,session=Depends(get_db)): + y=add_teacher(x1.model_dump(),session) + if not y: raise HTTPException(status_code=500,detail='添加异常!') - return Teacher_ResponseModel(totals=1,data=d) + return x1 + +@teacher_api.get("/teachers",tags=['教师基本信息管理模块'],summary='查询教师接口') +def get_teacher(teacid:int, session=Depends(get_db)): + # r = get_teacher(id=id,session=session) + # if not r: + # raise HTTPException(status_code=500, detail='查询异常!') + try: + l=get_teacher(teacid,session) + return {'code': 200,'msg':'查询成功','data':l} + except: + raise HTTPException(status_code=500,detail='数据库查询异常!') -@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,tags=['教师基本信息管理模块'],summary='更新教师接口') +@teacher_api.put("/teachers",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 +33,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,tags=['教师基本信息管理模块'],summary='删除教师接口') +@teacher_api.delete("/teachers",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: diff --git a/PythonProject/dao/statistics_dao.py b/PythonProject/dao/statistics_dao.py index 774fb74..52658c8 100644 --- a/PythonProject/dao/statistics_dao.py +++ b/PythonProject/dao/statistics_dao.py @@ -49,7 +49,7 @@ def select_score(min_score,max_score,db): # 实现统计每次考试每个班级的平均分并排序的功能 def select_avg_score(db): try: - l1 = db.query(func.avg(WlScore.score))\ + l1 = db.query(Student_Model.class_id,func.avg(WlScore.score).label('avg_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)\ diff --git a/PythonProject/dao/teacher_dao.py b/PythonProject/dao/teacher_dao.py index 694598e..cfb3eed 100644 --- a/PythonProject/dao/teacher_dao.py +++ b/PythonProject/dao/teacher_dao.py @@ -1,25 +1,31 @@ from fastapi import HTTPException,Depends -from model.all_model import Teacher_Model -from util.database import * from schema.teacher_schema import Teacher_RequestModel +from model.all_model import * -def add_teacher(req:Teacher_RequestModel,session): +def add_teacher(teacher,session): try: - data=req.model_dump() - session.add(Teacher_Model(**data)) + print(teacher) + x=Teacher_Model(**teacher) + print(1) + session.add(x) + print(2) session.commit() + print(3) + return teacher except: - raise HTTPException(status_code=500,detail="添加异常!") - return req.model_dump() + session.rollback() + # raise HTTPException(status_code=500,detail='添加异常!') + return None -def get_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 get_teacher(id,session): + l=session.query(Teacher_Model).filter(Teacher_Model.teac_id==id)\ + .filter(Teacher_Model.delete_status==0).all() + if l: + return l + else: + raise HTTPException(status_code=404,detail='该老师不存在!') -def update_teacher(id:int,req:Teacher_RequestModel,session): +def update_teacher(teac_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)) diff --git a/PythonProject/main.py b/PythonProject/main.py index 9223bc4..3b07189 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,20 +1,16 @@ 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 from api.grade_api import gradeAPI +from api.cla_api import claAPI app = FastAPI(title='沃林学⽣管理系统') app.include_router(StudentAPI) -app.include_router(StatisticsAPI) +app.include_router(StatisticsAPI) app.include_router(teacher_api) app.include_router(emp_api) - - -if __name__ == '__main__': - import uvicorn - uvicorn.run("main:app",host='0.0.0.0',port=12310) app.include_router(gradeAPI) +app.include_router(claAPI) diff --git a/PythonProject/schema/statistics_schema.py b/PythonProject/schema/statistics_schema.py index 4c967e0..ab8e87b 100644 --- a/PythonProject/schema/statistics_schema.py +++ b/PythonProject/schema/statistics_schema.py @@ -5,6 +5,10 @@ class AllStuResponse(BaseModel): gender: str | None cnt: int +class AcgScoreResponse(BaseModel): + class_id: int + avg_score: float + class AvgDayResponse(BaseModel): class_id: int avg_days: str | None diff --git a/PythonProject/schema/teacher_schema.py b/PythonProject/schema/teacher_schema.py index 8f60539..604c53b 100644 --- a/PythonProject/schema/teacher_schema.py +++ b/PythonProject/schema/teacher_schema.py @@ -1,27 +1,17 @@ -from datetime import date from pydantic import BaseModel -# from pydantic.v1 import BaseModel -from datetime import datetime + class Teacher_RequestModel(BaseModel): teac_name:str teac_gender:str teac_age:int teac_position:str - delete_status:int class Teacher_ResponseModel(BaseModel): code:int=200 detail:str='OK!' teac_name:str - totals:int=0 - data:str|list|tuple|dict - - - - - - - - + teac_gender:str + teac_age:int + teac_position:str diff --git a/需求文档.md b/需求文档.md index d6eb866..4e1059b 100644 --- a/需求文档.md +++ b/需求文档.md @@ -18,10 +18,6 @@ wl_class(班级编号,开课时间,删除状态(0:已删除,1:初始 ⽼师管理表 **sgt 做完了** wl_teacher(老师编号,姓名,性别,年龄,删除状态(0:已删除,1:初始值),职位,作成时间,更新时间) -dao层(每一个功能就是一个函数,判断能否功能复用) - -通用模块 - 学生模块 实现增加学生的功能 **msj 做成中** 实现查询学生的功能:需要能进行多条件查询 **msj 做成中** @@ -56,8 +52,8 @@ dao层(每一个功能就是一个函数,判断能否功能复用) 实现根据年龄查询学生信息的功能 **mrz 已作成** 实现统计每个班级的学员总数以及男女生的总数的功能 **mrz 已作成** 实现根据成绩查询学员信息的功能 **mrz 已作成** -实现统计每次考试每个班级的平均分并排序的功能 **mrz 做成中** -实现统计薪资最高的前五名的学员信息 **mrz 做成中** +实现统计每次考试每个班级的平均分并排序的功能 **mrz 已作成** +实现统计薪资最高的前五名的学员信息 **mrz 已作成** 实现查询每个学生的就业时长 **msj 做成中** -实现统计每个班级的平均就业时长 **xxx 做成中** +实现统计每个班级的平均就业时长 **xxx 已作成**