2026-09-13 17:20:23 +08:00
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
from model.wl_class_model import Class_
|
|
|
|
|
|
from model.wl_student_model import Student
|
|
|
|
|
|
from fastapi import HTTPException
|
|
|
|
|
|
|
2026-09-13 20:44:07 +08:00
|
|
|
|
from model.wl_teacher_model import Teacher
|
2026-09-13 17:20:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 1. 新增班级
|
|
|
|
|
|
def create_class(db: Session, class_data: dict):
|
|
|
|
|
|
new_class = Class_(**class_data)
|
|
|
|
|
|
db.add(new_class)
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
db.refresh(new_class)
|
|
|
|
|
|
return new_class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 2. 查询班级列表(你的亮点:查出了班主任和授课老师)
|
|
|
|
|
|
def get_classes(db: Session, skip: int = 0, limit: int = 100):
|
|
|
|
|
|
# 先查出所有没被删除的班级
|
|
|
|
|
|
class_list = db.query(Class_).filter(Class_.is_deleted == 0).offset(skip).limit(limit).all()
|
|
|
|
|
|
#下面的部分等导入老师模块后解除注释
|
|
|
|
|
|
# # 循环每个班级,去老师表里找对应的老师
|
2026-09-13 20:44:07 +08:00
|
|
|
|
for c in class_list:
|
|
|
|
|
|
# 找班主任(role是"班主任"的第一个老师)
|
|
|
|
|
|
head_teacher = db.query(Teacher).filter(
|
|
|
|
|
|
Teacher.class_id == c.class_id,
|
|
|
|
|
|
Teacher.role == "班主任",
|
|
|
|
|
|
Teacher.is_deleted == 0
|
|
|
|
|
|
).first()
|
|
|
|
|
|
|
|
|
|
|
|
# 找授课老师(可能有多个,用逗号拼起来)
|
|
|
|
|
|
course_teachers = db.query(Teacher).filter(
|
|
|
|
|
|
Teacher.class_id == c.class_id,
|
|
|
|
|
|
Teacher.role == "任课",
|
|
|
|
|
|
Teacher.is_deleted == 0
|
|
|
|
|
|
).all()
|
|
|
|
|
|
|
|
|
|
|
|
# 把查到的名字塞给班级对象,方便传给前端
|
|
|
|
|
|
c.head_teacher_name = head_teacher.t_name if head_teacher else "暂无"
|
|
|
|
|
|
# 下面这两行是初学者常用的拼接字符串写法(代码改了,这里的注释没动)
|
|
|
|
|
|
if course_teachers:
|
|
|
|
|
|
names = [t.t_name for t in course_teachers]
|
|
|
|
|
|
c.course_teacher_names = ",".join(names)
|
|
|
|
|
|
else:
|
|
|
|
|
|
c.course_teacher_names = "暂无"
|
2026-09-13 17:20:23 +08:00
|
|
|
|
|
|
|
|
|
|
return class_list
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 3. 根据ID查班级
|
|
|
|
|
|
def get_class_by_id(db: Session, class_id: int):
|
|
|
|
|
|
return db.query(Class_).filter(Class_.class_id == class_id, Class_.is_deleted == 0).first()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 4. 修改班级信息
|
|
|
|
|
|
def update_class(db: Session, class_id: int, class_data: dict):
|
|
|
|
|
|
db_class = get_class_by_id(db, class_id)
|
|
|
|
|
|
if not db_class:
|
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
# 前端传了什么,就改什么(防止把没传的字段改成空值)
|
|
|
|
|
|
for key, value in class_data.items():
|
|
|
|
|
|
setattr(db_class, key, value)
|
|
|
|
|
|
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
db.refresh(db_class)
|
|
|
|
|
|
return db_class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 5. 逻辑删除班级(你的亮点:安全检查)
|
|
|
|
|
|
def delete_class(db: Session, class_id: int):
|
|
|
|
|
|
db_class = get_class_by_id(db, class_id)
|
|
|
|
|
|
if not db_class:
|
|
|
|
|
|
return {"code": 404, "msg": "班级不存在"}
|
|
|
|
|
|
|
|
|
|
|
|
# 检查1:班里还有学生吗?(只要有1个,就不给删)
|
|
|
|
|
|
student = db.query(Student).filter(
|
|
|
|
|
|
Student.class_id == class_id,
|
|
|
|
|
|
Student.is_deleted == 0
|
|
|
|
|
|
).first()
|
|
|
|
|
|
if student:
|
|
|
|
|
|
raise HTTPException(status_code=400, detail="该班级还有学生,不能删除!")
|
2026-09-13 20:44:07 +08:00
|
|
|
|
#解除注释后做了改动
|
2026-09-13 17:20:23 +08:00
|
|
|
|
# 检查2:班里还有老师吗?
|
2026-09-13 20:44:07 +08:00
|
|
|
|
teacher = db.query(Teacher).filter(
|
|
|
|
|
|
Teacher.class_id == class_id,
|
|
|
|
|
|
Teacher.is_deleted == 0
|
|
|
|
|
|
).first()
|
|
|
|
|
|
if teacher:
|
|
|
|
|
|
raise HTTPException(status_code=400, detail="该班级还有老师,不能删除!")
|
2026-09-13 17:20:23 +08:00
|
|
|
|
|
|
|
|
|
|
# 检查通过,开始逻辑删除(贴个已删除标签)
|
|
|
|
|
|
db_class.is_deleted = 1
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
return {"code": 200, "msg": "班级删除成功"}
|