first
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import func
|
||||
from model.wl_student_model import Student
|
||||
# from model.class_ import Class # 你同学写的
|
||||
from scheme.wl_student_scheme import StudentCreate, StudentUpdate
|
||||
|
||||
|
||||
# ---- 学号生成 ----
|
||||
def generate_stu_no(db: Session, class_id: int, seq: int = None) -> str:
|
||||
cls = db.query(Class).filter_by(id=class_id).first()
|
||||
if not cls or not cls.start_date:
|
||||
raise ValueError("班级不存在或未设置开班时间")
|
||||
date_str = cls.start_date.strftime("%Y%m%d")
|
||||
if seq is None:
|
||||
count = db.query(func.count(Student.stu_id)) \
|
||||
.filter(Student.class_id == class_id).scalar() or 0
|
||||
seq = count + 1
|
||||
return f"{date_str}{seq:03d}"
|
||||
|
||||
|
||||
# ---- 增 ----
|
||||
def create_student(db: Session, data: StudentCreate) -> Student:
|
||||
stu_no = generate_stu_no(db, data.class_id)
|
||||
stu = Student(stu_no=stu_no, **data.model_dump())
|
||||
db.add(stu)
|
||||
db.commit()
|
||||
db.refresh(stu)
|
||||
return stu
|
||||
|
||||
|
||||
# ---- 查(多条件)----
|
||||
def search_students(db: Session, stu_no=None, stu_name=None,
|
||||
class_id=None, advisor_id=None, status=None):
|
||||
q = db.query(Student).filter(Student.is_deleted == 0) # 若加了逻辑删除字段
|
||||
if stu_no:
|
||||
q = q.filter(Student.stu_no.like(f"%{stu_no}%"))
|
||||
if stu_name:
|
||||
q = q.filter(Student.stu_name.like(f"%{stu_name}%"))
|
||||
if class_id:
|
||||
q = q.filter(Student.class_id == class_id)
|
||||
if advisor_id:
|
||||
q = q.filter(Student.advisor_id == advisor_id)
|
||||
if status:
|
||||
q = q.filter(Student.status == status)
|
||||
return q.all()
|
||||
|
||||
|
||||
def get_student_by_no(db: Session, stu_no: str) -> Student | None:
|
||||
return db.query(Student).filter(
|
||||
Student.stu_no == stu_no,
|
||||
Student.is_deleted == 0
|
||||
).first()
|
||||
|
||||
|
||||
# ---- 改 ----
|
||||
def update_student(db: Session, stu_no: str, data: StudentUpdate) -> Student | None:
|
||||
stu = get_student_by_no(db, stu_no)
|
||||
if not stu:
|
||||
return None
|
||||
for k, v in data.model_dump(exclude_unset=True).items():
|
||||
setattr(stu, k, v)
|
||||
db.commit()
|
||||
db.refresh(stu)
|
||||
return stu
|
||||
|
||||
|
||||
# ---- 逻辑删 ----
|
||||
def delete_student(db: Session, stu_no: str) -> bool:
|
||||
stu = get_student_by_no(db, stu_no)
|
||||
if not stu:
|
||||
return False
|
||||
stu.is_deleted = 1
|
||||
db.commit()
|
||||
return True
|
||||
Reference in New Issue
Block a user