From 9296deb5637d9b7ba285189cd432d41611fc876a Mon Sep 17 00:00:00 2001 From: Windows <2209639385@qq.com> Date: Mon, 21 Sep 2026 22:34:34 +0800 Subject: [PATCH] nb --- PythonProject/api/grade_api.py | 34 +++++++++++++++++++++++----- PythonProject/dao/grade_dao.py | 10 ++++++++ PythonProject/model/all_model.py | 2 +- PythonProject/schema/grade_schema.py | 13 +++++++---- 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/PythonProject/api/grade_api.py b/PythonProject/api/grade_api.py index 96b021d..be2612f 100644 --- a/PythonProject/api/grade_api.py +++ b/PythonProject/api/grade_api.py @@ -23,14 +23,36 @@ def post_grade(o:GradeRequest=Form(),db=Depends(get_db)): return o @gradeAPI.put('/{score_id}',summary='成绩修改') -def put_grade(score_id: int,o:GradeRequest=Form(),db=Depends(get_db)): +def put_grade( + score_id: int + ,o:GradeUpdate=Form() + ,db=Depends(get_db) +): + old_obj = get_score_by_id_dao(score_id=score_id, db=db) + if not old_obj: + raise HTTPException(status_code=404, detail="成绩记录不存在(已删除)") + d = o.model_dump(exclude_unset=True) - r = update_grade_dao(score_id=score_id - ,update_data=d - ,db=db) if not d: - raise HTTPException(status_code=500,detail='请传入需要修改的字段') - return {'code':200,'totals':r,'detail':'更新成功'} + raise HTTPException(status_code=400,detail='请传入需要修改的字段') + if "exam_order" in d: + exist_obj = get_score_by_stu_exam_order_dao( + stu_id=old_obj.stu_id, + exam_order=d["exam_order"], + db=db + ) + if exist_obj and exist_obj.id != score_id: + raise HTTPException(status_code=409, detail="修改后的考核序次,该学生已有成绩!") + + try: + r = update_grade_dao(score_id=score_id, update_data=d, db=db) + except Exception: + raise HTTPException(status_code=409, detail="数据冲突,重复数据") + + if r == 0: + return {"code": 200, "totals": r, "detail": "数据未发生变化"} + + return {"code": 200, "totals": r, "detail": "更新成功"} @gradeAPI.delete('/{score_id}',summary='删除成绩') def delete_grade(score_id:int,db=Depends(get_db)): diff --git a/PythonProject/dao/grade_dao.py b/PythonProject/dao/grade_dao.py index 72f64d2..683ec95 100644 --- a/PythonProject/dao/grade_dao.py +++ b/PythonProject/dao/grade_dao.py @@ -4,6 +4,16 @@ from util.database import get_db from model.all_model import * +# 根据id查询单条有效成绩 +def get_score_by_id_dao(score_id:int, db): + return db.query(WlScore).filter( + WlScore.id == score_id + ,WlScore.delete_status==1 + ).first() + +# 根据stu_id+exam_order查重(新增、修改时校验重复) +def get_score_by_stu_exam_order_dao(stu_id:str,exam_order:int,db): + return db.query(WlScore).filter(WlScore.stu_id==stu_id,WlScore.exam_order==exam_order,WlScore.delete_status==0).first() def get_grade_dao( stu_id:int , db): diff --git a/PythonProject/model/all_model.py b/PythonProject/model/all_model.py index 422cb09..45c78ea 100644 --- a/PythonProject/model/all_model.py +++ b/PythonProject/model/all_model.py @@ -184,4 +184,4 @@ class WlScore(Base): delete_time = Column(DATETIME,default=datetime.now,onupdate=datetime.now,comment='删除时间') -Base.metadata.create_all(engine) + diff --git a/PythonProject/schema/grade_schema.py b/PythonProject/schema/grade_schema.py index db48357..e3461ed 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, field_validator -from fastapi import HTTPException +from fastapi import HTTPException,Form class GradeRequest(BaseModel): - stu_id:int = Field(description="学生编号") - exam_order:int = Field(description='考核序次') - score:float = Field(description='成绩') + stu_id:int = Form(description="学生编号") + exam_order:int = Form(description='考核序次') + score:float = Form(description='成绩') class GradeResponse(BaseModel): code: int = 200 @@ -15,4 +16,6 @@ class GradeResponse(BaseModel): exam_order:int score:float - +class GradeUpdate(BaseModel): + exam_order: int | None = Form( description="考核序次") + score: float | None = Form( description="成绩")