124 lines
5.6 KiB
Python
124 lines
5.6 KiB
Python
from sqlalchemy.orm import Session
|
||
|
||
from model.scores import Scores
|
||
|
||
def add_score(db: Session, id: str, exam_round: int, score: int): #1.按考核序次录入考核成绩(包含字段:学生ID、考核序次、成绩)
|
||
try:
|
||
judgement_id = (db.query(Scores).
|
||
filter(Scores.id == id,Scores.is_deleted == False).
|
||
first()) # 通过外键class Student校验学生ID是否存在
|
||
if not judgement_id:
|
||
return {"code": 404, "msg": f"学生ID:{id}不存在,请去录入学生信息!"}
|
||
|
||
judgement_id_er = (db.query(Scores).
|
||
filter(Scores.id == id,
|
||
Scores.exam_round == exam_round,
|
||
Scores.is_deleted == False).
|
||
first()) # 本表校验同一学生、同一考核序次是否已录入
|
||
if judgement_id_er:
|
||
return {"code": 400, "msg": f"学生ID:{id}第{exam_round}次考核成绩已存在,请勿重复录入!"}
|
||
|
||
if score < 60: # 创建分数小于等于60分的记录并警告
|
||
record = Scores(id=id,
|
||
exam_round=exam_round,
|
||
score=score,
|
||
is_warning=True) #写入学生ID,考核序次,成绩,标记警告
|
||
db.add(record)
|
||
db.commit()
|
||
db.refresh(record)
|
||
return {"code": 200, "msg": f"学生ID:{id}第{exam_round}次考核成绩{score}分录入成功!成绩小于60分,需要多关注!"}
|
||
else: # 创建分数大于等于60分的记录
|
||
record = Scores(id=id,
|
||
exam_round=exam_round,
|
||
score=score) #写入学生ID,考核序次,成绩
|
||
db.add(record)
|
||
db.commit()
|
||
db.refresh(record)
|
||
return {"code": 200, "msg": f"学生ID:{id}第{exam_round}次考核成绩{score}分录入成功!"}
|
||
except Exception as e:
|
||
db.rollback()
|
||
return {"code": 500, "msg": f"考核成绩录入失败: {e}"}
|
||
|
||
|
||
def query_id(db: Session, id: str): #2.按学生ID过滤,成绩降序,考核序次升序,返回全部信息
|
||
try:
|
||
query_id = (db.query(Scores).
|
||
filter(Scores.id == id,Scores.is_deleted == False).
|
||
order_by(Scores.score.desc(),Scores.exam_round.asc()).
|
||
all())
|
||
if not query_id:
|
||
return {"code": 404, "msg": "未查询到相关结果"}
|
||
data = [{"id": o.id, "exam_round": o.exam_round, "score": o.score}for o in query_id]
|
||
return {"code": 200, "msg": data}
|
||
except Exception as e:
|
||
db.rollback()
|
||
return {"code": 500, "msg": f"未查询到相关结果:{e}"}
|
||
|
||
|
||
def query_er(db: Session, exam_round: int): #3.按考核序次过滤,成绩降序,学生ID升序,返回全部信息
|
||
try:
|
||
query_er = (db.query(Scores).
|
||
filter(Scores.exam_round == exam_round,Scores.is_deleted == False).
|
||
order_by(Scores.score.desc(),Scores.id.asc()).
|
||
all())
|
||
if not query_er:
|
||
return {"code": 404, "msg": "未查询到相关结果"}
|
||
data = [{"id": p.id, "exam_round": p.exam_round, "score": p.score}for p in query_er]
|
||
return {"code": 200, "msg": data}
|
||
except Exception as e:
|
||
db.rollback()
|
||
return {"code": 500, "msg": f"未查询到相关结果: {e}"}
|
||
|
||
def query_sc(db: Session, score: int): #4.按成绩过滤,学生ID升序,考核序次升序,返回全部信息
|
||
try:
|
||
query_sc = (db.query(Scores).
|
||
filter(Scores.score == score,Scores.is_deleted == False).
|
||
order_by(Scores.id.asc(),Scores.exam_round.asc()).
|
||
all())
|
||
if not query_sc:
|
||
return {"code": 404, "msg": "未查询到相关结果"}
|
||
data = [{"id": q.id, "exam_round": q.exam_round, "score": q.score}for q in query_sc]
|
||
return {"code": 200, "msg": data}
|
||
except Exception as e:
|
||
db.rollback()
|
||
return {"code": 500, "msg": f"未查询到相关结果: {e}"}
|
||
|
||
|
||
def update_sc(db: Session, id: str, exam_round: int, score: int): #5.根据学生ID、考核序次修改成绩
|
||
try:
|
||
update_sc = (db.query(Scores).
|
||
filter(Scores.id == id,
|
||
Scores.exam_round == exam_round,
|
||
Scores.is_deleted == False).
|
||
first())
|
||
if not update_sc:
|
||
return {"code": 404, "msg": "该成绩记录不存在"}
|
||
update_sc.score = score
|
||
update_sc.is_warning = score < 60
|
||
db.commit()
|
||
db.refresh(update_sc)
|
||
return {"code": 200, "msg": f"学生ID:{id} 第{exam_round}次成绩已修改为{score}分!"}
|
||
except Exception as e:
|
||
db.rollback()
|
||
return {"code": 500, "msg": f"考核成绩修改失败: {e}"}
|
||
|
||
|
||
def delete_sc(db: Session, id: str, exam_round: int): #6.根据学生ID、考核序次删除成绩
|
||
try:
|
||
delete_sc = (db.query(Scores).
|
||
filter(Scores.id == id,
|
||
Scores.exam_round == exam_round,
|
||
Scores.is_deleted == False).
|
||
first())
|
||
if not delete_sc:
|
||
return {"code": 404, "msg": "成绩记录不存在"}
|
||
delete_sc.is_deleted = True # 逻辑删除
|
||
db.commit()
|
||
db.refresh(delete_sc)
|
||
return {"code": 200, "msg": f"学生ID:{id}第{exam_round}次成绩已删除!"}
|
||
except Exception as e:
|
||
db.rollback()
|
||
return {"code": 500, "msg": f"考核成绩删除失败: {e}"}
|
||
|
||
|