diff --git a/PythonProject/api/employment_api.py b/PythonProject/api/employment_api.py index e69de29..22095c7 100644 --- a/PythonProject/api/employment_api.py +++ b/PythonProject/api/employment_api.py @@ -0,0 +1,29 @@ +from fastapi import APIRouter,Depends,HTTPException + +from dao import employment_dao +from dao.employment_dao import get_employment_dao +from schema.employment_schema import EmploymentRequest,EmploymentResponse +from model.all_model import ClassManagement,Employment_info +from util.database import get_db + +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: + if stu_id: + return employment_dao.get_employment_info() + except: + raise HTTPException(status_code=404, detail='该学生就业信息不存在') + +@emp_api.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='该班级就业信息不存在') + +# @emp_api.post('employment/students/{stu_id}') +# def create_emp_info(stu_id: int,db=Depends(get_db)): +# try: +# pass diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index f76c053..5872b26 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,18 @@ 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}',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: + raise HTTPException(status_code=400, detail='学生不存在') + return o + + diff --git a/PythonProject/api/statistics_api.py b/PythonProject/api/statistics_api.py index 0135d31..ab3141d 100644 --- a/PythonProject/api/statistics_api.py +++ b/PythonProject/api/statistics_api.py @@ -1,20 +1,38 @@ -from fastapi import APIRouter -from dao.statistics_dao import select_all,select_age,select_score +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 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=['统计分析模块'],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=list[AllStuResponse],tags=['统计分析模块'],summary='统计每个班级的学员总数和男女生总数') +def get_students(db=Depends(get_db)): + l = select_all(db) + return l + +@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] -@StudentAPI.get("/all",response_model=StudentResponse,tags=['统计分析模块'],description='统计每个班级的学员总数和男女生总数') -def get_students(): - l = select_all() +@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] -@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 +@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/api/student_api.py b/PythonProject/api/student_api.py index 04a4719..050991a 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('/',response_model=list[StudentPageResponse],description='查询学生信息') +@StudentAPI.get('/',response_model=list[StudentPageResponse],tags=['学⽣基本信息管理模块'],description='查询学生信息') def get_students(stu_id:int|None=None ,stu_name:str|None=None ,class_id:int|None=None @@ -29,7 +29,7 @@ def get_students(stu_id:int|None=None , 'total': total , 'data': r} -@StudentAPI.put('/{stu_id}') +@StudentAPI.put('/{stu_id}',tags=['学⽣基本信息管理模块']) def update_students(s:StudentRequest ,stu_id:int ,db=Depends(get_db)): @@ -41,7 +41,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 ) @@ -49,7 +49,7 @@ def del_students(stu_id:int raise HTTPException(status_code=500,detail='没有删除') return {'code':200,'totals':rows,'detail':'删除成功'} -@StudentAPI.post('/',response_model=StugetResponse,description='新增学生') +@StudentAPI.post('/',tags=['学⽣基本信息管理模块'],response_model=StugetResponse) def add_students(s:StudentRequest ,db=Depends(get_db)): d=s.model_dump(exclude_unset=False) @@ -59,3 +59,14 @@ def add_students(s:StudentRequest return stu_new +@StudentAPI.put('/',tags=['学⽣基本信息管理模块']) +def get_students(stu_id:int|None = None + ,stu_name:str|None = None + ,class_id:int|None=None + ,db=Depends(get_db) + ,page:int=1 + ,page_size:int=10): + r = get_student_dao(stu_id,stu_name,class_id,db,page,page_size ) + if r: + return r + raise HTTPException(status_code=404,detail='学生不存在!') diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 44f23a5..45ff834 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,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: @@ -17,25 +13,24 @@ def add_teacher1(teacher:Teacher_RequestModel,session=Depends(get_db())): return Teacher_ResponseModel(totals=1,data=d) -@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='老师不存在!') +@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) -def update_teacher1(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): - d=teacher.model_dump +@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) if not r: raise HTTPException(status_code=500, detail='更新异常!') 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,tags=['教师基本信息管理模块'],summary='删除教师接口') +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/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 '删除成功,请核对信息!' + + + + diff --git a/PythonProject/dao/employment_dao.py b/PythonProject/dao/employment_dao.py index e69de29..426452b 100644 --- a/PythonProject/dao/employment_dao.py +++ b/PythonProject/dao/employment_dao.py @@ -0,0 +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 EmploymentRequest + +def get_employment_dao(stu_id,class_id,db=Depends(get_db())): + try: + 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: + 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 diff --git a/PythonProject/dao/grade_dao.py b/PythonProject/dao/grade_dao.py index 8ee4926..9471ae7 100644 --- a/PythonProject/dao/grade_dao.py +++ b/PythonProject/dao/grade_dao.py @@ -2,14 +2,23 @@ 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 - ,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: return r1 else: raise HTTPException(status_code=404,detail="学生不存在") + +def add_grade_dao(g,db): + try: + o1 = WlScore(**g) + db.add(o1) + db.commit() + return o1 + except Exception: + db.rollback() + return None \ No newline at end of file diff --git a/PythonProject/dao/statistics_dao.py b/PythonProject/dao/statistics_dao.py index de2fd06..774fb74 100644 --- a/PythonProject/dao/statistics_dao.py +++ b/PythonProject/dao/statistics_dao.py @@ -1,61 +1,93 @@ -from datetime import datetime - -from fastapi import HTTPException,Depends +from fastapi import HTTPException from sqlalchemy import func from model.all_model import Student_Model,WlScore,Employment_info -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('abc',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,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="查询异常") # 实现根据成绩查询学员信息的功能 -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)\ - .join(WlScore,WlScore.stu_id == Student_Model.stu_id,WlScore.delete_status==0,WlScore.delete_status == 0) + db = db.query(Student_Model,WlScore.score,WlScore.score)\ + .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: - 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: raise HTTPException(status_code=500,detail="查询异常") -#实现查询每个学生的就业时长 -def select_emp_duration(stu_id:int,session): +# 实现统计每次考试每个班级的平均分并排序的功能 +def select_avg_score(db): try: - l2 = session.query(Employment_info,Student_Model.name.label('stu_name'),).join(Student_Model,stu_id==Student_Model.stu_id).filter(Employment_info.stu_id == stu_id,Employment_info.delete_status == 0).all() - list=[] - today=datetime.today() - for i in l2: - duration_days = (today - i.start_date).days - list.append({Employment_info.stu_id:i.stu_id, + 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="查询异常") - Employment_info.offer_issuance_date:i.offer_issuance_date, - Employment_info.company_name:i.company_name}) diff --git a/PythonProject/dao/teacher_dao.py b/PythonProject/dao/teacher_dao.py index 01d51ac..694598e 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 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 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/main.py b/PythonProject/main.py index 7d661dd..9223bc4 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,5 +1,20 @@ from fastapi import FastAPI + +from api.employment_api import emp_api from api.student_api import StudentAPI -app = FastAPI() +from api.statistics_api import StatisticsAPI +from api.teacher_api import teacher_api +from api.grade_api import gradeAPI +app = FastAPI(title='沃林学⽣管理系统') app.include_router(StudentAPI) +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) diff --git a/PythonProject/model/all_model.py b/PythonProject/model/all_model.py index a2be52c..422cb09 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='开课时间') @@ -76,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) @@ -160,7 +159,6 @@ class WlScore(Base): stu_id = Column( Integer ,ForeignKey('wl_student.stu_id') - ,autoincrement=True ,comment='学生编号') exam_order = Column(Integer diff --git a/PythonProject/schema/cla_schema.py b/PythonProject/schema/cla_schema.py index 5d64fcb..dad7082 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,23 +11,16 @@ 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 + 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 diff --git a/PythonProject/schema/employment_schema.py b/PythonProject/schema/employment_schema.py index 47a153f..4e93d2c 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): +class EmploymentRequest(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 diff --git a/PythonProject/schema/grade_schema.py b/PythonProject/schema/grade_schema.py index 09de5b5..d1ff0ae 100644 --- a/PythonProject/schema/grade_schema.py +++ b/PythonProject/schema/grade_schema.py @@ -1,10 +1,16 @@ -from datetime import date -from typing import Self -from pydantic import BaseModel,Field +from model.all_model import * +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): \ 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 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 + 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): 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 做成中**