Files
wolin_stu_sys/dao/scores.py
T
2026-09-21 17:39:16 +08:00

124 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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}"}