import random from datetime import datetime from sqlalchemy.orm import Session from model.wl_teacher_model import Teacher from scheme.wl_teacher_scheme import TeacherCreate, TeacherUpdate def generate_teacher_no(): """生成老师工号:T + 年月日 + 3位随机数,例如 T20260912001""" date_str = datetime.now().strftime("%Y%m%d") seq = random.randint(1, 999) return f"T{date_str}{seq:03d}" def list_teachers(db: Session): """查询全部未删除教师列表""" return db.query(Teacher).filter(Teacher.is_deleted == 0).order_by(Teacher.t_id.desc()).all() def get_teacher_id(db: Session, t_id: int): return (db.query(Teacher).filter(Teacher.t_id == t_id, Teacher.is_deleted == 0) .first() ) def get_teacher_no(db:Session, t_no: str): return(db.query(Teacher).filter(Teacher.t_no == t_no,Teacher.is_deleted == 0) .first()) def create_teacher(db: Session, teacher_data: TeacherCreate): """创建新老师""" # 如果前端没传工号,自动生成 t_no = teacher_data.t_no or generate_teacher_no() # 唯一性校验 if get_teacher_no(db, t_no): raise ValueError("老师编号已存在") data = teacher_data.model_dump() data["t_no"] = t_no db_teacher = Teacher(**data) db.add(db_teacher) db.commit() db.refresh(db_teacher) return db_teacher def update_teacher(db: Session, t_id: int, update_data: TeacherUpdate): """修改教师""" db_obj = get_teacher_id(db, t_id) if not db_obj: return None # model_dump(exclude_unset=True) 只取前端传过来的字段 update_dict = update_data.model_dump(exclude_unset=True) for k, v in update_dict.items(): setattr(db_obj, k, v) db.commit() db.refresh(db_obj) return db_obj def delete_teacher_logic(db: Session, t_id: int): """逻辑删除,修改is_deleted=1""" db_obj = get_teacher_id(db, t_id) if not db_obj: return None db_obj.is_deleted = 1 db.commit() return db_obj