Files
1/dao/wl_teacher_dao.py
T

78 lines
2.3 KiB
Python
Raw Normal View History

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, page: int = 1, page_size: int = 10):
skip = (page - 1) * page_size
return (db.query(Teacher)
.filter(Teacher.is_deleted == 0)
.order_by(Teacher.t_id.desc())
.offset(skip)
.limit(page_size)
.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
def get_teacher_class_info(db: Session, t_id: int):
teacher = get_teacher_id(db, t_id)
if teacher:
return teacher.class_id
return None